在 AWS 上使用 Enterprise Edition 1.9.1 官方 AMI。
设想:
Ant Media Server 应用程序配置为使用具有 360、480、720 分辨率的 ABR。
播放器端代码轮询 HLS 流 URL,等待流开始。
预期行为:
- 当流未直播时,以 404 错误响应
- 当流上线时,使用包含所有已定义分辨率的 m3u8 进行响应
实际行为:
- 当流未直播时,为 m3u8 返回的 HTTP 状态为 200,但响应的内容是 404 未找到页面。
- 当直播开始时,收到的 m3u8 只包含一个分辨率(我认为,它是随机的 - 可以是任何预定义的):
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=0,RESOLUTION=1280x720,CODECS="avc1.42e00a,mp4a.40.2"
5e820545bd53c64aca9c57c1_720p.m3u8
- 如果我在不完整的几秒钟后请求 m3u8,我会收到具有所有定义分辨率的完整 m3u8:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=680704,RESOLUTION=640x360,CODECS="avc1.42e00a,mp4a.40.2"
5e820545bd53c64aca9c57c1_360p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1072360,RESOLUTION=854x480,CODECS="avc1.42e00a,mp4a.40.2"
5e820545bd53c64aca9c57c1_480p.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1409432,RESOLUTION=1280x720,CODECS="avc1.42e00a,mp4a.40.2"
5e820545bd53c64aca9c57c1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2263000,RESOLUTION=1280x720,CODECS="avc1.42e00a,mp4a.40.2"
5e820545bd53c64aca9c57c1_720p.m3u8
解决方法:
目前我正在通过解析响应的内容来解决这个问题:
- 如果包含404错误,继续轮询
- 如果m3u8短于6行(经验值),继续轮询
- 当一个正确的 m3u8 到达时,启动播放器
我做错了什么还是这是一个错误?