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

问题描述

| 显然,AVFoundation(和Quicktime X)可以解复用并播放正确编码的“ 0”容器,因为“ 0”容器根本是HTTPS实时流式传输。 缺少设置本地Web服务来服务
.m3u8
和关联的
.ts
文件的方法,我真的很想能够:使
AVURLAsset
和/或
URLAssetWithURL
接受本地文件
.m3u8
URI,就像它是HTTP URI,甚至更好的是,能够使用
AVQueuePlayer
加载和播放
.ts
个文件序列,而无需跳过实时流式传输箍。 我想要这样做的原因是,我需要以某种零碎的方式在本地即时生成电影资产-整个资产不会立即可用,而是随着时间的流逝而生成。显然,这很适合
AVQueuePlayer
,但是由于各种原因,我的资产片段被包装在了
.ts
容器中。所有这些听起来都非常适合“本地”实时流式传输。 我怀疑
URLAssetWithURL
对传递给它的字符串做了一定的限定,然后设置一些属性来表示它正在查看实时流媒体源,这反过来又使
AVPlayer
/
AVQueuePlayer
期望以
.ts
形式出现。它可能会看到HTTP并确定这是实时流。 所以我的问题是:如何“欺骗” AVFoundation完全像处理远程文件一样处理本地
.m3u8
文件? 奖励问题是:有没有人(如果能,那么如何)从
.ts
文件中取出
AVAsset
,以便资产返回资产轨道的状态(准备播放)? TIA!     

解决方法

这个问题在很长一段时间内也使我们感到困扰。我们最终决定编写一个工具,将ts列表转换为mp4文件。它包括使用TSDemux对视频/音频进行解复用和连接,然后使用GPAC生成mp4文件。 它确实回答了您的问题,但它可能是您想做的一种方式。 该工具位于Github上,随时尝试:https://github.com/Keemotion/TS2MP4     ,实际上,您可以直接从基础ts文件创建AVURLAssets,然后直接播放它们,这与播放mov或mp4文件的方式非常相似。 每个ts文件都有一些开销,因此,最好的选择是将文件简单地分类为一个大ts文件(基于m3u8的内容),然后播放该大文件。 有两个陷阱:使用基于ts文件的AVAsets构造的AVCompositions占用大量内存,因此请避免将AVCompositions除小文件之外。您不能在参考影片中使用基于ts文件的AVAsets。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...