0

我有一个使用 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),解码格式:Planar 4:2:0 YUV using vlc。

感谢您提供的任何帮助!

Wireshark h264 转储

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

4

0 回答 0