参考:https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.javaEncodeDecodeMux - 三星设备 - 测试在S6 Edge和S5
我使用上面的代码进行编码/解码/ MUX为了使视频分辨率较低和比特率。 它的工作完全正确的所有决议,包括nexus5,LG G3,1加4K视频。
但是,三星设备显示不适当的行为。
如果我把4k视频(3840x2160)作为输入并想将分辨率降低到1920x1080,我会得到例外。
如果我以4k视频(3840x2160)作为输入并想将其分辨率降低到1280x720,我仍然会得到例外。
如果我将目标分辨率设置为640x360,它可以很好地工作。
我认为这可能与三星设备上的编解码器问题有关。
以下是代码片段
MediaCodec encoder = MediaCodec.createByCodecName(codecInfo.getName());
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
surfaceReference.set(encoder.createInputSurface());
encoder.start();
MediaCodec decoder = MediaCodec.createDecoderByType(getMimeTypeFor(inputFormat));
decoder.configure(inputFormat, surface, null, 0);
decoder.start();
下列语句,异常
decoder.configure(inputFormat, surface, null, 0);
以下是堆栈跟踪
I/ACodec: [OMX.Exynos.AVC.Encoder] Now Executing
03-15 14:35:23.801 25357-26008/com.test I/ACodec: [] Now uninitialized
03-15 14:35:23.801 25357-26036/com.test I/OMXClient: Using client-side OMX mux.
03-15 14:35:23.811 25357-26036/com.test I/ACodec: can't find wfdsink-exynos-enable
03-15 14:35:23.811 25357-26036/com.test E/ACodec: configureCodec multi window instance fail appPid : 25357
03-15 14:35:23.811 25357-26036/com.test E/ACodec: [OMX.Exynos.avc.dec] configureCodec returning error -1021
03-15 14:35:23.811 25357-26036/com.test E/ACodec: signalError(omxError 0x80001001, internalError -1021)
03-15 14:35:23.811 25357-26035/com.test E/MediaCodec: Codec reported err 0xfffffc03, actionCode 0, while in state 3
03-15 14:35:23.811 25357-26008/com.test E/MediaCodec: configure failed with err 0xfffffc03, resetting...
03-15 14:35:23.811 25357-26036/com.test I/ACodec: [OMX.Exynos.avc.dec] Now uninitialized
03-15 14:35:23.811 25357-26008/com.test I/ACodec: [] Now uninitialized
03-15 14:35:23.811 25357-26036/com.test I/OMXClient: Using client-side OMX mux.
三星总是一场斗争。祝你好运! –
可能是硬件限制,例如编解码器部分的带宽不足以处理4K解码和720p编码。该错误消息通常是无益的。 – fadden
您是否找到了解决此问题的解决方案? –