为了从HLS中提取原始CMSampleBufferRef (用于重新编码视频),我尝试使用AVAssetReader读取HLS流(.m3u8文件)。由于AVAssetReader不支持直接从网络流中读取数据,因此我尝试先将HLS m3u8索引文件中列出的.ts文件下载到本地驱动器,然后使用AVAssetReader重新读取。但是,当我尝试使用AVAssetReader打开.ts文件时,收到错误消息“不支持此媒体格式”(错误Domain=AVFoundationErrorDomain代码=-11828“无法打开”UserInfo=0x7fd3aa723570 {不支持NSLocalizedFailureReason=This媒体格式)。
谁知道AVAssetReader是否支持从本地驱动器读取.ts (mpeg2传输流)?如果没有,有没有其他方法可以从HLS流中创建/提取CMSampleBufferRef?谢谢!
发布于 2015-05-13 08:11:56
据我所知,情况并非如此。然而,手动从TS中提取音频和视频流似乎相当简单。来自WWDC2014的WWDC session 513在VideoToolkit上有一个很棒的会议,而且碰巧也在高层次上讨论了复用/解复用TS。也许我遗漏了一些东西,但是看起来你只需要把前两个数据块提取出来,然后从它们中创建一个CMVideoFormatDescriptionRef,然后把后面的NAL单元的起始代码改成一个长度头,然后把它们直接输入到VTDecompressionSession中。This answer详细介绍了这些步骤。
https://stackoverflow.com/questions/26695998
复制相似问题