AVSampleBufferAttachContentKey 不起作用,为什么?

问题描述 投票:0回答:0

我正在尝试通过 VideoToolbox 播放受保护的 h264 流。但是,当我尝试通过

AVContentKey
CMSampleBuffer
绑定到
AVSampleBufferAttachContentKey(::)
时,我得到一个错误:

Error Domain=AVFoundationErrorDomain Code=-11836 "Cannot Open" UserInfo={NSLocalizedFailureReason=This app is not authorized to play this file., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x28303a220 {Error Domain=NSOSStatusErrorDomain Code=-12161 "(null)"}}
我的步骤:

首先,我从 hls 流中取出第一个 ts 片段,并通过 ffmpeg 拉出 h264 轨道:


ffmpeg -i test.ts -vbsf h264_mp4toannexb -vcodec copy -an test.h264

我将生成的 h264 文件传输到试图复制它的 iOS 应用程序。格式处理的基本逻辑取自答案这里,简单的用swift写的,加上FairPlay模块的绑定

FairPlay 模块已初始化并正常工作,作为其工作的结果,我得到了

AVContentKey
。如果转成AVPlayer,用原来的hls流运行,就可以播放了。

我对发生的事情有一些想法,但我不知道如何确认或反驳它们:

  1. 这在一般情况下是不可能的。没有确切的使用说明

    AVSampleBufferAttachContentKey(::)
    ,但也许它不打算与FairPlay加密一起使用,因为那里还有其他使用格式
    AVContentKey
    同时,在文档中它明确涉及类别FairPlayStreaming

  2. 导出 h264 格式时缺少一些重要的东西。尽管 Specification 表明加密仅发生在特定的 Nalu 块中,并且在每个块的开头,加密向量被重置为初始值,但 cbc 暗示当前加密块对前一个加密块的依赖性。如果在解复用阶段遗漏了某些关键段,解密可能会出错。

  3. 我需要

    VTDecompressionSession
    CMVideoFormatDescription
    的一些额外设置。有很多标志和微妙的参数,应该设置哪些并不明显。现在基本配置已经配置好,可以很好地解码未受保护的流。

我错过了什么?为什么它不起作用?

ios h.264 http-live-streaming video-toolbox fairplay
© www.soinside.com 2019 - 2024. All rights reserved.