programacion - Android: ¿múltiples pistas de audio en VideoView?
manual de android en pdf (3)
La clase VideoView no puede admitir su requerimiento. U debe analizar para obtener datos de transmisión de audio (lo que desea) para jugar con la clase AudioTrack en la capa Java.
Tengo algunos archivos de video .MP4 que deben leerse en una VideoView en una actividad de Android. Estos videos incluyen varias pistas de audio, cada una de las cuales corresponde a un idioma de usuario (por ejemplo: inglés, francés, japonés ...).
Tengo problemas inesperados para encontrar ayuda o documentación para proporcionar dicha función. Actualmente puedo cargar el video y reproducirlo en una VideoView con un MediaController, pero no para cambiar las pistas de audio.
No estoy seguro de que el SDK de Android proporcione una forma sencilla de hacerlo, lo que me deja bastante desorientado sobre cómo resolver mi problema. Estaba pensando en extraer cada pista de audio, cargar el audio que quiero en un MediaPlayer dependiendo del idioma, luego hacer que el audio y el video se reproduzcan juntos. Pero me temo que podrían surgir algunos problemas de sincronización y evitar que lo haga.
Si tiene alguna pista, algún consejo que me ayude a comenzar con este problema, es más que bienvenido.
No se requiere una biblioteca de terceros:
mVideoView.setVideoURI(Uri.parse("")); // set video source
mVideoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
MediaPlayer.TrackInfo[] trackInfoArray = mp.getTrackInfo();
for (int i = 0; i < trackInfoArray.length; i++) {
// you can switch out the language comparison logic to whatever works for you
if (trackInfoArray[i].getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO
&& trackInfoArray[i].getLanguage().equals(Locale.getDefault().getISO3Language()) {
mp.selectTrack(i);
break;
}
}
return true;
}
});
Por lo que puedo decir, las pistas de audio deben codificarse en el ISO 639-2 de 3 letras para que se reconozcan correctamente.
Todavía no me he probado, pero parece que la biblioteca de Vitamio tiene soporte para múltiples pistas de audio (entre otras características interesantes). Es API compatible con la clase VideoView
de Android.
Probablemente tendrías que usar Vitamio VideoView.setAudioTrack()
para establecer la pista de audio (por ejemplo, según la configuración regional). Ver los documentos de la API de Vitamio para más detalles.