Ash*_*kan 8 android fullscreen exoplayer
我尝试在RecyclerView和ViewPager中使用exoplayer显示节目视频(.mp4).我用自定义布局显示视频控制器.到现在为止还挺好.
现在尝试像其他视频播放器一样全屏显示视频如何使用,但在exoplayer doc中找不到好方法.
谁能帮我?
Bla*_*rai 12
您可以从 .xml 文件中轻松完成此操作ExoPlayer。设置以下属性:
app:resize_mode="fill"
Run Code Online (Sandbox Code Playgroud)
mar*_*ger 11
ExoPlayer库目前不提供启用/禁用全屏模式的内置方法.你需要自己实现这个,或者为此我找到一些第三方代码.
基本上需要两个步骤:
a)将窗口和活动属性设置为全屏和/或沉浸式模式,并(如果需要)更改为横向模式.这并不困难.在Android开发者上查看此页面.
b)将渲染转换为SimpleExoPlayerView(实际上它是关于Surface),它以沉浸模式覆盖整个视口.在所有API级别上实现最佳用户体验更具挑战性.
为了获得最佳的用户体验,我们希望在转换到全屏和返回时保持播放器播放,以便无缝继续播放.在RecyclerView中,对于所有API级别来说,这是一个很难解决的问题.
方法1
最简单的方法可能是单独的SimpleExoPlayerView实例,只要您进入沉浸式模式,就会将其置于布局之上(有些人打开一个带有第二个视图的对话框,有些人在布局中只有第二个视图.以某种方式并按需显示/隐藏它.
然后将播放器实例与嵌入在RV中的SimpleExoPlayerView分离,并通过调用静态辅助方法将其附加到全屏视图:
SimpleExoPlayerView.switchTargetView(simpleExoPlayer, oldPlayerView, newPlayerView);
Run Code Online (Sandbox Code Playgroud)
这种方法在API> = 23时非常有效.使用API 23,添加了允许动态交换表面的方法MediaCodec.setOutputSurface.上面的静态方法确保应用此技术.因此,音频和视频继续播放,进入和退出全屏的用户体验非常流畅.对于API <= 22,需要创建一个新的编解码器实例来交换到另一个表面.这会中断播放,并且此方法的用户体验会降低.
方法2
为避免在较低的API级别上交换到另一个表面,您需要使用单个表面并以某种方式将其转换为全屏.您可以隐藏除SimpleExoPlayerView以外的所有内容,并设置布局宽度和高度以匹配其父级,或者您可以使用占位符替换视频视图并将其放在顶部和背面.
对于简单的布局,这可以很好地工作,但是复杂的布局可能包括片段,viewpagers,recyclerviews这可能是一个非常干扰的操作,导致某些东西闪烁或很快中断播放(在某些API级别,例如从视图层次结构中删除播放器视图时) ).我已经看到这很好地适用于各种布局.
进一步的方法/挑战
当您深入挖掘和/或根本不使用SimpleExoPlayerView时,可能还有其他可能更好的方法.
| 归档时间: |
|
| 查看次数: |
5881 次 |
| 最近记录: |