其他分享
首页 > 其他分享> > android-在活动之间移动SurfaceView

android-在活动之间移动SurfaceView

作者:互联网

我正在开发一个视频应用,用户可以观看视频,并在需要时全屏打开它,然后返回默认视图等等.我正在使用ExoPlayer,由于即将进行的解释,最近切换到默认的MediaPlayer.

我需要“即时”更改播放器的Surface.我需要使用同一播放器在活动之间显示视频,而没有延迟来显示图像.使用Exoplayer,解码器等待下一个关键帧在空白Surface上绘制像素.

因此,我需要使用相同的Surface,这样就不必每次都推一个新曲面,只需将曲面附加到View父级即可. Surface可以保持不变,但是如果我分离SurfaceView以便从另一个活动中检索它并重新附加它,则内部Surface会被破坏.

那么有没有办法在不同的活动中保持相同的Surface?有服务吗?

我知道这个问题有点奇怪,我会在注释中解释指定的部分是请求.

解决方法:

当Activity停止时,与SurfaceView或TextureView关联的Surface通常会被破坏.可以解决此问题.

一种方法内置于TextureView中,并在architecture doc中进行了描述,并在Grafika中的“ double decode”活动中得到了证明.该活动的目标是在活动由于屏幕旋转而重启时继续播放一对视频,而不会暂停所有.如果您遵循该代码,则可以看到如何使用onSurfaceTextureDestroyed()的返回值使SurfaceTexture保持活动状态,以及TextureView#setSurfaceTexture()如何将SurfaceTexture附加到新的View.它有一个窍门-setSurfaceTexture()需要在onCreate()中发生,而不是在onSurfaceTextureAvailable()中发生-但它相当简单.

该示例使用MediaCodec输出进行视频播放,但是对于需要Surface进行输出的任何内容(仅create a Surface from the SurfaceTexture)也可以很好地工作.

如果您不介意深入了解OpenGL ES,则可以创建独立于Views和Activity的自己的SurfaceTexture,并将其自己呈现到当前的SurfaceView. Grafika的“来自摄影机的纹理”活动使用来自摄影机的实时视频来完成此操作(尽管它不会尝试在Activity重新启动时保留它).

标签:exoplayer,surfaceview,android-mediaplayer,android
来源: https://codeday.me/bug/20191028/1953826.html