显然,AVFoundation (和Quicktime )可以解析并播放正确编码的.ts容器,因为HTTPS下的.ts容器是实时流的。
除了设置本地web服务以服务.m3u8和相关的.ts文件之外,我真的希望能够做到这一点:说服AVURLAsset和/或URLAssetWithURL接受本地文件.m3u8 URI,就好像它是HTTP一样,或者更好的是,能够使用AVQueuePlayer加载和播放一系列.ts文件,而不需要跳过实时流圈。
我之所以想这么做,是因为我需要以一种零碎的方式在本地实时生成电影资产--所有的资产都不会立即获得,但会随着时间的推移而产生。显然,这有助于AVQueuePlayer,但是由于各种原因,我的资产片段被打包在.ts容器中。所有这些听起来都是“本地”直播的完美选择。
我怀疑URLAssetWithURL对传递给它的字符串做了一些限定,然后设置了一些属性来表示它正在查看一个实时流源,这反过来告诉AVPlayer/AVQueuePlayer期待.ts格式的曲目。它可能会看到HTTP,并决定这是实时流。
因此,我的问题是:如何“欺骗”AVFoundation来处理本地.m3u8文件,就像处理远程.m3u8文件一样?
还有一个额外的问题:是否有人(如果是的话)能够从一个AVAsset文件中生成一个.ts,以便资产返回资产的轨道状态(准备回放)?
蒂娅!
发布于 2014-02-28 16:13:20
很长一段时间以来,这个问题对我们来说也很烦人。我们最终决定编写一个工具,将ts列表转换为mp4文件。它包括使用TSDemux来解析视频/音频,然后用GPAC生成一个mp4文件。
它确实回答了你的问题,但它可能是你想做的事情的一种方式。这个工具在Github上,请随意尝试:https://github.com/Keemotion/TS2MP4
发布于 2017-04-06 01:34:32
实际上,您可以直接从基础ts文件创建AVURLAssets,并直接播放这些文件,非常类似于播放mov或mp4文件的方式。
每个ts文件都有一些开销,所以最好的方法是将这些文件放在一个大的ts文件中(基于m3u8的内容),然后播放这个大文件。
有几个问题:使用基于ts文件的AVCompositions构建的AVAssets需要内存,因此除了小文件之外,不要使用AVCompositions。不能在参考电影中使用基于ts文件的AVAssets。
https://stackoverflow.com/questions/5642248
复制相似问题