3

伙计们,

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

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

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

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

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

如果您能指导我正确的方向,我将不胜感激。预先感谢您的帮助。

4

2 回答 2

3

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

它通过将视频解码器的输出定向到 aSurfaceTexture而不是直接到视图来工作。附加SurfaceTexture到. TextureView当视图因设备旋转而改变时,TextureView会创建一个新视图,然后SurfaceTexture使用setSurfaceTexture()方法放入旧视图。

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

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

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

于 2014-01-29T23:14:35.227 回答
1

为什么你不能设置你的活动来处理清单中的设备方向以保持你的活动活跃?... http://developer.android.com/guide/topics/manifest/activity-element.html#config

于 2013-12-03T13:56:50.223 回答