如何修改ExoPlayer中PlayerView的播放速度可选档位?
解决ExoPlayer自定义播放速度可选档位问题
你之前用DefaultLivePlaybackSpeedControl方向完全错了——这个类是给直播场景用的,作用是当直播流有延迟时自动调整播放速度帮你追赶直播进度,和自定义UI上的可选速度档位半毛钱关系都没有。
要实现自定义的速度选项(0.25x、0.5x、0.75x、正常、1.25x、1.5x、2x),核心思路是:ExoPlayer本身支持任意播放速度,你只需要自己定义档位列表,然后在UI选择后调用API设置即可,步骤如下:
1. 定义自定义速度档位列表
先把你需要的速度值存成一个列表:
// 按你要的顺序定义速度档位,附带显示文本(比如"0.25x") val speedOptions = listOf( 0.25f to "0.25x", 0.5f to "0.5x", 0.75f to "0.75x", 1.0f to "正常", 1.25f to "1.25x", 1.5f to "1.5x", 2.0f to "2x" )
2. 在UI中展示这些选项
根据你的界面需求,用Spinner、BottomSheetDialog或者自定义弹窗来展示这些档位。比如用Spinner的话,直接把上面的列表转成适配数据即可。
3. 选中速度后设置给ExoPlayer
当用户选中某个速度时,调用ExoPlayer的setPlaybackParameters方法:
// 假设选中的速度值是selectedSpeed(比如0.25f) player.setPlaybackParameters(PlaybackParameters(selectedSpeed))
如果需要同时保持原音调(默认就是保持),可以显式指定:
// 第二个参数为true表示速度变化时保持音调不变 player.setPlaybackParameters(PlaybackParameters(selectedSpeed, true))
4. 如果你用的是ExoPlayer默认PlayerView的控制栏
默认控制栏的速度菜单是固定档位,要替换成自定义档位的话,需要:
- 自定义PlayerView的布局,替换默认的控制栏组件
- 或者通过
PlayerControlView.setControlDispatcher自定义点击速度按钮后的逻辑,弹出你自己的档位选择UI
最后再强调下
别再碰DefaultLivePlaybackSpeedControl了,它和你要的功能完全不搭。你要的是自定义UI档位 + 手动设置播放速度,而不是直播自动调速。
内容的提问来源于stack exchange,提问作者Adrian Silva
相关产品推荐
相关产品推荐

