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 与从相机抓取的帧相关联。如果您的相机不提供​​ API 来获取帧的 PTS 和 DTS,您可以使用类似gettimeofday()帧的 pts 之类的东西。

在相机已经输出 H.264 编码帧的情况下,您还需要考虑用于编码的 GOP 结构,尽管我猜测如果相机已经输出 H.264,则可能需要获取 API持有该信息。

于 2012-09-20T16:03:28.973 回答