如何在屏幕方向期间保持解码活动?

时间:2013-10-07 23:24:32

标签: android mediacodec

民间,

我正在使用MediaCodec来解码网络流。 MediaCodec上的方法configure()将SurfaceView对象作为参数,可以很容易地将输出直接解码到表面视图中。

更改设备方向时会出现问题。旧表面被破坏并创建新表面。 mediacodec仍然持有的表面变得无效。

我无法破坏MediaCodec对象并重新创建一个新对象。这将导致等待几秒钟直到新的关键视频帧到达。

查看MediaCodec上可用的所有方法,看来改变表面的唯一方法是调用configure()。可以在MediaCodec对象上多次调用configure()吗?

或许,有一种方法可以存储MediaCodec对象的内部状态并将其传输到新的MediaCodec对象。

如果你能引导我朝着正确的方向前进,我将不胜感激。提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Grafika现在有一个例子。请参阅“双重解码”活动。

它的工作原理是将视频解码器的输出指向SurfaceTexture,而不是直接指向视图。 SurfaceTexture附加到TextureView。当视图因设备轮换而发生变化时,会创建一个新的TextureView,然后我们使用setSurfaceTexture()方法删除旧的SurfaceTexture

如果您将活动保留为“返回”或“回家”,则解码器将关闭。这有助于避免在切换到其他应用程序时占用硬件编解码器资源。

如果您使用电源键关闭屏幕,它当前不会关闭解码器,这可能是也可能不是。

为了让生活变得有趣,它会并排解码两个流。

答案 1 :(得分:1)

为什么无法将您的活动设置为在清单中处理设备方向以使您的活动保持活力?... http://developer.android.com/guide/topics/manifest/activity-element.html#config

相关问题