有没有人有使用HLS与Fairplay并成功检索像素缓冲区的经验?
我正在使用其AVURLAsset
代理集resourceLoader
。我的AVAssetResourceLoaderDelegate
负责处理Fairplay流程。
它在AVPlayerLayer
上显示正常,但是,当我尝试使用附加到AVPlayerItemVideoOutput
并在其上使用AVPlayerItem
的{{1}}时,pixelBuffer返回永远是NULL。
另一方面,当我使用非加密流而不使用resourceLoader时,copyPixelBufferForItemTime会按预期返回pixelbuffer。
这是按预期工作吗? (即使用FairPlay保护的流不会暴露其像素缓冲区以防止误用。)
如果没有,有没有办法从iOS上使用FairPlay保护的流中获取像素缓冲区?
答案 0 :(得分:0)
在进一步研究这个问题之后,我得出结论,Apple设计了他们的AVPlayer,一旦你使用FairPlay保护的HLS,唯一的退出点(见A :)就解密数据copyPixelBufferForItemTime
总是返回零。
copyPixelBufferForItemTime
按预期返回对像素缓冲区的引用。看来,一旦您使用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