有没有人曾在Fairplay上使用HLS并成功检索像素缓冲区?

我正在使用AVURLAsset委托集的resourceLoader。我的AVAssetResourceLoaderDelegate负责处理Fairplay流程。

它在AVPlayerLayer上显示正常,但是,当我尝试使用附加到AVPlayerItemVideoOutputAVPlayerItem并在其上使用copyPixelBufferForItemTime时,返回的pixelBuffer始终为NULL。

另一方面,当我使用非加密流而不使用resourceLoader时,copyPixelBufferForItemTime返回预期的pixelbuffer。

这是按预期工作吗? (即,受FairPlay保护的流不会公开其像素缓冲区以防止误用。)

如果没有,是否有任何方法可以从iOS上使用FairPlay保护的流中获取像素缓冲区?

最佳答案

在进一步研究了这个问题之后,我得出的结论是,苹果对AVPlayer进行了设计,使您一旦使用FairPlay保护的HLS,解密数据copyPixelBufferForItemTime的唯一退出点(请参阅A :)始终返回nil。

  • 我已经测试了完全相同的流而不进行加密,并且copyPixelBufferForItemTime按预期返回了对像素缓冲区的引用。
  • 我已经在AVPlayerLayer上使用加密测试了完全相同的流流,并且将视频显示为例外。

  • 看来,一旦使用FairPlay,显示受保护的视频内容的唯一方法就是使用AVPlayerLayer。到目前为止,似乎还没有办法从Apple的API中检索受FairPlay保护的HLS媒体,以使其在3D空间中的OpenGL纹理上显示。

    答:copyPixelBufferForItemTime是唯一的退出点,因为在AVPlayerLayer上调用renderInContext不起作用

    10-05 22:06