es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para agregar subtítulos a un video de ExoPlayer desde un archivo SRT, VTT o TTML, se deben seguir algunos pasos:

    1. Descargue el archivo de subtítulos de su servidor y guárdelo en la memoria interna del dispositivo.
    2. 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).

    3. Cree un objeto MediaItem con el Uri del archivo de video y la configuración de subtítulos.

    4. Use ProgressiveMediaSource.Factory para crear una fuente de medios para el video y los subtítulos.

    5. Agregue la fuente de medios a ExoPlayer usando setMediaSources ().

    6. Prepare el ExoPlayer usando prepare ().

    7. 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:

    // Descargar el archivo de subtítulos del servidor y guardarlo en la memoria interna
    String filePath = "/path/to/subtitle_file.vtt";
    
    // Cree un objeto de configuración de subtítulos con el Uri del archivo de subtítulos, el tipo MIME y el idioma opcional
    MediaItem.SubtitleConfiguration subtitle = new MediaItem.SubtitleConfiguration.Builder(Uri.parse(filePath))
            .setMimeType(MimeTypes.TEXT_VTT)
            .setLanguage("en-US")
            .build();
    
    // Cree un objeto MediaItem con el Uri del archivo de video y la configuración de subtítulos
    MediaItem mediaItem = new MediaItem.Builder()
            .setUri("http://example.com/video.mp4")
            .setSubtitleConfigurations(ImmutableList.of(subtitle))
            .build();
    
    // Cree una fuente de medios con el video y los subtítulos
    List<mediasource> mediaSources = new ArrayList<>();
    mediaSources.add(new ProgressiveMediaSource.Factory(factory).createMediaSource(mediaItem));
    
    // Agregue la fuente de medios a ExoPlayer y prepárelo
    exoPlayer.setMediaSources(mediaSources);
    exoPlayer.prepare();
    
    // Configure la vista de subtítulos para que sea visible
    videoPlayer.getSubtitleView().setVisibility(View.VISIBLE);
    

    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.

Comments are closed.