Media3

Admite bibliotecas para casos de uso de contenido multimedia.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
22 de febrero de 2024 1.3.0 - - -

Cómo declarar dependencias

Para agregar una dependencia en Media3, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

Groovy

dependencies {
    def media3_version = "1.3.0"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.3.0"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Puedes usar la Herramienta de seguimiento de errores de Media3 a fin de encontrar respuestas a preguntas, problemas conocidos y solicitudes de funciones, así como para informar problemas nuevos.

Versión 1.3.0

Versión 1.3.0

6 de marzo de 2024

Lanzamiento de androidx.media3:media3-*:1.3.0. La versión 1.3.0 contiene estas confirmaciones.

  • Biblioteca común:
    • Implementa la compatibilidad con los URI de recursos sin procesar android.resource://package/[type/]name, en los que package es diferente al paquete de la aplicación actual. Esto siempre se documentó como útil, pero no se implementó correctamente hasta ahora.
    • Normaliza los tipos de MIME establecidos por el código de la app o lecturas de contenido multimedia para que sean completamente en minúscula.
    • Define anuncios con un MediaItem completo, en lugar de un solo Uri en AdPlaybackState.
    • Aumenta minSdk a 19 (Android KitKat). Está alineada con todas las demás bibliotecas de AndroidX y es necesario para que podamos actualizar a las versiones más recientes de nuestras dependencias de AndroidX.
    • Propaga artworkUri y artworkData en MediaMetadata.Builder.populate(MediaMetadata) cuando al menos uno de ellos no sea nulo (#964).
  • ExoPlayer:
    • Agrega PreloadMediaSource y PreloadMediaPeriod, que permiten a las apps precargar una fuente multimedia del contenido en una posición de inicio específica antes de la reproducción. PreloadMediaSource se encarga de preparar la fuente multimedia del contenido para recibir el Timeline, preparar y almacenar en caché el período en la posición de inicio determinada, seleccionar segmentos y cargar datos de contenido multimedia para el período. Para controlar el progreso de la precarga, las apps implementan PreloadMediaSource.PreloadControl y configuran la fuente precargada en el reproductor para que se reproduzca.
    • Agrega ExoPlayer.setImageOutput, que permite que las apps establezcan ImageRenderer.ImageOutput.
    • DefaultRenderersFactory ahora proporciona un ImageRenderer al reproductor de forma predeterminada con valores ImageOutput y ImageDecoder.Factory.DEFAULT nulos.
    • Se emite un evento Player.Listener.onPositionDiscontinuity cuando se omite el silencio (#765).
    • Se agregó compatibilidad experimental para analizar subtítulos durante la extracción. Puedes habilitar esta función con MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Admite fuentes de contenido multimedia adaptables con PreloadMediaSource.
    • Implementa HttpEngineDataSource, un HttpDataSource con la API de HttpEngine.
    • Se evitó la creación de subclases de CompositeSequenceableLoader. Este componente antes se convirtió en extensible, pero nunca se agregó como subclase dentro de la biblioteca. Para realizar personalizaciones, debes unir una instancia con el patrón decorador y, luego, implementar un CompositeSequenceableLoaderFactory personalizado.
    • Se solucionó el problema por el que la repetición al mismo tiempo provocaba que se borren los metadatos de este elemento (#1007).
    • Cambia el nombre de los métodos experimentalSetSubtitleParserFactory en BundledChunkExtractor.Factory y DefaultHlsExtractorFactory a setSubtitleParserFactory e inhabilita el paso null. Usa los nuevos métodos experimentalParseSubtitlesDuringExtraction(boolean) para controlar el comportamiento del análisis.
    • Se agregó compatibilidad para personalizar el SubtitleParser.Factory que se usa durante la extracción. Esto se puede lograr con MediaSource.Factory.setSubtitleParserFactory().
    • Agrega el prefijo de la fuente a todos los campos Format.id generados a partir de MergingMediaSource. Esto ayuda a identificar qué fuente produjo un Format (#883).
    • Corrige la regex que se usa para validar nombres de claves personalizados de los datos de clientes de medios comunes (CMCD) modificándolos para que solo verifiquen si hay guiones (#1028).
    • Se detiene la codificación doble de los parámetros de consulta de CMCD (#1075).
  • Transformador:
    • Se agregó compatibilidad para compactar videos en cámara lenta de H.265/HEVC SEF
    • Aumenta la velocidad de transmuxación, especialmente para las ediciones que se realizan con la opción "Quitar video".
    • Agrega una API para garantizar que el archivo de salida comience en un fotograma de video Esto puede hacer que el resultado de las operaciones de corte sea más compatible con las implementaciones del reproductor que no muestran el primer fotograma de video hasta la marca de tiempo de presentación (#829).
    • Se agregó compatibilidad para optimizar las operaciones de corte de MP4 de un solo elemento.
    • Agrega compatibilidad para garantizar que un fotograma de video tenga la primera marca de tiempo en el archivo de salida. Corrige los archivos de salida que comienzan con el marco negro en reproductores basados en iOS (#829).
  • Selección de pistas:
    • Agrega DefaultTrackSelector.selectImageTrack para habilitar la selección de segmentos de imágenes.
    • Agrega TrackSelectionParameters.isPrioritizeImageOverVideoEnabled para determinar si se debe seleccionar una pista de imagen en caso de que estén disponibles una pista de imagen y una de video. El valor predeterminado es false, lo que significa que se prioriza la selección de una pista de video.
  • Extractores:
    • Agrega análisis de AV1C adicional al extractor de MP4 para recuperar los valores ColorInfo.colorSpace, ColorInfo.colorTransfer y ColorInfo.colorRange (#692).
    • MP3: Usa una tasa de bits constante (CBR) para buscar archivos con un encabezado Info (el equivalente CBR del encabezado Xing). Anteriormente, usábamos la tabla de búsqueda del encabezado Info, pero esto da como resultado una búsqueda menos precisa que si la ignoramos y suponemos que el archivo es CBR.
    • MPEG2-TS: se agregó compatibilidad con DTS, DTS-LBR y DTS:X Profile2 (#275).
    • Se quitan los tipos de audio de los descriptores de TS y se asignan a marcas de función, lo que permite a los usuarios seleccionar pistas de audio de forma más informada (#973).
  • Audio:
    • Se mejoró el algoritmo de omisión de silencio con un aumento de volumen suave; silencio mínimo retenido y duraciones de silencio más naturales (#7423).
    • Informa de manera más determinista el silencio omitido (#1035).
  • Video:
    • Cambia el constructor MediaCodecVideoRenderer que toma un argumento VideoFrameProcessor.Factory y reemplázalo por un constructor que tome un argumento VideoSinkProvider. Las apps que quieran insertar un VideoFrameProcessor.Factory personalizado pueden crear una instancia de CompositingVideoSinkProvider que use el VideoFrameProcessor.Factory personalizado y pasar el proveedor del receptor de video a MediaCodecVideoRenderer.
  • Texto:
    • Se corrigió la serialización de las señales del mapa de bits para resolver el error Tried to marshall a Parcel that contained Binder objects cuando se usa DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: Ignora el valor rowLock. La especificación CEA-708-E S-2023 establece que se debe suponer que tanto rowLock como columnLock son verdaderos, independientemente de los valores presentes en la transmisión (no se implementó la compatibilidad con columnLock, por lo que se supone efectivamente que siempre es falso).
  • Imagen:
    • Se agregó compatibilidad con miniaturas de DASH. Las imágenes de cuadrícula se recortan y las miniaturas individuales se proporcionan a ImageOutput cerca de los horarios de presentación.
  • DRM:
  • Extensión IMA:
    • Se solucionó el problema por el que no se podían reproducir los anuncios DASH y HLS sin la extensión de archivo adecuada.
  • Sesión:
    • Se inhabilita la detección de doble clic en apps para TV (#962).
    • Se solucionó el problema por el que no se transmitía MediaItem.RequestMetadata solo con valores adicionales no nulos entre sesiones y controladores multimedia.
    • Agrega un constructor a MediaLibrarySession.Builder, que solo toma un Context en lugar de un MediaLibraryService.
  • Extensión HLS:
    • Reduce HlsMediaPeriod a la visibilidad de paquetes privados. No se debe depender directamente de este tipo desde fuera del paquete HLS.
    • Resolver busca el comienzo de un segmento de manera más eficiente (#1031).
  • Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etcétera):
    • Decodificador MIDI: Ignora los mensajes de eventos SysEx (#710).
  • Utilidades de prueba:
    • No pauses la reproducción en TestPlayerRunHelper.playUntilPosition. La prueba mantiene la reproducción en estado de reproducción, pero suspende el progreso hasta que pueda agregar aserciones y más acciones.
  • App de demostración:
    • Agrega un módulo de demostración de versiones cortas para demostrar el uso de PreloadMediaSource con el caso de uso de contenido de formato corto.

Versión 1.3.0-rc01

22 de febrero de 2024

Usa la versión estable 1.3.0.

Versión 1.3.0-beta01

7 de febrero de 2024

Usa la versión estable 1.3.0.

Versión 1.3.0-alpha01

15 de enero de 2024

Usa la versión estable 1.3.0.

Versión 1.2.0

Versión 1.2.1

9 de enero de 2024

  • ExoPlayer:
    • Se corrigió el problema por el que las búsquedas manuales fuera del rango LiveConfiguration.min/maxOffset siguen ajustando el desplazamiento a min/maxOffset.
    • Se corrigió el error por el que los diseños de canal OPUS y VORBIS eran incorrectos para 3, 5, 6, 7 y 8 canales (#8396).
    • Se corrigió el problema por el que las selecciones de pistas después de buscar a cero en una transmisión en vivo dejaban incorrectamente que la transmisión comenzara en su posición predeterminada (#9347).
    • Se solucionó el problema por el que las instancias nuevas de CmcdData.Factory recibían valores negativos para bufferedDurationUs de fuentes de fragmento, lo que generaba un IllegalArgumentException (#888).
  • Transformador:
    • Soluciona un problema que arrojaría el codificador en el momento de la configuración debido a la configuración de una tasa de operación alta.
  • Extractores:
    • Marca las pistas HEVC secundarias (que no se pueden reproducir) en las fotos en movimiento JPEG como ROLE_FLAG_ALTERNATE para evitar que se seleccionen automáticamente para la reproducción debido a su resolución más alta.
    • Se corrigió la detección de fotogramas clave incorrecta para las transmisiones TS H264 (#864).
    • Se corrigió la estimación de la duración de las transmisiones de TS que duran más de 47,721 segundos (#855).
  • Audio:
    • Se corrigió el control de EOS para SilenceSkippingAudioProcessor cuando se llamaba varias veces (#712).
  • Video:
    • Se agregó una solución alternativa para un problema del dispositivo en Galaxy Tab S7 FE, Chromecast con Google TV y Lenovo M10 FHD Plus que causa que las transmisiones AVC de 60 FPS se marquen como no compatibles (#693).
  • Metadatos:
    • Se corrigió el error por el que MediaMetadata solo se propagó desde comentarios de Vorbis con claves en mayúsculas (#876).
    • Se capta OutOfMemoryError cuando se analizan fotogramas ID3 muy grandes, lo que significa que la reproducción puede continuar sin la información de la etiqueta en lugar de que la reproducción falle por completo.
  • DRM:
    • Se extiende la solución alternativa para la URL falsa de la licencia https://default.url de ClearKey a la API nivel 33 y versiones posteriores (anteriormente, la solución alternativa solo se aplicaba exactamente en el nivel de API 33) (#837).
    • Se corrigió ERROR_DRM_SESSION_NOT_OPENED cuando se cambia de contenido encriptado a borrado sin una plataforma adjunta al reproductor. El error se debió a un uso incorrecto de un decodificador seguro para reproducir el contenido claro.
  • Sesión:
    • Coloca las claves y los valores personalizados de MediaMetadataCompat en MediaMetadata.extras y MediaMetadata.extras en MediaMetadataCompat (#756, #802).
    • Se corrigió la transmisión de notifyChildrenChanged para controles heredados (#644).
    • Se corrigió un error por el que configurar un horario negativo para un temporizador setWhen inhabilitado de la notificación causaba una falla en algunos dispositivos (#903).
    • Se corrigió IllegalStateException cuando el controlador de notificaciones multimedia no completó la conexión cuando se solicita la primera actualización de notificaciones (#917).
  • IU:
    • Se corrigió el error por el que los botones para avanzar y retroceder no eran visibles cuando se usaban con Material Design en un BottomSheetDialogFragment (#511).
    • Se solucionó el problema por el que los números del botón de avance rápido de PlayerControlView no estaban alineados (#547).
  • Extensión DASH:
    • Se analiza "f800" como recuento de canales de 5 para Dolby en el manifiesto de DASH (#688).
  • Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etcétera):
    • MIDI: Se corrigió el problema por el que saltar hacia adelante omite los eventos de cambio de programa (#704).
    • Migra a FFmpeg 6.0 y actualiza el NDK compatible a r26b (#707, #867).
  • Extensión Cast:
    • Se limpia la creación de un Timeline para no fallar la app cuando falla la carga de contenido multimedia en el dispositivo de transmisión (#708).

Versión 1.2.0

15 de noviembre de 2023

  • Biblioteca común:
    • Agrega un parámetro @Nullable Throwable a los métodos en la interfaz Log.Logger. El parámetro message de estos métodos ya no contiene información sobre Throwable que se pasa a los métodos Log.{d,i,w,e}(), por lo que las implementaciones deberán agregar manualmente esta información si lo desean (posiblemente mediante Logger.appendThrowableString(String, Throwable)).
    • Se corrigió el problema de compatibilidad de Kotlin en el que los parámetros de tipo genérico anulable y los tipos de elementos de array anulables no se detectan como anulables Algunos ejemplos son los parámetros de los métodos TrackSelectorResult y SimpleDecoder (#6792).
    • Cambia el comportamiento predeterminado de la IU y de la notificación en Util.shouldShowPlayButton para mostrar un botón de "reproducir" mientras se suprime temporalmente la reproducción (p.ej., debido a una pérdida transitoria del foco de audio). El comportamiento heredado se puede mantener con PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) o MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Actualiza androidx.annotation:annotation-experimental a 1.3.1 para corregir https://issuetracker.google.com/251172715.
    • Mueve ExoPlayer.setAudioAttributes a la interfaz de Player.
  • ExoPlayer:
    • Se corrigieron los problemas de búsqueda en las transmisiones AC4 causados por no identificar de forma correcta las muestras de solo decodificación (#11000).
    • Agrega supresión de la reproducción en dispositivos de salida de audio no adecuados (p.ej., la bocina integrada en dispositivos Wear OS) cuando esta función se habilite mediante ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. El motivo de supresión de reproducción se actualizará como Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT si se intenta reproducir cuando no hay salidas de audio adecuadas disponibles o si todas las salidas adecuadas se desconectan durante la reproducción. El motivo de la supresión se quitará cuando se conecte un resultado adecuado.
    • Agrega MediaSource.canUpdateMediaItem y MediaSource.updateMediaItem para aceptar actualizaciones de MediaItem después de la creación a través de Player.replaceMediaItem(s).
    • Permite actualizaciones de MediaItem para todas las clases de MediaSource que proporciona la biblioteca a través de Player.replaceMediaItem(s) (#33, #9978).
    • Se cambia el nombre de MimeTypes.TEXT_EXOPLAYER_CUES a MimeTypes.APPLICATION_MEDIA3_CUES.
    • Agrega PngExtractor, que envía y lee un archivo PNG completo en el TrackOutput como una muestra.
    • Se mejoró el método SequenceableLoader.continueLoading(long) en la interfaz SequenceableLoader para SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contiene parámetros adicionales, como playbackSpeed y lastRebufferRealtimeMs, además del playbackPositionUs existente.
    • Se mejoró el método ChunkSource.getNextChunk(long, long, List, ChunkHolder) en la interfaz ChunkSource a ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Se agregaron campos adicionales al registro de Common Media Client Data (CMCD): falta de búfer (bs), fecha límite (dl), velocidad de reproducción (pr) e inicio (su) (#8699).
    • Agrega luma y profundidad de bits de croma a ColorInfo (#491).
    • Agrega campos adicionales al registro de datos de clientes multimedia comunes (CMCD): próxima solicitud de objeto (nor) y siguiente solicitud de rango (nrr) (#8699).
    • Se agregó la funcionalidad para transmitir datos de datos de clientes multimedia comunes (CMCD) mediante parámetros de consulta (#553).
    • Se corrigió ConcurrentModificationException en ExperimentalBandwidthMeter (#612).
    • Agrega el parámetro MediaPeriodId a CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Se admite ClippingMediaSource (y otras fuentes con compensaciones de tiempo de período/ventana) en ConcatenatingMediaSource2 (#11226).
    • Cambia BaseRenderer.onStreamChanged() para recibir también un argumento MediaPeriodId.
  • Transformador:
    • Analiza los datos de rotación de EXIF para entradas de imagen.
    • Quita el tipo de anotación TransformationRequest.HdrMode y sus constantes asociadas. En su lugar, usa Composition.HdrMode y sus constantes asociadas.
    • Simplifica OverlaySettings para solucionar problemas de rotación.
    • Se cambiaron los parámetros frameRate y durationUs de SampleConsumer.queueInputBitmap a TimestampIterator.
  • Selección de pistas:
    • Agrega DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness para permitir o rechazar explícitamente la adaptación no fluida. El valor predeterminado permanece en su comportamiento actual de true.
  • Extractores:
    • MPEG-TS: Asegúrate de que se renderice el último fotograma. Para ello, pasa la última unidad de acceso de una transmisión a la cola de muestra (#7909).
    • Se corrigió un error de ortografía al determinar rotationDegrees. Se cambió projectionPosePitch por projectionPoseRoll (#461).
    • Quita la suposición de que las instancias de Extractor se pueden inspeccionar directamente con instanceof. Si quieres acceder al entorno de ejecución a los detalles de implementación de un Extractor, primero debes llamar a Extractor.getUnderlyingInstance.
    • Se agregó BmpExtractor,
    • Se agregó WebpExtractor,
    • Se agregó HeifExtractor,
    • Se agregó compatibilidad con la versión clásica de QuickTime a Mp4Extractor.
  • Audio:
    • Se agregó compatibilidad con PCM big-endian de 24 y 32 bits en MP4 y Matroska, y se analiza la codificación PCM para lpcm en MP4.
    • Se agregó compatibilidad para extraer audio de Vorbis en MP4
    • Agrega AudioSink.getFormatOffloadSupport(Format), que recupera el nivel de compatibilidad de descarga que el receptor puede proporcionar para el formato a través de un DefaultAudioOffloadSupportProvider. Muestra el AudioOffloadSupport nuevo que contiene isFormatSupported, isGaplessSupported y isSpeedChangeSupported.
    • Agrega AudioSink.setOffloadMode() a través del cual se establece la configuración de descarga en el receptor de audio. El valor predeterminado es AudioSink.OFFLOAD_MODE_DISABLED.
    • La descarga se puede habilitar a través de setAudioOffloadPreference en TrackSelectionParameters. Si la preferencia establecida es habilitar, el dispositivo admite la descarga para el formato y la selección de pistas es una sola pista de audio, se habilitará la descarga de audio.
    • Si audioOffloadModePreference se establece en AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector solo seleccionará una pista de audio y solo si el formato de esa pista es compatible con la descarga. Si no se admite una pista de audio en la descarga, no se seleccionará ninguna pista.
    • Se inhabilitó la compatibilidad sin espacios para la descarga cuando el nivel de API previo era 33 debido a un problema de posición de reproducción después de la transición de pistas.
    • Quita el parámetro enableOffload de la firma del método DefaultRenderersFactory.buildAudioSink.
    • Quita el método DefaultAudioSink.Builder.setOffloadMode.
    • Quita el valor intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Se agregó compatibilidad con metadatos sin espacios de Opus durante la reproducción de descarga.
    • Se permite la recuperación del procesador mediante la inhabilitación de la descarga si falla en la primera escritura (#627).
    • Habilita la programación de descarga de forma predeterminada para la reproducción solo de audio.
    • Borra ExoPlayer.experimentalSetOffloadSchedulingEnabled y AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • Se cambió el nombre de onExperimentalSleepingForOffloadChanged por onSleepingForOffloadChanged y el de onExperimentalOffloadedPlayback por onOffloadedPlayback
    • Mueve las interfaces y definiciones de TrackSelectionParameters relacionadas con el modo de descarga de audio a una clase AudioOffloadPreferences interna.
    • Agrega las devoluciones de llamada onAudioTrackInitialized y onAudioTrackReleased a AnalyticsListener, AudioRendererEventListener y AudioSink.Listener.
    • Se corrigió el problema de subdesbordamiento del búfer de audio DTS Express (#650).
    • Se corrigió el error por el que la verificación de capacidades de E-AC3-JOC arroja un IllegalArgumentException (#677).
  • Video:
    • Permite que MediaCodecVideoRenderer use un VideoFrameProcessor.Factory personalizado.
    • Se corrigió el error por el que no se podía renderizar el primer fotograma si la transmisión de audio comienza con marcas de tiempo negativas (#291).
  • Texto:
    • Se quita ExoplayerCuesDecoder. Ahora TextRenderer controla directamente las pistas de texto con sampleMimeType = application/x-media3-cues sin necesidad de una instancia de SubtitleDecoder.
  • Metadatos:
    • Ya no se llamará a MetadataDecoder.decode para las muestras de "solo decodificación", ya que la implementación debe mostrar un valor nulo de todos modos.
  • Efecto:
    • Agrega VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) poniendo en cola la entrada de mapa de bits por marca de tiempo.
    • Cambia VideoFrameProcessor.registerInputStream() para que no genere bloqueo. Las apps deben implementar VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Se cambiaron los parámetros frameRate y durationUs de VideoFrameProcessor.queueInputBitmap a TimestampIterator.
  • Extensión IMA:
    • Se corrigió el error por el que una transmisión en vivo DASH de varios períodos que no sea el primer elemento de una playlist puede generar una excepción (#571).
    • Actualiza StreamManager antes de llamar a AdsLoader.destroy()
    • Modifica la versión del SDK de IMA a la versión 3.31.0.
  • Sesión:
    • Configura el comportamiento del servicio en primer plano de las notificaciones como FOREGROUND_SERVICE_IMMEDIATE en DefaultMediaNotificationProvider (#167).
    • Usa solo android.media.session.MediaSession.setMediaButtonBroadcastReceiver() superior al nivel de API 31 para evitar problemas con la API obsoleta en dispositivos Samsung (#167).
    • Usa el controlador de notificaciones multimedia como proxy para establecer los comandos disponibles y el diseño personalizado que se usa para propagar la notificación y la sesión de la plataforma.
    • Convierte los eventos de botones multimedia que recibe MediaSessionService.onStartCommand() dentro de Media3 en lugar de enrutarlos a la sesión de la plataforma y de nuevo a Media3. De esta manera, el controlador de llamada siempre es el controlador de notificaciones multimedia, y las apps pueden reconocer con facilidad las llamadas que provienen de la notificación de la misma manera en todos los niveles de API compatibles.
    • Se corrigió el error por el que MediaController.getCurrentPosition() no avanza cuando se conecta a una MediaSessionCompat heredada.
    • Agrega MediaLibrarySession.getSubscribedControllers(mediaId) para mayor comodidad.
    • Anula MediaLibrarySession.Callback.onSubscribe() para confirmar la disponibilidad del ID superior al que se suscribe el controlador. Si se ejecuta correctamente, se acepta la suscripción y se llama a notifyChildrenChanged() de inmediato para informar al navegador (#561).
    • Agrega el módulo de demostración de sesiones para el SO Automotive y habilita la demostración de la sesión para Android Auto.
    • No configures la cola de la sesión del framework cuando COMMAND_GET_TIMELINE no esté disponible para el controlador de notificaciones multimedia. Si Android Auto es el controlador de cliente que lee desde la sesión del framework, no se muestra el botón queue en la IU de Android Auto (#339).
    • Usa DataSourceBitmapLoader de forma predeterminada en lugar de SimpleBitmapLoader (#271, #327).
    • Se agregó MediaSession.Callback.onMediaButtonEvent(Intent), que permite que las apps anulen el control predeterminado de eventos de botones de medios.
  • IU:
    • Se agregó una implementación de Player.Listener para dispositivos Wear OS que controla la supresión de reproducción debido a Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT mediante el inicio de un diálogo del sistema para permitir que un usuario conecte una salida de audio adecuada (p.ej., auriculares Bluetooth). El objeto de escucha reanudará la reproducción automáticamente si se conecta un dispositivo adecuado dentro de un tiempo de espera configurable (el valor predeterminado es de 5 minutos).
  • Descargas:
    • Declara el tipo de servicio en primer plano de "sincronización de datos" para DownloadService de modo que sea compatible con Android 14. Cuando se usa este servicio, la app también necesita agregar dataSync como foregroundServiceType en el manifiesto y agregar el permiso FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Extensión HLS:
    • Actualiza la lista de reproducción en vivo de HLS con un intervalo calculado desde la hora de inicio de la última carga en lugar de la hora de la última carga completada (#663).
  • Extensión DASH:
    • Permitir varios identificadores de DASH en la URL de la plantilla de segmento.
    • Se agregó compatibilidad experimental para analizar subtítulos durante la extracción. Esto es más compatible con la combinación de subtítulos superpuestos, lo que incluye la resolución de parpadeos cuando se realiza la transición entre segmentos de subtítulos. Puedes habilitar esta función con DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Extensión RTSP:
    • Se corrigió una condición de carrera que podría generar IndexOutOfBoundsException cuando se vuelve a TCP o la reproducción bloqueada en algunas situaciones.
    • Verifica el estado en la configuración de RTSP cuando se devuelve el estado de carga de RtspMediaPeriod (#577).
    • Ignora los métodos de solicitud de Rtsp personalizados en el encabezado público de respuesta de Opciones (#613).
    • Usa el valor de tiempo de espera de la respuesta de configuración de RTSP en el intervalo de tiempo de envío de solicitudes de opciones de RTSP de keep-alive (#662).
  • Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etcétera):
    • Libera el módulo de decodificador MIDI, que proporciona compatibilidad con la reproducción de archivos MIDI estándar mediante la biblioteca Jsyn para sintetizar audio.
    • Agrega DecoderOutputBuffer.shouldBeSkipped para marcar directamente los búferes de salida que no necesitan presentarse. Se prefiere esta opción en lugar de C.BUFFER_FLAG_DECODE_ONLY, que dejará de estar disponible.
    • Agrega Decoder.setOutputStartTimeUs y SimpleDecoder.isAtLeastOutputStartTimeUs para permitir que los decodificadores descarten muestras de solo decodificación antes de la hora de inicio. Se recomienda esta opción en lugar de Buffer.isDecodeOnly, que dejará de estar disponible.
    • Se corrigió el error que se publicaba el artefacto de decodificador MIDI en el repositorio de Maven. Se cambia el nombre del artefacto a media3-exoplayer-midi (#734).
  • Extensión Leanback:
    • Se corrigió el error por el que inhabilitar una superficie puede provocar una ArithmeticException en el código Leanback (#617).
  • Utilidades de prueba:
    • Haz que TestExoPlayerBuilder y FakeClock sean compatibles con las pruebas de IU de Espresso y de IU de Compose. Esto corrige un error en el que la reproducción avanza de manera no determinista durante las interacciones de vista de Espresso o Compose.
  • Se quitan los símbolos obsoletos:
    • Se quitan TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) y TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Usa Composition.Builder.setHdrMode(int) y pasa el Composition a Transformer.start(Composition, String) en su lugar.
    • Se quitó el método obsoleto DownloadNotificationHelper.buildProgressNotification y, en su lugar, usa un método no obsoleto que tome un parámetro notMetRequirements.

Versión 1.2.0-rc01

1 de noviembre de 2023

Usa la versión estable 1.2.0.

Versión 1.2.0-beta01

19 de octubre de 2023

Usa la versión estable 1.2.0.

Versión 1.2.0-alpha02

29 de septiembre de 2023

Usa la versión estable 1.2.0.

Versión 1.2.0-alpha01

17 de agosto de 2023

Usa la versión estable 1.2.0.

Versión 1.1.0

Versión 1.1.1

16 de agosto de 2023

  • Biblioteca común:
    • Se quitó la dependencia multidex agregada accidentalmente de todos los módulos (#499).
  • ExoPlayer:
    • Se corrigió el error en PlaybackStatsListener por el que se creaban PlaybackStats falsos después de borrar la playlist.
    • Agrega campos adicionales al registro de Common Media Client Data (CMCD): formato de transmisión (sf), tipo de transmisión (st), versión (v), tasa de bifurcación superior (tb), duración del objeto (d), capacidad de procesamiento medida (mtp) y tipo de objeto (ot) (#8699).
  • Audio:
    • Se corrigió un error por el que Player.getState() nunca cambiaba a STATE_ENDED cuando se reproducían archivos muy cortos (#538).
  • Descarga de audio:
    • Antepón páginas del encabezado de ID de Ogg y del encabezado de comentarios al flujo de bits para la reproducción de Opus descargada de acuerdo con RFC 7845.
  • Video:
    • H.265/HEVC: Se corrigió el análisis de la información de la foto de referencia a corto y largo plazo de SPS.
  • Texto:
    • CEA-608: Cambia la lógica de truncamiento de la inserción para que solo considere el texto visible. Anteriormente, se incluían las sangrías y el desplazamiento de tabulación cuando se limitaba la longitud de la indicación a 32 caracteres (lo que era técnicamente correcto según la especificación) (#11019).
  • Extensión IMA:
    • Modifica la versión del SDK de IMA a la versión 3.30.3.
  • Sesión:
    • Agrega un diseño personalizado al estado del controlador y proporciona un método get para acceder a él. Cuando cambia el diseño personalizado, se llama a MediaController.Listener.onCustomLayoutChanged. Las apps que quieren enviar diferentes diseños personalizados a diferentes controladores de Media3 pueden hacerlo en MediaSession.Callback.onConnect usando un AcceptedResultBuilder para asegurarse de que el diseño personalizado esté disponible para el controlador cuando se complete la conexión.
    • Se corrigieron casos en los que MediaLibraryServiceLegacyStub envió un error a un Result que no admitía esto y generaba un UnsupportedOperationException (#78).
    • Corrige la forma en que PlayerWrapper crea un VolumeProviderCompat determinando volumeControlType a través de comandos heredados (COMMAND_ADJUST_DEVICE_VOLUME y COMMAND_SET_DEVICE_VOLUME) y comandos nuevos (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS y COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Versión 1.1.0

5 de julio de 2023

  • Biblioteca común:
    • Se agregó el motivo de supresión para la ruta de audio inadecuada y se reproduce cuando el cambio esté listo y se suprimió demasiado tiempo. (#15).
    • Agrega comandos al jugador:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Agrega métodos sobrecargados a Player que permiten a los usuarios especificar marcas de volumen:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • Se agregó Builder para DeviceInfo y se dio de baja el constructor existente
    • Agrega DeviceInfo.routingControllerId para especificar el ID del controlador de enrutamiento para reproducciones remotas.
    • Agrega Player.replaceMediaItem(s) como acceso directo para agregar y quitar elementos en la misma posición (#8046).
  • ExoPlayer:
    • Permitir que ExoPlayer controle los métodos de volumen del dispositivo solo si se habilitan explícitamente Usa ExoPlayer.Builder.setDeviceVolumeControlEnabled para tener acceso a lo siguiente:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) y setDeviceVolume(int, int)
      • increaseDeviceVolume(int) y increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) y decreaseDeviceVolume(int, int)
    • Agrega FilteringMediaSource, que permite filtrar los tipos de segmentos disponibles desde un MediaSource.
    • Se agregó compatibilidad para incluir datos de cliente multimedia común (CMCD) en las solicitudes salientes de formatos de transmisión adaptables DASH, HLS y SmoothStreaming. Se incorporaron los siguientes campos, br, bl, cid, rtp y sid (#8699). Estructura y métodos de la API:
      • El registro de CMCD está inhabilitado de forma predeterminada. Usa MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) para habilitarlo.
      • Todas las claves están habilitadas de forma predeterminada. Anula CmcdConfiguration.RequestConfig.isKeyAllowed(String key) para filtrar qué claves se registran.
      • Anula CmcdConfiguration.RequestConfig.getCustomData() para habilitar el registro de claves personalizado.
    • Se agrega una acción adicional al manifiesto de la demostración principal para facilitar el inicio de la app de demostración con un archivo *.exolist.json personalizado (#439).
    • Se agregó ExoPlayer.setVideoEffects() para usar Effect durante la reproducción de video.
    • Actualiza SampleQueue para almacenar sourceId como long en lugar de int. Esto cambia las firmas de los métodos públicos SampleQueue.sourceId y SampleQueue.peekSourceId.
    • Agrega parámetros a los métodos shouldStartPlayback y onTracksSelected de LoadControl que permitan asociar estos métodos con el MediaPeriod relevante.
    • Para cambiar la firma de ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>), agrega un parámetro de cronograma que contenga los puntos con los UIDs usados como claves en el mapa. Esto es necesario para evitar problemas de simultaneidad con transmisiones en vivo de varios períodos.
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) y BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) dejaron de estar disponibles. En su lugar, se puede llamar a la variante de los métodos sin mediaTimeOffsetUs. Ten en cuenta que, incluso para las variantes obsoletas, el desplazamiento ya no se agrega a startTimeUs ni endTimeUs de los objetos MediaLoadData que envía el despachador.
    • Se cambió el nombre de ExoTrackSelection.blacklist por excludeTrack y el de isBlacklisted por isTrackExcluded.
    • Se corrigió el comportamiento incoherente entre ExoPlayer.setMediaItem(s) y addMediaItem(s) cuando se llamaba en una playlist vacía
  • Transformador:
    • Se quita Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). En su lugar, usa ExoPlayerAssetLoader.Factory(MediaSource.Factory) y Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Se quita Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • Se corrigió un error por el que la transformación podía detenerse (lo que provocaba que se agotara el tiempo de espera del combinador) si el final de la transmisión de video por Internet se indicaba en el momento en que un fotograma de entrada estaba pendiente de procesamiento
    • Consulta códecs a través de MediaCodecList en lugar de usar las utilidades de findDecoder/EncoderForFormat para expandir la compatibilidad.
    • Se quitó la configuración de marco B en DefaultEncoderFactory, ya que no funciona en algunos dispositivos.
  • Selección de pistas:
    • Agrega DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, que está inhabilitado de forma predeterminada. Si se habilita esta opción, DefaultTrackSelector activará una nueva selección de pista cuando cambien las capacidades del procesador.
  • Extractores:
    • Ogg: Se corrigió el error que se producía cuando se buscaba en archivos de larga duración (#391).
    • FMP4: Se corrigió el problema por el que TimestampAdjuster inicializaba un desplazamiento incorrecto de marca de tiempo con el tiempo de muestra de metadatos de emsg atom (#356).
  • Audio:
    • Se corrigió el error por el que algunas reproducciones fallaban cuando la tunelización estaba habilitada y los AudioProcessors estaban activos, p.ej., para el recorte sin espacios (#10847).
    • Encapsula fotogramas de Opus en paquetes Ogg en reproducciones directas (descarga).
    • Extrapola la posición actual durante el sueño con la programación de aligeramiento.
    • Se agregaron Renderer.release() y AudioSink.release() para liberar los recursos al final del ciclo de vida del jugador.
    • Escucha los cambios en las funciones de audio en DefaultAudioSink. Agrega un parámetro obligatorio context en el constructor de DefaultAudioSink, con el que DefaultAudioSink se registrará como el objeto de escucha en AudioCapabilitiesReceiver y actualizará su propiedad audioCapabilities cuando se le informe sobre un cambio de capacidades.
    • Se propagan los cambios de capacidades de audio a través de un nuevo evento onAudioCapabilitiesChanged en la interfaz AudioSink.Listener y una nueva interfaz RendererCapabilities.Listener que activa eventos onRendererCapabilitiesChanged.
    • Se agregó ChannelMixingAudioProcessor para aplicar el escalamiento o la mezcla a los canales de audio.
    • Agrega un nuevo valor int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE a DecoderDiscardReasons para descartar el decodificador de audio cuando el modo de omisión es posible después de que cambian las capacidades de audio.
    • Se agregó compatibilidad de reproducción directa para DTS Express y DTS:X (#335).
  • Video:
    • Haz que MediaCodecVideoRenderer informe un VideoSize con un ancho y una altura de 0 cuando el procesador esté inhabilitado. Se llama a Player.Listener.onVideoSizeChanged según corresponda cuando Player.getVideoSize() cambia. Con este cambio, el tamaño del video de ExoPlayer con MediaCodecVideoRenderer tiene un ancho y un alto de 0 cuando Player.getCurrentTracks no admite video o aún no se determina el tamaño de la pista de video compatible.
  • DRM:
    • Reduce la visibilidad de varios métodos solo internos en DefaultDrmSession a los que no se espera que se llame desde fuera del paquete de DRM:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Agrega una biblioteca de combinador nueva que se pueda usar para crear un archivo contenedor MP4.
  • Extensión IMA:
    • Habilita transmisiones DASH en vivo de varios períodos para DAI. Ten en cuenta que la implementación actual aún no admite la búsqueda en transmisiones en vivo (#10912).
    • Se corrigió un error por el que se insertaba un grupo de anuncios nuevo en las transmisiones en vivo porque la posición del contenido calculada en cronogramas consecutivos varía un poco.
  • Sesión:
    • Agrega el método auxiliar MediaSession.getControllerForCurrentRequest para obtener información sobre el controlador que llama actualmente a un método Player.
    • Se agregó androidx.media3.session.MediaButtonReceiver para permitir que las apps implementen la reanudación de la reproducción con eventos de botones de contenido multimedia enviados, por ejemplo, mediante auriculares Bluetooth (#167).
    • Agrega la implementación predeterminada a MediaSession.Callback.onAddMediaItems para permitir que se pasen los MediaItems solicitados a Player si tienen LocalConfiguration (p.ej., URI) (#282).
    • Agrega los botones de comandos "buscar al anterior" y "buscar al siguiente" en la vista de notificaciones multimedia compactas de forma predeterminada para Android 12 y versiones anteriores (#410).
    • Agrega la implementación predeterminada a MediaSession.Callback.onAddMediaItems para permitir que se pasen los MediaItems solicitados a Player si tienen LocalConfiguration (p.ej., URI) (#282).
    • Agrega los botones de comandos "buscar al anterior" y "buscar al siguiente" en la vista de notificaciones multimedia compactas de forma predeterminada para Android 12 y versiones anteriores (#410).
  • IU:
    • Se agregaron los métodos de Util shouldShowPlayButton y handlePlayPauseButtonAction para escribir elementos de la IU personalizados con un botón de reproducción/pausa.
  • Extensión RTSP:
    • Para MPEG4-LATM, usa el valor de ID de nivel de perfil predeterminado si está ausente en el mensaje SDP de respuesta de descripción (#302).
    • Usa el URI base para la resolución de la ruta de acceso relativa de la sesión RTSP si está presente en el encabezado de respuesta DESCRIBE (#11160).
  • Extensión DASH:
    • Quita la compensación de tiempo multimedia de MediaLoadData.startTimeMs y MediaLoadData.endTimeMs para transmisiones DASH de varios períodos.
    • Se corrigió un error por el que volver a preparar una fuente multimedia de Dash en vivo de varios períodos producía un IndexOutOfBoundsException (#10838).
  • Extensión HLS:
    • Agrega HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) para establecer un tiempo de espera para que el subproceso de carga espere a que TimestampAdjuster se inicialice. Si la inicialización no se completa antes del tiempo de espera, se arroja una PlaybackException para evitar la detención infinita de la reproducción. El tiempo de espera se establece en cero de forma predeterminada (#323).
  • Utilidades de prueba:
    • Comprueba que no haya insensibilidad entre mayúsculas y minúsculas en el esquema de URI en DataSourceContractTest.
  • Se quitan los símbolos obsoletos:
    • Quita los constructores DefaultAudioSink y usa DefaultAudioSink.Builder en su lugar.
    • Quita HlsMasterPlaylist y usa HlsMultivariantPlaylist en su lugar.
    • Se quita Player.stop(boolean). En su lugar, usa Player.stop() y Player.clearMediaItems() (si reset es true).
    • Se quitaron dos constructores SimpleCache obsoletos y usa un constructor no obsoleto que tome un DatabaseProvider en su lugar para obtener un mejor rendimiento.
    • Quita el constructor DefaultBandwidthMeter y usa DefaultBandwidthMeter.Builder en su lugar.
    • Quita los constructores DefaultDrmSessionManager y usa DefaultDrmSessionManager.Builder en su lugar.
    • Quita dos constructores HttpDataSource.InvalidResponseCodeException obsoletos y usa un constructor no obsoleto que acepte campos adicionales(cause, responseBody) para mejorar el registro de errores.
    • Quita DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash y DownloadHelper.forSmoothStreaming, y usa DownloadHelper.forMediaItem en su lugar.
    • Se quitó el constructor DownloadService obsoleto, y se usa un constructor no obsoleto que incluya la opción de proporcionar un parámetro channelDescriptionResourceId.
    • Quita las constantes de string obsoletas para charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME y UTF16LE_NAME) y, en su lugar, usa los caracteres de Kotlin del paquete kotlin.text, java.nio.charset.StandardCharsets o com.google.common.base.Charsets.
    • Se quitó el constructor WorkManagerScheduler obsoleto y se usa un constructor no obsoleto que incluya la opción de proporcionar un parámetro Context en su lugar.
    • Quita los métodos obsoletos createVideoSampleFormat, createAudioSampleFormat, createContainerFormat y createSampleFormat, que se usaban para crear una instancia de la clase Format. En su lugar, usa Format.Builder para crear instancias de Format.
    • Quita los métodos obsoletos copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate y copyWithVideoSize, y usa Format.buildUpon() y los métodos set.
    • Se quitó el ExoPlayer.retry() obsoleto, y se usa prepare() en su lugar.
    • Se quitó el constructor obsoleto DefaultTrackSelector de argumento cero y, en su lugar, usa DefaultTrackSelector(Context).
    • Se quitó el constructor OfflineLicenseHelper obsoleto. En su lugar, usa OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Se quitó el constructor DownloadManager obsoleto. En su lugar, usa el constructor que toma un Executor.
    • Se quitaron los constructores Cue obsoletos y, en su lugar, usa Cue.Builder.
    • Se quitó el constructor OfflineLicenseHelper obsoleto. En su lugar, usa OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Se quitaron cuatro métodos AnalyticsListener obsoletos:
      • onDecoderEnabled, usa onAudioEnabled o onVideoEnabled en su lugar.
      • onDecoderInitialized, usa onAudioDecoderInitialized o onVideoDecoderInitialized en su lugar.
      • onDecoderInputFormatChanged, usa onAudioInputFormatChanged o onVideoInputFormatChanged en su lugar.
      • onDecoderDisabled, usa onAudioDisabled o onVideoDisabled en su lugar.
    • Quita los objetos Player.Listener.onSeekProcessed y AnalyticsListener.onSeekProcessed obsoletos, y usa onPositionDiscontinuity con DISCONTINUITY_REASON_SEEK en su lugar.
    • Quita ExoPlayer.setHandleWakeLock(boolean) y usa setWakeMode(int) en su lugar.
    • Se quitó el objeto DefaultLoadControl.Builder.createDefaultLoadControl() obsoleto, y se usa build() en su lugar.
    • Quita el MediaItem.PlaybackProperties obsoleto, y usa MediaItem.LocalConfiguration en su lugar. El campo obsoleto MediaItem.playbackProperties ahora es del tipo MediaItem.LocalConfiguration.

Versión 1.1.0-rc01

21 de junio de 2023

Usa la versión estable 1.1.0.

Versión 1.1.0-beta01

7 de junio de 2023

Usa la versión estable 1.1.0.

Versión 1.1.0-alpha01

10 de mayo de 2023

Usa la versión estable 1.1.0.

Versión 1.0.0

Versión 1.0.2

18 de mayo de 2023

Lanzamiento de androidx.media3:media3-*:1.0.2. La versión 1.0.2 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.7.

Esta versión incluye los siguientes cambios desde la versión 1.0.1:

  • Biblioteca principal:
    • Agrega Buffer.isLastSample(), que denota si Buffer contiene la marca C.BUFFER_FLAG_LAST_SAMPLE.
    • Se solucionó el problema por el que es posible que no se renderice el último fotograma si la última muestra con marcos se quita de la cola sin leer la muestra de "fin de la transmisión". (#11079).
  • Extractores:
    • Se corrigió el análisis de SPS de H.265 en archivos MPEG-TS mediante la reutilización de la lógica de análisis que ya usan los extractores RTSP y MP4 (#303).
  • Texto:
    • SSA: Agrega compatibilidad con archivos UTF-16 si comienzan con una marca de orden de bytes (#319).
  • Sesión:
    • Se solucionó el problema por el que MediaController no actualizaba los comandos disponibles cuando se conectaba a un MediaSessionCompat heredado que actualiza sus acciones.
    • Se corrigió el error que impedía que MediaLibraryService mostrara un valor nulo para una llamada de la IU del sistema a Callback.onGetLibraryRoot con params.isRecent == true en el nivel de API 30 (#355).
    • Se corrigió la fuga de memoria de MediaSessionService o MediaLibraryService (#346).
    • Se corrigió el error por el que una combinación de Timeline y la actualización de posición en un MediaSession podía hacer que MediaController arroje una IllegalStateException.

Versión 1.0.1

18 de abril de 2023

Lanzamiento de androidx.media3:media3-*:1.0.1. La versión 1.0.1 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.6.

  • Biblioteca principal:
    • Se restablece la anulación de la transmisión en vivo de destino cuando se busca la posición predeterminada (#11051).
    • Se corrigió el error por el que las transmisiones de muestra vacías en el contenido multimedia podían hacer que la reproducción se detenga.
  • Sesión:
    • Se corrigió el error por el que varios elementos de cola idénticos publicados por una MediaSessionCompat heredada generaban una excepción en MediaController (#290).
    • Se agregó el reenvío faltante de MediaSession.broadcastCustomCommand al MediaControllerCompat.Callback.onSessionEvent heredado (#293).
    • Se corrigió el error por el que no se actualizaban los comandos disponibles cuando se llamaba a MediaSession.setPlayer.
    • Se corrige el problema por el que las instancias de TrackSelectionOverride enviadas desde un MediaController se ignoran si hacen referencia a un grupo con Format.metadata (#296).
    • Se solucionó el problema por el que Player.COMMAND_GET_CURRENT_MEDIA_ITEM debía estar disponible para acceder a los metadatos a través del MediaSessionCompat heredado
    • Se solucionó el problema por el que las instancias de MediaSession en un subproceso en segundo plano causaban fallas cuando se usaban en MediaSessionService (#318).
    • Se solucionó el problema por el que la biblioteca declaraba un receptor de botón multimedia sin que la app lo hubiera previsto (#314).
  • DASH:
    • Se corrigió el manejo de cronogramas de segmentos vacíos (#11014).
  • RTSP:
    • Vuelve a intentarlo con TCP si la configuración de RTSP con UDP falla con el error RTSP 461 UnsupportedTransport (#11069).

Versión 1.0.0

22 de marzo de 2023

Lanzamiento de androidx.media3:media3-*:1.0.0. La versión 1.0.0 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.5.

No hubo cambios desde la versión 1.0.0-rc02.

Versión 1.0.0-rc02

2 de marzo de 2023

Lanzamiento de androidx.media3:media3-*:1.0.0-rc02. La versión 1.0.0-rc02 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.4.

  • Biblioteca principal:
    • Se corrigió la detección del tipo de red en el nivel de API 33 (#10970).
    • Se corrigió NullPointerException cuando se llama a ExoPlayer.isTunnelingEnabled (#10977).
  • Descargas:
    • Marca la diferencia máxima de la hora de inicio de dos segmentos que se combinarán y que se podrán configurar en SegmentDownloader y subclases (#248).
  • Audio:
    • Se corrigió la reproducción rota de MP3 sin espacios en dispositivos Samsung (#8594).
    • Se corrigió el error por el que las velocidades de reproducción que se establecen inmediatamente después de inhabilitar el audio podían anularse con un cambio de velocidad anterior (#10882).
  • Video:
    • Asigna el formato HEVC HDR10 a HEVCProfileMain10HDR10 en lugar de HEVCProfileMain10.
    • Se agregó una solución alternativa para un problema del dispositivo en Chromecast con Google TV y Lenovo M10 FHD Plus que causa que las transmisiones AVC de 60 FPS se marquen como no compatibles (#10898).
    • Se solucionaron los problemas de rendimiento de la liberación de fotogramas cuando se reproduce contenido multimedia con una velocidad de fotogramas mucho mayor que la frecuencia de actualización de la pantalla
  • Transmisión:
    • Se corrigió STATE_IDLE transitorio durante la transición entre elementos multimedia (#245).
  • RTSP:
    • Captura la IllegalArgumentException que se arroja cuando se analiza el RTSP no válido. Describe los mensajes de respuesta (#10971).
  • Sesión:
    • Se corrigió un error por el que el botón de reproducción/pausa de notificaciones no se actualiza con el estado del reproductor (#192).
  • Extensión IMA:
    • Se corrigió un error que impedía que se iniciaran transmisiones de DAI sin anuncios porque no se recibía el primer evento LOADED (y, en el caso sin anuncios, el único).

Versión 1.0.0-rc01

16 de febrero de 2023

Lanzamiento de androidx.media3:media3-*:1.0.0-rc01. La versión 1.0.0-rc01 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.3.

  • Biblioteca principal:
    • Modifica la lógica de ordenamiento del decodificador del renderizador para mantener las preferencias de MediaCodecSelector, incluso si un decodificador informa que no puede reproducir el contenido multimedia de forma eficiente. Por ejemplo, con el selector predeterminado, se preferirá el decodificador de hardware con compatibilidad funcional en lugar del decodificador de software que es totalmente compatible con el formato (#10604).
    • Agrega ExoPlayer.Builder.setPlaybackLooper que establezca un subproceso de reproducción preexistente para una instancia nueva de ExoPlayer.
    • Permite que se borren los asistentes del administrador de descargas (#10776).
    • Agrega el parámetro a BasePlayer.seekTo para indicar también el comando que se usó en el salteo.
    • Usa el tema cuando cargues elementos de diseño en el nivel de API 21 o uno superior (#220).
    • Agrega ConcatenatingMediaSource2, que permite combinar varios elementos multimedia en una sola ventana (#247).
  • Extractores:
    • Arroja una ParserException en lugar de una NullPointerException si a la tabla de ejemplo (stbl) le falta una descripción de ejemplo obligatoria (stsd) cuando se analizan los átomos tipo trak.
    • Omite correctamente las muestras cuando se saltea directamente a un marco de sincronización en fMP4 (#10941).
  • Audio:
    • Usa la tasa de bits de formato de audio comprimido para calcular el tamaño mínimo del búfer de AudioTrack en las reproducciones directas (transferencia).
  • Texto:
    • Corrige TextRenderer pasando un índice no válido (negativo) a Subtitle.getEventTime si un archivo de subtítulos no contiene indicadores.
    • SubRip: Agrega compatibilidad con archivos UTF-16 si comienzan con una marca de orden de bytes.
  • Metadatos:
    • Analiza varios valores separados por valores nulos de los marcos de ID3, como lo permite ID3 v2.4.
    • Agrega MediaMetadata.mediaType para indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos.
    • Agrega MediaMetadata.isBrowsable como reemplazo de MediaMetadata.folderType. El tipo de carpeta dejará de estar disponible en la próxima versión.
  • DASH:
    • Agrega el análisis completo de los conjuntos de adaptación de imagen, incluida la cantidad de mosaicos (#3752).
  • IU:
    • Corrige el PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) que dejó de estar disponible para garantizar que se pasen los cambios de visibilidad al objeto de escucha registrado (#229).
    • Corrige el orden de los controles centrales del reproductor en PlayerView cuando se usa un diseño de derecha a izquierda (RTL) (#227).
  • Sesión:
    • Agrega un SimpleBasePlayer abstracto para ayudar a implementar la interfaz Player en reproductores personalizados.
    • Agrega un método auxiliar para convertir el token de sesión de la plataforma en SessionToken de Media3 (#171).
    • Usa onMediaMetadataChanged para activar las actualizaciones de la sesión multimedia de la plataforma (#219).
    • Agrega la sesión multimedia como argumento de getMediaButtons() del DefaultMediaNotificationProvider y usa listas inmutables para brindar mayor claridad (#216).
    • Agrega el objeto de escucha de devolución de llamada onSetMediaItems para brindar medios y así modificar o establecer la lista MediaItem, el índice de inicio y la posición por sesión antes de configurar el reproductor (#156).
    • Evita la detección de una presión doble para eventos de botones de contenido multimedia que no son Bluetooth (#233).
    • Hace que QueueTimeline sea más sólido en caso de un estado de sesión heredado con sombreado (#241).
  • Metadatos:
    • Analiza varios valores separados por valores nulos de los marcos de ID3, como lo permite ID3 v2.4.
    • Agrega MediaMetadata.mediaType para indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos.
    • Agrega MediaMetadata.isBrowsable como reemplazo de MediaMetadata.folderType. El tipo de carpeta dejará de estar disponible en la próxima versión.
  • Extensión Cast:
    • Modifica la versión del SDK de Cast a 21.2.0.
  • Extensión IMA:
    • Quita el objeto de escucha del reproductor de ImaServerSideAdInsertionMediaSource en el subproceso de la aplicación para evitar problemas relacionados con los subprocesos.
    • Agrega una propiedad focusSkipButtonWhenAvailable a ImaServerSideAdInsertionMediaSource.AdsLoader.Builder para solicitar que se enfoque el botón Omitir en dispositivos de TV y establécelo como verdadero de forma predeterminada.
    • Agrega un método focusSkipButton() a ImaServerSideAdInsertionMediaSource.AdsLoader para solicitar de manera programática que se enfoque el botón Omitir.
    • Modifica la versión del SDK de IMA a la versión 3.29.0.
  • App de demostración:
    • Solicita el permiso de notificaciones para descargar notificaciones durante el tiempo de ejecución (#10884).

Versión 1.0.0-beta03

22 de noviembre de 2022

Lanzamiento de androidx.media3:media3-*:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.2.

  • Biblioteca principal:
    • Se agregó ExoPlayer.isTunnelingEnabled a fin de verificar si la tunelización está habilitada para las pistas seleccionadas actualmente (#2518).
    • Se agregó WrappingMediaSource para simplificar la unión de un solo MediaSource (#7279).
    • Descarta el búfer de retroceso antes de que la reproducción se detenga debido a que la memoria disponible es insuficiente.
    • Cierra el bloque de seguimiento "doSomeWork" cuando se habilita la descarga.
    • Se corrigió el problema del seguimiento de sesión con búsquedas rápidas en PlaybackStatsListener (#180).
    • Se envía la devolución de llamada onMediaItemTransition faltante cuando se llama a seekToNext o seekToPrevious en una lista de reproducción de un solo elemento (#10667).
    • Se agrega Player.getSurfaceSize que muestra el tamaño de la superficie en la que se renderiza el video.
    • Se corrigió un error por el que la eliminación de objetos de escucha durante la versión del reproductor podía provocar una IllegalStateException (#10758).
  • Compilación:
    • Se aplicó una compileSdkVersion mínima para evitar errores de compilación (#10684).
    • Evita el bloque de publicación cuando se incluye en otra compilación de Gradle.
  • Selección de pistas:
    • Prefiere otras pistas en lugar de Dolby Vision si la pantalla no las admite (#8944)
  • Descargas:
    • Se corrigió el posible bucle infinito en ProgressiveDownloader que generaba la descarga y la reproducción simultánea con el mismo PriorityTaskManager (#10570).
    • Se muestra la notificación de descarga de inmediato (#183).
    • Limita las eliminaciones de descargas paralelas a 1 para evitar la creación excesiva de subprocesos (#10458).
  • Video:
    • Prueba el decodificador alternativo para Dolby Vision si la pantalla no lo admite (#9794).
  • Audio:
    • Usa SingleThreadExecutor para liberar instancias de AudioTrack y evitar errores de OutOfMemory cuando se lanzan varios jugadores al mismo tiempo (#10057).
    • Agrega AudioOffloadListener.onExperimentalOffloadedPlayback para el estado de transferencia de AudioTrack (#134).
    • Hace que AudioTrackBufferSizeProvider sea una interfaz pública.
    • Se agregó ExoPlayer.setPreferredAudioDevice para establecer el dispositivo de salida de audio preferido (#135).
    • Se cambia el nombre de androidx.media3.exoplayer.audio.AudioProcessor a androidx.media3.common.audio.AudioProcessor.
    • Mapea el audio de 8 canales y el de 12 canales a las máscaras de canal 7.1 y 7.1.4, respectivamente, en todas las versiones de Android (#10701).
  • Metadatos:
    • MetadataRenderer ahora se puede configurar para procesar metadatos apenas estén disponibles. Crea una instancia con MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) para especificar si el procesador mostrará los metadatos antes o de forma sincronizada con la posición del reproductor.
  • DRM:
    • Soluciona un error en la implementación de ClearKey de Android 13 que muestra una URL de licencia no vacía, pero no válida.
    • Corrige el error setMediaDrmSession failed: session not opened cuando se alterna entre esquemas DRM en una lista de reproducción (p. ej., de Widevine a ClearKey).
  • Texto:
    • CEA-608: Garantiza que los comandos de cambio de servicio en el campo 2 se manejen de forma correcta (#10666).
  • DASH:
    • Se analiza EventStream.presentationTimeOffset de los manifiestos (#10460).
  • IU:
    • Usa las anulaciones actuales del reproductor como ajuste predeterminado en TrackSelectionDialogBuilder (#10429).
  • Sesión:
    • Garantiza que los comandos siempre se ejecuten en el orden correcto, incluso si algunos requieren resolución asíncrona (#85).
    • Agrega DefaultMediaNotificationProvider.Builder para compilar instancias de DefaultMediaNotificationProvider. El compilador puede configurar el ID de la notificación, el ID del canal de notificaciones y el nombre del canal de notificaciones que usa el proveedor. Además, agrega el método DefaultMediaNotificationProvider.setSmallIcon(int) para configurar el ícono pequeño de notificaciones (#104).
    • Garantiza que los comandos enviados antes de MediaController.release() no se descarten (#99).
    • SimpleBitmapLoader puede cargar mapa de bits a partir de URI de file:// (#108).
    • Se corrigió la aserción que impide que MediaController busque un anuncio en un período (#122).
    • Cuando finaliza la reproducción, se detiene MediaSessionService desde el primer plano y se muestra una notificación para reiniciar la reproducción del último elemento multimedia reproducido (#112).
    • No se inicia un servicio en primer plano con un intent pendiente para pausar (#167).
    • Oculta manualmente la "insignia" asociada con la notificación que creó DefaultNotificationProvider en el nivel de API 26 y 27 (la insignia se oculta de forma automática en el nivel API 28 y posteriores) (#131).
    • Se corrigió un error por el que una segunda conexión de Binder de una MediaSession heredada a un MediaController de Media3 ocasiona IllegalStateExceptions (#49).
  • RTSP:
    • Se agregó el manejo de paquetes fragmentados de H263 (#119).
    • Se agregó compatibilidad con MP4A-LATM (#162).
  • IMA:
    • Se agregó tiempo de espera para cargar la información del anuncio y manejar casos en los que el SDK de IMA se atasca cuando se carga un anuncio (#10510).
    • Se evita la omisión de los anuncios durante el video cuando se busca al final del contenido (#10685).
    • Se calcula de forma correcta la duración del período para las transmisiones en vivo con anuncios insertados en el servidor, por ejemplo, la DAI de IMA (#10764).
  • Extensión FFmpeg:
    • Agrega las nuevas marcas obligatorias para vincular las bibliotecas FFmpeg con el NDK 23.1.7779620 y versiones posteriores (#9933).
  • Extensión AV1:
    • Se actualizó la versión de CMake para evitar incompatibilidades con las versiones más recientes de Android Studio (#9933).
  • Extensión Cast:
    • Implementa getDeviceInfo() para poder identificar CastPlayer cuando se controla la reproducción con un MediaController (#142).
  • Transformador:
    • Se agregó el temporizador del perro guardián del combinador para detectar cuándo la generación de una muestra de salida es demasiado lenta.
  • Se quitan los símbolos obsoletos:
    • Se quita Transformer.Builder.setOutputMimeType(String). Se quitó esta función. El tipo de MIME siempre será MP4 cuando se use el combinador predeterminado.

Versión 1.0.0-beta02

21 de julio de 2022

Lanzamiento de androidx.media3:media3-*:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.

Esta versión corresponde a la versión de ExoPlayer 2.18.1.

  • Biblioteca principal:
    • Asegúrate de que, si cambias ShuffleOrder con ExoPlayer.setShuffleOrder, se genere una llamada a Player.Listener#onTimelineChanged con reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Para los medios progresivos, incluye solo las pistas seleccionadas en la posición de almacenamiento en búfer (#10361).
    • Se permite el registrador personalizado para todos los resultados de registro de ExoPlayer (#9752).
    • Se corrigió la implementación de setDataSourceFactory en DefaultMediaSourceFactory, que no funcionaba en algunos casos (#116).
  • Extractores:
    • Se corrigió el análisis de conjuntos de imágenes de referencia a corto plazo de H265 (#10316).
    • Se corrigió el análisis de las tasas de bits de los cuadros esds (#10381).
  • DASH:
    • Se analizan las URLs de licencia de ClearKey de los manifiestos (#10246).
  • IU:
    • Asegúrate de que TalkBack anuncie la opción de velocidad actualmente activa en el menú de controles de reproducción (#10298).
  • RTSP:
    • Se agregó el manejo de paquetes fragmentados de VP8 (#110).
  • Extensión Leanback:
    • Escucha los cambios de playWhenReady en LeanbackAdapter (10420).
  • Transmisión:
    • Usa el MediaItem que se haya pasado a los métodos de la lista de reproducción como Window.mediaItem en CastTimeline (#25, #8212).
    • Se admiten Player.getMetadata() y Listener.onMediaMetadataChanged() con CastPlayer (#25).

Versión 1.0.0-beta01

16 de junio de 2022

Lanzamiento de androidx.media3:media3-*:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.

Esto corresponde a ExoPlayer versión 2.18.0.

  • Biblioteca principal:
    • Habilita la compatibilidad con el diagnóstico de la plataforma de Android a través de MediaMetricsManager. ExoPlayer reenviará eventos de reproducción y datos de rendimiento a la plataforma, lo que ayuda a proporcionar información de rendimiento y depuración del sistema en el dispositivo. Google también puede recopilar estos datos si el usuario del dispositivo habilita compartir los datos de uso y diagnóstico. Las apps pueden inhabilitar la opción de contribuir al diagnóstico de la plataforma para ExoPlayer con ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Se corrigió el error por el que las pistas se restablecen con demasiada frecuencia cuando se usa MergingMediaSource, por ejemplo, cuando se transfieren subtítulos y se cambia el subtítulo seleccionado durante la reproducción (#10248).
    • Ya no se detecta el tipo de red 5G-NSA en las API 29 y 30. Estas reproducciones supondrán que la red es 4G.
    • No permite que se pase null a MediaSource.Factory.setDrmSessionManagerProvider ni MediaSource.Factory.setLoadErrorHandlingPolicy. Las instancias de DefaultDrmSessionManagerProvider y DefaultLoadErrorHandlingPolicy se pueden pasar de forma explícita si es necesario.
    • Se agregó MediaItem.RequestMetadata para representar los metadatos necesarios a fin de reproducir contenido multimedia cuando no se conoce el LocalConfiguration exacto. También se quitó MediaMetadata.mediaUrl, ya que ahora se incluye en RequestMetadata.
    • Se agregó Player.Command.COMMAND_SET_MEDIA_ITEM para permitir que los jugadores dejen configurar un solo elemento.
  • Selección de pistas:
    • Se compactó la clase TrackSelectionOverrides en TrackSelectionParameters y promueve TrackSelectionOverride a una clase de nivel superior.
    • Se cambió el nombre de TracksInfo por Tracks y el de TracksInfo.TrackGroupInfo por Tracks.Group. También se cambió el nombre de Player.getCurrentTracksInfo y Player.Listener.onTracksInfoChanged por Player.getCurrentTracks y Player.Listener.onTracksChanged. Esto incluye "anular la baja" del nombre del método Player.Listener.onTracksChanged, pero con diferentes tipos de parámetros.
    • Se cambió DefaultTrackSelector.buildUponParameters y DefaultTrackSelector.Parameters.buildUpon para mostrar DefaultTrackSelector.Parameters.Builder en lugar de DefaultTrackSelector.ParametersBuilder, que dejó de estar disponible.
    • Se agregó DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, que está habilitado de forma predeterminada. Cuando se habilite, DefaultTrackSelector preferirá pistas de audio cuyo recuento de canales no supere las capacidades de salida del dispositivo. En dispositivos de mano, DefaultTrackSelector preferirá los formatos estéreo o mono, en lugar de los formatos de audio multicanal, a menos que el formato multicanal pueda espacializarse (Android 12L y versiones posteriores) o sea un formato de sonido envolvente Dolby. Además, en los dispositivos compatibles con la espacialización de audio, DefaultTrackSelector supervisará los cambios en las propiedades de espacializador y activará una selección de pistas nueva en esos casos. Los dispositivos con un modo de IU television se excluyen de estas restricciones y se dará prioridad al formato con el recuento de canales más alto. Para habilitar esta función, la instancia DefaultTrackSelector debe construirse con un Context.
  • Video:
    • Se cambió el nombre de DummySurface por PlaceholderSurface.
    • Se agregó compatibilidad con AV1 a MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Se usa el tipo de MIME no estándar de publicidad de decodificador de audio LG AC3.
    • Se cambió el tipo de datos que se muestra de AudioAttributes.getAudioAttributesV21() de android.media.AudioAttributes a una nueva clase de wrapper AudioAttributesV21 para evitar una verificación lenta de ART en niveles de API inferiores a 21.
    • Consulta la plataforma (nivel de API 29 o superior) o supone el recuento de canales de codificación de audio para la transferencia de audio cuando el recuento de canales de audio de formato no está configurado, lo que se produce con la preparación sin fragmentos de HLS (10204).
    • Se configura AudioTrack con la máscara de canal AudioFormat.CHANNEL_OUT_7POINT1POINT4 si el decodificador produce audio PCM de 12 canales (#10322).
  • DRM
    • Se asegura de que la sesión de DRM se actualice siempre de forma correcta cuando busque inmediatamente después de un cambio de formato (10274).
  • Texto:
    • Se cambió Player.getCurrentCues() para mostrar CueGroup en lugar de List<Cue>.
    • SSA: Admite la configuración de estilo OutlineColour cuando BorderStyle == 3 (es decir, OutlineColour establece el fondo de la indicación) (#8435).
    • CEA-708: Analiza datos en varios bloques de servicio e ignora bloques que no estén asociados con el número de servicio seleccionado en el momento.
    • Se quitó RawCcExtractor, que solo se usaba para controlar un formato de subtítulos interno de Google.
  • Extractores:
    • Se agregó compatibilidad con AVI (#2092).
    • Matroska: Analiza DiscardPadding para pistas de Opus.
    • MP4: Analiza las tasas de bits de los cuadros esds.
    • Ogg: Permite el ID de Opus duplicado y los encabezados de comentarios (#10038).
  • IU:
    • Se corrigió la entrega de eventos a los OnClickListener configurados en PlayerView en el caso de useController=false (#9605). También se corrigió la entrega de eventos a OnLongClickListener para todas las configuraciones de vista.
    • Se corrigió el tratamiento incorrecto de una secuencia de eventos táctiles que salen de los límites de PlayerView antes de ACTION_UP como un clic (#9861).
    • Se corrigió el problema de accesibilidad a PlayerView, en el que la presión podía activar o desactivar la reproducción en lugar de ocultar los controles (#8627).
    • Se reescribió TrackSelectionView y TrackSelectionDialogBuilder para que funcionen con la interfaz Player en lugar de ExoPlayer. Esto permite que las vistas se usen con otras implementaciones de Player y quita la dependencia del módulo de IU con el módulo de ExoPlayer. Este es un cambio rotundo.
    • No se muestran pistas de texto forzado en el selector de pistas PlayerView; además, mantiene seleccionada una pista de texto forzado adecuada si se selecciona "Ninguno" (#9432).
  • DASH:
    • Se analiza el recuento de canales desde los elementos DTS AudioChannelConfiguration. Esto vuelve a habilitar la transferencia de audio para transmisiones de DTS (#10159).
    • No se permite que se pase null a DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Las instancias de DefaultCompositeSequenceableLoaderFactory se pueden pasar de forma explícita si es necesario.
  • HLS:
    • Se usa el resguardo de la preparación fragmentada si el atributo de la lista de reproducción CODECS no contiene el códec de audio (#10065).
    • No se permite que se pase null a HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory ni HlsMediaSource.Factory.setPlaylistTrackerFactory. Las instancias de DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory o una referencia a DefaultHlsPlaylistTracker.FACTORY se pueden pasar de forma explícita si es necesario.
  • Transmisión fluida:
    • No se permite que se pase null a SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Las instancias de DefaultCompositeSequenceableLoaderFactory se pueden pasar de forma explícita si es necesario.
  • RTSP:
    • Se agregó el lector RTP para H263 (#63).
    • Se agregó el lector de RTP para MPEG4 (#35).
    • Se agregó el lector de RTP para HEVC (#36).
    • Se agregó el lector de RTP para AMR. Actualmente, solo se admiten transmisiones AMR de un canal no intercaladas. No se admite la carga útil de RTP de AMR (#46).
    • Se agregó el lector de RTP para VP8 (#47).
    • Se agregó el lector de RTP para WAV (#56).
    • Se corrigió el encabezado de autorización básica de RTSP (#9544).
    • Ya no se verifican los campos SDP obligatorios, puesto que ExoPlayer no los necesita (#10049).
    • Se arroja una excepción verificada cuando se analiza el tiempo de RTSP (#10165).
    • Se agregó el lector de RTP para VP9 (#47).
    • Se agregó el lector de RTP para OPUS (#53).
  • Fuentes de datos:
    • Se cambió el nombre de DummyDataSource por PlaceholderDataSource.
    • Se solucionó el control de la interrupción de OkHttp.
  • Sesión:
    • Se reemplazó MediaSession.MediaItemFiller por MediaSession.Callback.onAddMediaItems para permitir la resolución asíncrona de las solicitudes.
    • Ahora se admiten métodos setMediaItems(s) cuando MediaController se conecta a una sesión multimedia heredada.
    • Se quitaron MediaController.setMediaUri y MediaSession.Callback.onSetMediaUri. La misma funcionalidad se puede lograr con MediaController.setMediaItem y MediaSession.Callback.onAddMediaItems.
    • Ahora se desvían las llamadas heredadas de MediaController a fin de reproducir contenido multimedia en MediaSession.Callback.onAddMediaItems, en lugar de onSetMediaUri.
    • Se agregaron MediaNotification.Provider y DefaultMediaNotificationProvider para proporcionar personalización de la notificación.
    • Se agregaron BitmapLoader y SimpleBitmapLoader para descargar imágenes de material gráfico.
    • Se agregaron MediaSession.setCustomLayout() para proporcionar retrocompatibilidad con la sesión heredada.
    • Se agregaron MediaSession.setSessionExtras() para proporcionar paridad de funciones con la sesión heredada.
    • Se cambió el nombre de MediaSession.MediaSessionCallback por MediaSession.Callback, el de MediaLibrarySession.MediaLibrarySessionCallback por MediaLibrarySession.Callback y el de MediaSession.Builder.setSessionCallback por setCallback.
    • Se corrigió la NPE en MediaControllerImplLegacy (#59).
    • Se actualizó la información de posición de la sesión en el cambio de cronograma (#51).
    • Se corrigió la NPE en MediaControllerImplBase después de lanzar el controlador (#74).
  • Reproducción de anuncios / IMA:
    • Se disminuyó la frecuencia de sondeo de anuncios de 100 ms a 200 ms para cumplir con las recomendaciones del Media Rating Council (MRC).
  • Extensión FFmpeg:
    • Se actualizó la versión de CMake a 3.21.0+ para evitar un error de CMake que provocaba una falla en la sincronización de Gradle de Android Studio (#9933).
  • Se quitan los símbolos obsoletos:
    • Se quitó Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Se usa Player.Listener.onTracksChanged(Tracks) en su lugar.
    • Se quitaron Player.getCurrentTrackGroups y Player.getCurrentTrackSelections. Usa Player.getCurrentTracks en su lugar. También puedes seguir usando ExoPlayer.getCurrentTrackGroups y ExoPlayer.getCurrentTrackSelections, aunque estos métodos permanecen obsoletos.
    • Se quitaron las constantes DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT y DEFAULT_TRACK_SELECTOR_PARAMETERS de DownloadHelper. Usa getDefaultTrackSelectorParameters(Context) cuando sea posible y, de lo contrario, usa DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.
    • Se quitó el constructor DefaultTrackSelector(ExoTrackSelection.Factory). Usa DefaultTrackSelector(Context, ExoTrackSelection.Factory) en su lugar.
    • Se quitó Transformer.Builder.setContext. En su lugar, se debe pasar el Context al constructor Transformer.Builder.

Versión 1.0.0-alpha03

14 de marzo de 2022

Lanzamiento de androidx.media3:media3-*:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Esto corresponde a ExoPlayer versión 2.17.1.

  • Audio:
    • Se corrigieron las comprobaciones de errores de las capacidades de audio de Dolby Atmos (E-AC3-JOC) en HLS.
  • Extractores:
    • FMP4: Se corrige el problema por el que los metadatos de muestra de emsg podrían salir en el orden incorrecto para las transmisiones que contienen emsg atoms v0 y v1 (#9996).
  • Texto:
    • Se corrige la interacción de SingleSampleMediaSource.Factory.setTrackId y MediaItem.SubtitleConfiguration.Builder.setId para priorizar el campo SubtitleConfiguration y recurrir al valor Factory si no está configurado (#10016).
  • Reproducción de anuncios:
    • Se corrigen los agotamientos de audio entre períodos de anuncios en las transmisiones en vivo de HLS SSAI.

Versión 1.0.0-alpha02

2 de marzo de 2022

Lanzamiento de androidx.media3:media3-*:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Esto corresponde a ExoPlayer versión 2.17.0.

  • Biblioteca principal:
    • Se agrega el método protegido DefaultRenderersFactory.getCodecAdapterFactory() para que las subclases de DefaultRenderersFactory que anulen buildVideoRenderers() o buildAudioRenderers() puedan acceder a la fábrica del adaptador de códec y pasarlo a las instancias MediaCodecRenderer que crean.
    • Se propagan los campos de encabezado ICY name y genre a MediaMetadata.station y MediaMetadata.genre respectivamente para que lleguen a la app a través de Player.Listener.onMediaMetadataChanged() (#9677).
    • Se quitan las claves nulas de DefaultHttpDataSource#getResponseHeaders.
    • Se suspende y vuelve a intentar cuando se produce un error en la creación de una instancia MediaCodec. Esto soluciona un problema que ocurre en algunos dispositivos cuando se cambia una plataforma de un códec seguro a otro (#8696).
    • Se agrega MediaCodecAdapter.getMetrics() para permitir que los usuarios obtengan datos de métricas de MediaCodec (#9766).
    • Se corrige la resolución de dependencia de Maven (#8353).
    • Se inhabilita el ajuste automático de velocidad para las transmisiones en vivo que no tienen funciones de baja latencia ni una solicitud de usuario que establezca la velocidad (#9329).
    • Se cambia el nombre de DecoderCounters#inputBufferCount a queuedInputBufferCount.
    • Se hace el elemento SimpleExoPlayer.renderers privado. Se puede acceder a los procesadores a través de ExoPlayer.getRenderer.
    • Se actualizaron algunos valores constantes de AnalyticsListener.EventFlags para que coincidan con los valores en Player.EventFlags.
    • Se divide AnalyticsCollector en una interfaz y una implementación predeterminada para permitir que R8 lo quite si una app no lo necesita.
  • Selección de pistas:
    • Se admiten las marcas de función de video preferidas en la selección de pistas (#9402).
    • Se actualiza la lógica de selección de pistas de video a fin de tener en cuenta las marcas de función y los tipos de MIME preferidos cuando se seleccionan varias pistas de video para adaptarlas (#9519).
    • Se actualiza la lógica de selección de pistas de audio y video para solo elegir formatos de selecciones adaptables que tengan el mismo nivel de compatibilidad con decodificadores y hardware (#9565).
    • Se actualiza la lógica de selección de las pistas de video para dar prioridad a códecs más eficientes si se admiten varios códecs con decodificadores principales acelerados por hardware (#4835).
    • Se eligen las preferencias de contenido de audio (por ejemplo, la pista de audio "predeterminada" o una pista que coincida con el idioma de la configuración regional del sistema) por sobre las restricciones técnicas de selección de pistas (por ejemplo, el tipo de MIME preferido o la cantidad máxima de canales).
    • Se corrigió un problema de selección de pistas en el que la anulación de un grupo de pistas no inhabilitaba otros grupos del mismo tipo (#9675).
    • Se corrige un problema de selección de pistas en el que no se aplicaba, de forma correcta, una combinación de anulaciones de pista no vacía y vacía (#9649).
    • Se prohíbe duplicar TrackGroup en TrackGroupArray. TrackGroup siempre se pueden distinguir si se configura id en el constructor TrackGroup. De esta manera, se corrige una falla que se producía cuando se reanudaba la reproducción después de ejecutar la app en segundo plano con una anulación de pista activa (#9718).
    • Se modifica la lógica en AdaptiveTrackSelection para permitir un aumento de calidad con suficiente ancho de banda de red, incluso si la reproducción está muy cerca del borde activo (#9784).
  • Video:
    • Se corrige la lógica de resguardo del decodificador para Dolby Vision a fin de usar un decodificador H264/H265 compatible si es necesario.
  • Audio:
    • Se corrige la lógica de resguardo del decodificador para Dolby Atmos (E-AC3-JOC) a fin de usar un decodificador E-AC3 compatible si es necesario.
    • Se cambian las API de AudioCapabilities para que sea necesario pasar AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES de manera explícita en lugar de null.
    • Se permite la personalización del cálculo del tamaño del búfer de AudioTrack mediante la inserción de AudioTrackBufferSizeProvider en DefaultAudioSink (#8891).
    • Vuelve a intentar la creación de AudioTrack si el tamaño del búfer solicitado es superior a 1 MB (#9712).
  • Extractores:
    • WAV: Se agrega compatibilidad con transmisiones RF64 (#9543).
    • Se corrige el análisis incorrecto de unidades SPS NAL H.265 (#9719).
    • Se analizan los comentarios de Vorbis (incluido METADATA_BLOCK_PICTURE) en los archivos Ogg Opus y Ogg Vorbis.
  • Texto:
    • Se agrega un campo MediaItem.SubtitleConfiguration.id que se propaga al campo Format.id de la pista de subtítulo creada a partir de la configuración (#9673).
    • Se agrega compatibilidad básica con los subtítulos de WebVTT en contenedores de Matroska (#9886).
    • No se permite que Cea708Decoder lea más que el tamaño declarado de un bloque de servicios.
  • DRM:
    • Se quita playbackLooper de DrmSessionManager.(pre)acquireSession. Cuando una app usa DrmSessionManager en MediaSource personalizado, en su lugar, playbackLooper debe pasarse a DrmSessionManager.setPlayer.
  • Reproducción de anuncios / IMA:
    • Se agrega compatibilidad con la inserción de anuncios dinámicos (DAI) de IMA (#8213).
    • Se agrega un método a AdPlaybackState para permitir el restablecimiento de un grupo de anuncios a fin de que se pueda volver a reproducir (#9615).
    • Se aplica, de forma forzosa, la velocidad de reproducción de 1.0 durante la reproducción de anuncios (#9018).
    • Se corrige un problema por el que un grupo de anuncios que no se cargaba causaba un restablecimiento inmediato de reproducción (#9929).
  • IU:
    • Se corrige el color de los números en los botones para avanzar y retroceder StyledPlayerView cuando se usan ciertos temas (#9765).
    • Se traducen correctamente las strings de velocidad de reproducción (#9811).
  • DASH:
    • Se agregan propiedades analizadas, esenciales y adicionales a Representation (#9579).
    • Se admite la función de seguimiento forced-subtitle (#9727).
    • Ya no se interpreta la función de pista main como C.SELECTION_FLAG_DEFAULT.
    • Se corrige la lógica de exclusión de la URL base para manifiestos que no declaran el espacio de nombres de DVB (#9856).
    • Se admiten URLs MPD.Location relativas (#9939).
  • HLS:
    • Se propaga correctamente Format.label para las transmisiones HLS de solo audio (#9608).
    • Se usa la preparación sin fragmentos de forma predeterminada para mejorar el tiempo de inicio. Si tus formatos contienen pistas de subtítulos multiplexados que no están declaradas en la lista de reproducción principal, debes agregarlas a esta lista, de modo que estén disponibles para reproducirse o debes desactivar la preparación sin fragmentos con HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Se admite la búsqueda precisa de fotogramas clave en HLS (#2882).
  • RTSP:
    • Se proporciona una API de cliente a fin de anular SocketFactory que se utiliza para cualquier conexión del servidor (#9606).
    • Se prefiere el método de autenticación DIGEST en lugar de BASIC si ambos están presentes (#9800).
    • Se controla cuando no está disponible el tiempo de seguimiento de RTSP (#9775).
    • Se ignoran los valores de encabezado de RTP-Info no válidos (#9619).
  • Transformador:
    • Se aumenta la versión mínima requerida de la API a 21.
    • TransformationException ahora se usa para describir errores que se producen durante una transformación.
    • Se agregó TransformationRequest para especificar las opciones de transformación.
    • Se permite que se registren varios objetos de escucha.
    • Se corrige el problema que atasca el transformador cuando el resultado del códec se lee de forma parcial.
    • Se corrige la NPE posible en Transformer.getProgress cuando se liberan los lanzamientos del combinador.
    • Se agregó una app de demo para aplicar transformaciones.
  • Extensión MediaSession:
    • De forma predeterminada, MediaSessionConnector ahora borra la lista de reproducción detenida. Las apps que quieran conservar la lista de reproducción pueden llamar a setClearMediaItemsOnStop(false) en el conector.
  • Extensión Cast:
    • Se corrige el error que impedía que CastPlayer llamara a onIsPlayingChanged correctamente (#9792).
    • Se admiten metadatos de audio, incluido el material gráfico con DefaultMediaItemConverter (#9663).
  • Extensión FFmpeg:
    • Causa que build_ffmpeg.sh dependa de binutils de LLVM en lugar de los de GNU (#9933).
  • Compatibilidad con Android 12:
    • Se actualiza la extensión Cast para que dependa de com.google.android.gms:play-services-cast-framework:20.1.0. Las versiones anteriores de play-services-cast-framework no son compatibles con las apps orientadas a Android 12 y fallan con IllegalArgumentException cuando se crean PendingIntent (#9528)..
  • Se quitan los símbolos obsoletos:
    • Se quita Player.EventListener. Se usa Player.Listener en su lugar.
    • Se quitan MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory y MediaSourceFactory#setDrmUserAgent. Se usa MediaSourceFactory#setDrmSessionManagerProvider en su lugar.
    • Se quita MediaSourceFactory#setStreamKeys. Se usa MediaItem.Builder#setStreamKeys en su lugar.
    • Se quita MediaSourceFactory#createMediaSource(Uri). Se usa MediaSourceFactory#createMediaSource(MediaItem) en su lugar.
    • Se quita setTag de DashMediaSource, HlsMediaSource y SsMediaSource. Se usa MediaItem.Builder#setTag en su lugar.
    • Se quita DashMediaSource#setLivePresentationDelayMs(long, boolean). Se usan MediaItem.Builder#setLiveConfiguration y MediaItem.LiveConfiguration.Builder#setTargetOffsetMs para anular el manifiesto, o DashMediaSource#setFallbackTargetLiveOffsetMs para proporcionar un valor de resguardo.
    • Se quita (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Ya no es posible inhabilitar la aplicación forzosa de subprocesos.
    • Se quitan ActionFile y ActionFileUpgradeUtil. Se usa ExoPlayer 2.16.1 o una versión anterior para usar ActionFileUpgradeUtil a fin de combinar archivos de acción heredados en DefaultDownloadIndex.
    • Se quita ProgressiveMediaSource#setExtractorsFactory. Se usa el constructor ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) en su lugar.
    • Se quitan ProgressiveMediaSource.Factory#setTag y ProgressiveMediaSource.Factory#setCustomCacheKey. Se usan MediaItem.Builder#setTag y MediaItem.Builder#setCustomCacheKey en su lugar.
    • Se quitan los constructores DefaultRenderersFactory(Context, @ExtensionRendererMode int) y DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Se usan el constructor DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode y DefaultRenderersFactory#setAllowedVideoJoiningTimeMs en su lugar.
    • Se quitan todos los constructores públicos CronetDataSource. Se usa CronetDataSource.Factory en su lugar.
  • Se cambia el siguiente IntDefs solo a @Target(TYPE_USE). Es posible que se interrumpa la compilación de usos en Kotlin, que se puede corregir si se mueve la anotación para anotar el tipo (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (en el paquete com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (en el paquete com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Versión 1.0.0-alpha01

27 de octubre de 2021

Lanzamiento de androidx.media3:media3-*:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.

Funciones nuevas

Media3 es la nueva casa de las bibliotecas de compatibilidad de contenido multimedia, incluido ExoPlayer. La primera versión alfa contiene implementaciones funcionales y anticipadas de bibliotecas para implementar casos de uso de contenido multimedia, como los siguientes:

  • ExoPlayer, un reproductor multimedia a nivel de la aplicación para Android fácil de personalizar y extender
  • Funcionalidad de sesión multimedia a los efectos de exponer y controlar las reproducciones (este nuevo módulo de sesiones usa la misma interfaz de Player que ExoPlayer)
  • Componentes de la IU para compilar interfaces de usuario de reproducción de contenido multimedia
  • Módulos que unen la funcionalidad en otras bibliotecas con el fin de usarlos con ExoPlayer, por ejemplo, la inserción de anuncios a través del SDK de IMA

Si deseas obtener más información, consulta el Proyecto de GitHub de Media3.

Anteriormente, ExoPlayer se alojaba en un proyecto de GitHub de ExoPlayer independiente. En Media3, el nombre de su paquete es androidx.media3.exoplayer. Planeamos mantener y lanzar el proyecto de GitHub de ExoPlayer por un tiempo, de modo que las apps puedan migrar a Media3. Media3 tiene reemplazos para todos los módulos de ExoPlayer, excepto las extensiones heredadas media2 y mediasession, que se reemplazan con el nuevo módulo media3-session. Esto brinda una integración directa entre las reproducciones y las sesiones de contenido multimedia sin necesidad de usar una clase de adaptador o conector.