[Live-devel] Streaming H264 using Transport Stream

Johannes Ebersold johannes.ebersold at dfki.de
Wed Jul 27 03:21:31 PDT 2011


Hi,

thanks for your advice :)

I managed to produce a TransportStream, but to do so, i had to use the 
following setup:

MySource -> MPEG2TransportStreamFromESSource -> 
MPEG2TransportStreamFramer -> SimpleRTPSink

without the H264VideoStreamDiscreteFramer. The Framer wants the NAL 
units without the startcodes, but without the startcodes the bytestream 
is no longer an valid ElementaryStream, so the output of the Framer is 
no valid ElementaryStream and the result is, of course, no valid 
TransportStream. The output of the encoder including the startcodes is 
an valid ElementaryStream (see Annex B of H.264 Standard), so all i 
needed to do is to  get rid of the H264Framer and get the data (discrete 
NAL units with the startcodes) directly to the 
MPEG2TransportStreamFromESSource.

As a matter of fact, the transport stream is not playable on iOS and 
Android devices. Although we managed to create a rtsp connection between 
an Android 2.3 and VLC streaming a mp4-File. Maybe this is all just a 
problem of the container, but this is out of scope of this live555 
mailing list...

Thanks again for your time and help,
Johannes

On 07/25/2011 10:50 PM, Ross Finlayson wrote:
>> I am trying to generate a transport stream, streaming H.264. I've 
>> read a lot of postings in the mailing list and studied the examples 
>> (testH264VideoToTransportStream and testMPEG2TransportStreamer), but 
>> as a matter of fact my software won't work.
>> First, i implemented a stream via rtp using a rtsp server and feeding 
>> single, raw H264 NAL units to it, this works fine, when streaming to 
>> VLC on another PC.
>
> Good.
>
>
>> But i tested this stream and it did not work with iOS and Android.
>
> That's the fault of those systems.  First, iOS does not support RTSP 
> (at least, not with "Safari" or any other standard, preinstalled 
> app).  And although Android allegedly supports RTSP (according to the 
> link that Karl Dietz noted), people have noted on this mailing list 
> that it doesn't seem to work (at least not with our servers).
>
> (Note: If anyone can identify a specific interoperability issue that 
> prevents Android's RTSP/RTP client from working with our server 
> software, then please let us know.)
>
>
>>  So i used the streaming functionality of VLC to test which stream is 
>> okay for iOS and Android and decided to use a transport stream.
>
> Note that these systems can play Transport Streams using the "HTTP 
> Live Streaming" protocol. Our server software support this protocol, 
> but *only* for pre-recorded (and pre-indexed) Transport Stream 
> *files*.  Our server software *cannot* stream Transport Stream data - 
> using "HTTP Live Streaming" - from a *live source*.  So if that's what 
> you're trying to do, then you're out of luck.  Sorry.
>
>
> But if you still want to generate and stream Transport Stream data:
>
>> And at this point I'm stuck ... My application provides a stream, i 
>> can connect to that stream with VLC, VLC fills it buffer but do not 
>> display anything, also no errors or warning.
>
> I suggest that you first make sure that your generated Transport 
> Stream data is OK, and then (and only then) worry about how to stream 
> it.  I.e., I suggest that you first generate a Transport Stream 
> *file*, and make sure that media players can play that file OK.
>
>
>> I got a source, which provides discrete NALunits, without the 
>> startcode, but i can eassily change this.
>
> NO!  The NAL units that you input to "H264VideoStreamDiscreteFramer" 
> *must not* begin with the 0x00000001 start code.
>
>
>>  And I use the following setup of live555:
>>
>> MySource -> H264VideoStreamDiscreteFramer -> 
>> MPEG2TransportStreamFromESSource -> MPEG2TransportStreamFramer -> 
>> SimpleRTPSink
>
> I suggest that you first try
>     MySource -> H264VideoStreamDiscreteFramer -> 
> MPEG2TransportStreamFromESSource -> FileSink
> and make sure that your generated Transport Stream file is OK.



More information about the live-devel mailing list