11

显然,AVFoundation(和 Quicktime X)可以解复用和播放正确编码.ts的容器,因为.ts容器是 HTTPS 直播流的基础。

如果没有设置本地 Web 服务来提供相关文件.m3u8和相关.ts文件,我真的希望能够:说服AVURLAsset和/或URLAssetWithURL接受本地文件.m3u8URI,就好像它是 HTTP URI 一样,或者更好的是,能够用于AVQueuePlayer加载和播放一系列.ts文件,而无需跳过实时流箍。

我想要这样做的原因是我需要以某种零散的方式在本地即时生成电影资产 - 整个资产不会立即可用,但会随着时间的推移而生成。显然,这有助于AVQueuePlayer但由于各种原因,我的资产片段被包装在.ts容器中。所有这些听起来都非常适合“本地”直播。

我怀疑URLAssetWithURL是否对传递给它的字符串进行了一些限定,然后设置一些属性来表示它正在查看一个实时流媒体源,这反过来又告诉AVPlayer/AVQueuePlayer期望轨道.ts形式。它可能会看到 HTTP 并决定这是实时流式传输。

所以我的问题是:如何“欺骗” AVFoundation 处理本地.m3u8文件,就像处理远程文件一样?

额外的问题是:有没有人(如果有的话)能够AVAsset.ts文件中制作一个,以便资产返回资产轨道的状态(准备播放)?

蒂亚!

4

2 回答 2

9

这个问题也困扰了我们很长时间。我们最终决定编写一个工具来将 ts 列表转换为 mp4 文件。它包括使用 TSDemux 对视频/音频进行解复用和连接,然后使用 GPAC 生成一个 mp4 文件。

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

于 2014-02-28T16:13:20.967 回答
0

实际上,您可以直接从底层 ts 文件创建 AVURLAssets,然后直接播放这些文件,这与播放 mov 或 mp4 文件的方式非常相似。

每个 ts 文件都有一些开销,所以最好的办法是将文件简单地分类到一个大的 ts 文件中(基于你的 m3u8 的内容),然后播放那个大文件。

有几个问题: 使用基于 ts 文件的 AVAsset 构建的 AVComposition 会占用大量内存,因此除了小文件外,请避免使用 AVComposition。您不能在参考电影中使用基于 ts 文件的 AVAsset。

于 2017-04-06T01:34:32.300 回答