1

v4l2 を使用して Logitech C920 ウェブカメラから H.264 フレームを読み取りました。プログラムで彼らの PTS と DTS を取得するにはどうすればよいですか? たとえば、次の関数を使用してフレーム タイプを判別できます。

// < 0 = error
// 0 = I-Frame
// 1 = P-Frame
// 2 = B-Frame
// 3 = S-Frame
int VOutVideoStream::getVopType( const std::vector<uint8_t>& image )
{
    if( image.size( ) < 6 )
        return -1;
    unsigned char *b = (unsigned char*)image.data( );

    // Verify NAL marker
    if( b[ 0 ] || b[ 1 ] || 0x01 != b[ 2 ] ) {
        ++b;
        if ( b[ 0 ] || b[ 1 ] || 0x01 != b[ 2 ] )
            return -1;
    }

    b += 3;

    // Verify VOP id
    if( 0xb6 == *b ) {
        ++b;
        return ( *b & 0xc0 ) >> 6;
    }

    switch( *b ) {
    case 0x65: return 0;
    case 0x61: return 1;
    case 0x01: return 2;
    }

    return -1;
}
4

1 に答える 1

5

PTS と DTS は、H.264 ビットストリームの一部ではありません。

通常、PTS はカメラから取得したフレームに関連付けられます。カメラがフレームの PTS と DTS を取得するための API を提供していない場合は、フレームの PTS などを使用できる場合がありますgettimeofday()

カメラがすでに H.264 でエンコードされたフレームを出力している場合は、エンコードに使用される GOP 構造も考慮する必要がありますが、カメラがすでに H.264 を出力している場合は、API を取得する可能性が高いと思います。その情報を保持します。

于 2012-09-20T16:03:28.973 に答える