如何在网页上显示外部直播

How to show an extermal livestream on a webpage

有人要求我将直播视频添加到现有网站。流 URL 是 http://192.168.1.2/, and I can view it in VLC. The container is MPEG-TS, and the codec shown by VLC is Codec: H264 - MPEG-4 AVC (part 10) (h264), and from what I read,所有主流浏览器都应该支持它。

我当前的 HTML 代码就是这样:

<video width="100%" height="auto" autoplay controls>
    <source src="http://192.168.1.2/" type="video/mp4">
</video>

但这并没有显示任何内容。在 Chrome 和 Edge 中,我都可以看到带有旋转圆圈的视频播放器,并且 F12 网络选项卡显示正在从流中下载一些数据(24 秒内大约 1 MB,然后停止)。

Firefox 几乎立即显示消息未找到支持格式和 MIME 类型的视频,并且不下载任何内容。控制台中有警告:HTTP “Content-Type” of “application/octet-stream” is not supported。加载媒体资源 http://192.168.1.2/ 失败。 流响应确实有 content-type header,但我不确定这是否会阻止播放。我认为 Firefox 比 Edge 和 Chrome.

更挑剔

我的问题是:是否真的可以在 video 元素中显示流式视频?如果没有,还有其他选择吗?我尝试使用 fetch 并将结果分配给 video.src,但由于 CORS 限制,第一步已经失败。但是,如果这是一种可行的方法,我可以要求流的所有者添加对此的支持。

是的,您可以在视频元素中显示流式视频,前提是您使用单独的 javascript 库来解复用传入流(一些示例是 hls.js and flv.js )。实际上只有 iOS 设备支持原生 <video> 元素中的直播(HLS 视频)。

您可以使用 ffprobe 或查看您正在发出的 http 请求的 Content-Type 来确定传入的流类型。 application/octet-stream 是一种通用内容类型,因此我不确定您是否真的获取了该请求中的真实内容。

最后,您可能会处理任何直播的 CORS/mixed-content 问题 (除非您正在加载 mjpeg stream...如果您不是你有 H.264 视频)。你需要解决这个问题。