显然,AVFoundation(和Quicktime X)可以解复用并播放正确编码的.ts
容器,因为.ts
个容器支持HTTPS直播。
如果没有设置本地网络服务来提供.m3u8
和相关的.ts
文件,我真的希望能够:说服AVURLAsset
和/或{{ 1}}接受本地文件URLAssetWithURL
URI就好像它是一个HTTP URI,或者更好的是,能够使用.m3u8
加载和播放一系列AVQueuePlayer
文件而不跳转通过直播篮球。
我之所以要这样做,是因为我需要以一种零碎的方式在本地生成电影资产 - 整个资产不会立即可用,但会随着时间的推移而生成。显然,这适用于.ts
但由于各种原因,我的资产片段被打包在AVQueuePlayer
个容器中。所有这些听起来都非常适合“本地”直播。
我怀疑.ts
会对传递给它的字符串进行一些限定,然后设置一些属性来表明它正在查看实时流媒体源,而后者又会告诉URLAssetWithURL
/ AVPlayer
期待AVQueuePlayer
形式的曲目。它可能会看到HTTP并确定这是实时流式传输。
所以我的问题是:如何将“AVFoundation”“愚弄”到处理本地.ts
文件的方式与远程文件完全相同?
奖金问题是:是否有人(如果是这样的话)能够从.m3u8
文件中制作AVAsset
,以便资产返回资产轨道的状态(准备好播放)?
TIA!
答案 0 :(得分:8)
很长一段时间,这个问题对我们来说也很烦人。我们最终决定编写一个工具来将ts列表转换为mp4文件。它包括使用TSDemux解复用和连接视频/音频,然后使用GPAC生成mp4文件。
它确实回答了你的问题,但它可能是你想做的事情的一种方式。 此工具在Github上,您可以尝试:https://github.com/Keemotion/TS2MP4
答案 1 :(得分:0)
您实际上可以直接从底层ts文件创建AVURLAssets,并直接播放它们,与播放mov或mp4文件的方式非常相似。
每个ts文件都有一些开销,所以最好的办法是简单地将文件合并到一个大的ts文件中(根据你的m3u8的内容),并播放那个大文件。
有几个问题:使用基于ts文件的AVAssets构建的AVCompositions是内存饥饿,因此避免AVCompositions与小文件分开。您不能在参考影片中使用基于ts文件的AVAssets。