我正在开发一个视频应用,用户可以观看视频,并在需要时全屏打开它,然后返回默认视图等等.我正在使用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重新启动时保留它).
总结以上是内存溢出为你收集整理的android-在活动之间移动SurfaceView全部内容,希望文章能够帮你解决android-在活动之间移动SurfaceView所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)