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

很显然,AVFoundation(和QuickTime X)可以解复用并正确播放.ts容器,因为.ts容器支持HTTPS直播。

设置一个本地web服务来服务.m3u8和相关的.ts文件,我真的很希望能够:说服AVURLAsset和/或URLAssetWithURL接受本地文件.m3u8 URI,就像它是一个HTTP URI,或者更好的是,能够使用AVQueuePlayer来加载和播放一系列.ts文件,而无需跳过直播的AVQueuePlayer

我想这样做的原因是,我需要在某种程度上零星地在本地生成电影资产 – 整个资产将不会一次提供,而是随着时间的stream逝而产生。 显然,这适用于AVQueuePlayer但由于各种原因,我的资产片段被打包在.ts容器中。 这听起来像是“本地”直播的完美select。

我怀疑URLAssetWithURL会对传递给它的string进行一些限定,然后设置一些属性来表明它正在查看一个实时stream媒体源,这个媒体stream反过来告诉AVPlayer / AVQueuePlayer期望以.tsformsAVQueuePlayer音轨。 它可能会看到HTTP,并决定这是直播。

所以我的问题是:如何“愚弄”AVFoundation到处理一个本地.m3u8文件完全一样远程?

奖金的问题是:有没有人(如果是这样的话)能够从.ts文件创buildAVAsset ,以便资产返回资产轨道的状态(准备播放)?

TIA!

这个问题在很长一段时间也是令我们烦恼的。 我们终于决定编写一个工具将ts列表转换为mp4文件。 它包括使用TSDemux解复用和连接video/audio,然后用GPAC生成mp4文件。

它确实回答你的问题,但它可能是一种做你想做的事的方法。 这个工具在Github上,可以试试: https : //github.com/Keemotion/TS2MP4

你可以直接从底层的ts文件创buildAVURLAssets,直接播放它们,就像播放mov或mp4文件一样。

每个ts文件都有一些开销,所以你最好的办法是简单地把这些文件放入一个大的ts文件(根据你的m3u8的内容),然后播放这个大文件。

有几个小问题:使用基于ts文件的AVAsset构build的AVComposition是饥饿的内存,所以避免AVCompositions除了小文件。 您不能在参考影片中使用基于ts文件的AVAssets。