是否可以使用 MediaCodec API 解密和解码数据?我想解密和解码由 Widevine 或其他 DRM 机制加密的数据。我想尝试的基本事情是我用 Surface 配置了 MediaCodec,它是从 SurfaceTexure 创建的。
MediaCodec->configure(..????., with mediacrypto instance, ...)
我不确定在这种情况下是否可以通过 SurfaceTexture?或者我应该做的任何安全配置?
MediaCodec->start()
MediaCodec->queuesecureinputbuffer(...,with cryptoinfo,...)
MediaCodec->dequeoutputbuffer() to get the decoded data back....
我能找到的示例是直接将解密的数据渲染到 SurfaceView 上。
但我只想获取解码后的缓冲区或由 MediaCodec 呈现的 SurfaceTexture。
如果我没有设置任何安全配置,例如MediaFormat->SetFeatureEnabled("secure-playback", true)
;使用 OMX.qcom.video.decoder.avc 创建解码器。我会收到这样的错误,
E/OMX-VDEC-1080P(23290):
E/OMX-VDEC-1080P(23290): ERROR: Sending OMX_EventError to Client
E/ (23290): not in avi mode
E/ACodec ( 1930): [OMX.qcom.video.decoder.avc] ERROR(0x80001009)
E/ACodec ( 1930): signalError(omxError 0x80001009, internalError -2147483648)
E/MediaCodec( 1930): Codec reported err 0x80001009, actionCode 0, while in state 6
W/System.err( 1930): java.lang.IllegalStateException
W/System.err( 1930): at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
W/System.err( 1930): at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1033)
一旦我设置了安全配置并使用 MediaCodec::CreateByCodecName( 附加了“.secure”) 我会得到这种错误......
E/ACodec: native window could not be authenticated
E/ACodec: Failed to allocate buffers after transitioning to IDLE state (error 0xffffffff)
E/ACodec: signalError(omxError 0x80001001, internalError -1)