使用 HTML 视频标签播放 m3u8 文件

2023-11-21

我正在尝试使用 HTTP Live Streaming (HLS) 将视频流式传输到我的计算机和 iPhone。在阅读了 Apple 的“HTTP 实时流媒体概述”以及“为 iPhone 和 iPad 创建和部署 HTTP 实时流媒体的最佳实践”后,我有点陷入困境。

我获取了源文件(mkv)并使用 ffmpeg 将文件编码为 MPEG-TS 格式和 Apple 推荐的设置以及 Baseline 3.0 配置文件:

ffmpeg -i "example.mkv" -f mpegts -threads:v 4 -sws_flags bicubic -vf "scale=640:352,setdar=16/9,ass=sub.ass" -codec:v libx264 -r 29.970 -b:v 1200k -profile:v baseline -level:v 3.0 -movflags faststart -coder 1 -flags +loop -cmp chroma -partitions +parti8x8+parti4x4+partp8x8+partb8x8 -me_method hex -subq 6 -me_range 16 -g 239 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -b_strategy 1 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -direct-pred 1 -fast-pskip 1 -af "aresample=48000" -codec:a libvo_aacenc -b:a 96k -ac 2  -y "output.ts"

那里不用担心。我用了一个预编译分割工具对视频进行分段并构建 .m3u8 播放列表。结果文件如下所示:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://localhost/media/stream/stream-1.ts
#EXTINF:10,
http://localhost/media/stream/stream-2.ts
#EXTINF:10,
http://localhost/media/stream/stream-3.ts
#EXT-X-ENDLIST

我检查了一些用于 HTTP Live Streaming 的示例播放列表文件,我没有看到任何问题。我还尝试在 VLC 中播放 .m3u8 文件,效果非常好。

我创建了一个 HTML 页面来播放该文件:

<html lang="en">
    <head>
        <meta charset=utf-8/>
    </head>
    <body>
        <div id='player'>
            <video width="352" height="288" src="stream.m3u8" controls autoplay>
            </video>
        </div>
    </body>
</html>

而且这个页面在我的 iPhone 上的 Chrome、Safari 中不起作用。 w3schools 上的 html5 视频标签示例在我的计算机上运行良好,上面提到的官方 Apple 概述给出了一个与我的页面非常相似的 HTML 示例。然而,当我访问自己的 .m3u8 页面时,我的视频播放器完全没有响应。


答案可能有点晚了,但您需要在视频标记中提供 MIME 类型属性:type="application/x-mpegURL"。我用于 16:9 流的视频标签如下所示。

<video width="352" height="198" controls>
    <source src="playlist.m3u8" type="application/x-mpegURL">
</video>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HTML 视频标签播放 m3u8 文件 的相关文章