We have a multicast stream, initiated from another process, which generates an .SDP file for the stream

v=0
o=MangoDSP 126 14843616424497153183 IN IP4 192.168.0.62
s=Mango DSP Audio/Video
m=video 7170 RTP/AVP 96
a=rtpmap:96 H264/90000
c=IN IP4 232.0.0.11
a=fmtp:96 packetization-mode=1;profile-level-id=42001E;sprop-parameter-sets=Z0KAHkLaAtD0QA==,aEjgGody
a=control:__StreamID=270385256

We've searched through the Live555 archives and there is mention of passing this to MediaSession::createNew(), but we're sort of stumped on making this a reality.

First, create a "MediaSession" object, by calling "MediaSession::createNew()", with the SDP description (string) as parameter.

Then, go through each of this object's 'subsessions' (in this case, there'll be just one, for "video"), and call "MediaSubsession::initiate()" on it.

Then, you can create an appropriate 'sink' object (e.g., encapsulating your decoder), and then call "startPlaying()" on it, passing the subsession's "readSource()" as parameter.

See the "openRTSP" code (specifically, "testProgs/playCommon.cpp") for an example of how this is done.


Ultimately our plan is to pass the stream onto FFMpeg for decoding/storage. When we try to open this stream directly with FFMpeg it takes forever (and often never) for the program to lock onto the stream, so perhaps there is a problem with ffmpeg and this h264 stream. But, when we open a unicast stream with openRTSP and pipe the output to ffmpeg it works fine.

The problem here is probably that - when you tune into an ongoing multicast stream - you're missing the special PPS and SPS NAL units that normally appear at the start of the stream. (In contrast, when you stream a unicast stream, you get the whole stream, starting from the beginning, and so will get the special PPS and SPS NAL units.)

To overcome this, you will need to decode the PPS and SPS NAL unit data from the SDP description, and insert these at the front of the stream that you pass to your decoder. Specifically, you call "MediaSubsession:: fmtp_spropparametersets()" on your 'subsession' object, to get the appropriate configuration string, and then decode this string by calling "parseSPropParameterSets()". (See "liveMedia/include/H264VideoRTPSource.hh".)
--

Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to