菜鸟教程小白 发表于 2022-12-13 03:00:17

ios - 使用 AVAssetReader 读取 HLS .ts 段


                                            <p><p>为了从 HLS 实时流中提取原始 CMSampleBufferRef(用于重新编码视频),我正在尝试使用 AVAssetReader 来读取 HLS 流(.m3u8 文件)。由于 AVAssetReader 不支持直接从网络流读取,因此我尝试先将 HLS m3u8 索引文件中列出的 .ts 文件下载到本地驱动器,然后使用 AVAssetReader 将其读回。但是,当我尝试使用 AVAssetReader 打开 .ts 文件时,我收到错误“不支持此媒体格式”(错误域=AVFoundationErrorDomain Code=-11828“无法打开”UserInfo=0x7fd3aa723570 {NSLocalizedFailureReason=此媒体格式是不支持)。</p>

<p>有谁知道 AVAssetReader 是否支持从本地驱动器读取 .ts(mpeg2 传输流)?如果没有,还有其他方法可以从 HLS 流中创建/提取 CMSampleBufferRef 吗?谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>据我所知,没有。但是,手动从 TS 中提取音频和视频流似乎相当简单。 WWDC2014 的 WWDC session 513 有一个关于 VideoToolkit 的精彩 session ,并且恰好在高层次上讨论了复用/解复用 TS。也许我遗漏了一些东西,但似乎您可以只获取前两个数据 block 并从中提取 PPS 和 SPS,从中创建一个 CMVideoFormatDescriptionRef,然后只需将以下 NAL 单元中的起始代码更改为长度 header ,只需将它们直接输入 VTDecompressionSession。 <a href="https://stackoverflow.com/a/28491746/48125" rel="noreferrer noopener nofollow">This answer</a>详细介绍这些步骤。</p>

<p>或者,这里是 <a href="https://github.com/Keemotion/TS2MP4" rel="noreferrer noopener nofollow">a CocoaPod that remuxes TS2 into MP4</a> .</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 AVAssetReader 读取 HLS .ts 段,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26695998/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26695998/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 AVAssetReader 读取 HLS .ts 段