On 19 maj 2014, at 23:50, Ross Finlayson <finlay...@live555.com> wrote:
>> Here I only try to get the original stream to work through the replicator. >> Based on the testReplicator example >> all streams must be through a replicator, it's not possible to have one >> stream use the replicator and one >> stream use the normal way. > > That's correct. Only one object can be reading from a "FramedSource". > (Otherwise, you'll see the "attempting to read more than once at the same > time!" error message.) That's the whole reason why I developed the > "StreamReplicator" class: To make it possible for data from a "FramedSource" > to be delivered to more than one object. It was a bit unclear that the StreamReplicator must be a central part of the source-filter-sink chain, instead of just "hooking in" to some part. However, as soon as I add the StreamReplicator the video starts to stutter. I leave it out, the stream is fine. I don't actually do anything secondary yet, just trying to get the main stream working through it. To me it looks like frames get rendered like: 1 2 3 4 5 3 4 5 6 7 5 6 7 8 ... The stutter is not consistent though and does not happen every time I test, but it's there. The stutter happens with: m_replicator = StreamReplicator::createNew( envir(), m_subsession->readSource(), False ); H264VideoStreamDiscreteFramer * framer = H264VideoStreamDiscreteFramer::createNew( envir(), m_replicator->createStreamReplica() ); if ( ! m_subsession->sink->startPlaying( *framer, ... ) { Simply changing that to: H264VideoStreamDiscreteFramer * framer = H264VideoStreamDiscreteFramer::createNew( envir(), m_subsession->readSource() ); if ( ! m_subsession->sink->startPlaying( *framer, ... ) { to remove StreamReplicator from the equation and there is no stutter anymore. Switching where the replicator is like this: H264VideoStreamDiscreteFramer * framer = H264VideoStreamDiscreteFramer::createNew( envir(), m_subsession->readSource() ); m_replicator = StreamReplicator::createNew( envir(), framer, False ); if ( ! m_subsession->sink->startPlaying( *m_replicator->createStreamReplica(), ... ) { means no video is delivered at all anymore. So the replicator does something fishy, it's not a 1:1 pass through and duplicator. -- Jan Ekholm jan.ekh...@d-pointer.com _______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel