我有一个URL (<ip>/ipcam/mpeg4.cgi),它指向通过以太网连接的IP摄像头。访问URL会产生无限的视频流(可能带有音频)数据。
我想把这些数据存储到一个视频文件中,然后用视频播放器播放它(HTML5 5的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头,但是,我无法理解格式描述,比如这些。
我的IP相机上有以下视频流设置(单击以放大):

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

发布于 2014-11-14 09:05:15
看起来您的服务器正在发送附件B字节流格式的H.264编码的“rawvideo”。
可以使用以下命令行将其重新格式化为.mp4:
ffmpeg -i {input file} -f rawvideo -bsf h264_mp4toannexb -vcodec copy out.mp4将音频/视频流保存到文件中并不是一件容易的工作。如果它只是视频,使用MPEG2 TS格式是最简单的方法。
对于.mp4流,请考虑-movflags faststart -> 推荐用于视频编码的最佳质量/性能H264编码器?
**更新:可以省略-bsf h264_mp4toannexb选项,我不确定。
发布于 2014-11-13 13:43:42
嗯,这并不像看上去那么简单:
1) HTML5 <video>标记对MP4流有一些要求--它必须是分段的(这意味着描述长度和其他数据的内部数据原子必须位于流的开头)。大多数MP4视频文件都没有这个特性,所以您的选择是用FFmpeg或其他工具重新格式化它们(参见这),然后您实际上可以按原样提供文件。
2) Nginx有一个插件,它允许流MP4文件,我没有使用它,但它可能对您有用,因为我猜它会处理内部事务。
https://stackoverflow.com/questions/26883207
复制相似问题