从dvr解码H.264流

时间:2013-10-17 16:37:35

标签: stream ffmpeg h.264 wireshark

我有一个使用h264流的安全DVR。我一直试图让这个与zoneminder一起工作。我已成功登录dvr并收到某种形式的数据流。数据流被转储到fifo / pipe,然后zoneminder使用ffmpeg来读取它。

注意:我对h.264流知之甚少。就够傻了。

视频仅在ZM中每15秒更新一次。我可以使用ffmpeg或avconv(avconv -i / tmp / mypipe cam.mp4)将流转储到文件中,但它仍然不正确。但是,avconv创建的文件比ffmpeg创建的文件更好。

我已经包含了wireshark转储的链接(我确实更改了PW和登录信息等等)。从数据来看,似乎dvr正在为h264数据流添加标头。据我所知,h264流以(0x00 00 01 67)或(0x00 00 01 61)开头。以下是标题加上流的开头的示例:

0x33, 0x30, 0x64, 0x63, 0x48, 0x32, 0x36, 0x34, 
0x3f, 0x55, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 
0xa2, 0x7a, 0xea, 0xdc, 0xcf, 0x08, 0x00, 0x00, 
0x0d, 0x0a, 0x11, 0x07, 0x13, 0x20, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x01, 0x67, 0x42, 0xe0, 0x14, 
0xdb, 0x05, 0x87, 0xc4, 0x00, 0x00, 0x00, 0x01, 
0x68, 0xce, 0x30, 0xa4, 0x80, 0x00, 0x00, 0x00, 
0x01, 0x06, 0xe5, 0x01, 0x51, 0x80, 0x00, 0x00, 
0x00, 0x01, 0x65, 0xb8, 0x00, 0x01, 0xa8, 0xac,

我可以看到此消息中有一些帧指示符。在这种情况下,DVR的标头看起来是32字节长,而在转储中的一些其他消息中,它看起来是24字节长。在将流转储到管道之前,我正在删除标题。 (我已经验证输出不包括任何方式的dvr标题。

我想要帮助的是确定我应该发送到管道的内容。我应该从第一个h.264键开始吗?有什么不合适的吗?我很惊讶ffmpeg只有15秒更新,但avconv更好(大量丢帧,播放“加速”。

使用ffmpeg读取管道产生一个文件,显示它的编解码器为:H264 - MPEG-4 AVC(第10部分)(avc1),带有解码格式:平面4:2:0 YUV使用vlc。

感谢您提供的任何帮助!

Wireshark h264 dump

编辑:在Ubuntu 13.04上 ffmpeg版本:6:0.8.6-1ubuntu2 avconv 0.8.6-6:0.8.6-1ubuntu2

0 个答案:

没有答案