Ross,<br><br>We have things working now by avoiding the issue by creating our own customized DiscreteFramer. It avoids the problem by directly using the output buffer and does not touch the Bank buffers. I suspect there is a problem with the H264VideoStreamFramer.<br>
<br>BTW, does it conflict with the H264 standard if the data being passed through the discrete framer *does* contain the startcodes? Video does play on vlc, but in our experience, vlc is very forgiving.<br><br>Thanks,<br>
Geoff<br><br><div class="gmail_quote">On Tue, Dec 28, 2010 at 2:49 PM, Geoff Cleary <span dir="ltr"><<a href="mailto:gcleary@sightlogix.com">gcleary@sightlogix.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<b>Thanks for the response, Ross.<br><br>I tried the "H264VideoStreamDiscreteFramer" first and got the following:<br><br>Warning: Invalid 'nal_unit_type': 0.  Does the NAL unit begin with a MPEG 'start code' by mistake?<br clear="all">

<br>With the "H264VideoStreamFramer" and BANK_SIZE set to 2000000, I get the following for a few seconds while video plays:</b><br><br><i>Parsed 38225-byte NAL-unit (nal_ref_idc: 2, nal_unit_type: 1 ("Coded slice of a non-IDR picture"))<br>

        Presentation time: 1293564387.952757<br>        first_mb_in_slice: 0<br>        slice_type: 0<br>        pic_parameter_set_id: 0<br>        frame_num: 5<br>    Next NAL unit's slice_header:<br>        first_mb_in_slice: 0<br>

        slice_type: 0<br>        pic_parameter_set_id: 0<br>        frame_num: 6<br>        (frame_num differs in value)<br>        *****This NAL unit ends the current access unit*****<br>38225 bytes @1293564387.952757, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>

StreamParser::ensureValidBytes1 fTotNumValidBytes 2202318 (3000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2202318 (3000000)<br>H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>

incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE30AD6, 48028 bytes received into 150000 buffer)<br>StreamParser::afterGettingBytes fTo 0x4918FB<br>StreamParser::afterGettingBytes fTo 0x488491<br>Parsed 37996-byte NAL-unit (nal_ref_idc: 2, nal_unit_type: 1 ("Coded slice of a non-IDR picture"))<br>

        Presentation time: 1293564387.992757<br>        (The next NAL unit is not a VCL)<br>        *****This NAL unit ends the current access unit*****<br>37996 bytes @1293564387.992757, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>

Parsed 9-byte NAL-unit (nal_ref_idc: 3, nal_unit_type: 7 ("Sequence parameter set"))<br>        profile_idc: 66<br>        constraint_setN_flag: 128<br>        level_idc: 30<br>        seq_parameter_set_id: 0<br>

        log2_max_frame_num_minus4: 0<br>        pic_order_cnt_type: 2<br>        max_num_ref_frames: 1<br>        gaps_in_frame_num_value_allowed_flag: 0<br>        pic_width_in_mbs_minus1: 39<br>        pic_height_in_map_units_minus1: 29<br>

        frame_mbs_only_flag: 1<br>        frame_cropping_flag: 0<br>        vui_parameters_present_flag: 0<br>        This "Sequence Parameter Set" NAL unit contained no frame rate information, so we use a default frame rate of 25.000000 fps<br>

        Presentation time: 1293564388.032756<br>9 bytes @1293564388.032756, fDurationInMicroseconds: 0 ((0*1000000)/25.000000)<br>Parsed 7-byte NAL-unit (nal_ref_idc: 3, nal_unit_type: 8 ("Picture parameter set"))<br>

        Presentation time: 1293564388.032756<br>7 bytes @1293564388.032756, fDurationInMicroseconds: 0 ((0*1000000)/25.000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2250346 (3000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2250346 (3000000)<br>

H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE3C672, 38489 bytes received into 150000 buffer)<br>StreamParser::afterGettingBytes fTo 0x49400F<br>

StreamParser::afterGettingBytes fTo 0x488491<br>Parsed 48000-byte NAL-unit (nal_ref_idc: 2, nal_unit_type: 1 ("Coded slice of a non-IDR picture"))<br>        Presentation time: 1293564388.032756<br>        first_mb_in_slice: 0<br>

        slice_type: 2<br>        pic_parameter_set_id: 0<br>        frame_num: 7<br>    Next NAL unit's slice_header:<br>        first_mb_in_slice: 0<br>        slice_type: 0<br>        pic_parameter_set_id: 0<br>        frame_num: 8<br>

        (frame_num differs in value)<br>        *****This NAL unit ends the current access unit*****<br>48000 bytes @1293564388.032756, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2288835 (3000000)<br>

StreamParser::ensureValidBytes1 fTotNumValidBytes 2288835 (3000000)<br>H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>sending REPORT<br>sending RTCP packet<br> 80c80006 3562be19 d0c4b874 619d2392 f9e9a0d6 0000065c 0022613c 81ca0004 3562be19 01096171 75696c61 31333100<br>

reap: checking SSRC 0x80007181: 4 (threshold 0)<br>schedule(5.114989->1293564409.498146)<br>incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE45CCB, 38227 bytes received into 150000 buffer)<br>StreamParser::afterGettingBytes fTo 0x491AE6<br>

