【发布时间】:2015-02-08 20:24:42
【问题描述】:
我正在使用名为 ExoPlayer 的 Google 新 MediaPlayer,但找不到静音的方法
有没有一种简单的方法可以在 Google ExoPlayer 上将音轨静音?还是改变音量?
【问题讨论】:
-
player.volume = 0f
我正在使用名为 ExoPlayer 的 Google 新 MediaPlayer,但找不到静音的方法
有没有一种简单的方法可以在 Google ExoPlayer 上将音轨静音?还是改变音量?
【问题讨论】:
player.volume = 0f
获取当前音量:
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);
【讨论】:
Android uses separate audio streams for playing music, alarms, notifications, the incoming call ringer, system sounds, in-call volume, and DTMF tones. This allows users to control the volume of each stream independently. Plus:Unless your app is an alarm clock, you should play audio using the STREAM_MUSIC stream. Ref:developer.android.com/guide/topics/media-apps/…
从 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);
}
Kotlin 代码:
val curentVol = player?.volume
if (curentVol == 0f) {
player?.volume = 1f
} else {
player?.volume = 0f
}
【讨论】:
在 ExoPlayer 2.x.x 中:
获取当前音量:
int currentVolume = player..getAudioComponent().getVolume();
静音:
player.getAudioComponent().setVolume(0f);
取消静音:
player.getAudioComponent().setVolume(currentVolume);
【讨论】:
【讨论】:
player.selectTrack(FullPlayer.TYPE_AUDIO, -1); 和ExoPlayer.TRACK_DEFAULT 完全相同。这完全不是一个好的解决方案,因为取消静音会产生很大的延迟
只需简单地使用 player.setVolume(0) 即可使视频静音。
【讨论】:
我建议先获取当前音量,然后再静音。当您取消静音时,您可以为用户提供相同的音量。
float currentvolume;
currentvolume = player.getVolume();
player.setVolume(0.0f);
【讨论】:
使用 Kotlin 静音 ExoPlayer
player.audioComponent?.volume = 0f
【讨论】: