可以强制AVFoundation播放本地.ts文件吗?

时间:2011-04-12 22:13:38

标签: ios macos avfoundation avplayer http-live-streaming

显然,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!

2 个答案:

答案 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。