FairPlay Streaming:在 AVPlayerItemVideoOutput returns NULL 上调用 copyPixelBufferForItemTime
FairPlay Streaming: Calling copyPixelBufferForItemTime on AVPlayerItemVideoOutput returns NULL
有没有人有过将 HLS 与 Fairplay 一起使用并成功检索像素缓冲区的经验?
我正在使用 AVURLAsset
及其 resourceLoader
委托集。我的 AVAssetResourceLoaderDelegate
负责处理 Fairplay 流程。
它在 AVPlayerLayer
上显示正常,但是,当我尝试使用附加到 AVPlayerItem
的 AVPlayerItemVideoOutput
并在其上使用 copyPixelBufferForItemTime
时,返回的 pixelBuffer 始终为 NULL。
另一方面,当我使用非加密流而不使用 resourceLoader copyPixelBufferForItemTime returns 预期的像素缓冲区时。
这是按预期工作吗? (即使用 FairPlay 保护的流不会暴露其像素缓冲区以防止滥用。)
如果没有,有没有办法从 iOS 上使用 FairPlay 保护的流中获取像素缓冲区?
在进一步研究这个问题之后,我得出的结论是,Apple 设计他们的 AVPlayer 的方式是,一旦你使用 FairPlay 保护 HLS,解密数据的唯一出口点(见 A:)copyPixelBufferForItemTime
总是returns无。
- 我已经测试了没有加密的完全相同的流和
copyPixelBufferForItemTime
returns 对像素缓冲区的引用,如预期的那样。
- 我已经在 AVPlayerLayer 上使用 加密测试了完全相同的流 并且它显示了例外的视频。
看来,一旦您使用 FairPlay,显示受保护视频内容的唯一方法就是使用 AVPlayerLayer
。例如,目前似乎无法从 Apple 的 API 检索 FairPlay 保护的 HLS 媒体,以便在 3D 的 OpenGL 纹理上显示它 space。
答:copyPixelBufferForItemTime
是唯一的退出点,因为在 AVPlayerLayer 上调用 renderInContext
不起作用
我在使用 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
有没有人有过将 HLS 与 Fairplay 一起使用并成功检索像素缓冲区的经验?
我正在使用 AVURLAsset
及其 resourceLoader
委托集。我的 AVAssetResourceLoaderDelegate
负责处理 Fairplay 流程。
它在 AVPlayerLayer
上显示正常,但是,当我尝试使用附加到 AVPlayerItem
的 AVPlayerItemVideoOutput
并在其上使用 copyPixelBufferForItemTime
时,返回的 pixelBuffer 始终为 NULL。
另一方面,当我使用非加密流而不使用 resourceLoader copyPixelBufferForItemTime returns 预期的像素缓冲区时。
这是按预期工作吗? (即使用 FairPlay 保护的流不会暴露其像素缓冲区以防止滥用。)
如果没有,有没有办法从 iOS 上使用 FairPlay 保护的流中获取像素缓冲区?
在进一步研究这个问题之后,我得出的结论是,Apple 设计他们的 AVPlayer 的方式是,一旦你使用 FairPlay 保护 HLS,解密数据的唯一出口点(见 A:)copyPixelBufferForItemTime
总是returns无。
- 我已经测试了没有加密的完全相同的流和
copyPixelBufferForItemTime
returns 对像素缓冲区的引用,如预期的那样。 - 我已经在 AVPlayerLayer 上使用 加密测试了完全相同的流 并且它显示了例外的视频。
看来,一旦您使用 FairPlay,显示受保护视频内容的唯一方法就是使用 AVPlayerLayer
。例如,目前似乎无法从 Apple 的 API 检索 FairPlay 保护的 HLS 媒体,以便在 3D 的 OpenGL 纹理上显示它 space。
答:copyPixelBufferForItemTime
是唯一的退出点,因为在 AVPlayerLayer 上调用 renderInContext
不起作用
我在使用 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