We wanted to check our understanding of the normal source-to-sink chain processing. The network side of our chain depends on being called from its sink-ward filter to get started, but afterwards continues on its own to get RTP packets from the network.

Not really. It is *always* the sink (i.e., at the end of the chain) that initiates the data flow for each piece of data. It (in its "continuePlaying()" virtual function) will call "getNextFrame()" on its upstream source object. Its 'after getting' function (which was passed in the call to "getNextFrame()") will get called after it has received its data from upstream. This function will usually then call "continuePlaying()" (and thus "getNextFrame()") again.

For 'filter' objects, things work similarly. Its "doGetNextFrame()" virtual function gets called (as a result of its downstream object calling "getNextFrame()"). This function will usually call "getNextFrame()" on the upstream object. Its 'after getting' function (which was passed in the call to "getNextFrame()") will get called after it has received its data from upstream. This function will usually call "FramedSource::afterGetting(this)" (ugly, I know) to tell the downstream object (filter or sink) that new data is available for it.

You should be able to check each of these things, to see where/why the chain is stalling.


        Ross Finlayson
        Live Networks, Inc. (LIVE555.COM)
        <http://www.live555.com/>

_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to