Live m3u8播放3个文件自动停止问题
Live m3u8播放3个文件自动停止问题
1.问题描述
最近做一个转码切片播放测试,使用HLS(HTTP Live Streaming)
来做直播, 每个TS分片时间为10s,根据TS分片文件生成以下live m3u8
文件
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10 #EXTINF:10
hls/1.ts
#EXTINF:10
hls/2.ts
#EXTINF:10
hls/3.ts
#EXTINF:10
hls/4.ts
#EXTINF:10
hls/5.ts
#EXTINF:10
hls/6.ts
#EXTINF:10
hls/7.ts
#EXTINF:10
hls/8.ts
#EXTINF:10
hls/9.ts
#EXTINF:10
hls/10.ts
将上述m3u8
文件保存为live.m3u8
,放到Apache
文档目录下,用VLC
播放以下网址:
http://localhost/live.m3u8
测试发现,开始播放的第一个文件不是1.ts,多次测试后发现:
只要列表中的文件超过三个,播放的总是列表中的最后三个文件
2.问题解决
很悲惨的是,上网搜索后,没有找到任何有效的信息,有个哥们遇到同样的情况,解决后有没有将经验分享出来。
向一位同事请教后,同事说,这是有可能的,因为live m3u8
文件列表是需要实时更新的,我们做测试的话,可以先在最后面加上#EXT-X-ENDLIST
,这个方法经测试有效,但这样已经不是live m3u8
模式
再次上网搜索后,确认,终于找到一篇live m3u8
说明
Live Playlist (Sliding Window)
For live sessions, the index file is updated by removing media URIs from the file as new media files are created and made available.
Important: The
EXT-X-ENDLIST
tag is not present in the Live playlist, indicating that new media files will be added to the index file as they become available.See Listing 3 for an example live playlist as it would appear at the beginning of a session.
Listing 3 Live Playlist at the beginning of a session.
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:10,
fileSequence4.ts
#EXTINF:10,
fileSequence5.ts
The
EXT-X-MEDIA-SEQUENCE
tag value MUST be incremented by 1 for every media URI that is removed from the playlist file. Media URIs must be removed from the playlist file in the order that they appear in the playlist. The updated index file presents a moving window into a continuous stream. This type of session is suitable for continuous broadcasts.Here's the same playlist after it has been updated with new media URIs:
Listing 4 Live Playlist after updating the media URIs.
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:2
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:10,
fileSequence4.ts
#EXTINF:10,
fileSequence5.ts
#EXTINF:10,
fileSequence6.ts
3.live m3u8
更新规则
live m3u8
文件列表需要不断更新,更新规则:
- 移除一个文件播放列表中靠前的(认为已播放的)文件
- 不断更新
EXT-X-MEDIA-SEQUENCE
标签,以步长为1进行递增
4.实验
写了一个生成live m3u8的小程序,进行测试
Usage:
m3u8_gen.exe start_num list_count duration filename.m3u8 [prefix]
使用示例:
m3u8_gen.exe 1 3 10 live.m3u8 hls/
生成live.m3u8
文件为
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-TARGETDURATION:10
#EXTINF:10
hls/1.ts
#EXTINF:10
hls/2.ts
#EXTINF:10
hls/3.ts
写一个BAT脚本,每10s
循环更新live.m3u8
文件
@echo off for /l %%i in (1,1,420) do (
echo m3u8_gen.exe %%i 3 10 live.m3u8 hls/
m3u8_gen.exe %%i 3 10 live.m3u8 hls/
call :SLEEP 10000
) ::延时函数实现
:SLEEP
ping 192.168.11.1 -n 1 -w %1 > nul
经VLC播放测试正常!!
Live m3u8播放3个文件自动停止问题的更多相关文章
- 关于m3u8格式的视频文件ts转mp4下载和key加密问题
一,利用网站浏览器F12键,利用谷歌浏览器插件找到视频的.m3u8文件,并打开. 二,打开m3u8文件后,里面有很多.ts的链接,和key的链接. 三,保存为html文件,下载ts文件,代码如下:可加 ...
- iOS从零开始学习直播之音频1.播放本地音频文件
现在直播越来越火,俨然已经成为了下一个红海.作为一个资深码农(我只喜欢这样称呼自己,不喜欢别人这样称呼我),我必须赶上时代的潮流,开始研究视频直播.发现视屏直播类的文章上来就讲拉流.推流.采集.美 ...
- IE10用video标签播放本地mp4文件失败的解决办法
1. 首先用“格式工厂”将要播放的视频文件按照“AVC高质量与大小”转换为要求格式的mp4文件: 2. 设置IIS7.5,添加mp4的MIME类型,步骤如下: 1.打开IIS管理器(运行inetmgr ...
- centos下如何用SMplayer播放WMV格式文件
安装的是centos6.6,想用来做桌面系统使用!! 装完后,其他的办公软件都安装好了.但是,视频播放却出问题了. 配置的yum安装的SMplayer播放器,播放其他的视频文件没问题,就是WMV的视频 ...
- Android播放在线音乐文件
Android播放在线音频文件 效果图: 源码下载地址: http://download.csdn.net/detail/q4878802/9020687 添加网络权限: <uses-permi ...
- IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断
本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...
- OpenCV学习:播放avi视频文件
#if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...
- 用 Qt 的 QAudioOutput 类播放 WAV 音频文件
用 Qt 的 QAudioOutput 类播放 WAV 音频文件 最近有一个项目,需要同时控制 4 个声卡播放不同的声音,声音文件很简单就是没有任何压缩的 wav 文件. 如果只是播放 wav 文件, ...
- AVAudioPlayer播放在线音频文件
AVAudioPlayer播放在线音频文件 一:原里: AVAudioPlayer是不支持播放在线音频的,但是AVAudioPlayer有一个 initWithData的方法:我们可以把在线音频转换为 ...
随机推荐
- tarjan总结
先说一下割点跟割边吧. 割桥就是如果一个连通图里删除这条边之后,这个图会变成两个连通图,那么这条边就称之为割桥. 这是割桥的代码,里面呆着lca求法. 割点和割桥的就是用一个时间戳和回到祖先确定. 用 ...
- jquery 获取点击事件的id;jquery如何获取当前触发事件的控件ID值
写html时这样绑定 <input type="text" name="address4" id="address4" onFocus ...
- smarty分页模板(用模板语法写分页)
分页是一个我们经常要用到的.比较基本的小功能,你可以通过定义一个方法或类来对它进行封装.重用.而本文则是通过利用smarty独有的语法,以模版的方式进行封装,从而达到同样的目的. 下面开始具体实现步骤 ...
- 【转】Windows Server 2008 以上服务器配置SMTP
建立 SMTP 伺服器 [除非特別說明,否則本主題中的內容適用於 BizTalk Server 2013 和 2013 R2.]原文链接:https://msdn.microsoft.com/zh-t ...
- Servlet的页面跳转
Servlet的跳转 内部跳转 req.getRequestDispatcher() Server--->AServlet--->BServlet 两个S ...
- poj 1236 Network of Schools(强连通、缩点、出入度)
题意:给出一个有向图.1:问至少选出多少个点,才能沿有向边遍历所有节点.2:问至少加多少条有向边,使原图强连通. 分析:第一个问题,缩点后找所有树根(入度为0).第二个问题,分别找出入度为0和出度为0 ...
- HDU 5358 First One 求和(序列求和,优化)
题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...
- DelegatingFilterProxy
安全过滤器链 Spring Security的web架构是完全基于标准的servlet过滤器的. 它没有在内部使用servlet或任何其他基于servlet的框架(比如spring mvc), 所以它 ...
- 安装Oracle 11g RAC R2 之Linux DNS 配置
Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集 ...
- Word排版成树形结构技巧
初始文字 A A1 A2 B1 B1 B2 C C1 希望效果 关健设置