2017-03-16 42 views
0

有没有人有过使用带有Fairplay的HLS的经验,并成功地检索了像素缓冲区?我正在使用AVURLAsset及其resourceLoader代表组。我的AVAssetResourceLoaderDelegate负责处理Fairplay流程。FairPlay Streaming:在AVPlayerItemVideoOutput上调用copyPixelBufferForItemTime返回NULL

它显示罚款的AVPlayerLayer,但是,当我尝试使用连接到AVPlayerItemAVPlayerItemVideoOutput并在其上使用copyPixelBufferForItemTime,该pixelBuffer返回始终是NULL。

另一方面,当我使用非加密流而不使用resourceLoader时,copyPixelBufferForItemTime会按预期返回像素缓冲区。

这是通过按预期工作? (即使用FairPlay保护的数据流不会暴露它们的像素缓冲区以防止误操作)。

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

回答

0

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

  • 我测试了完全相同的流而没有加密,copyPixelBufferForItemTime返回像素缓冲区的引用,如预期的那样。
  • 我已经在AVPlayerLayer上测试了完全相同的流加密,它将视频显示为例外。

看来,一旦您使用FairPlay,显示受保护的视频内容的唯一方法是使用AVPlayerLayer。例如,今天似乎没有办法从Apple的API中检索FairPlay保护的HLS媒体,以便在3D空间中将其显示在OpenGL纹理上。

答:copyPixelBufferForItemTime是因为上AVPlayerLayer调用renderInContext不起作用

唯一的出口点
相关问题