StreamParser::afterGettingBytes fTo 0x488491<br>Parsed 38485-byte NAL-unit (nal_ref_idc: 2, <span style="background-color: rgb(255, 255, 102);">nal_unit_type: 1 ("Coded slice of a non-IDR picture"))</span><br>        Presentation time: 1293564388.072756<br>

        first_mb_in_slice: 0<br>        slice_type: 0<br>        pic_parameter_set_id: 0<br>        frame_num: 8<br>    Next NAL unit's slice_header:<br>        first_mb_in_slice: 0<br>        slice_type: 0<br>        pic_parameter_set_id: 0<br>

        frame_num: 9<br>        (frame_num differs in value)<br>        *****This NAL unit ends the current access unit*****<br>38485 bytes @1293564388.072756, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2327062 (3000000)<br>

StreamParser::ensureValidBytes1 fTotNumValidBytes 2327062 (3000000)<br>H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE4F21E, 48707 bytes received into 150000 buffer)<br>

<span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x4919DD</span><br style="background-color: rgb(255, 204, 102);"><span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x488491</span><br>

Parsed 38223-byte NAL-unit (nal_ref_idc: 2, <span style="background-color: rgb(255, 255, 51);">nal_unit_type: 1 ("Coded slice of a non-IDR picture"))</span><br>        Presentation time: 1293564388.112756<br>        (The next NAL unit is not a VCL)<br>

        *****This NAL unit ends the current access unit*****<br>38223 bytes @1293564388.112756, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>Parsed 9-byte NAL-unit (nal_ref_idc: 3, nal_unit_type: 7 ("Sequence parameter set"))<br>

        profile_idc: 66<br>        constraint_setN_flag: 128<br>        level_idc: 30<br>        seq_parameter_set_id: 0<br>        log2_max_frame_num_minus4: 0<br>        pic_order_cnt_type: 2<br>        max_num_ref_frames: 1<br>

        gaps_in_frame_num_value_allowed_flag: 0<br>        pic_width_in_mbs_minus1: 39<br>        pic_height_in_map_units_minus1: 29<br>        frame_mbs_only_flag: 1<br>        frame_cropping_flag: 0<br>        vui_parameters_present_flag: 0<br>

        This "Sequence Parameter Set" NAL unit contained no frame rate information, so we use a default frame rate of 25.000000 fps<br>        Presentation time: 1293564388.152756<br>9 bytes @1293564388.152756, fDurationInMicroseconds: 0 ((0*1000000)/25.000000)<br>

