1
我使用v4l2從Logitech C920 webcamera中讀取H.264幀。我如何在我的程序中獲得他們的PTS和DTS?例如,我可以使用該功能確定幀類型:如何獲得H.264幀的DTS和PTS?
// < 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;
}
謝謝你,拉爾夫。 ffmpeg能夠將我的相機的比特流轉換爲avi文件。它從stdin讀取流。它在哪裏獲取關於PTS和DTS的信息? – dasg
它可能使用gettimeofday之類的東西(http://forums.logitech.com/t5/Webcams/Is-it-possible-to-adjust-C920-H-264-GOP-size-from-300-to-lower/td-p/831629看起來相機可能會輸出IDR,然後是一堆P幀,在這種情況下,PTS = DTS,也可以通過爲每個連續幀添加適當的幀持續時間來計算時間戳。 – Ralf