<div dir="ltr">try this<div><br></div><div><div>extern "C" int find_nal_unit(const unsigned char* buf, int size, int* nal_start, int* nal_end)</div><div>{</div><div>    int i;</div><div>    // find start</div><div>
    *nal_start = 0;</div><div>    *nal_end = 0;</div><div>    </div><div>    i = 0;</div><div>    while (   //( next_bits( 24 ) != 0x000001 && next_bits( 32 ) != 0x00000001 )</div><div>           (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0x01) && </div>
<div>           (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0 || buf[i+3] != 0x01) </div><div>           )</div><div>    {</div><div>        i++; // skip leading zero</div><div>        if (i+4 >= size) { return 0; } // did not find nal start</div>
<div>    }</div><div>    </div><div>    if  (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0x01) // ( next_bits( 24 ) != 0x000001 )</div><div>    {</div><div>        i++;</div><div>    }</div><div>    </div><div>    if  (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0x01) { /* error, should never happen */ return 0; }</div>
<div>    i+= 3;</div><div>    *nal_start = i;</div><div>    </div><div>    while (   //( next_bits( 24 ) != 0x000000 && next_bits( 24 ) != 0x000001 )</div><div>           (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0) && </div>
<div>           (buf[i] != 0 || buf[i+1] != 0 || buf[i+2] != 0x01) </div><div>           )</div><div>    {</div><div>        i++;</div><div>        // FIXME the next line fails when reading a nal that ends exactly at the end of the data</div>
<div>        if (i+3 >= size) { *nal_end = size; return size - *nal_start; } // did not find nal end, stream ended first</div><div>    }</div><div>    </div><div>    *nal_end = i;</div><div>    return (*nal_end - *nal_start);</div>
<div>}</div><div><br></div><div>/**</div><div> * test method showing how to use find_nal_unit</div><div> * for the first frame in inglorious bastards, it prints out: </div><div> *    NAL: type=6, size=678, start=4, end=682</div>
<div> *    NAL: type=7, size=33, start=686, end=719</div><div> *    NAL: type=8, size=5, start=723, end=728</div><div> *    NAL: type=5, size=96, start=731, end=824</div><div> */</div><div>/*void test(MediaSample* pSample)</div>
<div>{</div><div>    int s           = pSample->GetActualDataLength();</div><div>    uint8_t* p      = pSample->GetPointer();</div><div>    int nal_start, nal_end, nal_offset = 0;</div><div>    while(s > 0) {</div>
<div>        int nal_size = find_nal_unit(p, s, &nal_start, &nal_end);</div><div>        int unit_type = p[nal_start] & 0x1f;</div><div>        std::cout << "NAL: type=" << unit_type << ", size=" << nal_size << ", start=" << nal_offset + nal_start << ", end=" << nal_offset + nal_end << std::endl;</div>
<div>        p          += nal_end;</div><div>        s          -= nal_end;</div><div>        nal_offset += nal_end;</div><div>    }</div><div>}*/</div><div><br></div><br><div class="gmail_quote">On Sun, Apr 15, 2012 at 04:07, Ross Finlayson <span dir="ltr"><<a href="mailto:finlayson@live555.com">finlayson@live555.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><div class="h5"><blockquote type="cite">1.>How can i detect the size of nal unit?<br>
2/>How can i detect the end of nal unit?<br>3.>How can i detect the I-Frame in an packet?<br>4.>How can i detect theB,P-Frame in an packet?<br></blockquote><div><br></div></div></div>For this you need a H.264 decoder - which we don't provide.  (Therefore, your question is off-topic for this mailing list.)</div>
<span class="HOEnZb"><font color="#888888"><br><br><div>
<span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px"><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Helvetica;word-spacing:0px">Ross Finlayson<br>
Live Networks, Inc.<br><a href="http://www.live555.com/" target="_blank">http://www.live555.com/</a></span></span>
</div>
<br></font></span></div><br>_______________________________________________<br>
live-devel mailing list<br>
<a href="mailto:live-devel@lists.live555.com">live-devel@lists.live555.com</a><br>
<a href="http://lists.live555.com/mailman/listinfo/live-devel" target="_blank">http://lists.live555.com/mailman/listinfo/live-devel</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Aviad Rozenhek<br>
</div></div>