ExoPlayer: Habilitar subtítulos en el video.
Quiero agregar subtítulos a un video desde un archivo srt (o vtt o ttml).
Lo que he hecho hasta ahora: tenemos una API mediante la cual obtenemos la URL del video de YouTube con el enlace del archivo de subtítulos en nuestro propio servidor. Extraigo la URL del video del enlace de YouTube con la ayuda de una biblioteca y luego reproduzco ese video en ExoPlayer.
Hasta el momento está funcionando al 100%.
Ahora tenemos que agregar subtítulos sobre el video, para ello descargo el archivo de subtítulos para el video de nuestro servidor y lo guardo en la memoria interna. Luego, al crear el MediaSource para ExoPlayer, establecemos el archivo de subtítulos.
He intentado casi todo en Internet pero no he podido establecer los subtítulos en el video. Aquí comparto mi código con el archivo XML y Java, además del código de cómo estoy estableciendo el archivo de subtítulos:
activity_video.xml
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="#D9000000" android:orientation="vertical" android:gravity="center" tools:context=".Activities.Video_Activity" android:keepscreenon="true">
<com.google.android.exoplayer2.ui.playerview android:id="@+id/video_view" android:layout_width="match_parent" android:layout_height="230dp" android:layout_below="@+id/video_navigation_bar" android:background="@android:color/transparent" app:controller_layout_id="@layout/layout_exoplayer_control_views">
<progressbar android:id="@+id/video_buffer_indicator" android:layout_width="48dp" android:layout_height="48dp" android:layout_gravity="center" android:translationz="@dimen/_51sdp" android:visibility="gone"></progressbar>
</com.google.android.exoplayer2.ui.playerview>
</relativelayout>
MediaItem.SubtitleConfiguration subtitle =
new MediaItem.SubtitleConfiguration.Builder(Uri.parse(filePath))
.setMimeType(MimeTypes.APPLICATION_TTML) // El tipo MIME correcto (obligatorio).
.setLanguage("en-US") // El idioma de los subtítulos (opcional).
.setSelectionFlags(C.SELECTION_FLAG_AUTOSELECT) // Marcas de selección de la pista (opcional).
.build();
MediaItem mediaItem =
new MediaItem.Builder()
.setUri(String.valueOf(mediaSource.get("video_link")))
.setSubtitleConfigurations(ImmutableList.of(subtitle))
.build();
list.add((new ProgressiveMediaSource.Factory(factory)).createMediaSource(mediaItem));
exoPlayer.setMediaSources(list);
exoPlayer.prepare();
exoPlayer.seekTo(currentlyPlayingIndex, C.TIME_UNSET);
gc.onBoardingPlayListStatus.get(currentlyPlayingIndex).replace("watching", true);
videoAdapter.notifyItemChanged(currentlyPlayingIndex);
exoPlayer.setPlayWhenReady(true);
exoPlayer.play();
videoPlayer.getSubtitleView().setVisibility(View.VISIBLE);
Gracias de antemano.
davy.ai
Para agregar subtítulos a un video de ExoPlayer desde un archivo SRT, VTT o TTML, se deben seguir algunos pasos:
Cree un objeto MediaItem.SubtitleConfiguration con el Uri del archivo de subtítulos, el tipo MIME (por ejemplo, application/ttml+xml, text/vtt) y el idioma (opcional).
Cree un objeto MediaItem con el Uri del archivo de video y la configuración de subtítulos.
Use ProgressiveMediaSource.Factory para crear una fuente de medios para el video y los subtítulos.
Agregue la fuente de medios a ExoPlayer usando setMediaSources ().
Prepare el ExoPlayer usando prepare ().
Configure la vista de subtítulos como visible usando videoPlayer.getSubtitleView (). SetVisibility (View.VISIBLE).
Aquí hay un ejemplo de código Java que muestra cómo agregar subtítulos a un video en ExoPlayer:
Asegúrese de actualizar el Uri del archivo de video y el tipo MIME del archivo de subtítulos en el ejemplo de código anterior para que coincida con su caso de uso específico.