我正在使用名为ExoPlayer的谷歌新MediaPlayer,无法找到静音的方法
是否有一种简单的方法可以在Google ExoPlayer上静音音轨?还是改变音量?
获取当前音量:int currentvolume = player.getVolume();
静音:player.setVolume(0f);
取消静音:player.setVolume(currentVolume);
我通过编辑ExoPlayer中的DemoPlayer
找到了两种方法来实现它。
基本上,你需要得到audioTrackRenderer
这是一个ExoPlayerComponent
并发送消息给它。所以:
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();
确保在启动播放器后调用上面的行,否则你将获得nullpointerexception
静音音量:
player.setVolume(0f);
取消静音音量:
player.setVolume(currentVolume);
只需使用player.setVolume(0)即可静音视频。
我会建议先获取当前音量,然后将其静音。当您取消静音时,您可以为用户提供相同的音量。
float currentvolume;
currentvolume = player.getVolume();
player.setVolume(0.0f);