MediaCodec 创建输入表面

9

我想使用MediaCodec将一个Surface编码成H.264格式。

从API 18开始,可以通过调用createInputSurface()方法并在该表面上绘制来编码表面内容。

当我调用createInputSurface()时,会出现IllegalStateException异常。以下是额外的logcat输出:

D/H264Encoder(17570): MediaFormat: {frame-rate=25, bitrate=1000000, height=600, mime=video/avc, color-format=19, i-frame-interval=75, width=800}
D/NvOsDebugPrintf(  125): NvMMLiteOpen : Block : BlockType = 4 
D/NvOsDebugPrintf(  125): NvRmPowerModuleClockControl on MOD[29] INST[0]
D/NvOsDebugPrintf(  125): NvRmModuleResetWithHold deassert MOD[29] INST[0]
D/NvOsDebugPrintf(  125): NvMMLiteBlockCreate : Block : BlockType = 4 
I/ACodec  (17570): setupVideoEncoder succeeded
E/OMXNodeInstance(  125): OMX_EnableAndroidNativeBuffers failed with error -2147479547 (0x80001005)
E/OMXNodeInstance(  125): createInputSurface requires AndroidOpaque color format
E/ACodec  (17570): [OMX.Nvidia.h264.encoder] onCreateInputSurface returning error -38
W/MediaCodec(17570): createInputSurface failed, err=-38

了解新API的工作原理会很有帮助。

1个回答

8
重要的错误信息如下:
createInputSurface requires AndroidOpaque color format

对于Surface输入,必须将颜色格式设置为COLOR_FormatSurface(也称为AndroidOpaque)。

请参阅此处的示例,特别是EncodeAndMuxTest。


谢谢,这帮了我很多!我以为它与此有关,但在AndroidOpaque上找不到任何东西。 - Broatian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接