[Live-devel] "low latency" mpeg transport stream streaming

Gilles Chanteperdrix gilles.chanteperdrix at xenomai.org
Sun Jun 26 00:12:32 PDT 2016


Hi,

I have another problem with streaming of MPEG transport stream. When
chaining an MPEG2TransportStreamFromESSource (but actually any
FramedSource object producing mpeg ts packets) with a SimpleRTPSink,
the SimpleRTPSink will wait to have a full packet before sending
data (with my settings 6 mpeg ts packets). This is a problem for
"low latency" video applications where we want a video frame to be
sent ASAP: if a frame generates a number of ts packets which is not
a multiple of 6, the last remaining ts packets will remain stuck in
SimpleRTPSink buffer until SimpleRTPSink gets enough data to send
another packet, so at minimum until the next frame (but it can in
fact be much worse if frames are, say, 8 bytes H264 black frames).

I understand that this usage is a bit specific, so I have tried to
solve this by deriving from live555 classes. I derived from
SimpleRTPSink an RTP sink class which implements a
frameCanAppearAfterPacketStart method, that, if its source object is of
MPEG2TransportStreamMultiplexor, return true only if that object has
data ready, namely if the next call to doGetNextFrame() would not
call awaitNewBuffer(), that is if:
fInputBufferBytesUsed < fInputBufferSize.

The reason why I am contacting this list is that I did not find a
way to do this without modifying the MPEG2TransportStreamMultiplexor
class. Do you see any?

Thanks in advance.
Regards.

-- 
					    Gilles.
https://click-hack.org


More information about the live-devel mailing list