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
MediaFormatListenerllama 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
mediaDownloadableel 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
MediaFormatobjetos - MediaDownloadable.AUDIO_LANGUAGES - Contiene una lista de matriz de
MediaFormatobjetos. - 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
MediaFormatobjetos
- 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
filteredBundlehaciaMediaDownloadableobjeto.mediaDownloadable.setConfigurationBundle(filteredBundle); -
Descarga el video.
offlineCatalog.downloadVideo(video);Internamente, el
OfflineCatalogusará el cachéMediaDownloadableproporcionado por elMediaDownloadable.MediaFormatListenerllamar 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.