我正在使用名为 ExoPlayer 的 Google 新 MediaPlayer,但找不到静音的方法
有没有一种简单的方法可以在 Google ExoPlayer 上静音音轨?还是改变音量?
获取当前音量:
int currentvolume = player.getVolume();
静音: player.setVolume(0f);
取消静音: player.setVolume(currentVolume);
我找到了两种通过DemoPlayer
ExoPlayer 编辑来实现它的方法。
基本上,您需要获取audioTrackRenderer
which is aExoPlayerComponent
并向其发送消息。所以 :
添加audioRenderer
成员并将其设置在onRenderers
:
// Complete preparation.
this.videoRenderer = renderers[TYPE_VIDEO];
this.audioRenderer = renderers[TYPE_AUDIO];
添加公共方法:
public void setMute(boolean toMute){
if(toMute){
player.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0f);
} else {
player.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 1f);
}
}
用法:
静音:player.setMute(true);
取消静音:player.setMute(false);
这不是一个好的解决方案,因为播放器在取消静音时需要重新缓冲。
包括将音轨更改为空音轨:
// mute
player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DISABLED);
// Unmute
player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DEFAULT);
从 2.3.1 版本开始静音和取消静音的新方法可以如下完成:
int currentvolume = player.getVolume();
确保在启动播放器后调用上面的行,否则你会得到一个空指针异常
静音:
player.setVolume(0f);
取消静音:
player.setVolume(currentVolume);
您可以使用 ExoPlayer 轻松完成:
Java代码:
float currentVolume = player.getVolume();
if (currentVolume == 0f) {
player.setVolume(1f);
} else {
player.setVolume(0f);
}
科特林代码:
val curentVol = player?.volume
if (curentVol == 0f) {
player?.volume = 1f
} else {
player?.volume = 0f
}
在 ExoPlayer 2.xx 中:
获取当前音量:
int currentVolume = player..getAudioComponent().getVolume();
沉默的:
player.getAudioComponent().setVolume(0f);
取消静音:
player.getAudioComponent().setVolume(currentVolume);
我建议先获取当前音量,然后将其静音。当您取消静音时,您可以为用户提供相同的音量。
float currentvolume;
currentvolume = player.getVolume();
player.setVolume(0.0f);
只需简单地使用 player.setVolume(0) 将使视频静音。
使用 Kotlin 静音 ExoPlayer
player.audioComponent?.volume = 0f