1

我正在实现 HLS 服务器并尝试通过 VLC 播放。它通过播放列表播放,但从不重新请求播放列表。任何想法为什么?下面是我要返回的播放列表的示例。

#EXTM3U
#EXTINF:9,
http://10.221.218.91:10042/clip/0.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/1.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/2.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/3.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/4.ts?session=23
#EXTINF:20,
http://10.221.218.91:10042/clip/5.ts?session=23
4

2 回答 2

1

播放列表中的每个媒体片段都必须具有唯一的整数序列号。它在#EXT-X-MEDIA-SEQUENCE 标签中描述。每次将新片段附加到实时播放列表时,您必须增加媒体序列的十进制数。如果您不在播放列表中使用此标签,则假定媒体序列号 = 0,并且播放器假定没有新片段到达。

此外,您必须在媒体播放列表中使用 #EXT-X-TARGETDURATION 并使用十进制整数表示目标持续时间(以秒为单位)。媒体播放列表文件中每个媒体片段的#EXTINF 持续时间,当四舍五入到最接近的整数时,必须小于或等于目标持续时间。

以上注释取自 IETF 关于 HLS 的草案:https ://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming ,尤其是第 3.4.2 和 3.4.3 段。

因此,根据这些规则,您的示例播放列表必须如下所示:

#EXTM3U
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:9,
http://10.221.218.91:10042/clip/0.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/1.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/2.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/3.ts?session=23
#EXTINF:9,
http://10.221.218.91:10042/clip/4.ts?session=23
#EXTINF:20,
http://10.221.218.91:10042/clip/5.ts?session=23

然后 #EXT-X-MEDIA-SEQUENCE 在每个到达的新段上增加 1(即大约在 e TARGETDURATION 秒之后)。

于 2013-12-22T22:32:18.060 回答
0

我强烈建议您在测试中使用 VLC 2.1,因为我们显着改进了 HLS 支持。当前的预发行版可在此处获得:http ://get.videolan.org:81/testing/vlc-2.1.0-rc1/

此外,我不完全确定根据 HLS 标准的正确行为是什么 - 不时重新请求 m3u8 或服务器保持连接打开并在播放列表的更多内容可用时推送它们。你应该检查这个:-)

于 2013-09-08T16:23:04.733 回答