小编Vin*_*emp的帖子

在Android中,如何将预定义的Surface传递给MediaCodec进行编码?

我有一个管理自己的GLSurfaceView的应用程序,现在我想使用Android 4.3的新MediaCodec功能,将Surface作为输入.

在我看过的所有示例中,使用MediaCodec.createInputSurface()创建Surface,然后为此Surface创建GL上下文.对于已经稳定的代码库进行改造,这感觉很单一,并且令人难以置信地具有破坏性.

是否可以使用MediaCodec.configure(format,a_predefined_Surface,null,MediaCodec.CONFIGURE_FLAG_ENCODE)?这允许我以即插即用的方式使用MediaCodec.MediaCodec.configure()采用Surface参数的事实表明这应该是可能的.但是,API指出"指定一个表面,在该表面上呈现此解码器的输出" http://developer.android.com/reference/android/media/MediaCodec.html#configure(android.media.MediaFormat,android). view.Surface,android.media.MediaCrypto,int)这是否意味着这仅用于解码而不是编码?如果是这样,有没有办法让MediaCodec使用预定义的Surface进行编码?

我传入的Surface已经创建,EGL_RECORDABLE_ANDROID设置为true,并且验证返回的GL上下文包含所需的EGL_RECORDABLE_ANDROID属性.尽管如此,MediaCodec.configure()失败并出现无用的异常'native_window_api_connect返回错误:无效的参数(-22)':

I/ACodec(32383):  Now uninitialized
I/OMXClient(32383): Using client-side OMX mux.
I/ACodec(32383): [OMX.qcom.video.encoder.avc] Now Loaded
E/MediaCodec(32383): native_window_api_connect returned an error: Invalid argument (-22)
W/System.err(32383): java.lang.IllegalStateException
W/System.err(32383):    at android.media.MediaCodec.native_configure(Native Method)
W/System.err(32383):    at android.media.MediaCodec.configure(MediaCodec.java:259)
[...]
W/System.err(32383):    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
W/System.err(32383):    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
Run Code Online (Sandbox Code Playgroud)

这是来自Android 4.3的三星Galaxy S4.

android mediacodec

11
推荐指数
1
解决办法
6969
查看次数

标签 统计

android ×1

mediacodec ×1