Administrar múltiples pistas
De forma predeterminada, no se descargan archivos de subtítulos y solo se descarga una pista de audio. Para descargar recursos adicionales asociados con el video, siga estos pasos:
-
Obtenga una referencia a Video Cloud OfflineCatalog cliente.
private OfflineCatalog catalog; ... catalog = new OfflineCatalog(this, eventEmitter, ACCOUNT_ID, POLICY_KEY); ...
-
Llama a getMediaFormatTracksAvailable método, pasando en el Video objeto sobre el que desea obtener información, y el MediaFormatListener para escuchar los datos devueltos.
OfflineCatalog.getMediaFormatTracksAvailable( @NonNull final Video video, @NonNull final MediaDownloadable.MediaFormatListener mediaFormatListener)
-
La
MediaFormatListener
llama al siguiente método:void onResult(MediaDownloadable mediaDownloadable, Bundle mediaFormatBundle);
La Medios descargables El objeto contiene información, incluidas las interpretaciones de video, los idiomas de audio y los subtítulos. La
mediaDownloadable
el objeto se almacena en caché y se usa cuando llamas OfflineCatalog.downloadVideo (Video).La Manojo El objeto contiene información sobre las pistas de formato de medios disponibles y tiene las siguientes propiedades:
- MediaDownloadable.VIDEO_RENDITIONS - Contiene una lista de matriz de
MediaFormat
objetos - MediaDownloadable.AUDIO_LANGUAGES - Contiene una lista de matriz de
MediaFormat
objetos. - MediaDownloadable.AUDIO_LANGUAGE_ROLES - Contiene una lista de matriz de cadenas. Esta lista proporciona información adicional con respecto a la
MediaDownloadable.AUDIO_LANGUAGES
. Los índices coinciden con la lista de idiomas de audio. El ejemplo de roles de audio puede ser principal y alternativo. - MediaDownloadable.CAPTIONS - Contiene una lista de matriz de
MediaFormat
objetos
- MediaDownloadable.VIDEO_RENDITIONS - Contiene una lista de matriz de
-
Recupere listas de datos del paquete. A continuación, se muestran ejemplos para recuperar las diferentes listas:
ArrayList<MediaFormat> video = bundle.getParcelableArrayList(MediaDownloadable.VIDEO_RENDITIONS); ArrayList<MediaFormat> audio = bundle.getParcelableArrayList(MediaDownloadable.AUDIO_LANGUAGES); ArrayList<String> roles = bundle.getStringArrayList(MediaDownloadable.AUDIO_LANGUAGE_ROLES); ArrayList<MediaFormat> captions = bundle.getParcelableArrayList(MediaDownloadable.CAPTIONS);
-
Crear un nuevo
Bundle
(filteredBundle
) para seleccionar las pistas de audio y los subtítulos que desea incluir en la descarga.Bundle filteredBundle = new Bundle();
-
Filtre las pistas que desee de la lista que creó anteriormente y agréguelas a la nueva
filteredBundle
.ArrayList<MediaFormat> captions = bundle.getParcelableArrayList(MediaDownloadable.CAPTIONS); if (captions != null && captions.size() > 0) { ArrayList<MediaFormat> newCaptions = new ArrayList<>(); newCaptions.add(captions.get(0)); filteredBundle.putParcelableArrayList(MediaDownloadable.CAPTIONS, newCaptions); }
-
Selecciona el
filteredBundle
haciaMediaDownloadable
objeto.mediaDownloadable.setConfigurationBundle(filteredBundle);
-
Descarga el video.
offlineCatalog.downloadVideo(video);
Internamente, el
OfflineCatalog
usará el cachéMediaDownloadable
proporcionado por elMediaDownloadable.MediaFormatListener
llamar de vuelta.
Muestra de código
Para obtener un ejemplo completo de cómo descargar pistas de audio y archivos de subtítulos adicionales, consulte la Aplicación de muestra de reproducción sin conexión.