Mute audio on ExoPlayer Mute audio on ExoPlayer android android

Mute audio on ExoPlayer


Exoplayer 2.x.x

Get the current volume:int currentvolume = player.getVolume();
Mute: player.setVolume(0f);
Unmute: player.setVolume(currentVolume);


Exoplayer 1.x.x

I found two ways to achieve it by editing DemoPlayer from ExoPlayer.

Good one :

Basicly, you need to get the audioTrackRenderer which is a ExoPlayerComponent and send message to it. So :

  1. Add audioRenderer member and set it in onRenderers:

    // Complete preparation.  this.videoRenderer = renderers[TYPE_VIDEO];  this.audioRenderer = renderers[TYPE_AUDIO];  
  2. Add public method :

    public void setMute(boolean toMute){    if(toMute){        player.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 0f);    } else {        player.sendMessage(audioRenderer, MediaCodecAudioTrackRenderer.MSG_SET_VOLUME, 1f);    }}

Usage :
mute : player.setMute(true);
unmute : player.setMute(false);

The other one :

This is not a good solution has the player will need to rebuffer when unmuting.
Consist of changing the audio track to an empty one:

// muteplayer.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DISABLED);// Unmuteplayer.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DEFAULT);


The new way to mute and unmute volume as of version 2.3.1 can be done as follows:

int currentvolume = player.getVolume();

make sure to call the line above after starting the player otherwise you will get a nullpointerexception

to mute volume:

player.setVolume(0f);

to unmute volume:

player.setVolume(currentVolume);


Easily you can do it with ExoPlayer:

Java Code:

float currentVolume = player.getVolume();if (currentVolume == 0f) {      player.setVolume(1f);} else {      player.setVolume(0f);}

Kotlin Code:

val curentVol = player?.volumeif (curentVol == 0f) {     player?.volume = 1f} else {     player?.volume = 0f}