Parsed 7-byte NAL-unit (nal_ref_idc: 3, nal_unit_type: 8 ("Picture parameter set"))<br>        Presentation time: 1293564388.152756<br>7 bytes @1293564388.152756, fDurationInMicroseconds: 0 ((0*1000000)/25.000000)<br>

StreamParser::ensureValidBytes1 fTotNumValidBytes 2375769 (3000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2375769 (3000000)<br>H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>

incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE5B061, 38239 bytes received into 150000 buffer)<br><span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x4942B5</span><br style="background-color: rgb(255, 204, 102);">

<span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x488491</span><br>Parsed 48679-byte NAL-unit (nal_ref_idc: 2, <span style="background-color: rgb(255, 255, 51);">nal_unit_type: 1 ("Coded slice of a non-IDR picture"))</span><br>

        Presentation time: 1293564388.152756<br>        first_mb_in_slice: 0<br>        slice_type: 2<br>        pic_parameter_set_id: 0<br>        frame_num: 10<br>    Next NAL unit's slice_header:<br>        first_mb_in_slice: 0<br>

        slice_type: 0<br>        pic_parameter_set_id: 0<br>        frame_num: 11<br>        (frame_num differs in value)<br>        *****This NAL unit ends the current access unit*****<br>48679 bytes @1293564388.152756, fDurationInMicroseconds: 40000 ((1*1000000)/25.000000)<br>

StreamParser::ensureValidBytes1 fTotNumValidBytes 2414008 (3000000)<br>StreamParser::ensureValidBytes1 fTotNumValidBytes 2414008 (3000000)<br>H264VideoStreamParser::parse() EXCEPTION (This is normal behavior - *not* an error)<br>

[0x4ba1e0]saw incoming RTCP packet (from address 192.168.50.38, port 2041)<br> 81c90007 80007181 3562be19 00ffffff 00018c08 000066a7 b874619d 000107aa 81ca0003 80007181 01056765 6f666600<br>RR<br>validated RTCP subpacket (type 2): 1, 201, 0, 0x80007181<br>

UNSUPPORTED TYPE(0xca)<br>validated RTCP subpacket (type 2): 1, 202, 8, 0x80007181<br>validated entire RTCP packet<br>incomingDataHandler1:/fb0MQ: mq_receive() 0x02AE645C0, 38244 bytes received into 150000 buffer)<br><span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x4919E9</span><br style="background-color: rgb(255, 204, 102);">

<span style="background-color: rgb(255, 204, 102);">StreamParser::afterGettingBytes fTo 0x488491</span><br></i><br><br><b>I know I am sending 3 fps and one I-frame every 3 frames. Should the nal_unit_type change? The main problem is that fTo advances until all the memory in the bank is exhausted. Can you point me to where the fTo is restored after each frame is handled. It seems that old frames are never freed. </b><br>

<br><pre>><i>I'm puzzled as to why I get this problem as this should be common to <br></i>><i>both MPEG4 and H264. Any ideas?<br></i><br>I notice that for MPEG-4 you are using a <br>"MPEG4VideoStreamDiscreteFramer", but for H.264 you are using a <br>

"H264VideoStreamFramer".  If your H.264 encoder delivers discrete NAL <br>units (i.e., one-NAL-unit-at-a-time), then it should be fed into a <br>"H264VideoStreamDiscreteFramer" instead.  (In this case, though, <br>

there should *not* be a start code (0x00000001) at the start of each <br>NAL unit; that code is used only if the H.264 data is in a stream.)<br>-- <br><br>Ross Finlayson<br>Live Networks, Inc.<br><a href="http://www.live555.com/" target="_blank">http://www.live555.com/</a><br>

</pre><br><br>-- <br><font color="#888888">Geoff Cleary<br><br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Geoff Cleary<br>Principal Software Engineer<br><br>SightLogix<br>745 Alexander Rd, Princeton, NJ 08540<br>609.951.0008(w) 267.252.1789(c)<br><a href="http://www.sightlogix.com">http://www.sightlogix.com</a><br>