置顶感谢:
https://www.jianshu.com/p/4b15f79cdc33
https://www.jianshu.com/p/75aa645531d2
首先声明,我对m3u8和ts视频文件和视频播放流媒体相关的知识并不懂。我写这个博客只是为了记录一下我开发中遇到的问题和我的解决思路,如果能帮到你就更好了。
我的需求
开会时提到,应用中已有直播功能,需要做直播回放。后台初始计划返回ts 文件的完整地址(http://xxxxxxx.ts)列表样式。一头雾水,跳进百度谷歌开始各种查。下面是我查到的我认为有效的信息。
资料查询
m3u8这个文件可以用你可以下载下来,用txt格式打开看下,基本上文件并不大,打开来看就是一个列表,除去开头的和结尾的一些信息以外,中间部分的意思就是某个ts文件(一般用的都是相对路径)有多久的播放时长,m3u8相当于把这些片段连起来,构成一个完整的视频。
所以,对于当前项目的需求的话,解决思路就是通过后台提供的ts文件路径表,我在App端创建一个m3u8文件,然后根据m3u8的格式,创建一个字符串写入到m3u8文件中。然后,用播放器去播放本地的m3u8文件。至此,我以为可以,但是并没有播放出来。
尝试方案:
先列出来我的尝试方案:
1.本地创建m3u8文件,文件中写入头尾数据和ts播放列表(相对路径)。 结果:失败(原因:播放器读取这个m3u8 文件之后,根本找不到ts文件,肯定播放失败);
2.本地创建m3u8 文件,文件中写入头尾数据和ts播放列表(完整路径)。结果:失败(具体原因不详);
3.本地创建m3u8 文件,并且把ts文件下载到和m3u8 同一个文件夹下,m3u8 文件中写入头尾数据和ts播放列表(相对路径)。结果:失败(具体原因不详,但是应该和尝试方案2原因类似)。
大致尝试了以上三种方案,均以失败告终,于是又跳进百度谷歌各种查,发现这篇博客。需要搭载一个本地服务器,我的尝试方案2哥方案3好像就缺少了这个环节。果真,按照这篇博客的介绍,给我的代码稍作改动,视频播放出来了,大功告成。
结论:
总结:iOS 播放ts文件,需要先根据ts文件名列表生成m3u8文件,(如果m3u8 中放的是ts的相对路径,需要把ts文件下载到和m3u8 同样目录下).在手机本地搭载本地服务,即可播放。方案总结如下:
iOS播放TS文件思路图.png
作者:极客飞
链接:https://www.jianshu.com/p/fcdbeb055744