Android 플랫폼에서 비디오 재생 기능을 구현할 때, Vitamio 프레임워크는 매우 강력한 도구입니다. 특히 트랙 선택 및 전환 기능은 다국어 자막 지원이나 오디오 스트림 관리가 필요한 애플리케이션에서 필수적인 요소입니다.
Vitamio 트랙 관리 개요
Vitamio는 MediaPlayer와 VideoView 두 가지 주요 컴포넌트를 통해 트랙 관리 기능을 제공합니다. 이를 활용하면 재생 중에도 다양한 미디어 스트림을 동적으로 전환할 수 있습니다. 주요 기능으로는 자막 트랙 전환, 다국어 오디오 트랙 선택, 비디오 품질 조정 등이 있습니다.
MediaPlayer를 활용한 자막 구현
MediaPlayer 기반의 구현에서는 addTimedTextSource() 메서드를 사용하여 외부 자막 파일을 로드합니다. 다음 예제는 외부 저장소에서 SRT 형식의 자막 파일을 추가하는 방법을 보여줍니다.
// 자막 파일 경로 설정
String subtitlePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ subtitles/primary.srt";
// 타임드 텍스트 소스 추가
mediaPlayer.addTimedTextSource(subtitlePath);
mediaPlayer.setTimedTextShown(true);
자막 활성화 후에는 리스너를 통해 자막 텍스트를 실시간으로 업데이트할 수 있습니다.
// OnTimedTextListener 인터페이스 구현
mediaPlayer.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
@Override
public void onTimedText(MediaPlayer mp, TimedText timedText) {
if (timedText != null && timedText.getText() != null) {
subtitleDisplay.setText(timedText.getText());
}
}
});
VideoView를 통한 간소화된 구현
VideoView 컴포넌트를 사용하면 더 간단한 구조로 자막 기능을 통합할 수 있습니다. 다음 코드는 VideoView에서 자막을 처리하는 기본 패턴을 보여줍니다.
// VideoView 초기화
VideoView playerView = findViewById(R.id.video_player);
// 자막 소스 추가
String subtitleFile = getExternalFilesDir(null) + "/movies/subtitle.srt";
playerView.addTimedTextSource(subtitleFile);
playerView.setTimedTextShown(true);
트랙 정보 조회 및 선택
비디오에 포함된 모든 트랙 정보를 조회하려면 getTrackInfo() 메서드를 사용합니다. 이 메서드는 MediaPlayer에 포함된 각 트랙의 메타데이터를 배열 형태로 반환합니다.
// 사용 가능한 트랙 정보 조회
MediaPlayer.TrackInfo[] trackList = mediaPlayer.getTrackInfo();
for (int i = 0; i < trackList.length; i++) {
MediaPlayer.TrackInfo info = trackList[i];
if (info.getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO) {
Log.d("TrackInfo", "Audio Track #" + i + ": " + info.getLanguage());
} else if (info.getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT) {
Log.d("TrackInfo", "Subtitle Track #" + i + ": " + info.getLanguage());
}
}
특정 트랙을 선택하려면 selectTrack() 메서드에 트랙 인덱스를 전달합니다.
// 오디오 트랙 선택
int audioTrackIndex = 1;
mediaPlayer.selectTrack(audioTrackIndex);
// 자막 트랙 선택
int subtitleTrackIndex = 2;
mediaPlayer.selectTrack(subtitleTrackIndex);
// 현재 선택된 트랙 확인
int currentAudioTrack = mediaPlayer.getSelectedTrack(MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_AUDIO);
트랙 전환 구현 체크리스트
- 사전 트랙 스캔: 재생 시작 전 모든 사용 가능한 트랙 정보를 수집합니다
- UI 제공: 사용자가 쉽게 트랙을 선택할 수 있는 그래픽 인터페이스를 구현합니다
- 상태 관리: 트랙 전환 시 재생 연속성을 유지하기 위한 상태 처리를 구현합니다
- 에러 처리: 지원되지 않는 트랙 형식이나 선택 실패 시 적절한 예외 처리를 추가합니다
고급 트랙 관리 기법
복잡한 재생 요구사항이 있는 경우, TrackInfo 배열을 커스텀 데이터 모델로 변환하여 관리하면 더 유연한 트랙 선택 UI를 구성할 수 있습니다. 또한 비동기적으로 트랙 정보를 로드하여 초기 재생 시간을 단축하는 것도 효과적인 최적화 방법입니다.
일반적인 문제 해결
Q: 자막이 표시되지 않습니다.
A: 자막 파일 형식이 지원되는지 확인하고, setTimedTextShown(true) 메서드가 호출되었는지 검증하세요.
Q: 트랙 전환 시 재생이 중단됩니다.
A: selectTrack() 호출 전후로 재생 상태를 확인하고, 필요한 경우 버퍼링을 대기하세요.