如何将IP Camera视频流转换为视频文件?

时间:2014-11-12 09:16:41

标签: c# ffmpeg video-streaming mp4 rtsp

我有一个网址(<ip>/ipcam/mpeg4.cgi),指向通过以太网连接的 IP摄像头。 访问URL会产生无限的视频流(可能带有音频)数据。

我想将这些数据存储到一个视频文件中,稍后用视频播放器播放(HTML5的video标签首选作为播放器)。

但是,一种简单的方法,将流数据保存到.mp4文件很简单,但不起作用。

我查看了文件,这是我看到的内容(点击放大):

事实证明,有一些HTML标题,我进一步使用二进制编辑工具手动排除,但没有玩家可以播放文件的其余部分。

HTML标题是:

--myboundary
Content-Type: image/mpeg4
Content-Length: 76241
X-Status: 0
X-Tag: 1693923
X-Flags: 0
X-Alarm: 0
X-Frametype: I
X-Framerate: 30
X-Resolution: 1920*1080
X-Audio: 1
X-Time: 2000-02-03 02:46:31
alarm: 0000

我的问题现在非常清楚,我想要任何帮助或建议。我怀疑,我必须根据上面的值自己手动创建一些MP4标题,但是,我无法理解格式描述,例如these

我的IP摄像机上有以下视频流设置(点击放大):

我也可以使用ffmpeg工具,但无论我如何尝试将参数混合到程序中,它都会告诉我这个错误:

2 个答案:

答案 0 :(得分:2)

看起来您的服务器正在以附件B字节流格式发送H.264编码的“rawvideo”。

可能会使用以下命令行重新格式化为.mp4:

ffmpeg -i {input file} -f rawvideo -bsf h264_mp4toannexb -vcodec copy out.mp4

将音频/视频流保存到文件中并非易事。如果它只是视频,使用MPEG2 TS格式是最简单的方法。

对于.mp4流式传输,请考虑-movflags faststart - &gt; Recommendation on the best quality/performance H264 encoder for video encoding?

**更新:-bsf h264_mp4toannexb选项可以省略,我不确定。

答案 1 :(得分:0)

嗯,这不像看起来那么简单:

1)HTML5 <video>标签对MP4流有一些要求 - 它必须是分段的(这意味着描述长度和其他数据的内部数据原子必须位于流的开头)。大多数MP4视频文件没有此功能,因此您可以选择使用FFmpeg或其他工具重新格式化它们(请参阅this),然后您可以按原样提供文件。

2)Nginx有一个允许播放MP4文件的plugin,我还没有使用它,但它对你有用,因为我猜它会照顾内部的东西。