视频解码器使用MediaCodec进行配置

时间:2013-12-12 06:53:00

标签: android mediacodec

我正在尝试使用MediaCodec API解码视频样本。我使用surfaceView来显示渲染的样本。如果我按下主页按钮,应用程序进入暂停状态并且表面被破坏。当我回到恢复状态时,新的surfaceView参考正在创建,但解码器无法在surfaceView上抽样。因此屏幕显示为黑色。 视频配置: videoDecoder.configure(format,surface,null,0); 那么如何在上面的语句中重新配置videoDecoder。它类似于以下问题 How to keep decoding alive during screen orientation?

1 个答案:

答案 0 :(得分:2)

目前MediaCodec API(API 19)未提供替换输出Surface的方法。

正如你提到的另一个问题,我认为处理这个问题的方法是解码为与视图层次结构无关的Surface(因此,不会被撕裂)当Activity被销毁时向下。

如果您将MediaCodec的输出定向到SurfaceTexture,则可以将该纹理渲染到SurfaceView上。这将需要一些GLES代码。您可以在Grafika sources中找到必要的部分,但目前还没有完全实现您想要的内容(例如PlayMovieActivity将视频解码为SurfaceTexture,但ST是其中的一部分一个TextureView,它将被拆除。)

额外的渲染步骤将增加GPU负载,并且不适用于受DRM保护的视频。对于大多数设备和应用程序而言,这无关紧要。

另请参阅bigflake examples

更新:我已将此添加到Grafika,但有一点麻烦。请参阅“双重解码”示例。输出转到与SurfaceTexture关联的TextureView。如果旋转屏幕(或者,当前通过按下电源按钮消隐),则继续解码。如果您使用“后退”或“主页”按钮退出活动,则解码将停止。它的工作原理是保留SurfaceTexture,并将其附加到新的TextureView