Hugo Gresse
Hugo Gresse

Reputation: 17879

Mute audio on ExoPlayer

I'm using Google new MediaPlayer named ExoPlayer and cannot find a way to mute the sound

Is there an easy way to mute audio track on Google ExoPlayer ? Or changing volume ?

Upvotes: 50

Views: 30630

Answers (9)

Halil Ozel
Halil Ozel

Reputation: 3312

Returns the audio volume, with 0 being silence and 1 being unity gain (signal unchanged).

You should use new version: implementation 'com.google.android.exoplayer:exoplayer:2.18.5'

  • Mute volume:
    exoPlayer.volume = 0f    
  • Unmute volume value:
    exoPlayer.volume = 1f   

Upvotes: 2

Khoosham
Khoosham

Reputation: 426

The new way to mute and unmute volume as of version 2.X.X 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);

Upvotes: 26

Cube
Cube

Reputation: 401

Mute ExoPlayer using Kotlin

player.audioComponent?.volume = 0f

Upvotes: 0

Ashav Kothari
Ashav Kothari

Reputation: 361

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?.volume
if (curentVol == 0f) {
     player?.volume = 1f
} else {
     player?.volume = 0f
}

Upvotes: 11

Hadi
Hadi

Reputation: 125

In ExoPlayer 2.x.x:

get the current volume:

int currentVolume = player..getAudioComponent().getVolume();

mute:

player.getAudioComponent().setVolume(0f);

unmute:

player.getAudioComponent().setVolume(currentVolume);

Upvotes: 5

Hugo Gresse
Hugo Gresse

Reputation: 17879

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:

// mute
player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DISABLED);

// Unmute
player.selectTrack(FullPlayer.TYPE_AUDIO, ExoPlayer.TRACK_DEFAULT);

Upvotes: 69

Asuk Nath
Asuk Nath

Reputation: 590

I will recommend get the current volume first and then mute it. When you will unmute you can give user same volume.

float currentvolume;
currentvolume = player.getVolume();
player.setVolume(0.0f);

Upvotes: 4

Allen Vork
Allen Vork

Reputation: 1546

Just simply use player.setVolume(0) will silent the video.

Upvotes: 2

thomasb
thomasb

Reputation: 95

try

player.setSelectedTrack(DemoPlayer.TYPE_AUDIO, DemoPlayer.TRACK_DISABLED);

analogous to this line of code

Upvotes: 2

Related Questions