如何将现有Surface与MediaCodec编码器表面相关联?

时间:2015-11-13 12:06:26

标签: android android-ndk java-native-interface opengl-es-2.0 mediacodec

在阅读互联网上的大量资源后,我有点困惑。

1)我在Application中有一个TextureView。 ((TV))

2)我已将SurfaceTextureLister与((tv))相关联。

    tv.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {

 public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {

     mySurface  = new Surface(surface);   => This surface is sent to native layer.
    ....
    }

3)将此 mySurface 曲面传递给原生曲面,我获得此曲面的ANativeWindow,并使用 ANativeWindow_lock ANativeWindow_unlockAndPost 复制数据进入水面。

到目前为止一切顺利。它正在显示我复制到ANativeWindow中的数据。

现在,我想将所有这些帧记录到文件中的MP4格式中。

我做了什么?

1)

我使用以下链接作为参考:

http://www.bigflake.com/mediacodec/EncodeAndMuxTest.java.txt

2)

我从mediacodec编码器中检索了一个曲面,并传递给原生复制,就像我复制到显示表面一样。我在mp4文件中看不到输出。只是一个黑屏。

问题:

1)这是正确的方法吗?我的意思是你有一个原始数据,     将此数据复制到两个表面,一个来自应用程序TextureView,另一个来自mediacodec编码器表面。

2) 或者,我是否忽略了将数据录制成mp4格式的其他简单方法?

3) 或者,我完全想念任何概念吗?

请提供宝贵的意见。

0 个答案:

没有答案