首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HTTP Live Stream流畅播放视频

使用HTTP Live Stream流畅播放视频
EN

Stack Overflow用户
提问于 2013-06-17 14:59:59
回答 1查看 1.2K关注 0票数 2

我正在尝试将HTTP实时视频流保存到文件中。我知道,为了这个目的,我需要定期请求M3U8文件,解析它以提取媒体片段的URL,下载这些片段并重新组合。我遇到的问题是找到正确的策略来实现流畅的回放。重新组装的视频总是起伏不定,音频跳过etc...only的头几秒钟是正常的。

我的M3U8文件看起来像这样:

代码语言:javascript
复制
#EXTM3U
#EXT-X-TARGETDURATION:2
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:NO
#EXT-X-MEDIA-SEQUENCE:1105
#EXTINF:1.00000,
tmp/video1.ts
#EXTINF:1.00000,
tmp/video2.ts
#EXTINF:1.00000,
tmp/video2.ts
#EXTINF:1.00000,
tmp/video3.ts
#EXTINF:1.00000,
tmp/video4.ts
#EXTINF:1.00000,
tmp/video5.ts

解析完文件后,我开始下载所有TS文件(一次下载一个),当我要下载倒数第二个文件时,我请求一个新的M3U8文件。这是错的吗?也许服务器还没有更新数据段?因此,我要重新下载相同的文件?在请求新的播放列表之前,我尝试等待5秒(number_of_videos * duration),但仍然遇到上述播放问题。

关于如何实现流畅播放,您有什么想法/策略吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-17 19:49:23

基本策略大致如下。

首先处理清单文件,然后下载前几个段来填充缓冲区。一旦您满意缓冲区中有足够的数据,您就开始回放,同时继续按顺序下载其他段,直到清单结束,此时您再次请求它。如果在刷新的清单中发现新段,则将这些URL添加到下载队列中。否则,您将等待一段预定的时间,然后再次刷新清单。例如,您的客户端可以根据(段的总持续时间*段的数量/ 2)来轮询M3U8清单。

我知道一些商业播放器进入偏执模式时,播放缓冲区越来越低,刷新的清单不包含任何新的片段下载。在这种情况下,他们开始更频繁地请求更新的清单。

您还需要注意客户端和HTTP服务器之间的内容缓存。例如,一些CDN会将清单文件缓存一段最短的强制时间段,因此,如果您尝试在此时间段内请求该文件,您可能会得到一个陈旧的清单文件。

从你上面的例子(我希望它只是在你手工制作的例子中),每个片段的持续时间似乎是1秒,这是相当低的。如果确实如此,您可能希望相应地调整初始缓冲区。

最后,我假设你已经用一个稳定的播放器验证了源码流,以确保问题不在另一端?

-- ab1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17141963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档