为了从 HLS 实时流中提取原始 CMSampleBufferRef(用于重新编码视频),我正在尝试使用 AVAssetReader 来读取 HLS 流(.m3u8 文件)。由于 AVAssetReader 不支持直接从网络流读取,因此我尝试先将 HLS m3u8 索引文件中列出的 .ts 文件下载到本地驱动器,然后使用 AVAssetReader 将其读回。但是,当我尝试使用 AVAssetReader 打开 .ts 文件时,我收到错误“不支持此媒体格式”(错误域=AVFoundationErrorDomain Code=-11828“无法打开”UserInfo=0x7fd3aa723570 {NSLocalizedFailureReason=此媒体格式是不支持)。
有谁知道 AVAssetReader 是否支持从本地驱动器读取 .ts(mpeg2 传输流)?如果没有,还有其他方法可以从 HLS 流中创建/提取 CMSampleBufferRef 吗?谢谢!
Best Answer-推荐答案 strong>
据我所知,没有。但是,手动从 TS 中提取音频和视频流似乎相当简单。 WWDC2014 的 WWDC session 513 有一个关于 VideoToolkit 的精彩 session ,并且恰好在高层次上讨论了复用/解复用 TS。也许我遗漏了一些东西,但似乎您可以只获取前两个数据 block 并从中提取 PPS 和 SPS,从中创建一个 CMVideoFormatDescriptionRef,然后只需将以下 NAL 单元中的起始代码更改为长度 header ,只需将它们直接输入 VTDecompressionSession。 This answer详细介绍这些步骤。
或者,这里是 a CocoaPod that remuxes TS2 into MP4 .
关于ios - 使用 AVAssetReader 读取 HLS .ts 段,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/26695998/
|