On Tue, 13 Dec 2005 [EMAIL PROTECTED] wrote:
"Thus the "rtpmux" element must assemble a continuous stream from
discontinuous segments created by the decoders."
[...]
But, once a stream comes out of the decoders, it is not an RTP stream
anymore, it's either a raw audio or video stream. I don't really
understand what this element is suppose to do. Logically, this element
would actually take a bunch of independently decoded streams, that came
from the same RTP stream, and put them back together and send them to
for example the audio sink. In that case, the element should not be
called an RTPMUX element, just a normal audio muxer.
Yes, the word "rtpmux" was badly chosen - the element should be a
enchanded "adder" or some such.
The main difference is that a single RTP stream (aka one RTP session, aka
one timestamp space) does not contain multiple independent streams, but
just one logical stream. The catch is that some chunks/segments/whatever
of the stream could be encoded with a different codec than others. So
you'd get:
(srate=8000, ptime=20msec, ts incremented by 160 by each packet)
ts: 0 160 320 480 ...
rtp-pt: ILBC ILBC G711 ILBC ...
| | ---> DEPAYLOADER --> DECODER --> | |
RTPBIN -> | RTPDEMUX | ---> DEPAYLOADER --> DECODER --> | MUX | --> SINK
| | ---> DEPAYLOADER --> DECODER --> | |
Now when the above example stream goes through our rtpbin
receive elements, packets for ts={0,160,480} go through depayload+decoder
subchain for ILBC, and packet with ts=320 trhough a different
depayload+decoder pair. The mux element won't get a constant
stream of audio from all the subchains, but has to assemble the
pieces together.
Now I've asked about this, read gst sources, and my conclusion is that the
current elements can't handle the above case (function as the "mux"
element above). But I'd be of course extremely please to be proven wrong
here.
Now this reminds me why I didn't want to put the depayloader INSIDE
RTPRECV -> Because there can be several payloads inside the same RTP
Stream. I guess we need to talk some more about this...
Yeps, that's a complication. In a non-gstreamer world, you could have a
hash table of depayload and decoder plugins, indexed by RTP-PT. A
generic depayloader/decoder element would just check the payload type, and
handle the data with the correct plugin. With gst, we'll need to do the
same in a bit different manner.
--
under work: Sofia-SIP at http://sofia-sip.sf.net
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Farsight-devel mailing list
Farsight-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/farsight-devel