web-dev-qa-db-fra.com

Couper le son sur ExoPlayer

J'utilise Google nouveau MediaPlayer nommé ExoPlayer et ne trouve pas de moyen de couper le son

Existe-t-il un moyen simple de couper le son d'une piste audio sur Google ExoPlayer? Ou changer le volume?

32
Hugo Gresse

Exoplayer 2.x.x

Obtenez le volume actuel: int currentvolume = player.getVolume();
Muet: player.setVolume(0f);
Réactiver le son: player.setVolume(currentVolume);


Exoplayer 1.x.x

J'ai trouvé deux façons d'y parvenir en éditant DemoPlayer depuis ExoPlayer.

Bon:

Fondamentalement, vous devez obtenir le audioTrackRenderer qui est un ExoPlayerComponent et lui envoyer un message. Alors :

  1. Ajoutez un membre audioRenderer et définissez-le dans onRenderers:

    // Complete preparation.  
    this.videoRenderer = renderers[TYPE_VIDEO];  
    this.audioRenderer = renderers[TYPE_AUDIO];  
    
  2. Ajouter une méthode publique:

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

Utilisation:
muet: player.setMute(true);
réactiver le son: player.setMute(false);

L'autre :

Ce n'est pas une bonne solution si le joueur devra rebuffer lorsqu'il sera réactivé.
Consiste à remplacer la piste audio par une piste vide:

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

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

La nouvelle façon de couper et réactiver le volume à partir de la version 2.3.1 peut être effectuée comme suit:

int currentvolume = player.getVolume();

assurez-vous d'appeler la ligne ci-dessus après avoir démarré le lecteur, sinon vous obtiendrez une exception nullpointerexception

pour couper le volume:

player.setVolume(0f);

pour réactiver le volume:

player.setVolume(currentVolume);
24
Khoosham

Je recommanderai d'abord d'obtenir le volume actuel, puis de le couper. Lorsque vous réactivez le son, vous pouvez attribuer le même volume à l'utilisateur.

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

essayer

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

analogue à cette ligne de code

2
thomasb

Utilisez simplement player.setVolume (0) pour désactiver la vidéo.

2
Allen Vork

Dans ExoPlayer 2.x.x:

obtenir le volume actuel:

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

muet:

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

réactiver:

player.getAudioComponent().setVolume(currentVolume);
0
Hadi