javascript - 如何在 Video.js 中正确处理 HLS 流离线案例?
问题描述
我在我的网络应用程序的客户端使用 Video.js 来创建必须播放 HLS 流的播放器(在所有平台上)。我从服务器接收 m3u8 文件链接并在 videoJsPlayer.src() 中使用它。playlist.m3u8 的内容如下:
#EXTM3U
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2500000,NAME="High"
https://.../chunklist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000,NAME="Low"
https://.../chunklist.m3u8
playlist.m3u8 文件中的每个链接都指向某个 chunklist.m3u8 文件,该文件是特定带宽的播放列表。Videojs 选择 chunklist.m3u8 之一并下载它。每个 chunklist.m3u8 文件的内容如下:
#EXTM3U
#EXT-X-VERSION:3
##EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:9
#EXT-X-MEDIA-SEQUENCE:51
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXTINF:8.333,
https://.../file.ts
#EXTINF:8.333,
https://.../file.ts
#EXTINF:8.334,
https://.../file.ts
#EXTINF:8.333,
https://.../file.ts
#EXTINF:8.333,
https://.../file.ts
在我停止流之前,这很好。我的问题是:在 Video.js 中停止 HLS 流的最佳方法是什么?我应该在 chunklist.m3u8 文件中放入什么样的内容来停止播放器?目前我正在为离线流使用 chunklist.m3u8 文件的以下内容:
#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:0
#EXT-X-MEDIA-SEQUENCE:101
#EXTINF:0.0,
https://.../file.ts (empty ts file)
#EXT-X-ENDLIST
我在 twitch.tv 上看到过这种方法,但它不适用于 Video.js。播放器开始无限循环下载空 .ts 文件。我正在阅读文档(https://datatracker.ietf.org/doc/html/rfc8216),但没有找到离线流处理示例。请帮我理解。
解决方案
推荐阅读
- python - 已建立的连接被主机中的软件中止 - Python 套接字
- discord.js - 循环client.guilds中的所有值,然后循环每个公会中的所有成员
- reactjs - 如何在@stomp/stomp-js 库的 onStompErrorCallback 中使用调度?
- infrastructure - 如何使用裸机基础架构为 Keepalived 获取虚拟 IP
- mysql - MySQL 错误代码:在 MySQL Workbench 中 CREATE TABLE 期间出现 1064
- amazon-web-services - Terraform 应用失败 - 创建指标警报失败。不支持期间 (10)
- angular - 如何在 Angular 10 单元测试中模拟子组件?
- cucumber - Cucumber - 同一场景的 UI 和 API 实现
- ruby - 修改二维数组元素
- arrays - 从输入字符串代码中反复删除和替换出现的子字符串不起作用