为了从HLS Live Stream中提取原始CMSampleBufferRef(用于重新编码视频),我正在尝试使用AVAssetReader来读取HLS流(.m3u8文件)。由于AVAssetReader不支持直接从网络流中读取,因此我首先尝试将HLS m3u8索引文件中列出的.ts文件下载到本地驱动器,然后使用AVAssetReader将其读回。但是,当我尝试使用AVAssetReader打开.ts文件时,我收到错误“不支持此媒体格式”(错误域= AVFoundationErrorDomain代码= -11828“无法打开”UserInfo = 0x7fd3aa723570 {NSLocalizedFailureReason =此媒体格式为不支持)。
有人知道AVAssetReader是否支持从本地驱动器读取.ts(mpeg2传输流)?如果没有,是否还有其他方法可以从HLS流创建/提取CMSampleBufferRef?谢谢!
答案 0 :(得分:1)
据我所知,事实并非如此。但是,手动从TS中提取音频和视频流似乎相当简单。来自WWDC2014的WWDC会话513在VideoToolkit上有一个很棒的会话,并且恰好谈论了高级别的多路复用/多路分解TS。也许我错过了一些东西,但似乎你可以只取两个第一块数据并从中提取PPS和SPS,从这些创建一个CMVideoFormatDescriptionRef,然后只需将以下NAL单元的起始代码更改为长度标题,直接将这些直接输入VTDecompressionSession。 This answer详细介绍了这些步骤。