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.
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel