Android : multiple audio tracks in a VideoView?

No 3rd party library required:

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;
    }
});

As far as I can tell - audio tracks should be encoded in the 3-letter ISO 639-2 in order to be recognized correctly.


Haven't tested myself yet, but it seems that Vitamio library has support for multiple audio tracks (among other interesting features). It is API-compatible with VideoView class from Android.

Probably you would have to use Vitamio VideoView.setAudioTrack() to set audio track (for example based on locale). See Vitamio API docs for details.