[Live-devel] Live555 EventLoop Crash
Jeff Shanab
jshanab at smartwire.com
Wed Dec 21 07:52:29 PST 2011
This is the exact stream format I get from my encoders
Given nal type 7 = SPS,8 = PPS, 5 = IDR slices, and 1 = Diff frames
I see [7][8][5][1][1][1][1][1] of 6fps streams less than Mp
I see [7][8][5][5][5][1][1][1][1][1] on 6ms multimega-pixel streams.
Some streams to NOT have the SPS and PPS in the stream so I datamine them from the SDP packet and remember them for insertion into the stream. This makes libavcodec happy. I always send the encoder a SPS+PPS + IDRSlice as an aggregated frame (00 00 01 in front of each, it need that delimetter)
I have a filter that does this aggregation for me.
From: live-devel-bounces at ns.live555.com [mailto:live-devel-bounces at ns.live555.com] On Behalf Of David J Myers
Sent: Wednesday, December 21, 2011 9:22 AM
To: live-devel at ns.live555.com
Subject: Re: [Live-devel] Live555 EventLoop Crash
Hi Ross,
>> On further examination of my encoded frame data, it looks like an I-frame consists of 3 NAL units, each preceded by 00 00 00 01, the first NALU is 17 bytes long, the second NALU is 9 bytes long, and the 3rd NALU is the rest of the frame size. Each P-frame is just one NALU.
>> My code is now using H264VideoStreamDiscreteFramer and sending each NAL unit one by one. So each I-Frame is sent with 3 calls to afterGetting(this).
>You can do this only if each call to "afterGetting(this)" corresponds to exactly one earlier call to "doGetNextFrame()". I.e., you *must not* call "afterGetting(this)" more than once for each call to "doGetNextFrame()".
>I.e, if you want to deliver these three NAL units - one at a time - to the downstream object (in this case, a "H264VideoStreamDiscreteFramer"), then you must really do so 'one at a time'. Each call to "doGetNextFrame()" must be followed by one (and only one) data delivery, followed by a call to "FramedSource::afterGetting()".
>If you do this properly, though, then this should produce a proper RTSP/RTP stream. (However, I suggest that you test this first with "openRTSP", rather than VLC.)
Ok, understood. How do I get these extra calls to doGetNextFrame()? Currently I'm getting one call to doGetNextFrame(), but I'm then sending all three NAL units for the frame which, as you say, doesn't produce a decent stream. - David
________________________________
No virus found in this message.
Checked by AVG - www.avg.com<http://www.avg.com>
Version: 2012.0.1890 / Virus Database: 2109/4694 - Release Date: 12/21/11
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20111221/76415a52/attachment.html>
More information about the live-devel
mailing list