H264/MP4 来自 ffmpeg 的实时流在浏览器中不工作

H264/MP4 live stream from ffmpeg does not work in browser

我无法在 Chrome、IE、Edge 中可视化由 ffmpeg 生成的 H264/MP4 流。它仅适用于 Firefox。

我的测试环境是Windows10,所有更新完成,所有浏览器都是最新的。

我有一个源 MJPEG 流,我需要将其转码为 H264/MP4 并在浏览器中的 HTML5 元素中显示它。 为了提供一个工作示例,我在这里使用这个 MJPEG 流:http://200.36.58.250/mjpg/video.mjpg?resolution=320x240。在我的真实案例中,我有来自 IP 摄像机等不同来源的 MJPEG 输入。 我使用以下命令行:

ffmpeg.exe -use_wallclock_as_timestamps 1 -f mjpeg -i "http://200.36.58.250/mjpg/video.mjpg?resolution=320x240" -f mp4 -c:v libx264 -an -preset ultrafast -tune zerolatency -movflags frag_keyframe+empty_moov+faststart -reset_timestamps 1 -vsync 1 -flags global_header -r 15 "tcp://127.0.0.1:5000?listen"

如果我尝试在 VLC 中可视化输出,我使用这个 link: tcp://127.0.0.1:5000 并且它有效。 然后我尝试在浏览器中可视化流,所以我将其放入 html 文档中:

<video autoplay controls>
<source src="http://127.0.0.1:5000" type="video/mp4">
</video>

如果我在 Firefox 中打开文档,它工作正常。 但是当尝试在 Chrome、IE 或 Edge 中打开时它不起作用。浏览器似乎试图连接到 ffmpeg 暴露的 TCP 服务器,但由于 ffmpeg 几秒后退出,所以发生了一些事情。

在 ffmpeg 控制台中我可以看到这个:

av_interleaved_write_frame(): Unknown error
Error writing trailer of tcp://127.0.0.1:5000?listen: Error number -10053 occurred

如果我检查 Chrome 中的视频元素可以看到此错误:

Failed to load resource: net::ERR_INVALID_HTTP_RESPONSE

据我所知,所有这些浏览器都应该支持在 MP4 容器中传输的 H264 编码流。如果在元素中我将 link http://127.0.0.1:5000 替换为本地 link 到 mp4/H264 编码文件,则它在每个浏览器中都可以正常播放。问题好像和直播有关

有谁知道为什么会发生这种情况以及如何解决?

谢谢!

您只是输出到 TCP 套接字。那不是 HTTP。浏览器使用 HTTP...在这种情况下您需要使用 HTTP 服务器。