/** * Initializes a new <tt>PushSourceStreamDesc</tt> instance which is to * describe a specific endpoint <tt>PushSourceStream</tt> for an * <tt>RTPTranslatorImpl</tt>. * * @param connectorDesc the endpoint <tt>RTPConnector</tt> which owns the * specified <tt>stream</tt> * @param stream the endpoint <tt>PushSourceStream</tt> to be described by * the new instance for an <tt>RTPTranslatorImpl</tt> * @param data <tt>true</tt> if the specified <tt>stream</tt> is a data/RTP * stream or <tt>false</tt> if the specified <tt>stream</tt> is a * control/RTCP stream */ public PushSourceStreamDesc( RTPConnectorDesc connectorDesc, PushSourceStream stream, boolean data) { this.connectorDesc = connectorDesc; this.stream = stream; this.data = data; streamAsPushBufferStream = (PushBufferStream) stream.getControl( AbstractPushBufferStream.PUSH_BUFFER_STREAM_CLASS_NAME); } }
@Override public synchronized int getMinimumTransferSize() { int minimumTransferSize = 0; for (PushSourceStreamDesc streamDesc : streams) { int streamMinimumTransferSize = streamDesc.stream.getMinimumTransferSize(); if (minimumTransferSize < streamMinimumTransferSize) minimumTransferSize = streamMinimumTransferSize; } return minimumTransferSize; }
/** * Implements <tt>BufferStreamAdapter#doRead(Buffer, byte[], int, int)</tt>. * Delegates to the wrapped <tt>PushSourceStream</tt>. * * @param buffer * @param data byte array to read * @param offset offset to start reading * @param length length to read * @return number of bytes read * @throws IOException if I/O related errors occurred during read operation */ @Override protected int doRead(Buffer buffer, byte[] data, int offset, int length) throws IOException { return stream.read(data, offset, length); }
return; int len = stream.getMinimumTransferSize(); read = stream.read(buf, 0, len);
@Override public synchronized void setTransferHandler( SourceTransferHandler transferHandler) { if (_transferHandler != transferHandler) { _transferHandler = transferHandler; for (PushSourceStreamDesc streamDesc : streams) streamDesc.stream.setTransferHandler(this); } }
/** * Implements PushBufferStream#setTransferHandler(BufferTransferHandler). * Delegates to the wrapped PushSourceStream by translating the specified * BufferTransferHandler to a SourceTransferHandler. * * @param transferHandler a <tt>BufferTransferHandler</tt> to set */ public void setTransferHandler(final BufferTransferHandler transferHandler) { stream.setTransferHandler( new SourceTransferHandler() { public void transferData(PushSourceStream stream) { transferHandler.transferData( PushBufferStreamAdapter.this); } }); } }
public synchronized void removeStreams(RTPConnectorDesc connectorDesc) { Iterator<PushSourceStreamDesc> streamIter = streams.iterator(); while (streamIter.hasNext()) { PushSourceStreamDesc streamDesc = streamIter.next(); if (streamDesc.connectorDesc == connectorDesc) { streamDesc.stream.setTransferHandler(null); streamIter.remove(); } } }
/** * Implements PushBufferStream#read(Buffer). Delegates to the wrapped * PushSourceStream by allocating a new byte[] buffer of size equal to * PushSourceStream#getMinimumTransferSize(). * * @param buffer the <tt>Buffer</tt> to read * @throws IOException if I/O related errors occurred during read operation */ public void read(Buffer buffer) throws IOException { byte[] data = (byte[]) buffer.getData(); int minimumTransferSize = stream.getMinimumTransferSize(); if ((data == null) || (data.length < minimumTransferSize)) { data = new byte[minimumTransferSize]; buffer.setData(data); } buffer.setOffset(0); read(buffer, data, 0, minimumTransferSize); }
public synchronized void addStream( RTPConnectorDesc connectorDesc, PushSourceStream stream) { for (PushSourceStreamDesc streamDesc : streams) { if ((streamDesc.connectorDesc == connectorDesc) && (streamDesc.stream == stream)) { return; } } streams.add( new PushSourceStreamDesc(connectorDesc, stream, this.data)); stream.setTransferHandler(this); }