FairPlay Streaming:在AVPlayerItemVideoOutput上调用copyPixelBufferForItemTime返回NULL

时间:2017-03-16 16:35:19

标签: ios hls fairplay

有没有人有使用HLS与Fairplay并成功检索像素缓冲区的经验?

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

它在AVPlayerLayer上显示正常,但是,当我尝试使用附加到AVPlayerItemVideoOutput并在其上使用AVPlayerItem的{​​{1}}时,pixelBuffer返回永远是NULL。

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

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

如果没有,有没有办法从iOS上使用FairPlay保护的流中获取像素缓冲区?

2 个答案:

答案 0 :(得分:0)

在进一步研究这个问题之后,我得出结论,Apple设计了他们的AVPlayer,一旦你使用FairPlay保护的HLS,唯一的退出点(见A :)就解密数据copyPixelBufferForItemTime总是返回零。

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

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

答:copyPixelBufferForItemTime是自AVPlayerLayer上调用renderInContext以来唯一的退出点

答案 1 :(得分:0)

在将AVURLAsset与resourceLoader委托集一起使用时,我遇到了相同的问题。与您的情况不同,有两种实时流式解密内容,其中一种可以检索像素缓冲区,而另一种则不能。我不确定它是否与m3u8文件的内容有关。

可以检索像素缓冲区并获取缩略图的内容。

#EXTM3U
#EXT-X-VERSION:2
#EXT-X-KEY:METHOD=AES-128,URI="http://xxx.xxxx.net/key/xxx",IV=0xxxx
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:11601809
#EXTINF:10, no desc
#EXT-X-PROGRAM-DATE-TIME:2019-05-28T11:00:10Z
stream_index_20190331T232744_1_11601809.ts
#EXTINF:10, no desc
#EXT-X-PROGRAM-DATE-TIME:2019-05-28T11:00:20Z
stream_index_20190331T232744_1_11601810.ts

无法检索像素缓冲区的内容

#EXTM3U
#EXT-X-VERSION:8
#EXT-X-INDEPENDENT-SEGMENTS

#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audiod",NAME="en",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",URI="Audio3_2.m3u8"

#EXT-X-STREAM-INF:BANDWIDTH=3000000,AVERAGE-BANDWIDTH=3000000,VIDEO-RANGE=PQ,CODECS="dvh1.05.06",RESOLUTION=1920x1080,FRAME-RATE=50.000,AUDIO="audiod",CLOSED-CAPTIONS=NONE,HDCP-LEVEL=TYPE-1
Video1_1.m3u8