Silenciar un video en un VideoView

Estoy reproduciendo un video (desde youtube) usando un VideoView, así:

VideoView video = (ViewView) this.findViewById(R.id.youtube_video); MediaController controllers = new MediaController(this); controllers.setAnchorView(video); video.setMediaController(controllers); video.setVideoURI(videoUri); video.start() 

Me gustaría poder silenciar el video, pero hasta ahora lo único que encontré es:

 AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

Lo que funciona bien en que el video está silenciado, pero el problema es que toda la música transmitida está silenciada, y si hay otro video (o audio) que quiero reproducir, también se silencia.

¿Hay alguna forma de limitar el flujo específico a ser silenciado?
Gracias.

Después de cavar en todas las fuentes posibles de información que logré encontrar, me ocurrió la siguiente solución y pensé que podría beneficiar a otros en el futuro:

 public class Player extends VideoView implements OnPreparedListener, OnCompletionListener, OnErrorListener { private MediaPlayer mediaPlayer; public Player(Context context, AttributeSet attributes) { super(context, attributes); this.setOnPreparedListener(this); this.setOnCompletionListener(this); this.setOnErrorListener(this); } @Override public void onPrepared(MediaPlayer mediaPlayer) { this.mediaPlayer = mediaPlayer; } @Override public boolean onError(MediaPlayer mediaPlayer, int what, int extra) { ... } @Override public void onCompletion(MediaPlayer mediaPlayer) { ... } public void mute() { this.setVolume(0); } public void unmute() { this.setVolume(100); } private void setVolume(int amount) { final int max = 100; final double numerator = max - amount > 0 ? Math.log(max - amount) : 0; final float volume = (float) (1 - (numerator / Math.log(max))); this.mediaPlayer.setVolume(volume, volume); } } 

Parece funcionar bien para mí, actuando como un VideoView con mute / unmute funcionalidad.
Es posible hacer que el método setVolume sea público para que el volumen pueda ser controlado fuera del ámbito de la clase, pero solo necesito silenciar / unmute para que se exponga.

Tengo un método más simple, haciendo esto tendrás un botón mute / unmute (esto se puede utilizar para el audio y los videos);

 //set global variable //private Button mMuteButton; //private static int aux = 0; //private AudioManager mAudioManager; //set the Mute button on clickListener mMuteButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); if(aux % 2 == 0){ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 100, 0); aux++; } else { mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); aux++; } } }); 

}

  • ¿Es posible capturar / guardar archivos JPEG desde un flujo MJPEG? (Y también el propio MJPEG)?
  • android - cómo transmitir vídeo desde el teléfono al servidor?
  • Android Video View en otro hilo y problema con android 2.1
  • Captura de la cámara IP Stream y publicar en mi sitio web
  • Reproducción automática de vídeos vimeo en la vista web de Android
  • GsaIOException Desbordamiento del búfer, sin espacio disponible
  • programatically leer buffer de trama / dev / graphics / fb0 en android
  • RTSP en Jelly bean no funciona
  • Llamadas de video de Android con el sip de Android
  • Android 3.x / HLS cómo iniciar al final de la secuencia
  • Cómo grabar HLS streaming android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.