3

h264ストリームで参照フレームを見つけるアルゴリズムを探しています。さまざまなソリューションで私が見た最も一般的な方法は、アクセスユニットの区切り文字とIDRタイプのNALを見つけることでした。残念ながら、私がチェックしたほとんどのストリームには、IDRタイプのNALがありませんでした。私は助けに感謝します。よろしくJacek

4

1 に答える 1

8

H264 フレームは、startcode プレフィックスと呼ばれる特別なタグによって分割されます。これは、0x00 0x00 0x01または0x00 0x00 0x00 0x01 のいずれかです。2 つのスタートコード間のすべてのデータは、H264 音声の NAL ユニットを構成します。したがって、h264 ストリームで startcode プレフィックスを検索する必要があります。startcode プレフィックスの直後のバイトは、NAL ヘッダーです。NAL ヘッダーの最下位 5 ビットは、NAL ユニット タイプを示します。nal_unit_type = 5 の場合、その特定の NAL ユニットは参照フレームです。

このようなもの:

void h264_find_IDR_frame(char *buf)
{
    while(1)
    {
        if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x01)
        {
            // Found a NAL unit with 3-byte startcode
            if(buf[3] & 0x1F == 0x5)
            {
                // Found a reference frame, do something with it
            }
            break;
        }
        else if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x00 && buf[3]==0x01)
        {
            // Found a NAL unit with 4-byte startcode
            if(buf[4] & 0x1F == 0x5)
            {
                // Found a reference frame, do something with it
            }
            break;
        }
        buf++;
    }
}
于 2012-06-25T06:50:54.753 に答える