Android MediaCodec:多个SurfaceView支持多少同步(视频)解码线程?

Android MediaCodec:多个SurfaceView支持多少同步(视频)解码线程?,android,android-mediacodec,Android,Android Mediacodec,从project中,文件DoubleDecodeActivity.java。我在3个SurfaceView上使用MediaCodec API尝试了3个同步视频(h264)解码器。将第四个解码器添加到第四个SurfaceView时,Android 5.1版的Nexus 7崩溃,那么可能或支持多少个同步解码器 另外,在这次崩溃之后,MediaCodec不再工作了。需要重新启动设备才能使用MediaCodec 下面是崩溃日志。第四个解码器线程的decoder.start()函数崩溃 com.examp

从project中,文件DoubleDecodeActivity.java。我在3个SurfaceView上使用MediaCodec API尝试了3个同步视频(h264)解码器。将第四个解码器添加到第四个SurfaceView时,Android 5.1版的Nexus 7崩溃,那么可能或支持多少个同步解码器

另外,在这次崩溃之后,MediaCodec不再工作了。需要重新启动设备才能使用MediaCodec

下面是崩溃日志。第四个解码器线程的
decoder.start()
函数崩溃

com.example.app.one V/DecodeActivity: Mime: video/avc
com.example.app.one I/OMXClient: Using client-side OMX mux.
com.example.app.one V/DecodeActivity: Mime: video/avc
com.example.app.one I/OMXClient: Using client-side OMX mux.
com.example.app.one V/DecodeActivity: Mime: video/avc
com.example.app.one E/ACodec: [OMX.qcom.video.decoder.avc] storeMetaDataInBuffers failed w/ err -2147483648
com.example.app.one E/ACodec: [OMX.qcom.video.decoder.avc] storeMetaDataInBuffers failed w/ err -2147483648
com.example.app.one W/ACodec: do not know color format 0x7fa30c03 = 2141391875
com.example.app.one W/ACodec: do not know color format 0x7fa30c03 = 2141391875
com.example.app.one I/OMXClient: Using client-side OMX mux.
com.example.app.one V/DecodeActivity: Mime: video/avc
com.example.app.one I/OMXClient: Using client-side OMX mux.
com.example.app.one E/ACodec: [OMX.qcom.video.decoder.avc] storeMetaDataInBuffers failed w/ err -2147483648
com.example.app.one E/ACodec: [OMX.qcom.video.decoder.avc] storeMetaDataInBuffers failed w/ err -2147483648
com.example.app.one W/ACodec: do not know color format 0x7fa30c03 = 2141391875
com.example.app.one W/ACodec: do not know color format 0x7fa30c03 = 2141391875
com.example.app.one E/ACodec: registering GraphicBuffer 9 with OMX IL component failed: -2147483648
com.example.app.one V/PlayerFromFileThread: inputBuffer not available.
com.example.app.one E/ACodec: Failed to allocate buffers after transitioning to IDLE state (error 0x80000000)
com.example.app.one E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
com.example.app.one V/PlayerFromFileThread: inputBuffer not available.
com.example.app.one E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 5
? E/ACodec: registering GraphicBuffer 4 with OMX IL component failed: -2147483648
? E/AndroidRuntime: FATAL EXCEPTION: Thread-485
                                                   Process: com.example.app.one, PID: 17143
                                                   android.media.MediaCodec$CodecException: start failed
                                                       at android.media.MediaCodec.native_start(Native Method)
                                                       at android.media.MediaCodec.start(MediaCodec.java:612)
                                                       at com.example.app.one.MainActivity$PlayerFromFileThread.run(MainActivity.java:1921)
? E/ACodec: Failed to allocate buffers after transitioning to IDLE state (error 0x80000000)
? E/ACodec: signalError(omxError 0x80001001, internalError -2147483648)
? E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 5

这有点定义不清

在API 23中添加了MediaCodeInfo方法,该方法大胆宣称,“这是一个上限提示。”

严格定义此值的问题在于,硬件实例的数量可能受到带宽要求的限制,而不是固定的值。因此,您可能能够解码两个720p流,但只能解码一个1080p流

在许多设备上,如果硬件无法支持您的请求,OMX将切换到软件解码器,例如,一个较旧的Nexus设备将允许您使用硬件编解码器解码两个流,然后开始分发软件编解码器实例


getMaxSupportedInstances()
调用试图提供额外的信息,但据我所知,仍然需要对每个设备进行一些尝试和错误,以确定设备的确切功能。

我注意到,在我的设备上,我一次只能解码一个1080p流,除非输入视频是用FFmpeg编码的。这让我怀疑它是否与输入视频的编码方式有关。所有设备都是这样吗?