Media3
| Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
|---|---|---|---|---|
| 22 de octubre de 2025 | 1.8.0 | - | - | 1.9.0-alpha01 |
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.8.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 using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$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.9.0
Versión 1.9.0-alpha01
22 de octubre de 2025
Lanzamiento de androidx.media3:media3-*:1.9.0-alpha01.
La versión 1.9.0-alpha01 contiene estas confirmaciones.
- Biblioteca común:
- Se actualizó
minSdka23en línea con otras bibliotecas de AndroidX. - Se agregó
PlayerTransferState, que facilita la transferencia del estado de reproducción entre instancias dePlayer. - Agrega los métodos
void mute()yvoid unmute()a Player que conserven y, luego, restablezcan el volumen de Player antes y después de establecerlo en cero. - Se publicaron las clases de utilidad
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManageryStuckPlayerDetectorque antes usabaExoPlayerde forma interna para permitir la reutilización en otros reproductores (#1893). - Se corrigió el control del objeto de escucha
ForwardingPlayercuando el reproductor delegado subyacente usa la igualdad de referencia para comparar instancias de objetos de escucha (#2675). - Agrega una función de extensión de suspensión
Player.listenToen la bibliotecamedia3-common-ktxque especifique elPlayer.Eventsparticular sobre el que se debe actuar. - Se corrigió una falla en
BasePlayer.getBufferedPercentageque se producía por un desbordamiento de números enteros cuando la posición almacenada en búfer informada era implausiblemente mucho mayor que la duración informada (#2750).
- Se actualizó
- ExoPlayer:
- Se agregó una detección de jugadores atascados que activa un error del reproductor
StuckPlayerExceptionsi el reproductor parece atascado. Esto sucede en los siguientes casos, en los que cada tiempo de espera predeterminado se puede configurar enExoPlayer.Buildersi es necesario:- Después de 10 minutos de
STATE_BUFFERINGmientras intentas reproducir contenido y no hay progreso en el almacenamiento en búfer. - Después de 10 segundos de
STATE_READYmientras se intenta reproducir contenido y no hay progreso en la reproducción. - Después de 1 minuto de
STATE_READYmás allá de la duración declarada sin llegar al final del elemento. - Después de 10 minutos con un motivo de supresión de reproducción mientras se intenta reproducir.
- Después de 10 minutos de
- Se habilitó el control de bloqueo de activación de forma predeterminada para solucionar problemas con el almacenamiento en búfer durante la reproducción en segundo plano. Esto equivale a establecer
ExoPlayer.Builder.setWakeModeenC.WAKE_MODE_LOCAL. - Agrega lógica de escucha para actualizar automáticamente el ID del dispositivo virtual cuando se informe un cambio al
Contextque se pasó originalmente aExoPlayer.Builder. - Agrega
ExoPlayer.setVirtualDeviceIdpara actualizar manualmente el ID del dispositivo virtual obtenido deContextque se pasó aExoPlayer.Builder. - Asegúrate de que los renderizadores no consuman datos del siguiente elemento de la playlist más de 10 segundos antes del final del elemento actual.
- Se agregaron
setSeekBackIncrementMs,setSeekForwardIncrementMsysetMaxSeekToPreviousPositionMsaExoPlayerpara actualizar estos parámetros de configuración después de la construcción (#2736). - Agrega la funcionalidad de almacenamiento previo en caché en
DefaultPreloadManager. Ahora las apps pueden devolverDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)oDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)a través deTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)para indicar que un elemento multimedia debe almacenarse previamente en la caché. - Usa la función de almacenamiento previo en caché de
DefaultPreloadManageren la app de demostración de formato corto. - Se agregaron métodos de configuración
DefaultLoadControl.Builderpara la reproducción local y se ajustaron los valores predeterminados deDefaultLoadControlpara que funcionen bien con una amplia variedad de archivos locales. - Se corrigió un error por el que establecer una playlist vacía podía dejar el reproductor en
STATE_READYoSTATE_BUFFERING. - Se mejoraron las APIs del administrador de carga previa:
- Agrega
addMediaItems(List<MediaItem>, List<T>)yaddMediaSources(List<MediaSource>, List<T>)que agregan los elementos multimedia o las fuentes de medios en lote, y llama automáticamente ainvalidate()después. - Agrega
removeMediaItems((List<MediaItem>)yremoveMediaSources(List<MediaSource>)que quiten los elementos multimedia o las fuentes de medios en lote, y asegúrate de que el administrador de carga previa no comience a cargar previamente ni continúe cargando previamente ninguno de ellos después de la eliminación. - Permite que
DefaultPreloadManager.setCurrentPlayingIndex(int)se invalide automáticamente. Las apps ya no necesitan llamar ainvalidate()de forma explícita después de actualizar el índice de reproducción actual.
- Agrega
- Se agregó la capacidad de omitir el restablecimiento de fotogramas clave para las búsquedas hacia adelante dentro del mismo grupo de imágenes en el modo de desplazamiento.
- Agrega
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)para que las apps establezcan un valor de bytes de búfer objetivo para un reproductor con elplayerNameespecificado. Ahora, elDefaultLoadControlpuede tomar decisiones sobre cada jugador por separado en función de los bytes asignados y los bytes de búfer objetivo. - Agrega
SkipInfoalAdPlaybackState.AdGrouppara incluir información de omisión para cada anuncio del grupo de anuncios. - Se corrigió un error por el que llamar a
removeMediaItems(List)durante la reproducción de un anuncio posterior al video provocaba una falla (#2746). - Se corrigió un problema de interrupciones en la reproducción de playlists en el que los fotogramas se establecían erróneamente como la última muestra y se renderizaban.
- Se habilitó la ruta de reintento si el reproductor no puede generar el ID de sesión de audio (#2382, #2678).
- Se agregó compatibilidad para controlar los bytes totales del búfer de las fuentes en
DefaultPreloadManagerpara evitar que los bytes totales del búfer para la carga previa crezcan de forma arbitraria. Para usar la lógica de control predeterminada, las apps pueden establecer los bytes del búfer de destino para la carga previa a través deDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)para unplayerNamedePlayerId.Preload.name("preload") y, luego, insertar elDefaultLoadControlcreado a través deDefaultPreloadManager.Builder.setLoadControl(LoadControl).
- Se agregó una detección de jugadores atascados que activa un error del reproductor
- CompositionPlayer:
- Publica
CompositionPlayerbajo una nueva anotación@ExperimentalApipara indicar que está disponible para experimentación, pero que aún está en desarrollo. Es probable que algunas APIs cambien significativamente en versiones futuras, y existen problemas y limitaciones conocidos con algunos casos de uso (algunos no están documentados). - Se agregó compatibilidad con
COMMAND_SET_AUDIO_ATTRIBUTESy el control del enfoque de audio enCompositionPlayer. - Se agregó compatibilidad para cambiar la velocidad en secuencias secundarias en
CompositionPlayer.
- Publica
- Transformador:
- Usa
InAppMp4Muxercomo muxer predeterminado. - Se agregó
EditedMediaItem.Builder#setSpeed()y se dejó de usarEffects#createExperimentalSpeedChangingEffects(). - Reemplaza
forceAudioTrackyforceVideoTrackportrackTypesenEditedMediaItemSequence.
- Usa
- Selección de pistas:
- Agrega
TrackSelectionParameters.selectTextByDefaultpara preferir la selección de cualquier pista de texto sin especificar otras preferencias más específicas. - Agrega
preferredVideoLabels,preferredAudioLabelsypreferredTextLabelsenTrackSelectionParameterspara especificar una preferencia por pistas con una etiqueta específica, por ejemplo, las que se leen de las etiquetas NAME de HLS (#1666).
- Agrega
- Extractores:
- FLAC: Se ajustó la detección de encabezados para reducir la posibilidad de encontrar encabezados espurios en los datos de FLAC codificados, lo que genera errores de decodificación (#558).
- MP3: Permite espacios entre las etiquetas ID3 (y antes de ellas) al comienzo de los archivos MP3 (#811, #5718).
- MP4: Desambigua entre los tipos MIME
audio/mpeg(MP3),audio/mpeg-L1yaudio/mpeg-L2inspeccionando el valor de la capa de la primera muestra antes de emitir un formato de pista desde el extractor (#2683). - MP4: Se mejoró la eficiencia de detección de archivos muy grandes. Para ello, se supone que un cuadro
stblde más de 1 MB implica que el archivo no debe estar fragmentado (#2650). - Matroska: Se agregó compatibilidad con la detección de DTS-HD (#6225).
- Se corrigió un problema en
MatroskaExtractorpor el que la búsqueda podía ser imprecisa para los archivos con varias pistas. Ahora los puntos de referencia se asocian correctamente con sus pistas respectivas, lo que permite una búsqueda más precisa. - MP4: Se agregó compatibilidad con los metadatos
©mvn(nombre del movimiento) y©mvi(índice del movimiento). Ahora se emiten como objetosTextInformationFrameenFormat.metadatacon los IDsMVNMyMVIN, respectivamente (#2754). - MPEG-TS: Se corrigió el error
IllegalArgumentExceptiondeReorderingBufferQueuecausado por paquetes PES sin marca de tiempo (#2764). - MP4: Ignora los segmentos con el cuadro
stsdfaltante (en lugar de no analizar todo el archivo). - Se agregó compatibilidad para extraer Motion Photos HEIC.
HeifExtractorahora puede analizar archivos HEIC que contienen pistas de audio y video incorporadas. - MP3: Se cambió
FLAG_ENABLE_INDEX_SEEKINGpara que prefiera la información de búsqueda de los encabezados de metadatos (como Xing y VBRI) cuando esté disponible y, si no hay otra información de búsqueda, se recurra a la búsqueda basada en índices. Esto mejora el rendimiento de los archivos con metadatos de búsqueda (#2839).
- Inspector:
- Se introdujo un nuevo módulo
:media3-inspectorpara que sirva como la página principal dedicada de las utilidades de inspección de medios. Este módulo ahora incluye un nuevoandroidx.media3.inspector.MetadataRetriever, que proporcionará una API unificada para la extracción de metadatos y fotogramas. El objetoandroidx.media3.exoplayer.MetadataRetrieverexistente ya no está disponible y se reemplazó por esta nueva versión. - Se introdujo
androidx.media3.inspector.FrameExtractor, una nueva API pública para la extracción de fotogramas. Esta claseAutoCloseableproporciona una forma de extraer fotogramas con compatibilidad para videos HDR, efectos de video y selección de decodificador personalizado. Se debe crear a través de suBuilderpara unMediaItemespecífico. - FrameExtractor: Agrega
getThumbnail()para extraer un fotograma de miniatura representativo de un archivo multimedia sin necesidad de una marca de tiempo específica.
- Se introdujo un nuevo módulo
- Audio:
- Haz que las instancias de
AudioProcessortengan en cuenta la búsqueda. - Permite insertar la nueva interfaz
AudioOutputProviderenDefaultAudioSink.Builderpara admitir rutas de acceso de salida de audio personalizadas. El valor predeterminado esAudioTrackAudioOutputProvider. - Controla las búsquedas en
GainProcessor. - Se utilizan las capacidades de nivel y perfil del decodificador AC-4 en la evaluación de la compatibilidad con el formato de pista (#2580).
- Se evitan posibles demoras causadas por el control de las devoluciones de llamada de cambio de ruta al comienzo de la reproducción (#2646).
- Se permite la reutilización del códec para los formatos EAC3, EAC3-JOC y AC-4 (#1346).
- Se agregó compatibilidad con muestras de PCM de números de punto flotante en
Sonic. - Se agregó compatibilidad con muestras de PCM de 16 bits en
ToFloatPcmAudioProcessor.
- Haz que las instancias de
- Video:
- Se inhabilitó la reutilización del códec para el contenido de Dolby Vision con diferentes perfiles.
- Texto:
- Se corrigió el análisis de subtítulos CEA-608/708 en contenido de Dolby Vision (#2775).
- Imagen:
- Se corrigió el problema de ScrubbingMode en el que el reproductor se bloqueaba al explorar una pista de miniaturas de DASH (#2815).
- DRM:
- Se cambió el tipo de devolución de los métodos
MediaDrmCallbackdebyte[]a un nuevo tipoMediaDrmCallback.Responsepara permitir la devolución de información adicional opcional. Este es un cambio que genera interrupciones en el código fuente, pero las interrupciones se pueden resolver fácilmente si se encapsula el valor de devoluciónbyte[]anterior connew Responseantes de devolverlo. - Agrega información de la solicitud de clave, como la URL y la latencia, a
AnalyticsListener.onDrmKeysLoaded(#1001). - Se trasladaron los datos de la solicitud de aprovisionamiento de un parámetro de URL al cuerpo de POST.
- Se cambió el tipo de devolución de los métodos
- Muxers:
- Se agregó
MediaMuxerCompat, un reemplazo directo para el frameworkMediaMuxer. - Agrega
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()para permitir la creación de Fotos en movimiento. - Agrega
WebmMuxerpara permitir la multiplexación de transmisiones de mediosOPUS,VORBIS,VP8yVP9en un formato de archivowebm.
- Se agregó
- Extensión IMA:
- Se quitaron las reglas personalizadas de ProGuard para que las apps puedan usar las que se lanzaron en el archivo de Android de IMA.
- Se agregó
ImaServerSideAdInsertionUriBuilder.setNetworkCode, una nueva API para establecer el código de red de Google Ad Manager para que el SDK de IMA controle los identificadores de anuncios según se especifica en la configuración de Google Ad Manager. Los códigos de red son opcionales, pero se recomiendan para las solicitudes de transmisiones de servicio completo. Para encontrar el código de red, consulta este artículo. - Se aumentó la dependencia de IMA a la versión 3.37.0, lo que requiere habilitar la eliminación de azúcar sintáctico de la biblioteca principal. Las apps dependientes también deben habilitar esta opción. Consulta las notas de configuración de IMA.
- Se admiten opciones de IU personalizadas de DAI de IMA en el compilador de URI de SSAI. Las opciones de IU personalizadas para la inserción de anuncios del servidor incluyen compatibilidad con la renderización de "Se puede omitir" y "Acerca de este anuncio". Actualmente, la función está disponible para los editores seleccionados que se encuentran en una lista de entidades permitidas. Este cambio también actualiza la versión del SDK de IMA a la 3.38.0 (notas de la versión) para acceder a la API de opciones de IU personalizadas.
- Sesión:
- Agrega un parámetro nuevo a
MediaSession.Callback.onPlaybackResumptionpara indicar si la llamada se realiza solo para recopilar información o para iniciar la reproducción (#1764). - Se actualizó
MediaSession.ControllerInfo.isTrustedpara que también declare los controladores de la propia app como de confianza (#2542). - Se agregó
MediaSessionService.triggerNotificationUpdatepara activar manualmente una actualización de notificación (#1833). - Agrega
ProgressListenera los métodos de comandos personalizados. - Cambia el valor predeterminado de
MediaLibrarySession.Builder.setLibraryErrorReplicationModea no fatal. - Se agregó un parámetro
ContextaMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Lee el ID del control de volumen desde
PlaybackInfode la plataforma en lugar de recuperarlo a través del vinculador. Esto garantiza que el tipo de reproducción y el ID de control de volumen se lean de forma atómica y coincidan entre sí. - Se corrigió un error por el que se filtraban los eventos de teclas
ACTION_UPantes de pasarlos a la devolución de llamada para su procesamiento personalizado. Esto genera paridad con lo que hizo media1 y lo que hace la plataforma (#2637). - Se corrigió un error por el que
PlayerWrapperllamaba agetCurrentTimeline()incluso cuando el comando no estaba disponible (#2665). - Se corrigió un error por el que se dejaba un mensaje en la cola de mensajes del bucle principal, lo que provocaba una pérdida de memoria después de que finalizaba el servicio (#2692).
- Cuando se conecta a una app de sesión heredada con un
MediaBrowser, los comandos personalizados se envían a la sesión solo si la acción personalizada se anuncia como una acción personalizada enPlaybackStateCompatde la sesión heredada. Todas las demás acciones personalizadas se envían al servicio. - Se implementó
onAudioSessionIdChangedpara notificar a los controladores de medios cuando la sesión establece un ID de sesión de audio (#244). - Se corrigió un error por el que
KEYCODE_HEADSETHOOKno iniciaba el reproductor cuando llegaba un evento de tecla de mediosIntentaonStartCommand(). Esto se solucionó controlando "KEYCODE_HEADSETHOOK" de la misma manera queKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Se corrigió un error por el que no se comunicaba el tamaño de la superficie entre la sesión y el controlador, lo que provocaba que no se aplicaran los efectos de video en la sesión de demostración. Si usas un controlador, este podría ser un cambio que interrumpa el funcionamiento si tu reproductor no puede controlar una llamada a
setVideoSurfaceHolder. - Se corrigió la propagación de valores de metadatos
CharSequenceque no sonString, como cadenas con formato de intervalo (#2853).
- Agrega un parámetro nuevo a
- IU:
- Agrega la clase
ProgressStateWithTickIntervaly el elementorememberProgressStateWithTickIntervalcomponible correspondiente al módulomedia3-ui-compose. Este objeto de estado se usa endemo-composepara mostrar la posición y la duración actuales en formato de texto. - Agrega
MuteButtonStateaui-composeque controla el silencio del volumen dePlayer. Este objeto de estado se usa endemo-composepara mostrar el botón de activación o desactivación del silencio. - Agrega clases
ProgressStateWithTickCounty el elementorememberProgressStateWithTickCountComposable correspondiente al módulomedia3-ui-compose. Este objeto de estado se usa endemo-composepara mostrar el progreso como una barra de progreso horizontal de solo lectura. - Agrega el elemento
ContentFramecomponible amedia3-ui-compose, que combina la administración dePlayerSurfacecon el cambio de tamaño de la relación de aspecto y la cobertura con un obturador. - Se solucionó un error conocido de la plataforma de la API 34 que provocaba que los videos se estiraran o recortaran cuando se usaba
SurfaceViewdentro de unAndroidViewde Compose y, por lo tanto, afectaba a los elementosContentFrameyPlayerSurfacecomponibles conSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Crea un módulo
media3-ui-compose-material3nuevo y agrégale elementos componibles con el tema de Material 3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Se agregó compatibilidad para colocar un botón de ruta de contenido multimedia en
PlayerView.
- Agrega la clase
- Extensión HLS:
- Analiza los atributos de omisión de los intersticiales de HLS.
- Asigna los atributos de control de omisión del mapa desde la playlist de HLS y el documento de la lista de activos al objeto
AdPlaybackStatepara el acceso público. - Se corrigió un error por el que se descartaba la hora de inicio de la playlist cuando se quitaba de ella la etiqueta EXT-X-PROGRAM-START-DATE que definía la hora de inicio (#2760).
- Usa la búsqueda binaria para encontrar el índice de segmento de una posición determinada en la playlist (#2826).
- Extensión de DASH:
- Se corrigió
UnsupportedOperationExceptioncuando se reproducen transmisiones de DASH con un manifiesto de URI dedata:no jerárquico (#2688). - Restablece
LiveConfigurational valor proporcionado por elMediaItemdelDashMediaSourcecuando se libera y cuando el usuario actualiza el elemento multimedia (#2606). - Se evitaron las fallas causadas por actualizaciones de manifiestos no válidas que no se informaron como errores del reproductor (#2805).
- Se corrigió
- Extensión RTSP:
- Se controla el error de falta de paquetes RTP cuando se procesan unidades NAL fragmentadas para H264 y H265 (#2613).
- Extensiones de decodificador (FFmpeg, VP9, AV1, etc.):
- Extensión de AV1: El decodificador de software de AV1 ahora usa la biblioteca
dav1dde alto rendimiento, lo que reemplaza la implementación anterior delibgav1para mejorar la velocidad de decodificación.
- Extensión de AV1: El decodificador de software de AV1 ahora usa la biblioteca
- Extensión Cast:
- Se agregó
CastPlayer.Builder, que permite queCastPlayerrealice la reproducción local y de Cast. Para mantener el comportamiento anterior deCastPlayerque solo admite la reproducción de Cast, puedes usarRemoteCastPlayer. Los constructoresCastPlayerpreexistentes conservan su comportamiento anterior, pero están obsoletos en favor del uso de los compiladoresCastPlayeroRemoteCastPlayer. - Se dejó de aplicar un tipo de MIME no nulo en
DefaultMediaItemConverter. - Usa
MediaItem.mediaMetadata.mediaTypepara inferir el valor de MEDIA_TYPE de Cast que se usará enDefaultCastOptionsProvider#toMediaQueueItem, cuando esté disponible. - Habilita las transferencias de remoto a local en
DefaultCastOptionsProvider. - Agrega compatibilidad con Cast en la demostración de Session.
- Se agregó compatibilidad para mostrar un botón de ruta de contenido multimedia en una IU de Composable.
- Se agregó compatibilidad para mostrar un botón de ruta de contenido multimedia en un menú de barra de acciones.
- Se agregó compatibilidad para mostrar un botón de ruta de contenido multimedia como una IU de View.
- Se agregó
- Utilidades de prueba:
- Agrega la diferencia de tiempo máxima para el comportamiento de avance automático de
FakeClock. El valor predeterminado es 1 segundo, pero se puede configurar a través deFakeClock.Builder. - Se agregó la diferencia máxima de tiempo entre mensajes para
RobolectricUtil.runMainLooperUntil(yrunLooperUntil). El valor predeterminado es 1 segundo, pero se puede configurar a través de nuevas sobrecargas de estos métodos. - Mueve
CapturingRenderersFactorydetest-utilsatest-utils-robolectric.
- Agrega la diferencia de tiempo máxima para el comportamiento de avance automático de
- Se quitan los símbolos obsoletos:
- Se quitó el constructor
DefaultPreloadManagerobsoleto. Se usaDefaultPreloadManager.Builderen su lugar. - Se quitaron los constructores
EditedMediaItemSequenceobsoletos. Se usaEditedMediaItemSequence.Builderen su lugar.
- Se quitó el constructor
Versión 1.8.0
Versión 1.8.0
30 de julio de 2025
La versión 1.8.0 contiene estas confirmaciones.
- Biblioteca común:
- Se agregó compatibilidad para reemplazar el reproductor en
ForwardingSimpleBasePlayer.
- Se agregó compatibilidad para reemplazar el reproductor en
- ExoPlayer:
- Se agregó un getter para el modo de reproducción aleatoria a la interfaz
ExoPlayer(#2522). - Se lanza una excepción con mayor claridad si se accede a
DefaultAudioSinkdesde varios subprocesos. Si esto sucede debido a una llamada aRendererCapabilities.getFormatSupportfuera del reproductor, asegúrate de llamar a este método en el mismo subproceso que el subproceso de reproducción de ExoPlayer o usa una instancia diferente de la que se usa para la reproducción (#1191). - Se corrigió un error por el que
DefaultTrackSelectorpodía marcar como no compatibles los formatos de audio no estéreo en TVs. - Asegúrate de que el último fotograma se renderice correctamente cuando uses la marca
DECODE_ONLYde MediaCodec (que está habilitada de forma predeterminada en el modo de exploración). - Se agregó compatibilidad para usar el ID del dispositivo virtual del
Contextque se pasa aExoPlayer.Builder. - Habilita la programación dinámica de forma predeterminada en el modo de avance rápido.
- Se evita la recarga innecesaria de una fuente cuando se busca el final de un elemento.
- Usa
MediaCodec.BUFFER_FLAG_DECODE_ONLYde forma predeterminada en el modo de avance rápido. - Se arroja
IllegalStateExceptioncuando unExoPlayerreproducePreloadMediaSourcecon un subproceso de reproducción diferente del subproceso de carga previa (#2495). - Se agregó
cloneAndMoveaShuffleModecon una implementación predeterminada (#2226). - Se cambió el comportamiento predeterminado de
Renderer.getMinDurationToProgressUspara que devuelva un valor más grande si no se requiere una llamada arender. - Se corrigió un error por el que la programación interna retrasaba el último fotograma cuando se buscaba el final mientras se pausaba. Por ahora, la corrección de errores solo tiene efecto si se habilita
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled. - Se agregó el método
ExoPlayer.setScrubbingModeEnabled(boolean). Esto optimiza el reproductor para muchas búsquedas frecuentes (por ejemplo, cuando un usuario arrastra una barra de desplazamiento). El comportamiento del modo de desplazamiento se puede personalizar consetScrubbingModeParameters(..)enExoPlayeryExoPlayer.Builder. - Permite personalizar la tolerancia de búsqueda fraccionaria en el modo de exploración.
- Aumenta la tasa de operación del códec en el modo de avance rápido.
- Se corrigió un error por el que los errores de preparación en el contenido de
AdsMediaSourcetal vez nunca se informaban (#2337). - Se corrigió una fuga de memoria en
MergingMediaSource, por ejemplo, cuando se transfieren subtítulos (#2338). - Permite que
CmcdConfiguration.Factorydevuelvanullpara inhabilitar el registro de CMCD para elementos multimedia específicos (#2386). - Se aumentó el tamaño predeterminado del búfer de imágenes de 128 KB (error de copiar y pegar de pistas de texto) a 26 MB, que es lo suficientemente grande para imágenes Ultra HDR de 50 MP (#2417).
- Se agregó
PreCacheHelperque permite que las apps almacenen en caché previamente un solo elemento multimedia con una posición de inicio y una duración especificadas. - Se agregó compatibilidad con la carga previa desde la posición especificada en
DefaultPreloadManager.
- Se agregó un getter para el modo de reproducción aleatoria a la interfaz
- Transformador:
- Se agregó
CodecDbLite, que permite optimizaciones específicas del chipset de la configuración de codificación de video. - Agrega la marca
setEnableCodecDbLiteaDefaultEncoderFactorypara habilitar la optimización de la configuración de CodecDB Lite. De forma predeterminada, esta marca se establece en falso. - Ahora, para completar un espacio inicial (agregado a través de
addGap()) con audio silencioso, se requiere establecerexperimentalSetForceAudioTrack(true)de forma explícita enEditedMediaItemSequence.Builder. Si la brecha se encuentra en el medio de la secuencia, no se requiere esta marca. - Mueve la interfaz de
Muxerdemedia3-transformeramedia3-muxer. - Haz que el parámetro de configuración
MediaItem.Builder().setImageDuration(long)sea obligatorio para importar un elemento multimedia como imagen. - Agrega
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean), que incluye una lista de edición MP4 cuando se corta para indicar a los reproductores que ignoren las muestras entre el fotograma clave anterior al punto de inicio del corte y el punto de inicio del corte. - Actualiza la app de Composition Demo para que use Kotlin y Jetpack Compose, y agrega un
VideoCompositorSettingspersonalizado para organizar secuencias en un diseño de 2x2 o PIP.
- Se agregó
- Extractores:
- Se analizan los metadatos de los archivos MP4 fragmentados (#2084).
- JPEG: Se admiten fotos en movimiento que no tienen un segmento Exif al principio (#2552).
- Se agregó compatibilidad para la búsqueda en MP4 fragmentado con varios átomos
sidx. Este comportamiento se puede habilitar con la marcaFLAG_MERGE_FRAGMENTED_SIDXenFragmentedMp4Extractor(#9373). - Se ignoran las tablas de búsqueda vacías en archivos FLAC (incluidas las que solo contienen puntos de búsqueda de marcadores de posición) y se recurre a la búsqueda binaria si se conoce la duración del archivo (#2327).
- Se corrigió el análisis de unidades SEI H.265 para omitir por completo los tipos de SEI no reconocidos (#2456).
- Actualiza
WavExtractorpara que use los datos de SubFormat de la extensión del encabezado para el formato de audio cuando analice un archivo de tipoWAVE_FORMAT_EXTENSIBLE. - MP4: Se agregó compatibilidad con los cuadros
ipcmyfpcmque definen pistas de audio PCM sin procesar (no se admite PCM de punto flotante de 64 bits). - MP4: Controla la parte de rotación de las matrices de transformación
tkhdque rotan y reflejan el video. Esto garantiza que los videos reflejados que se toman con la cámara frontal del iPhone se muestren correctamente, pero se reflejen de forma incorrecta en el eje Y (#2012). - MP3: Usa la duración y el tamaño de los datos de los metadatos de tasa de bits variable no buscables de Xing, VBRI y similares cuando se recurre a la búsqueda de tasa de bits constante debido a
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Audio:
- Se corrigió un error por el que no se llamaba a
AnalyticsListener.onAudioPositionAdvancingcuando la reproducción de audio se iniciaba muy cerca del final del contenido multimedia. - Se agregó compatibilidad con todos los formatos de muestra de PCM lineal en
ChannelMappingAudioProcessoryTrimmingAudioProcessor. - Se agregó compatibilidad con los espacios de audio en
CompositionPlayer. - Se quitó la llamada espuria a
BaseAudioProcessor#flush()deBaseAudioProcessor#reset(). - Permite la conversión ascendente o descendente constante de la potencia en DefaultAudioMixer.
- Se hicieron públicos
ChannelMappingAudioProcessor,TrimmingAudioProcessoryToFloatPcmAudioProcessor(#2339). - Usa
AudioTrack#getUnderrunCount()enAudioTrackPositionTrackerpara detectar interrupciones enDefaultAudioSinken lugar de una estimación del mejor esfuerzo. - Se mejoró el suavizado de la marca de tiempo de audio para la desviación inesperada de la posición del dispositivo de salida de audio.
- Se corrigió un error por el que la sincronización de audio y video se interrumpía durante los primeros 10 segundos después de reanudar la reproducción desde la pausa cuando se conectaba a dispositivos Bluetooth.
- Se corrigió un error por el que
AnalyticsListener.onAudioPositionAdvancingno informaba la hora en la que el audio comenzó a avanzar, sino la hora de la primera medición. - Se corrigió la recuperación del audio multicanal después de la reversión al audio estéreo en algunos dispositivos (#2258).
- Se corrigió un error por el que no se llamaba a
- Video:
- Se extendió la solución alternativa para la superficie separada a los dispositivos "lenovo" y "motorola" (#2059).
- Se mejoró la liberación fluida de fotogramas de video al inicio cuando las muestras de audio no comienzan exactamente en la posición solicitada.
- Se extendió la solución alternativa para la superficie separada a los dispositivos "realme" (#2059).
- Se agregó la API experimental
ExoPlayerpara incluir la marcaMediaCodec.BUFFER_FLAG_DECODE_ONLYcuando se ponen en cola los búferes de entrada de solo decodificación. Este parámetro marcará al decodificador para que omita los búferes de solo decodificación, lo que permitirá una búsqueda más rápida. Habilítalo conDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Se mejoraron las verificaciones de rendimiento del códec para los códecs de video de software. Esto puede hacer que algunas pistas adicionales se marquen como
EXCEEDS_CAPABILITIES. - Se corrigieron los errores de reproducción de VP9 Widevine en algunos dispositivos (#2408).
- Texto:
- Se agregó compatibilidad con pistas de VobSub en archivos MP4 (#2510).
- Se corrigió un bloqueo de reproducción cuando un segmento de subtítulos no se carga inicialmente y, luego, se carga correctamente, seguido de varios segmentos de subtítulos vacíos (#2517).
- Se corrigieron los formatos SSA y SubRip para que muestren una indicación en curso cuando se habilitan los subtítulos (#2309).
- Se corrigió el problema por el que se bloqueaba la reproducción cuando se cambiaba de una transmisión con un error de subtítulos a una transmisión en vivo con una pista de subtítulos vacía (#2328).
- Se corrigieron los subtítulos CEA-608 distorsionados cuando se reproducen transmisiones H.262 que contienen fotogramas B (#2372).
- Se agregó compatibilidad con subtítulos en SSA con
CodecId = S_TEXT/SSAen archivos de Matroska. Anteriormente,MatroskaExtractorsolo admitíaCodecId = S_TEXT/ASS, que representa la variante "avanzada" (v4+) de los subtítulos de SubStation Alpha (pero la lógica de análisis de ExoPlayer es la misma para ambas variantes) (#2384). - Se agregó compatibilidad con la propiedad
layeren los archivos de subtítulos de SubStation Alpha (SSA), que se usa para definir el orden Z de las indicaciones cuando se muestran más de una en la pantalla al mismo tiempo (#2124).
- Metadatos:
- Se agregó compatibilidad para recuperar la duración del contenido multimedia y
TimelineaMetadataRetriever, y se migró a una API deAutoCloseablebasada en instancias. Usa el nuevoBuilderpara crear una instancia de unMediaItemy, luego, llama aretrieveTrackGroups(),retrieveTimeline()yretrieveDurationUs()para obtenerListenableFutures para los metadatos. Los métodos estáticos anteriores dejaron de estar disponibles (#2462).
- Se agregó compatibilidad para recuperar la duración del contenido multimedia y
- Imagen:
- Limita los mapas de bits decodificados al tamaño de la pantalla en
BitmapFactoryImageDecoderpara evitar que una app falle conCanvas: trying to draw too large bitmap.dePlayerViewcuando intente mostrar imágenes muy grandes (p.ej., de 50 MP). - Cambia la firma de
DefaultRenderersFactory.getImageDecoderFactory()para que tome un parámetroContext. - Alinea el tamaño máximo de salida del mapa de bits que se usa en
CompositionPlayercon el que ya se usa enTransformer(es decir,CompositionPlayerno considera el tamaño de la pantalla cuando decodifica mapas de bits, a diferencia deExoPlayer).
- Limita los mapas de bits decodificados al tamaño de la pantalla en
- DRM:
- Se agregó una nueva sobrecarga de
OfflineLicenseHelper.newWidevineInstanceque acepta unMediaItem.DrmConfigurationpara que los encabezados de la solicitud HTTP se puedan aplicar correctamente (#2169).
- Se agregó una nueva sobrecarga de
- Efecto:
- Se agregó
Presentation.createForShortSide(int), que crea unPresentationque garantiza que el lado más corto siempre coincida con el valor proporcionado, independientemente de la orientación de entrada.
- Se agregó
- Muxers:
- Se corrigió un error por el que no se establecían las marcas de muestra correctas para las muestras de audio en MP4 fragmentado.
- La API de
writeSampleData()ahora usa la claseBufferInfoespecífica del multiplexor en lugar deMediaCodec.BufferInfo. - Se agregó
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, que tiene el valor predeterminado false.
- Extensión IMA:
- Se corrigió un error por el que un error de carga en un anuncio podía invalidar accidentalmente otro grupo de anuncios.
- Se corrigió un error por el que los grupos de anuncios posteriores al final de una ventana de VOD detenían la reproducción.
Los grupos de anuncios con una hora de inicio posterior a la ventana ya no se ponen en cola en
MediaPeriodQueue(#2215).
- Sesión:
- Se corrigió un error por el que se ignoraban las conexiones de controladores de Media3 no privilegiados de terceros.
- Se quitó la verificación de los comandos disponibles cuando se envían comandos personalizados a un
MediaBrowserServiceCompatheredado. Esto coincide con el comportamiento de los navegadores y controladores heredados cuando se conectan a una app heredada. - Se corrigió un error que provocaba que el primer error de reproducción de un reproductor se tratara de forma incorrecta como una excepción personalizada persistente. Esto impide que la aplicación se recupere.
- Se corrigió un error por el que algunos cambios del controlador que no se controlan en la sesión pueden causar
IllegalStateExceptions. - Se corrigió un error por el que las acciones del controlador que no se controlan en la sesión pueden dejar el controlador en un estado no válido.
- Se corrigió la advertencia de incumplimiento de inicio no seguro de StrictMode (#2330).
- Se corrigió el error por el que llamar a
setSessionExtrasdesde el subproceso principal cuando se ejecutaba el reproductor desde un subproceso de aplicación diferente del subproceso principal provocaba unIllegalStateException(#2265). - No mostrar automáticamente una notificación si se configura un reproductor con elementos multimedia sin prepararlos ni reproducirlos (#2423https://github.com/androidx/media/issues/2423). Este comportamiento se puede configurar a través de
MediaSessionService.setShowNotificationForIdlePlayer. - Agrega
PlaybackExceptionpersonalizados para todos los controladores o los seleccionados. - Se corrigió un error por el que la búsqueda en una transmisión en vivo en un
MediaControllerpodía provocar unIllegalArgumentException. - En el caso de las transmisiones en vivo, deja de publicar una posición de reproducción y la capacidad de buscar en el elemento actual para los controladores multimedia de la plataforma, de modo que se eviten artefactos de posición en la IU de Android Auto (y otros controladores que usan esta información de la sesión multimedia de la plataforma) (#1758).
- Se corrigió un error por el que pasar un valor nulo a
getLibraryRootde unMediaBrowserconectado a unMediaBrowserServiceCompatheredado producía unNullPointerException. - Se corrigió un error por el que el envío de acciones personalizadas, un resultado de búsqueda o una solicitud de getItem fallaba en la app de sesión heredada con un
ClassNotFoundException. - Se corrigió un error por el que
MediaItem.LocalConfiguration.urise compartía con elMediaMetadatade las sesiones de la plataforma. Para compartir intencionalmente un URI y permitir que los controladores vuelvan a solicitar el contenido multimedia, configuraMediaItem.RequestMetadata.mediaUri.
- IU:
- Se corrigió un error por el que
PlayerSurfacedentro de componentes reutilizables, comoLazyColumn, no funcionaba correctamente (#2493). - Se corrigió un error de Compose que generaba una brecha entre la configuración de los estados iniciales de los botones y la observación del cambio de estado (p.ej., formas de íconos o habilitación). Ahora se registran los cambios realizados en el reproductor fuera del período de observación (#2313).
- Agrega titulares de estado y elementos componibles al módulo
media3-ui-composeparaSeekBackButtonStateySeekForwardButtonState. - Se agregó compatibilidad con el modo de desplazamiento de ExoPlayer a
PlayerControlView. Cuando está habilitado, el reproductor entra en el modo de desplazamiento cuando el usuario comienza a arrastrar la barra de desplazamiento, emite una llamadaplayer.seekTopara cada movimiento y, luego, sale del modo de desplazamiento cuando se levanta el toque de la pantalla. Esta integración se puede habilitar contime_bar_scrubbing_enabled = trueen XML o con el métodosetTimeBarScrubbingEnabled(boolean)de Java/Kotlin. - Haz que
PlayerSurfaceacepte un argumentoPlayeranulable.
- Se corrigió un error por el que
- Descargas:
- Se agregó compatibilidad con la descarga parcial para transmisiones progresivas. Las apps pueden preparar una transmisión progresiva con
DownloadHelpery solicitar unDownloadRequestal asistente especificando las posiciones de inicio y finalización de los medios basadas en el tiempo que debe abarcar la descarga. El objetoDownloadRequestque se devuelve contiene el rango de bytes resuelto, con el que se puede crear un objetoProgressiveDownloadery descargar el contenido de forma correspondiente. - Agrega
DownloadHelper.Factorycon el que se reemplazan los métodosDownloadHelper.forMediaItem()estáticos. - Se agregó
Factorypara las implementaciones deSegmentDownloader. - Se agregó compatibilidad con la descarga parcial para transmisiones adaptables. Las apps pueden preparar una transmisión adaptable con
DownloadHelpery solicitar unDownloadRequestal asistente especificando las posiciones de inicio y finalización del contenido multimedia basadas en el tiempo que debe abarcar la descarga. El objetoDownloadRequestque se devuelve contiene el período resuelto, con el que se puede crear un objetoSegmentDownloaderconcreto y descargar el contenido de forma correspondiente.
- Se agregó compatibilidad con la descarga parcial para transmisiones progresivas. Las apps pueden preparar una transmisión progresiva con
- Extensión de Cronet:
- Se agregó el manejo automático de cookies (#5975).
- Extensión HLS:
- Se corrigió el error por el que
HlsSampleStreamWrapperintenta buscar dentro del búfer cuando no hay fragmentos disponibles en él #2598. - Se corrigió un error por el que los cambios en la selección de pistas después de cargar partes de baja latencia y las sugerencias de carga previa podían provocar que la reproducción se detuviera o se congelara (#2299).
- Evita las recargas excesivas esperando la mitad de la duración objetivo cuando el servidor no respeta
CAN-BLOCK-RELOAD=YES(#2317). - Se corrigió un error por el que se detenía la reproducción cuando se iniciaba una transmisión de anuncios intersticiales antes de un anuncio de mitad de rollo y se intentaba resolver la lista de recursos para el anuncio incorrecto (#2558).
- Se corrigió el análisis de playlists para aceptar
\f(feed de formulario) en valores de atributos de cadenas entre comillas (#2420). - Se admite la actualización de los anuncios intersticiales con el mismo ID (#2427).
- Se corrigió un error por el que, a veces, los errores de carga de la playlist no se propagan una vez que una transmisión en vivo se queda sin segmentos para cargar (#2401https://github.com/androidx/media/issues/2401).
- Agrupa las versiones de subtítulos por etiqueta NAME, de manera similar a como ya se agrupan las versiones de audio (#1666).
- Admite X-ASSET-LIST y transmisiones en vivo con
HlsInterstitialsAdsLoader.
- Se corrigió el error por el que
- Extensión de DASH:
- Se corrigió un problema por el que el conjunto de adaptación de reproducción con trucos se combinaba con su conjunto de adaptación principal para formar un
TrackGroupno válido (#2148). - Se corrigió un error por el que acortar la duración de un período de DASH podía generar una excepción cuando la canalización de renderización ya había leído muestras más allá de la nueva duración (#2440).
- Se corrigió el error por el que no se seguía el redireccionamiento cuando se usaban parámetros de consulta de CMCD (#2475).
- Se corrigió un problema por el que el conjunto de adaptación de reproducción con trucos se combinaba con su conjunto de adaptación principal para formar un
- Extensión RTSP:
- Se agregó compatibilidad con el paquete de agregación de RTP para H265 de conformidad con RFC 7798#4.4.2 (#2413).
- Se corrigió
RtspClientpara que use el URI de ubicación proporcionado cuando se procesa una respuesta HTTP 302 (#2398). - Se agregó compatibilidad con el análisis de SessionDescriptions que contienen líneas con caracteres de espacios en blanco finales (#2357).
- Extensiones de decodificador (FFmpeg, VP9, AV1, etc.):
- Se corrigió un error por el que
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeno tenía efecto en las extensiones del decodificador de audio (#2258).
- Se corrigió un error por el que
- Extensión Cast:
- Utilidades de prueba:
- Agrega
advance(player).untilPositionAtLeastyuntilMediaItemIndexaTestPlayerRunHelperpara adelantar el reproductor hasta que se alcance una posición especificada. En la mayoría de los casos, estos métodos son más confiables que los métodosuntilPositionyuntilStartOfMediaItemexistentes. - Mueve
FakeDownloaderal módulotest-utils-robolectricpara reutilizarlo en otras pruebas. - Se quitaron
transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)ytransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...). En su lugar, usaShadowMediaCodecConfigpara configurar codificadores y decodificadores ocultos. - Se reemplazó el prefijo "exotest" por "media3" en los nombres de códecs que informa
ShadowMediaCodecConfig.
- Agrega
- Se quitan los símbolos obsoletos:
- Se quitaron el constructor
SegmentDownloaderobsoleto,SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)y los constructores correspondientes en sus subclasesDashDownloader,HlsDownloaderySsDownloader. - Se quitaron los elementos
Player.hasNext()yPlayer.hasNextWindow()obsoletos. En su lugar, usaPlayer.hasNextMediaItem(). - Se quitó
Player.next()obsoleto. Se usaPlayer.seekToNextMediaItem()en su lugar. - Se quitó
Player.seekToPreviousWindow()obsoleto. Se usaPlayer.seekToPreviousMediaItem()en su lugar. - Se quitó
Player.seekToNextWindow()obsoleto. Se usaPlayer.seekToNextMediaItem()en su lugar. - Se quitó el objeto
BaseAudioProcessorobsoleto del móduloexoplayer. UsaBaseAudioProcessoren el módulocommon. - Se quitó el constructor
MediaCodecVideoRendererobsoletoMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Se quitaron el constructor
Versión 1.8.0-rc02
24 de julio de 2025
Usa la versión estable 1.8.0.
Versión 1.8.0-rc01
16 de julio de 2025
Usa la versión estable 1.8.0.
Versión 1.8.0-beta01
2 de julio de 2025
Usa la versión estable 1.8.0.
Versión 1.8.0-alpha01
19 de mayo de 2025
Usa la versión estable 1.8.0.
Versión 1.7.0
Versión 1.7.1
16 de mayo de 2025
Esta versión tiene el mismo código que la versión 1.6.1 y se lanza para garantizar que aparezca como una versión "más reciente" que la 1.7.0, que fue una versión alfa etiquetada accidentalmente como estable (consulta a continuación).
Versión 1.7.0
16 de mayo de 2025
Esta versión debería haber sido 1.7.0-alpha01, pero se etiquetó accidentalmente como 1.7.0 (es decir, estable) en maven.google.com. No la uses. Quédate en la versión 1.6.1 o actualiza a la versión 1.7.1 (que tiene el mismo código que la versión 1.6.1).
Versión 1.6.0
1.6.1
14 de abril de 2025
Lanzamiento de androidx.media3:media3-*:1.6.1.
La versión 1.6.1 contiene estas confirmaciones.
- Biblioteca común:
- Se agregó el método
PlaybackParameters.withPitch(float)para copiar fácilmente unPlaybackParameterscon un nuevo valor depitch(#2257).
- Se agregó el método
- ExoPlayer:
- Se corrigió un problema por el que fallaba la transición del elemento multimedia debido a un error recuperable del renderizador durante la inicialización del siguiente elemento multimedia (#2229).
- Se solucionó el problema por el que
ProgressiveMediaPeriodarroja unIllegalStateExceptioncuandoPreloadMediaSourceintenta llamar a sugetBufferedDurationUs()antes de que esté preparado (#2315). - Se corrigió el envío de
CmcdDataen las solicitudes de manifiesto para DASH, HLS y SmoothStreaming (#2253). - Asegúrate de que se pueda usar
AdPlaybackState.withAdDurationsUs(long[][])después de que se quiten los grupos de anuncios. El usuario aún debe pasar un array de duraciones para los grupos de anuncios quitados, que puede estar vacío o ser nulo (#2267).
- Extractores:
- MP4: Analiza
alternate_groupdesde el cuadrotkhdy lo expone como una entradaMp4AlternateGroupDataen elFormat.metadatade cada pista (#2242).
- MP4: Analiza
- Audio:
- Se corrigió un problema de descarga en el que la posición podía quedarse atascada cuando se reproducía una playlist de contenido corto (#1920).
- Sesión:
- Se redujo el tiempo de espera de agregación para las devoluciones de llamada de la plataforma
MediaSessionde 500 a 100 milisegundos y se agregó un método de configuración experimental para permitir que las apps configuren este valor. - Se solucionó un problema por el que las notificaciones volvían a aparecer después de que el usuario las descartaba (#2302).
- Se corrigió un error por el que la sesión devolvía una línea de tiempo de un solo elemento cuando el reproductor encapsulado estaba vacío. Esto sucedía cuando el reproductor encapsulado no tenía
COMMAND_GET_TIMELINEdisponible, mientras queCOMMAND_GET_CURRENT_MEDIA_ITEMsí lo estaba y el reproductor encapsulado estaba vacío (#2320). - Se corrigió un error por el que se ignoraba de forma silenciosa la llamada a
MediaSessionService.setMediaNotificationProviderdespués de otras interacciones con el servicio, comosetForegroundServiceTimeoutMs(#2305).
- Se redujo el tiempo de espera de agregación para las devoluciones de llamada de la plataforma
- IU:
- Habilita
PlayerSurfacepara que funcione conExoPlayer.setVideoEffectsyCompositionPlayer. - Se corrigió un error por el que
PlayerSurfaceno se podía recomponer con un nuevoPlayer.
- Habilita
- Extensión HLS:
- Se corrigió un problema por el que no se establecía la duración del fragmento en
CmcdDatapara el contenido multimedia de HLS, lo que provocaba una falla de aserción cuando se procesaban segmentos de contenido multimedia encriptados (#2312).
- Se corrigió un problema por el que no se establecía la duración del fragmento en
- Extensión RTSP:
- Se agregó compatibilidad con URI con el esquema RTSPT como una forma de configurar la sesión de RTSP para usar TCP (#1484).
- Extensión Cast:
- Se agregó compatibilidad con los metadatos de la playlist (#2235).
1.6.0
26 de marzo de 2025
Lanzamiento de androidx.media3:media3-*:1.6.0.
La versión 1.6.0 contiene estas confirmaciones.
- Biblioteca común:
- Agrega
AudioManagerCompatyAudioFocusRequestCompatpara reemplazar las clases equivalentes enandroidx.media. - Actualiza Kotlin de la versión 1.9.20 a la 2.0.20 y usa el complemento de Gradle de Compose Compiler. Se actualizó la biblioteca de KotlinX Coroutines de la versión 1.8.1 a la 1.9.0.
- Se quitó el método
Format.toBundle(boolean excludeMetadata)y se usaFormat.toBundle()en su lugar. - Se corrigió un error en
SimpleBasePlayerpor el que establecer un nuevocurrentMediaItemIndexenStatedespués desetPlaylistconnullMediaMetadatano reevaluaba los metadatos (#1940). - Cambia el acceso de
SimpleBasePlayer.Statede protegido a público para facilitar el manejo de las actualizaciones en otras clases (#2128).
- Agrega
- ExoPlayer:
- Agrega
MediaExtractorCompat, una nueva clase que proporciona funciones equivalentes a la plataformaMediaExtractor. - Se agregó compatibilidad experimental con el precalentamiento de "ExoPlayer" para la reproducción con
MediaCodecVideoRenderer. Puedes configurarDefaultRenderersFactorya través deexperimentalSetEnableMediaCodecVideoRendererPrewarmingpara proporcionar unMediaCodecVideoRenderersecundario aExoPlayer. Si está habilitada,ExoPlayerpreprocesa el video de los elementos multimedia consecutivos durante la reproducción para reducir la latencia de transición entre elementos multimedia. - Reduce los valores predeterminados de
bufferForPlaybackMsybufferForPlaybackAfterRebufferMsenDefaultLoadControla 1,000 y 2,000 ms, respectivamente. - Inicializa
DeviceInfoy el volumen del dispositivo de forma asíncrona (si se habilitó consetDeviceVolumeControlEnabled). Estos valores no están disponibles de inmediato después deExoPlayer.Builder.build(), yPlayer.Listenernotifica los cambios a través deonDeviceInfoChangedyonDeviceVolumeChanged. - El ID de sesión de audio inicial ya no está disponible de inmediato después de crear el reproductor. Puedes usar
AnalyticsListener.onAudioSessionIdChangedpara escuchar la actualización inicial si es necesario. - Ten en cuenta el idioma cuando selecciones una pista de video. De forma predeterminada, selecciona una pista de video "principal" que coincida con el idioma de la pista de audio seleccionada, si está disponible. Las preferencias explícitas de idioma del video se pueden expresar con
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Agrega el parámetro
selectedAudioLanguageal métodoDefaultTrackSelector.selectVideoTrack(). - Agrega el parámetro
retryCountaMediaSourceEventListener.onLoadStartedy los métodosMediaSourceEventListener.EventDispatchercorrespondientes. - Se corrigió un error por el que los elementos de la playlist o los períodos en transmisiones DASH de varios períodos con duraciones que no coinciden con el contenido real podían provocar congelamientos de fotogramas al final del elemento (#1698).
- Mueve
BasePreloadManager.Listenera unPreloadManagerListenerde nivel superior. RenderersFactory.createSecondaryRendererse puede implementar para proporcionar renderizadores secundarios para la preparación previa. El precalentamiento permite transiciones más rápidas entre elementos multimedia durante la reproducción.- Se habilitó el envío de
CmcdDatapara las solicitudes de manifiesto en los formatos de transmisión adaptable DASH, HLS y SmoothStreaming (#1951). - Proporciona
MediaCodecInfodel códec que se inicializará enMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Cambia
AdsMediaSourcepara permitir queAdPlaybackStatescrezca agregando grupos de anuncios. Se detectan las modificaciones no válidas y se arroja una excepción. - Se solucionó el problema por el que se podían mostrar fotogramas adicionales de solo decodificación en rápida sucesión cuando se realizaba la transición al contenido multimedia después de un anuncio durante el video.
- Haz que
DefaultRenderersFactoryagregue dos instancias deMetadataRendererpara permitir que las apps reciban dos esquemas diferentes de metadatos de forma predeterminada. - Se debe reevaluar si se debe cancelar la carga en curso de un fragmento cuando se pausa la reproducción (#1785).
- Se agregó la opción a
ClippingMediaSourcepara permitir el recorte en contenido multimedia no buscable. - Se corrigió un error por el que la búsqueda con precalentamiento podía bloquear la siguiente transición de elemento multimedia.
- Se corrigió un error por el que
ExoPlayer.isLoading()permanece entruemientras se realiza la transición aSTATE_IDLEoSTATE_ENDED(#2133). - Se agregó
lastRebufferRealtimeMsaLoadControl.Parameter(#2113).
- Agrega
- Transformador:
- Se agregó compatibilidad con la transcodificación en formatos alternativos retrocompatibles.
- Se agregó compatibilidad con la transcodificación y el transmuxing del formato Dolby Vision (perfil 8).
- Actualiza los parámetros de
VideoFrameProcessor.registerInputStreamyVideoFrameProcessor.Listener.onInputStreamRegisteredpara usarFormat. - Genera metadatos estáticos de HDR cuando se usa
DefaultEncoderFactory. - Habilita la compatibilidad con el diagnóstico de la plataforma de Android a través de
MediaMetricsManager. Transformer reenvía eventos de edició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 Transformer conTransformer.Builder.setUsePlatformDiagnostics(false). - Divide
InAppMuxerenInAppMp4MuxeryInAppFragmentedMp4Muxer. UsasInAppMp4Muxerpara producir un archivo MP4 no fragmentado, mientras queInAppFragmentedMp4Muxeres para producir un archivo MP4 fragmentado. - Mueve la interfaz de
Muxerdemedia3-muxeramedia3-transformer. - Se agregó
MediaProjectionAssetLoader, que proporciona contenido multimedia de unMediaProjectionAssetLoaderpara la grabación de pantalla, y se agregó compatibilidad con la grabación de pantalla a la app de demostración de Transformer.MediaProjection - Se agregó
#getInputFormat()a la interfaz deCodec. - Cuando sea posible, transfiere la responsabilidad de liberar el
GlObjectsProvideral llamador enDefaultVideoFrameProcessoryDefaultVideoCompositor.
- Extractores:
- AVI: Se corrigió el control de archivos con audio comprimido de tasa de bits constante en los que el encabezado de transmisión almacena la cantidad de bytes en lugar de la cantidad de fragmentos.
- Se corrigió el control de las unidades NAL con longitudes expresadas en 1 o 2 bytes (en lugar de 4).
- Se corrigió
ArrayIndexOutOfBoundsExceptionen las listas de edición de MP4 cuando la lista de edición comienza en un fotograma que no está sincronizado y no tiene un fotograma de sincronización anterior (#2062). - Se solucionó un problema por el que los flujos de TS podían bloquearse en algunos dispositivos (#2069).
- FLAC: Se agregó compatibilidad con archivos FLAC de 32 bits. Anteriormente, estos videos no se reproducían con
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio:
- Se corrigió
onAudioPositionAdvancingpara que se llame cuando se reanude la reproducción (antes se llamaba cuando se pausaba la reproducción). - No eludas
SonicAudioProcessorcuandoSpeedChangingAudioProcessoresté configurado con parámetros predeterminados. - Se corrigió el subdesbordamiento en
Sonic#getOutputSize()que podía provocar queDefaultAudioSinkse detuviera. - Corrige
MediaCodecAudioRenderer.getDurationToProgressUs()yDecoderAudioRenderer.getDurationToProgressUs()para que las búsquedas restablezcan correctamente las duraciones proporcionadas. - Se hace el elemento
androidx.media3.common.audio.SonicAudioProcessorfinal. - Se agregó compatibilidad con PCM de punto flotante a
ChannelMappingAudioProcessoryTrimmingAudioProcessor.
- Se corrigió
- Video:
- Cambia
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacea protegido para que las aplicaciones puedan anular el uso de superficies de marcador de posición (#1905). - Se agregó el análisis experimental de dependencias de muestras de AV1 de
ExoPlayerpara acelerar la búsqueda. Habilítala con la nueva API deDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Se agregó la API experimental
ExoPlayerpara descartar los búferes de entrada del decodificadorMediaCodecVideoRenderertardíos de los que no se depende. Habilítalo conDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - Se corrigió un problema por el que un reproductor sin una superficie estaba listo de inmediato y decodificaba muy lentamente los fotogramas pendientes (#1973).
- Se excluyen los dispositivos Xiaomi y OPPO del modo de superficie separada para evitar el parpadeo de la pantalla (#2059).
- Cambia
- Texto:
- Se agregó compatibilidad con los subtítulos de VobSub (#8260).
- Se detiene la carga anticipada de todos los archivos de subtítulos configurados con
MediaItem.Builder.setSubtitleConfigurationsy, en su lugar, solo se carga uno si se selecciona por medio de la selección de pistas (#1721). - TTML: Se agregó compatibilidad para hacer referencia a
tts:originytts:extentconstyle(#2953). - Restringe las marcas de tiempo de WebVTT y SubRip a exactamente 3 posiciones decimales. Anteriormente, analizábamos de forma incorrecta cualquier cantidad de posiciones decimales, pero siempre suponíamos que el valor estaba en milisegundos, lo que generaba marcas de tiempo incorrectas (#1997).
- Se corrigió el problema de bloqueo de la reproducción cuando una playlist contiene elementos recortados con subtítulos CEA-608 o CEA-708.
- Se corrigió
IllegalStateExceptioncuando un archivo SSA contiene una indicación con duración cero (la hora de inicio y la de finalización son iguales) (#2052). - Se suprimen (y se registran) los errores de análisis de subtítulos cuando estos se multiplexan en el mismo contenedor que el audio y el video (#2052).
- Se corrigió el control de caracteres UTF-8 multibyte en archivos WebVTT que usan finales de línea CR (#2167).
- DRM:
- Se corrigió el error
MediaCodec$CryptoException: Operation not supported in this configurationque se producía cuando se reproducía contenido de ClearKey en dispositivos con API < 27 (#1732).
- Se corrigió el error
- Efecto:
- Se movió la funcionalidad de
OverlaySettingsaStaticOverlaySettings.OverlaySettingsse puede subclasificar para permitir parámetros de configuración de superposición dinámicos.
- Se movió la funcionalidad de
- Muxers:
- Se quitó
MuxerExceptionde la interfaz deMuxerpara evitar un nombre completamente calificado muy largo. - Se cambió el nombre del método
setSampleCopyEnabled()asetSampleCopyingEnabled()enMp4Muxer.BuilderyFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()yFragmentedMp4Muxer.addTrack()ahora devuelven un ID de segmentointen lugar de unTrackToken.Mp4MuxeryFragmentedMp4Muxerya no implementan la interfazMuxer.- Inhabilita el procesamiento por lotes y la copia de muestras de
Mp4Muxerde forma predeterminada. - Se corrigió un error en
FragmentedMp4Muxerque crea muchos fragmentos cuando solo se escribe la pista de audio.
- Se quitó
- Sesión:
- Se mantiene el estado del servicio en primer plano durante 10 minutos adicionales cuando se pausa, detiene o falla la reproducción. Esto permite que los usuarios reanuden la reproducción dentro de este tiempo de espera sin correr el riesgo de que se apliquen restricciones de servicios en primer plano en varios dispositivos. Ten en cuenta que ya no se puede usar solo la llamada a
player.pause()para detener el servicio en primer plano antes destopSelf()cuando se anulaonTaskRemoved. En su lugar, usaMediaSessionService.pauseAllPlayersAndStopSelf(). - Mantener visible la notificación cuando la reproducción entra en un estado de error o se detiene La notificación solo se quita si se borra la playlist o se libera el reproductor.
- Se mejoró el control de las acciones ACTION_PLAY y ACTION_PAUSE de MediaSession de la plataforma Android para establecer solo una de ellas según los comandos disponibles y también aceptar si solo se establece una de ellas.
- Se agregó
Contextcomo parámetro aMediaButtonReceiver.shouldStartForegroundService(#1887). - Se corrigió un error por el que llamar a un método
Playeren unMediaControllerconectado a una sesión heredada descartaba los cambios de una actualización pendiente. - Se hizo que
MediaSession.setSessionActivity(PendingIntent)acepte valores nulos (#2109). - Se corrigió un error por el que una notificación obsoleta permanecía visible cuando se borraba la playlist (#2211).
- Se mantiene el estado del servicio en primer plano durante 10 minutos adicionales cuando se pausa, detiene o falla la reproducción. Esto permite que los usuarios reanuden la reproducción dentro de este tiempo de espera sin correr el riesgo de que se apliquen restricciones de servicios en primer plano en varios dispositivos. Ten en cuenta que ya no se puede usar solo la llamada a
- IU:
- Agrega titulares de estado y elementos componibles al módulo
media3-ui-composeparaPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateyPlaybackSpeedState.
- Agrega titulares de estado y elementos componibles al módulo
- Descargas:
- Se corrigió un error en
CacheWriterque dejaba las fuentes de datos abiertas y las áreas de caché bloqueadas en caso de que la fuente de datos arroje unExceptiondistinto deIOException(#9760).
- Se corrigió un error en
- Extensión HLS:
- Agrega una primera versión de
HlsInterstitialsAdsLoader. El cargador de anuncios lee los anuncios intersticiales de HLS de una playlist de contenido multimedia de HLS y los asigna al objetoAdPlaybackStateque se pasa al objetoAdsMediaSource. Esta versión inicial solo admite transmisiones de VOD de HLS con atributosX-ASSET-URI. - Agrega
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Las apps pueden usarlo para crear instancias deAdsMediaSourceque usen unHlsInterstitialsAdsLoaderde manera conveniente y segura. - Se analiza la etiqueta
SUPPLEMENTAL-CODECSde la playlist HLS para detectar formatos Dolby Vision (#1785). - Se flexibilizó la condición para buscar posiciones de sincronización en una transmisión HLS (#2209).
- Agrega una primera versión de
- Extensión de DASH:
- Se agregó compatibilidad con el formato AC-4 Level-4 para DASH (#1898).
- Se corrigió un problema que se producía al calcular el intervalo de actualización para la inserción de anuncios en transmisiones en vivo de varios períodos (#1698).
- Se analiza el atributo
scte214:supplementalCodecsdel manifiesto de DASH para detectar formatos de Dolby Vision (#1785). - Se mejoró el control de las transiciones de períodos en las transmisiones en vivo en las que el período contiene muestras de medios más allá de la duración declarada del período (#1698).
- Se corrigió el problema por el que los conjuntos de adaptación marcados con
adaptation-set-switching, pero con diferentes idiomas o marcas de roles, se combinaban (#2222).
- Extensiones de decodificador (FFmpeg, VP9, AV1, etc.):
- Se agregó el módulo del decodificador MPEG-H, que usa el decodificador MPEG-H integrado para decodificar audio MPEG-H (#1826).
- Extensión MIDI:
- Conecta instancias personalizadas de
AudioSinkyAudioRendererEventListeneraMidiRenderer.
- Conecta instancias personalizadas de
- Extensión Cast:
- Se actualizó la dependencia de
play-services-cast-frameworka la versión 21.5.0 para corregir una falla deFLAG_MUTABLEen las apps que segmentan la API 34 o versiones posteriores en dispositivos con los Servicios de Google Play instalados, pero inhabilitados (#2178).
- Se actualizó la dependencia de
- App de demo:
- Se extendió
demo-composecon botones adicionales y se mejoró la integración dePlayerSurfacecon compatibilidad para el obturador y el ajuste.
- Se extendió
- Se quitan los símbolos obsoletos:
- Se quitó el método
AudioMixer.create()obsoleto. Se usaDefaultAudioMixer.Factory().create()en su lugar. - Quita los siguientes métodos
Transformer.Builderobsoletos:setTransformationRequest(), usasetAudioMimeType(),setVideoMimeType()ysetHdrMode()en su lugar.setAudioProcessors(), configura el procesador de audio en unEditedMediaItem.Builder.setEffects()y pásalo aTransformer.start()en su lugar.setVideoEffects(), establece el efecto de video en unEditedMediaItem.Builder.setEffects()y pásalo aTransformer.start()en su lugar.setRemoveAudio(), usaEditedMediaItem.Builder.setRemoveAudio()para quitar el audio delEditedMediaItemque se pasó aTransformer.start().setRemoveVideo(), usaEditedMediaItem.Builder.setRemoveVideo()para quitar el video delEditedMediaItemque se pasó aTransformer.start().setFlattenForSlowMotion(), usaEditedMediaItem.Builder.setFlattenForSlowMotion()para aplanar elEditedMediaItemque se pasa aTransformer.start().setListener(), usaaddListener(),removeListener()oremoveAllListeners()en su lugar.
- Quita los siguientes métodos
Transformer.Listenerobsoletos:onTransformationCompleted(MediaItem), usaonCompleted(Composition, ExportResult)en su lugar.onTransformationCompleted(MediaItem, TransformationResult), usaonCompleted(Composition, ExportResult)en su lugar.onTransformationError(MediaItem, Exception), usaonError(Composition, ExportResult, ExportException)en su lugar.onTransformationError(MediaItem, TransformationException), usaonError(Composition, ExportResult, ExportException)en su lugar.onTransformationError(MediaItem, TransformationResult, TransformationException), usaonError(Composition, ExportResult, ExportException)en su lugar.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), usaonFallbackApplied(Composition, TransformationRequest, TransformationRequest)en su lugar.
- Se quitó la clase
TransformationResultobsoleta. Se usaExportResulten su lugar. - Se quitó la clase
TransformationExceptionobsoleta. Se usaExportExceptionen su lugar. - Se quitó
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONobsoleto. Se usaTransformer.PROGRESS_STATE_NOT_STARTEDen su lugar. - Se quitó
Transformer.setListener()obsoleto. En su lugar, usaTransformer.addListener(),Transformer.removeListener()oTransformer.removeAllListeners(). - Se quitó
Transformer.startTransformation()obsoleto. Se usaTransformer.start(MediaItem, String)en su lugar. - Se quitó
SingleFrameGlShaderProgramobsoleto. Se usaBaseGlShaderProgramen su lugar. - Se quita
Transformer.flattenForSlowMotion. Se usaEditedMediaItem.flattenForSlowMotionen su lugar. - Se quitaron
ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentyExoPlayer.DeviceComponent. - Se quitó
androidx.media3.exoplayer.audio.SonicAudioProcessor. - Se quitaron los siguientes métodos
DownloadHelperobsoletos:- Constructor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), usaDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)en su lugar. getRendererCapabilities(RenderersFactory), se puede lograr una funcionalidad equivalente creando unDefaultRendererCapabilitiesListcon unRenderersFactoryy llamando aDefaultRendererCapabilitiesList.getRendererCapabilities().
- Constructor
- Se quitó el método
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). En su lugar, usaPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)y pasa(MediaSession.Token) compatToken.getToken().
- Se quitó el método
1.6.0-rc02
19 de marzo de 2025
Usa la versión estable 1.6.0.
1.6.0-rc01
12 de marzo de 2025
Usa la versión estable 1.6.0.
1.6.0-beta01
26 de febrero de 2025
Usa la versión estable 1.6.0.
Versión 1.6.0-alpha03
6 de febrero de 2025
Usa la versión estable 1.6.0.
Versión 1.6.0-alpha02
30 de enero de 2025
Usa la versión estable 1.6.0.
Versión 1.6.0-alpha01
20 de diciembre de 2024
Usa la versión estable 1.6.0.
Versión 1.5
Versión 1.5.1
19 de diciembre de 2024
Lanzamiento de androidx.media3:media3-*:1.5.1.
La versión 1.5.1 contiene estas confirmaciones.
- ExoPlayer:
- Se inhabilitó el uso del desencriptado asíncrono en MediaCodec para evitar los problemas de tiempo de espera del códec informados con esta API de la plataforma (#1641).
- Extractores:
- MP3: No detengas la reproducción antes de tiempo cuando la tabla de contenido de un fotograma
VBRIno abarque todos los datos MP3 de un archivo (nº 1904).
- MP3: No detengas la reproducción antes de tiempo cuando la tabla de contenido de un fotograma
- Video:
- Se revirtió el uso de los valores de relación de aspecto en píxeles proporcionados por
MediaCodecAdaptercuando se proporcionan durante el procesamiento deonOutputFormatChanged(#1371).
- Se revirtió el uso de los valores de relación de aspecto en píxeles proporcionados por
- Texto:
- Se corrigió un error en
ReplacingCuesResolver.discardCuesBeforeTimeUspor el que se descartaba de forma incorrecta la pista activa entimeUs(comenzó antes, pero aún no finalizó) (#1939).
- Se corrigió un error en
- Metadatos:
- Se extraen la numeración de discos y pistas, y el género de los comentarios de Vorbis en
MediaMetadata(nº 1958).
- Se extraen la numeración de discos y pistas, y el género de los comentarios de Vorbis en
Versión 1.5.0
27 de noviembre de 2024
Lanzamiento de androidx.media3:media3-*:1.5.0.
La versión 1.5.0 contiene estas confirmaciones.
- Biblioteca común:
- Agrega
ForwardingSimpleBasePlayer, que permite reenviar a otro reproductor con pequeños ajustes y, al mismo tiempo, garantiza la coherencia total y el control del objeto de escucha (#1183). - Reemplaza
SimpleBasePlayer.State.playlistpor el métodogetPlaylist(). - Agrega una anulación para
SimpleBasePlayer.State.Builder.setPlaylist()para especificar directamente unTimeliney unTracksy unMetadataactuales en lugar de compilar una estructura de playlist. - Aumenta
minSdka 21 (Android Lollipop). Esto se alinea con todas las demás bibliotecas de AndroidX. - Se agregó el artefacto
androidx.media3:media3-common-ktx, que proporciona funcionalidad específica de Kotlin compilada sobre la biblioteca Common. - Agrega la función de extensión de suspensión
Player.listenpara iniciar una corrutina que escuchePlayer.Eventsen la bibliotecamedia3-common-ktx. - Se quitaron las anotaciones
@DoNotInlinede las clases internas que se extrajeron manualmente y que se diseñaron para evitar errores de verificación de clases en el tiempo de ejecución. Las versiones recientes de R8 ahora automáticamente sacan de línea las llamadas como estas para evitar las fallas en el tiempo de ejecución (por lo que ya no se requiere la extracción manual de línea). Todos los usuarios de Gradle de la biblioteca ya deben usar una versión del complemento de Android para Gradle que use una versión de R8 que haga esto, debido acompileSdk = 35. Los usuarios de la biblioteca con sistemas de compilación que no sean de Gradle deberán asegurarse de que su paso de reducción o ofuscación equivalente a R8 realice un proceso automático similar de extracción en línea para evitar errores de verificación de clases en el tiempo de ejecución. Este cambio ya se realizó en otras bibliotecas de AndroidX.
- Agrega
- ExoPlayer:
- Ahora se puede llamar a
MediaCodecRenderer.onProcessedStreamChange()para cada elemento multimedia. Anteriormente, no se llamaba para el primero. UsaMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()para habilitar esta opción. - Se agregó
PreloadMediaSource.PreloadControl.onPreloadErrorpara permitir que las implementaciones dePreloadMediaSource.PreloadControlrealicen acciones cuando se produce un error. - Agrega
BasePreloadManager.Listenerpara propagar eventos de precarga a las apps. - Se permite cambiar el tiempo de espera del cliente SNTP y volver a intentar con direcciones alternativas en caso de tiempo de espera (#1540).
- Se quitó
MediaCodecAdapter.Configuration.flags, ya que el campo siempre era cero. - Permite que el usuario seleccione el altavoz integrado para la reproducción en la API 35 y versiones posteriores de Wear OS (en las que el dispositivo anuncia compatibilidad con esta función).
- Posponer la llamada de bloqueo a
Context.getSystemService(Context.AUDIO_SERVICE)hasta que se habilite el control del enfoque de audio Esto garantiza que no se realice la llamada de bloqueo si no está habilitado el control del enfoque de audio (#1616). - Se permite la reproducción independientemente de la duración almacenada en búfer cuando falla la carga (#1571).
- Agrega
AnalyticsListener.onRendererReadyChanged()para indicar cuándo los renderizadores individuales permiten que la reproducción esté lista. - Se corrigió el problema por el que, a veces, se informaba el error
MediaCodec.CryptoExceptioncomo un "error inesperado del entorno de ejecución" cuandoMediaCodecse ejecutaba en modo asíncrono (comportamiento predeterminado en la API 31 y versiones posteriores). - Pasa
bufferedDurationUsen lugar debufferedPositionUsconPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Además, cambiaDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSaDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS, por lo que las apps deben pasar un valor que represente una duración específica desde la posición de inicio predeterminada para la que se debe cargar previamente la fuente de medios correspondiente con este IntDef, en lugar de una posición. - Agrega la implementación de
ForwardingRendererque reenvía todas las llamadas a métodos a otro renderizador (1703). - Agrega la carga previa de la playlist para el siguiente elemento de la playlist. Las apps pueden habilitar la carga previa llamando a
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)según corresponda. De forma predeterminada, la precarga está inhabilitada. Cuando se habilita la opción y para no interferir en la reproducción,DefaultLoadControlrestringe la precarga para que comience y continúe solo cuando el reproductor no esté cargando contenido para la reproducción. Las apps pueden cambiar este comportamiento implementandoLoadControl.shouldContinuePreloading()de forma adecuada (como cuando se anula este método enDefaultLoadControl). La implementación predeterminada deLoadControlinhabilita la carga previa en caso de que una app use una implementación personalizada deLoadControl. - Se agregó el método
MediaSourceEventListener.EventDispatcher.dispatchEvent()para permitir la invocación de eventos de objetos de escucha de subclases (1736). - Agrega
DefaultPreloadManager.Builderque compile las instancias deDefaultPreloadManageryExoPlayercon configuraciones compartidas de forma coherente. - Se quitó el parámetro
Renderer[]deLoadControl.onTracksSelected(), ya que la implementación deDefaultLoadControlpuede recuperar los tipos de transmisión deExoTrackSelection[]. - Se dejó de usar
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])y se marcó el método como final para evitar anulaciones. En su lugar, se debe usar el nuevoDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). - Informa los eventos de
MediaSourceEventListenerde fuentes secundarias enMergingMediaSource. Esto generará que se registren eventos de inicio, error, cancelación y finalización de carga para los subtítulos cargados de forma externa (los que se agregaron conMediaItem.LocalConfiguration.subtitleConfigurations), que pueden aparecer como eventos de carga duplicados emitidos desdeAnalyticsListener. - Evita que los errores de subtítulos y metadatos detengan por completo la reproducción.
En cambio, se inhabilita la pista problemática y continúa la reproducción de las pistas restantes (#1722).
- En el nuevo control de subtítulos (durante la extracción), los errores de carga (p.ej., HTTP 404) y de análisis asociados (p.ej., datos de subtítulos no válidos) se emiten a través de devoluciones de llamada de
onLoadError. - En el manejo de subtítulos heredado (durante la renderización), solo se emiten los errores de carga asociados a través de devoluciones de llamada de
onLoadError, mientras que los errores de análisis se ignoran de forma silenciosa (este es un comportamiento preexistente).
- En el nuevo control de subtítulos (durante la extracción), los errores de carga (p.ej., HTTP 404) y de análisis asociados (p.ej., datos de subtítulos no válidos) se emiten a través de devoluciones de llamada de
- Se corrigió un error por el que los elementos de la playlist o los períodos en transmisiones DASH de varios períodos con duraciones que no coinciden con el contenido real podían provocar congelamientos de fotogramas al final del elemento (#1698).
- Se agregó un setter a
SntpClientpara establecer el tiempo máximo transcurrido desde la última actualización después de la cual se reinicializa el cliente (#1794).
- Ahora se puede llamar a
- Transformador:
- Agrega
SurfaceAssetLoader, que admite la puesta en cola de datos de video en Transformer a través de unSurface. ImageAssetLoaderinforma que la entrada no es compatible a través deAssetLoader.onErroren lugar de arrojar unIllegalStateException.- Hacer que la configuración de la duración de la imagen con
MediaItem.Builder.setImageDurationMssea obligatoria para la exportación de imágenes - Se agregó compatibilidad con la exportación de espacios en secuencias de EditedMediaItems de audio.
- Agrega
- Selección de pistas:
DefaultTrackSelector: Prefiere el audio basado en objetos al audio basado en canales cuando otros factores son iguales.
- Extractores:
- Permite que
Mp4ExtractoryFragmentedMp4Extractoridentifiquen muestras de H264 que no se usan como referencia en muestras posteriores. - Se agregó la opción para habilitar la búsqueda basada en índices en
AmrExtractor. - Los archivos MP3 con más de 128 KB entre fotogramas válidos se tratan como truncados (en lugar de no válidos). Esto significa que los archivos con datos que no son MP3 al final, sin otros metadatos que indiquen la longitud de los bytes MP3, ahora detienen la reproducción al final de los datos MP3 en lugar de fallar con
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Se corrigió el control de muestras de anuncios previos al video para las posiciones de inicio de contenido multimedia que no son de fotogramas clave cuando se procesan listas de edición en archivos MP4 (#1659).
- Se mejoró el cálculo de la frecuencia de fotogramas con la duración de los medios del cuadro
mdhdenMp4ExtractoryFragmentedMp4Extractor(#1531). - Se corrigió el ajuste de escala incorrecto de
media_timeen las listas de edición de MP4. Si biensegment_durationya se ajustaba correctamente con la escala de tiempo de la película, ahoramedia_timese ajusta correctamente con la escala de tiempo de la pista, como se especifica en el estándar de formato MP4 (#1792). - Se controlan los fotogramas desordenados en el cálculo de
endIndicespara MP4 con lista de edición (#1797). - Se corrigió el análisis de la duración de los medios en el cuadro
mdhdde los archivos MP4 para controlar los valores de-1(#1819). - Se agregó compatibilidad para identificar el cuadro
h263en archivos MP4 para video H.263 (#1821). - Se agregó compatibilidad con el formato de archivo multimedia base ISO AC-4 nivel 4 (#1265).
- Permite que
- DataSource:
- Se actualizó
HttpEngineDataSourcepara permitir el uso a partir de la extensión 7 de la versión S en lugar del nivel de API 34 (#1262). DataSourceContractTest: Afirma queDataSource.getUri()devuelve el URI resuelto (como se documenta). Cuando esto difiere del URI solicitado, las pruebas pueden indicarlo con el nuevo métodoDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: Afirma queDataSource.getUri()ygetResponseHeaders()devuelven su valor "abierto" después de una llamada fallida aopen()(debido a un recurso "no encontrado") y antes de una llamadaclose()posterior.- Anular
DataSourceContractTest.getNotFoundResources()permite que las subclases de prueba proporcionen varios recursos "no encontrados" y también cualquier encabezado esperado. Esto permite distinguir entre el error HTTP 404 (con encabezados) y el error "no se encontró el servidor" (sin encabezados).
- Anular
- Se actualizó
- Audio:
- Configura automáticamente los metadatos de sonoridad CTA-2075 en el códec si están presentes en el contenido multimedia.
- Asegúrate de que el volumen disminuya de forma gradual cuando busques contenido.
- Se corrigieron los sonidos de chasquido que pueden ocurrir durante las búsquedas.
- Se corrigió la acumulación de errores de truncamiento para el algoritmo de estiramiento temporal y cambio de tono de Sonic.
- Se corrigió un error en
SpeedChangingAudioProcessorque provocaba la pérdida de fotogramas de salida.
- Video:
MediaCodecVideoRendererevita decodificar muestras que no se renderizan ni se usan como referencia por otras muestras.- En el nivel de API 35 y versiones posteriores,
MediaCodecAdapterahora puede recibir unnullSurfaceenconfigurey llamadas a un nuevo métododetachOutputSurfacepara quitar unSurfaceestablecido anteriormente si el códec admite esta función (MediaCodecInfo.detachedSurfaceSupported). - Usa los valores de relación de aspecto en píxeles proporcionados por
MediaCodecAdaptersi se proporcionan durante el procesamiento deonOutputFormatChanged(#1371). - Se agregó una solución alternativa para un problema del dispositivo en la Galaxy Tab S7 FE que hace que los flujos seguros H264 de 60 FPS se marquen como no compatibles (#1619).
- Se agregó una solución alternativa para los códecs que se bloquean después de la última muestra sin devolver un indicador de fin de transmisión.
- Texto:
- Agrega un
VoiceSpanpersonalizado y complétalo para los intervalos de voz de WebVTT (#1632). - Asegúrate de que se muestre WebVTT en HLS con marcas de tiempo de subtítulos muy grandes (que desbordan un
longde 64 bits cuando se representan como microsegundos y se multiplican por la base de tiempo90,000de MPEG) (#1763). - Se agregó compatibilidad con subtítulos CEA-608 en contenido de Dolby Vision (#1820).
- Se corrigió el problema de la reproducción que se bloqueaba en las transmisiones de varios períodos de DASH cuando se habilitaban los subtítulos CEA-608 (#1863).
- Agrega un
- Metadatos:
- Asigna el tipo
C.TRACK_TYPE_METADATAa los segmentos que contengan contenido de icy o vnd.dvb.ait.
- Asigna el tipo
- Imagen:
- Agrega
ExternallyLoadedImageDecoderpara simplificar la integración con bibliotecas externas de carga de imágenes, como Glide o Coil.
- Agrega
- DataSource:
- Se agregó
FileDescriptorDataSource, un nuevoDataSourceque se puede usar para leer desde unFileDescriptor(#3757).
- Se agregó
- Efecto:
- Se agregó una solución alternativa para
DefaultVideoFrameProcessorpara el ajuste de escala menor deSurfaceTexture.SurfaceTexturepuede incluir un pequeño ajuste de escala que corta un borde de 1 píxel alrededor del borde de un búfer recortado. Ahora se controla de manera que el resultado sea más cercano al esperado. - Acelera
DefaultVideoFrameProcessor.queueInputBitmap(). Como resultado, la exportación de imágenes a videos conTransformeres más rápida.
- Se agregó una solución alternativa para
- Extensión IMA:
- Se corrigió un error por el que borrar la playlist podía provocar un
ArrayIndexOutOfBoundsExceptionenImaServerSideAdInsertionMediaSource. - Se corrigió un error por el que las transmisiones de DAI insertadas en el servidor sin un anuncio previo al video podían generar un
ArrayIndexOutOfBoundsExceptioncuando se reproducía más allá del último anuncio durante el video (#1741).
- Se corrigió un error por el que borrar la playlist podía provocar un
- Sesión:
- Agrega
MediaButtonReceiver.shouldStartForegroundService(Intent)para permitir que las apps supriman un comando de reproducción entrante para la reanudación de la reproducción anulando este método. De forma predeterminada, el servicio siempre se inicia y la reproducción no se puede suprimir sin que el sistema falle el servicio con unForegroundServiceDidNotStartInTimeException(#1528). - Se corrigió un error que provocaba que los comandos personalizados enviados desde un
MediaBrowserse enviaran alMediaSessionCompat.Callbacken lugar de a la varianteMediaBrowserServiceCompatdel método cuando se conectaba a un servicio heredado. Esto impidió queMediaBrowserrecibiera el valor de devolución real que envió el servicio heredado (#1474). - Se controla
IllegalArgumentExceptionque arrojan los dispositivos de ciertos fabricantes cuando se configura el receptor de emisión para intents de botones de medios (#1730). - Se agregaron botones de comando para elementos multimedia. Esto agrega la API de Media3 para lo que se conocía como
Custom browse actionscon la biblioteca heredada conMediaBrowserCompat. Ten en cuenta que, con Media3, los botones de comando para elementos multimedia están disponibles paraMediaBrowseryMediaController. Consulta Implementa acciones de exploración personalizadas. - Se corrigió un error por el que, a veces, un controlador de Media3 no podía permitir que una app de sesión iniciara un servicio en primer plano después de solicitar
play(). - Restringe
CommandButton.Builder.setIconUripara que solo acepte URIs de contenido. - Pasa sugerencias de conexión de un navegador de Media3 al
MediaBrowserCompatinicial cuando se conecta a unMediaBrowserCompatheredado. El servicio puede recibir las sugerencias de conexión que se pasan como sugerencias raíz con la primera llamada aonGetRoot(). - Se corrigió un error por el que un objeto
MediaBrowserconectado a un servicio de navegador heredado no recibía un error enviado por el servicio después de que el navegador se suscribía a un objetoparentid. - Mejora el comportamiento de interoperabilidad para que un navegador de Media3 conectado a un
MediaBrowserServiceheredado no solicite los elementos secundarios de unparentIddos veces cuando se suscribe a un elemento principal.
- Agrega
- IU:
- Se habilitó la solución alternativa para el video estirado o recortado en
PlayerView-in-Compose-AndroidViewdebido a problemas con las transiciones compartidas basadas en XML. Las apps que usanPlayerViewdentro deAndroidViewdeben llamar aPlayerView.setEnableComposeSurfaceSyncWorkaroundpara habilitar la opción (#1237, #1594). - Se agregó
setFullscreenButtonStateaPlayerViewpara permitir actualizaciones del ícono del botón de pantalla completa a pedido, es decir, fuera de banda y no de forma reactiva a una interacción de clic (#1590, #184). - Se corrigió un error por el que la opción "Ninguno" en la selección de texto no funcionaba si había preferencias de selección de pistas de texto definidas por la app.
- Se habilitó la solución alternativa para el video estirado o recortado en
- Extensión de DASH:
- Se agregó compatibilidad con períodos que comienzan a mitad de un segmento (#1440).
- Extensión de transmisión fluida:
- Se corrigió un error de
Bad magic number for Bundleque se producía cuando se reproducían transmisiones de SmoothStreaming con pistas de texto (#1779).
- Se corrigió un error de
- Extensión RTSP:
- Extensiones de decodificador (FFmpeg, VP9, AV1, etc.):
- Se agregó el módulo de decodificador de IAMF, que proporciona compatibilidad con la reproducción de archivos MP4 que contienen pistas de IAMF con la biblioteca nativa libiamf para sintetizar audio.
- La reproducción está habilitada con un diseño estéreo y 5.1 con espacialización, junto con el seguimiento de cabeza opcional habilitado, pero la compatibilidad con la reproducción binaural no está disponible por el momento.
- Se agregó compatibilidad con páginas de 16 KB para extensiones de decodificador en Android 15 (#1685).
- Se agregó el módulo de decodificador de IAMF, que proporciona compatibilidad con la reproducción de archivos MP4 que contienen pistas de IAMF con la biblioteca nativa libiamf para sintetizar audio.
- Extensión de Cast:
- Detiene la limpieza de la línea de tiempo después de que se desconecta CastSession, lo que permite que la app del remitente reanude la reproducción de forma local después de una desconexión.
- Propaga el
DeviceInfode CastPlayer cuando se proporciona unContext. Esto permite vincular elMediaSessiona unRoutingSession, lo que es necesario para integrar el Selector de salida (#1056).
- Utilidades de prueba:
DataSourceContractTestahora incluye pruebas para verificar lo siguiente:- Se actualizó el flujo de entrada
read position. - El búfer de salida
offsetse aplica correctamente.
- Se actualizó el flujo de entrada
- App de demostración
- Se resolvieron las fugas de memoria en la app de formato corto de demostración (#1839).
- Se quitan los símbolos obsoletos:
- Se quitaron
Player.hasPreviousyPlayer.hasPreviousWindow()obsoletos. En su lugar, usaPlayer.hasPreviousMediaItem(). - Se quitó el método
Player.previous()obsoleto. Se usaPlayer.seekToPreviousMediaItem()en su lugar. - Se quitó el método
DrmSessionEventListener.onDrmSessionAcquiredobsoleto. - Se quitaron los constructores
DefaultEncoderFactoryobsoletos. Se usaDefaultEncoderFactory.Builderen su lugar.
- Se quitaron
Versión 1.5.0-rc02
19 de noviembre de 2024
Usa la versión estable 1.5.0.
Versión 1.5.0-rc01
13 de noviembre de 2024
Usa la versión estable 1.5.0.
Versión 1.5.0-beta01
30 de octubre de 2024
Usa la versión estable 1.5.0.
Versión 1.5.0-alpha01
10 de septiembre de 2024
Usa la versión estable 1.5.0.
Versión 1.4.0
Versión 1.4.1
27 de agosto de 2024
Lanzamiento de androidx.media3:media3-*:1.4.1.
La versión 1.4.1 contiene estas confirmaciones.
- ExoPlayer:
- Extractores:
- MP3: Se corrigió el error
Searched too many bytesignorando correctamente los datos no MP3 finales según el campo de longitud en un marcoInfo(#1480).
- MP3: Se corrigió el error
- Texto:
- TTML: Se corrigió el manejo de los valores de porcentaje
tts:fontSizepara garantizar que se hereden correctamente de los nodos principales con valores de porcentajetts:fontSize. - Se corrigió
IndexOutOfBoundsExceptionenLegacySubtitleUtildebido a que se controlaba de forma incorrecta el caso en el que la hora de inicio de la salida solicitada era mayor o igual que la hora del evento final enSubtitle(#1516).
- TTML: Se corrigió el manejo de los valores de porcentaje
- DRM:
- Se corrigió el error
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEen dispositivos con API 31 y versiones posteriores que reproducen contenido de Widevine L1. Este error se debe a una implementación incompleta del métodoMediaDrm.requiresSecureDecoderdel framework (#1603).
- Se corrigió el error
- Efecto:
- Agrega un método
release()aGlObjectsProvider.
- Agrega un método
- Sesión:
- Transforma una presión doble en
KEYCODE_HEADSETHOOKen una acción de "buscar el siguiente", como se documenta (#1493). - Controla
KEYCODE_HEADSETHOOKcomo un comando de "reproducción" enMediaButtonReceivercuando decidas si ignorarlo para evitar unForegroundServiceDidNotStartInTimeException(#1581).
- Transforma una presión doble en
- Extensión RTSP:
- Se omiten las descripciones de medios no válidas en el análisis de SDP (#1087).
Versión 1.4.0
25 de julio de 2024
Lanzamiento de androidx.media3:media3-*:1.4.0.
La versión 1.4.0 contiene estas confirmaciones.
- Biblioteca común:
- Se reenvían las llamadas de búsqueda que se suponen que no son operativas a los métodos protegidos
BasePlayer.seekTo()ySimpleBasePlayer.handleSeek()en lugar de ignorarlas. Si implementas estos métodos en un reproductor personalizado, es posible que debas controlar estas llamadas adicionales conmediaItemIndex == C.INDEX_UNSET. - Se quitó la dependencia de compilación en el desazucaramiento mejorado de Java 8 (#1312).
- Asegúrate de que se ignore la duración que se pasa a
MediaItem.Builder.setImageDurationMs()para unMediaItemque no sea una imagen (como se documentó). - Agrega
Format.customDatapara almacenar información personalizada proporcionada por la app sobre instancias deFormat.
- Se reenvían las llamadas de búsqueda que se suponen que no son operativas a los métodos protegidos
- ExoPlayer:
- Agrega
BasePreloadManager, que coordina la precarga para varias fuentes según las prioridades definidas por surankingData. Se puede personalizar extendiendo esta clase. AgregaDefaultPreloadManager, que usaPreloadMediaSourcepara cargar previamente en la memoria muestras de medios de las fuentes y usa unrankingDataentero que indica el índice de un elemento en la IU. - Se agregó
PlayerIda la mayoría de los métodos deLoadControlpara permitir que las implementaciones deLoadControladmitan varios jugadores. - Se quitan
Buffer.isDecodeOnly()yC.BUFFER_FLAG_DECODE_ONLY. No es necesario establecer esta marca, ya que los renderizadores y decodificadores decidirán omitir los búferes según la marca de tiempo. Las implementaciones personalizadas deRendererdeben verificar si el tiempo de búfer es al menosBaseRenderer.getLastResetPositionUs()para decidir si se debe mostrar una muestra. Las implementaciones personalizadas deSimpleDecoderpueden verificarisAtLeastOutputStartTimeUs()si es necesario o marcar otros búferes conDecoderOutputBuffer.shouldBeSkippedpara omitirlos. - Permite que
TargetPreloadStatusControl.getTargetPreloadStatus(T)devuelva un valor nulo para indicar que no se debe cargar previamente unMediaSourcecon elrankingDatadeterminado. - Se agregó
remove(MediaSource)aBasePreloadManager. - Agrega
reset()aBasePreloadManagerpara liberar todas las fuentes de retención y conservar la instancia del administrador de carga previa. - Se agregaron
ExoPlayer.setPriority()(yBuilder.setPriority()) para definir el valor de prioridad que se usa enPriorityTaskManagery para la importancia de MediaCodec desde la API 35. - Se corrigió un problema con la actualización de la última hora de almacenamiento en búfer que generaba una clave
bs(agotamiento del búfer) incorrecta en CMCD (#1124). - Agrega
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)para indicar que la fuente se cargó hasta el final. Esto permite que las implementaciones deDefaultPreloadManageryPreloadMediaSource.PreloadControlpersonalizadas carguen previamente la siguiente fuente o realicen otras acciones. - Se corrigió un error por el que el salto de silencio al final de los elementos podía activar una excepción de reproducción.
- Agrega
clearaPreloadMediaSourcepara descartar el período de precarga. - Se agregó el nuevo código de error
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDque se usa cuando se recuperan recursos de códec para tareas de mayor prioridad. - Permite que
AdsMediaSourcecargue anuncios previos al video antes de que se complete la preparación inicial del contenido multimedia (#1358). - Se corrigió un error por el que la reproducción se movía a
STATE_ENDEDcuando se volvía a preparar una transmisión en vivo de DASH de varios períodos después de que el período original ya se había quitado del manifiesto. - Se cambió el nombre de
onTimelineRefreshed()poronSourcePrepared()y el deonPrepared()poronTracksSelected()enPreloadMediaSource.PreloadControl. También cambia el nombre de los IntDefs enDefaultPreloadManager.Stagesegún corresponda. - Se agregó compatibilidad experimental con la programación dinámica para alinear mejor el trabajo con los ciclos de activación de la CPU y retrasar la activación hasta que los renderizadores puedan avanzar.
Puedes habilitar esta opción con
experimentalSetDynamicSchedulingEnabled()cuando configures tu instancia de ExoPlayer. - Agrega
Renderer.getDurationToProgressUs(). UnRendererpuede implementar este método para devolver a ExoPlayer la duración que debe avanzar la reproducción para que el renderizador progrese. SiExoPlayerse configura conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerllamará a este método cuando calcule el tiempo para programar su tarea de trabajo. - Agrega
MediaCodecAdapter#OnBufferAvailableListenerpara alertar cuando los búferes de entrada y salida estén disponibles para que los useMediaCodecRenderer.MediaCodecRendererindicaráExoPlayercuando reciba estas devoluciones de llamada y, siExoPlayerse configura conexperimentalSetDynamicSchedulingEnabled(),ExoPlayerprogramará su bucle de trabajo a medida que los renderizadores puedan avanzar. - Usa la clase de datos para los métodos
LoadControlen lugar de parámetros individuales. - Agrega
ExoPlayer.isReleased()para verificar si se llamó aExoplayer.release(). - Agrega
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()para configurar la posición máxima para la queseekToPrevious()busca el elemento anterior (#1425). - Se corrigieron algunas incoherencias del foco de audio, p.ej., no se informaba la pérdida de foco completa o transitoria mientras el reproductor estaba en pausa (#1436).
- Se corrigió un posible error
IndexOutOfBoundsExceptioncausado por extractores que informan pistas adicionales después del paso de preparación inicial (#1476). EffectsenExoPlayer.setVideoEffect()recibirá las marcas de tiempo con la compensación del renderizador quitada (#1098).- Se corrigió un posible
IllegalArgumentExceptioncuando se controla un error del reproductor que ocurrió mientras se leía por adelantado otro elemento de la playlist (#1483).
- Agrega
- Transformador:
- Agrega
audioConversionProcessyvideoConversionProcessaExportResultpara indicar cómo se creó la pista respectiva en el archivo de salida. - Se relajan las verificaciones de nivel H.264 de la optimización de recorte.
- Se agregó compatibilidad para cambiar entre medios de entrada SDR y HDR en una secuencia.
- Se agregó compatibilidad con efectos de audio a nivel de la composición.
- Se agregó compatibilidad para transcodificar imágenes Ultra HDR en videos HDR.
- Se corrigió un problema por el que
DefaultAudioMixerno generaba la cantidad correcta de bytes después de restablecerse y reutilizarse. - Se solucionó un error del decodificador en el que la cantidad de canales de audio se limitaba a estéreo cuando se controlaba la entrada de PCM.
- Cuando selecciones pistas en
ExoPlayerAssetLoader, ignora las restricciones de recuento de canales de audio, ya que solo se aplican a la reproducción. - Reemplaza la interfaz
androidx.media3.transformer.Muxerporandroidx.media3.muxer.Muxery quitaandroidx.media3.transformer.Muxer. - Se corrigió la carga de imágenes HEIC desde esquemas de URI de contenido. (#1373).
- Ajusta la duración de la pista de audio en
AudioGraphInputpara mejorar la sincronización de audio y video. - Se quitó el campo
ExportResult.processedInputs. Si usas este campo para los detalles del códec, usaDefaultDecoderFactory.listeneren su lugar. En caso de una excepción de códec, los detalles del códec estarán disponibles enExportException.codecInfo.
- Agrega
- Extractores:
- MPEG-TS: Implementa el cambio de forma progresiva y asegúrate de que el último fotograma se renderice pasando la última unidad de acceso de una transmisión a la cola de muestras (#7909). Se incorporaron correcciones para resolver los problemas que surgieron en las transmisiones HLS solo con I-frames(#1150) y las transmisiones HLS con H.262 (#1126).
- MP3: Se prefiere el tamaño de los datos de un fotograma
Infoal tamaño que informa el flujo subyacente (p.ej., el tamaño del archivo o el encabezadoContent-Lengthde HTTP). Esto ayuda a excluir los datos de avances no reproducibles (p.ej., la portada del álbum) de los cálculos de búsqueda de velocidad de bits constante, lo que hace que las búsquedas sean más precisas (#1376). - MP3: Usa el recuento de fotogramas y otros datos en un fotograma
Info(si está presente) para calcular una tasa de bits promedio para la búsqueda de tasa de bits constante, en lugar de extrapolar desde la tasa de bits del fotograma después del fotogramaInfo, que puede ser artificialmente pequeña, p.ej., fotogramaPCUT(#1376). - Se corrigió la extracción del formato de audio PCM en contenedores AVI.
- Audio:
- Se corrigieron los atributos de codificación del perfil 2 de DTS:X para la reproducción de transferencia (#1299).
- En el caso de la reproducción descargada, restablece el campo de seguimiento para la finalización de la transmisión en
DefaultAudioSinkantes de llamar aAudioTrack.stop()para queAudioTrack.StreamEventCallback#onPresentationEndedidentifique correctamente cuándo se reprodujeron todos los datos pendientes. - Se corrigió un error en
SilenceSkippingAudioProcessorpor el que las transiciones entre diferentes formatos de audio (por ejemplo, de estéreo a mono) podían provocar que el procesador arroje una excepción (#1352). - Implementa
MediaCodecAudioRenderer.getDurationToProgressUs()para que ExoPlayer programe de forma dinámica su bucle de trabajo principal para cuando MediaCodecAudioRenderer pueda avanzar.
- Video:
- Se solucionó el problema por el que
Listener.onRenderedFirstFrame()llegaba demasiado pronto cuando se cambiaban las superficies durante la reproducción. - Se corrige la lógica de resguardo del decodificador para Dolby Vision a fin de usar un decodificador AV1 compatible si es necesario (#1389).
- Se corrigió la excepción de códec que se puede producir cuando se habilita un renderizador de video durante la reproducción.
- Se solucionó el problema por el que
- Texto:
- Se corrigió un problema por el que se omitían los subtítulos que comenzaban antes de una posición de búsqueda. Este problema solo se introdujo en Media3 1.4.0-alpha01.
- Se cambió el comportamiento predeterminado del análisis de subtítulos para que se realice durante la extracción en lugar de durante la renderización (consulta el diagrama de arquitectura de ExoPlayer para conocer la diferencia entre la extracción y la renderización).
- Este cambio se puede anular llamando a ambos
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)yTextRenderer.experimentalSetLegacyDecodingEnabled(true). Consulta la documentación sobre personalización para obtener información sobre cómo conectar estos componentes a una instancia deExoPlayer. Estos métodos (y toda la compatibilidad con la decodificación de subtítulos heredados) se quitarán en una versión futura. - Las apps con implementaciones de
SubtitleDecoderpersonalizadas deben actualizarlas para implementarSubtitleParseren su lugar (ySubtitleParser.Factoryen lugar deSubtitleDecoderFactory).
- Este cambio se puede anular llamando a ambos
- PGS: Se corrigió la decodificación de longitud de ejecución para resolver
0como un índice de color, en lugar de un valor de color literal (#1367). - CEA-708: Se ignora el valor de
rowLock. La especificación CEA-708-E S-2023 indica que se debe suponer querowLockycolumnLockson verdaderos, independientemente de los valores presentes en la transmisión (no se implementa la compatibilidad concolumnLock, por lo que se supone que siempre es falso).- Originalmente, se incluyó en las notas de la versión de
1.3.0-alpha01, pero el cambio se revirtió accidentalmente antes del lanzamiento de1.3.0-rc01. Este problema ya se solucionó, por lo que el cambio vuelve a estar presente.
- Originalmente, se incluyó en las notas de la versión de
- CEA-708: Se evita que ExoPlayer agregue saltos de línea duplicados debido al control ingenuo del comando "set pen location" (#1315).
- Se corrigió un
IllegalArgumentExceptiondeLegacySubtitleUtilcuando una muestra de subtítulos de WebVTT no contiene indicadores, p.ej., como parte de una transmisión de DASH (#1516).
- Metadatos:
- Se corrigió la asignación de MP4 a etiquetas de ordenamiento ID3. Anteriormente, las etiquetas MP4 "ordenar álbum" (
soal), "ordenar artista" (soar) y "ordenar artista del álbum" (soaa) se asignaban de forma incorrecta a las etiquetas ID3TSO2,TSOAyTSOP(#1302). - Se corrigió la lectura de las etiquetas numéricas
gnre(género) ytmpo(tempo) de MP4 (/iTunes) cuando el valor tiene más de un byte de longitud. - Se propagó el marco
TCONde ID3 aMediaMetadata.genre(#1305).
- Se corrigió la asignación de MP4 a etiquetas de ordenamiento ID3. Anteriormente, las etiquetas MP4 "ordenar álbum" (
- Imagen:
- Se agregó compatibilidad con cuadrículas de miniaturas de DASH no cuadradas (#1300).
- Se agregó compatibilidad con AVIF para la API 34 y versiones posteriores.
- Permite que
nullsea un parámetro paraExoPlayer.setImageOutput()y borre unImageOutputestablecido anteriormente.
- DataSource:
- Implementa la compatibilidad con los URIs de recursos sin procesar
android.resource://package/id, en los quepackagees diferente del paquete de la aplicación actual. Anteriormente, no se documentó que esto funcionara, pero es una forma más eficiente de acceder a los recursos en otro paquete que por nombre. - Verifica de forma anticipada que
urlno sea nulo en los constructores deDataSpec. Este parámetro ya se anotó como no nulo. - Permite que
ByteArrayDataSourceresuelva un URI en un array de bytes duranteopen(), en lugar de estar codificado de forma rígida en la construcción (#1405).
- Implementa la compatibilidad con los URIs de recursos sin procesar
- DRM:
- Se permite establecer un
LoadErrorHandlingPolicyenDefaultDrmSessionManagerProvider(#1271).
- Se permite establecer un
- Efecto:
- Admite varios cambios de velocidad dentro del mismo
EditedMediaItemoCompositionenSpeedChangeEffect. - Se agregó compatibilidad con la salida HLG y PQ desde la entrada de mapa de bits Ultra HDR.
- Se agregó compatibilidad con EGL_GL_COLORSPACE_BT2020_HLG_EXT, lo que mejora la salida de la superficie HLG en ExoPlayer.setVideoEffect y Debug SurfaceView de Transformer.
- Actualiza la implementación de la matriz de superposición para que sea coherente con la documentación. Para ello, invierte los valores de X e Y que se aplican en
setOverlayFrameAnchor(). Si usasOverlaySettings.Builder.setOverlayFrameAnchor(), invierte sus valores de X e Y multiplicándolos por-1. - Se corrigió un error por el que
TimestampWrapperfalla cuando se usa conExoPlayer#setVideoEffects(#821). - Se cambió el espacio de trabajo de color SDR predeterminado de colores lineales a video SDR eléctrico BT.709. También se proporciona una tercera opción para conservar el espacio de color original.
- Se permite definir un orden Z indeterminado de EditedMediaItemSequences (#1055).
- Mantener un rango de luminancia coherente en diferentes partes del contenido HDR (usa el rango de HLG)
- Se agregó compatibilidad con superposiciones Ultra HDR (mapa de bits) en contenido HDR.
- Permite que se usen los efectos de
SeparableConvolutionantes de la API 26. - Quita el
OverlaySettings.useHdrsin usar, ya que el rango dinámico de la superposición y el fotograma deben coincidir. - Se agregó compatibilidad con HDR para
TextOverlay. La luminancia de la superposición de texto se puede ajustar conOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Admite varios cambios de velocidad dentro del mismo
- Extensión IMA:
- Se promovió a estable la API de Promote, que es necesaria para que las apps reproduzcan transmisiones de anuncios de DAI.
- Agrega
replaceAdTagParameters(Map <String, String>)aImaServerSideAdInsertionMediaSource.AdLoader, lo que permite reemplazar los parámetros de etiquetas de anuncios en el tiempo de ejecución. - Se corrigió un error por el que no se llamaba a
VideoAdPlayer.VideoAdPlayerCallback.onError()cuando se producía un error del reproductor durante la reproducción de anuncios (#1334). - Se modificó la versión del SDK de IMA a la 3.33.0 para corregir un error
NullPointerExceptioncuando se usan URIs de etiquetas de anunciosdata://(#700).
- Sesión:
- Cambia el valor predeterminado de
CommandButton.enabledatruey asegúrate de que el valor pueda permanecer como falso para los controladores, incluso si el comando asociado está disponible. - Se agregaron constantes de íconos para
CommandButtonque se deben usar en lugar de recursos de íconos personalizados. - Se agregó
MediaSessionService.isPlaybackOngoing()para permitir que las apps consulten si el servicio debe detenerse enonTaskRemoved()(#1219). - Agrega
MediaSessionService.pauseAllPlayersAndStopSelf(), que permite pausar la reproducción de todas las sesiones y llamar astopSelf()para finalizar el ciclo de vida deMediaSessionService. - Anula
MediaSessionService.onTaskRemoved(Intent)para proporcionar una implementación predeterminada segura que mantenga el servicio en primer plano si la reproducción está en curso o detenga el servicio de lo contrario. - Oculta la barra de búsqueda en la notificación de medios para las transmisiones en vivo sin configurar la duración en los metadatos de la sesión de la plataforma (#1256).
- Alinea la conversión de
MediaMetadataaMediaDescriptionCompatpara usar el mismo orden y la misma lógica preferidos cuando se seleccionan propiedades de metadatos que en media1. - Agrega
MediaSession.sendError()que permite enviar errores recuperables al controlador de Media3. Cuando se usa el controlador de notificaciones (consultaMediaSession.getMediaNotificationControllerInfo()), el error personalizado se usa para actualizar elPlaybackStatede la sesión de la plataforma a un estado de error con la información de error proporcionada (#543). - Agrega
MediaSession.Callback.onPlayerInteractionFinished()para informar a las sesiones cuando finalizó una serie de interacciones del jugador desde un control específico. - Agrega
SessionErrory úsalo enSessionResultyLibraryResulten lugar del código de error para proporcionar más información sobre el error y cómo resolverlo, si es posible. - Publica el código de la app de prueba del controlador de media3 que se puede usar para probar las interacciones con las apps que publican una sesión multimedia.
- Propaga los elementos adicionales que se pasan al
MediaSession[Builder].setSessionExtras()de media3 a unPlaybackStateCompat.getExtras()de un controlador de media1. - Asigna errores recuperables e irrecuperables a la sesión de la plataforma y desde ella. Un
PlaybackExceptionse asigna a un estado de error irrecuperable delPlaybackStateCompat. UnSessionErrorenviado al controlador de notificaciones de medios conMediaSession.sendError(ControllerInfo, SessionError)se asigna a un error recuperable enPlaybackStateCompat, lo que significa que se establecen el código y el mensaje de error, pero el estado de la sesión de la plataforma sigue siendo diferente deSTATE_ERROR. - Permite que la actividad de la sesión se establezca por controlador para anular la actividad de la sesión global. La actividad de la sesión se puede definir para un controlador en el momento de la conexión creando un
ConnectionResultconAcceptedResultBuilder.setSessionActivivty(PendingIntent). Una vez que se establece la conexión, la actividad de la sesión se puede actualizar conMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Se mejoró la replicación de errores de las llamadas a
MediaLibrarySession.Callback. Ahora se puede configurar la replicación de errores conMediaLibrarySession.Builder.setLibraryErrorReplicationMode()para elegir el tipo de error o inhabilitar la replicación de errores, que está habilitada de forma predeterminada.
- Cambia el valor predeterminado de
- IU:
- Se agregó compatibilidad con la visualización de imágenes a
PlayerViewcuando se conecta a unExoPlayer(#1144). - Se agregó la personalización de varios íconos en
PlayerControlViewa través de atributos XML para permitir diferentes elementos de diseño por instancia dePlayerView, en lugar de anulaciones globales (#1200). - Se solucionó un error de la plataforma que provocaba que el video se estirara o recortara cuando se usaba
SurfaceViewdentro de unAndroidViewde Compose en la API 34 (#1237).
- Se agregó compatibilidad con la visualización de imágenes a
- Descargas:
- Asegúrate de que
DownloadHelperno filtre instancias deRenderersin lanzar, lo que puede provocar que la app falle conIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- Asegúrate de que
- Extensión de Cronet:
- Se corrigió
SocketTimeoutExceptionenCronetDataSource. En algunas versiones de Cronet, la solicitud proporcionada por la devolución de llamada no siempre es la misma. Esto hace que la devolución de llamada no se complete y que se agote el tiempo de espera de la solicitud (https://issuetracker.google.com/328442628).
- Se corrigió
- Extensión HLS:
- Se corrigió un error por el que las muestras de EMSG pendientes que esperaban una discontinuidad se delegaban en
HlsSampleStreamWrappercon una compensación incorrecta que provocaba unIndexOutOfBoundsExceptiono unIllegalArgumentException(#1002). - Se corrigió un error por el que las playlists no principales se volvían a cargar para las transmisiones de LL-HLS (#1240).
- Se corrigió un error por el que habilitar CMCD para HLS con segmentos de inicialización generaba
Source ErroryIllegalArgumentException. - Se corrigió un error por el que no se actualizaban las playlists de reproducción no principales durante la reproducción en vivo (#1240).
- Se corrigió un error por el que habilitar CMCD para las transmisiones en vivo de HLS provocaba
ArrayIndexOutOfBoundsException(#1395).
- Se corrigió un error por el que las muestras de EMSG pendientes que esperaban una discontinuidad se delegaban en
- Extensión de DASH:
- Extensión de Cast:
- Se corrigió el error que convertía el título del álbum del
MediaQueueItemen el artista del elemento multimedia de Media3 (#1255).
- Se corrigió el error que convertía el título del álbum del
- Utilidades de prueba:
- Implementa
onInit()yonRelease()enFakeRenderer. - Se modificaron los métodos
TestPlayerRunHelper.runUntil()/playUntil()para que fallen en errores no fatales (p.ej., los que se informan aAnalyticsListener.onVideoCodecError()). Usa la nueva cadena de métodosTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()para inhabilitar este comportamiento.
- Implementa
- App de demo:
- Usa
DefaultPreloadManageren la app de demostración de formato corto. - Se permite configurar el modo de repetición con argumentos
Intentdesde la línea de comandos (#1266). - Usa
HttpEngineDataSourcecomoHttpDataSourcecuando el dispositivo lo admita.
- Usa
- Se quitan los símbolos obsoletos:
- Se quitó
CronetDataSourceFactory. Se usaCronetDataSource.Factoryen su lugar. - Se quitaron algunos constructores
DataSpec. UsaDataSpec.Builderen su lugar. - Se quitó el método
setContentTypePredicate(Predicate)deDefaultHttpDataSource,OkHttpDataSourceyCronetDataSource. En su lugar, usa el método equivalente en cadaXXXDataSource.Factory. - Se quitan los constructores
OkHttpDataSourceyOkHttpDataSourceFactory. En su lugar, usaOkHttpDataSource.Factory. - Se quita
PlayerMessage.setHandler(Handler). Se usasetLooper(Looper)en su lugar. - Se quitó el campo
Timeline.Window.isLive. En su lugar, usa el métodoisLive(). - Se quitan los constructores
DefaultHttpDataSource. Se usaDefaultHttpDataSource.Factoryen su lugar. - Se quita
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Se usaDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSen su lugar. - Se quita
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). UsaMediaCodecInfo.canReuseCodec(Format, Format)en su lugar. - Se quitaron los métodos
DrmSessionManager.DUMMYygetDummyDrmSessionManager(). En su lugar, usaDrmSessionManager.DRM_UNSUPPORTED. - Quita
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format)yVideoRendererEventListener.onVideoInputFormatChanged(Format). En su lugar, usa las sobrecargas que toman unDecoderReuseEvaluation. - Se quitan la constante
RendererSupport.FormatSupportIntDef y las constantesFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPEyFORMAT_UNSUPPORTED_TYPE. En su lugar, usa el IntDef y las constantes equivalentes enandroidx.media3.common.C(p.ej.,C.FORMAT_HANDLED). - Se quitó la interfaz
Bundleable. Esto incluye quitar todos los campos constantes deBundleable.Creator<Foo> CREATOR. En su lugar, los llamadores deben usar los métodosBundle toBundle()ystatic Foo fromBundle(Bundle)en cada tipo.
- Se quitó
Versión 1.4.0-rc01
10 de julio de 2024
Usa la versión estable 1.4.0.
Versión 1.4.0-beta01
26 de junio de 2024
Usa la versión estable 1.4.0.
Versión 1.4.0-alpha02
7 de junio de 2024
Usa la versión estable 1.4.0.
Versión 1.4.0-alpha01
17 de abril de 2024
Usa la versión estable 1.4.0.
Versión 1.3.0
Versión 1.3.1
11 de abril de 2024
Lanzamiento de androidx.media3:media3-*:1.3.1.
La versión 1.3.1 contiene estas confirmaciones.
- Biblioteca común:
- Agrega
Format.labelspara permitir etiquetas localizadas o alternativas.
- Agrega
- ExoPlayer:
- Se solucionó un problema por el que
PreloadMediaPeriodno podía retener las transmisiones cuando se precargaba de nuevo. - Aplica el
TrackSelectionResultcorrespondiente correcto al período de reproducción en la nueva selección de pistas. - Los renderizadores habilitados para el inicio anticipado solo se inician después de avanzar el período de reproducción cuando se realiza la transición entre elementos multimedia (#1017).
- Se agregó el tipo de devolución faltante a la regla
-keepclasseswithmembersde ProGuard paraDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Se solucionó un problema por el que
- Transformador:
- Se agregó una solución alternativa para la excepción que se arroja debido a que
MediaMuxerno admite marcas de tiempo de presentación negativas antes de la API 30.
- Se agregó una solución alternativa para la excepción que se arroja debido a que
- Selección de pistas:
DefaultTrackSelector: Prefiere las pistas de video con una frecuencia de fotogramas "razonable" (mayor o igual a 10 FPS) a las que tienen una frecuencia de fotogramas más baja o no establecida. Esto garantiza que el reproductor seleccione la pista de video "real" en los MP4 extraídos de las fotos en movimiento que pueden contener dos pistas HEVC, en las que una tiene una resolución más alta, pero una cantidad muy pequeña de fotogramas (#1051).
- Extractores:
- Se corrigió un problema por el que no se omitía el padding cuando se leían fragmentos de tamaño impar de archivos WAV (#1117).
- MP3: Propaga
Format.averageBitratedesde tramas de metadatos, comoXINGyVBRI. - MPEG-TS: Se revirtió un cambio que tenía como objetivo garantizar que se renderizara el último fotograma pasando la última unidad de acceso de una transmisión a la cola de muestras (#7909). Esto se debe a que el cambio causa nuevos problemas con las transmisiones HLS de solo I-frame (#1150) y las transmisiones HLS de H.262 (#1126).
- Audio:
- Permite la recuperación del renderizador inhabilitando la descarga si no se puede inicializar la pista de audio en el modo de descarga.
- 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 hace que las transmisiones H265 de 60 FPS se marquen como no compatibles.
- Se agregó una solución alternativa que garantiza que el primer fotograma siempre se renderice durante la tunelización, incluso si el dispositivo no lo hace automáticamente como lo requiere la API (#1169). (#966).
- Se corrigió un problema por el que el control de la información de color HDR provocaba un comportamiento incorrecto del códec y evitaba los cambios de formato adaptativos para las pistas de video SDR (#1158).
- Texto:
- WebVTT: Se evita que los segmentos consecutivos directos creen instancias de
CuesWithTimingadicionales espurias a partir deWebvttParser.parse(#1177).
- WebVTT: Se evita que los segmentos consecutivos directos creen instancias de
- DRM:
- Se solucionó un problema con
NoSuchMethodErrorque el framework deMediaDrmpuede arrojar en lugar deResourceBusyExceptionoNotProvisionedExceptionen algunos dispositivos Android 14 (#1145).
- Se solucionó un problema con
- Efecto:
- Se mejoró la asignación de tonos de PQ a SDR mediante la conversión de espacios de color.
- Sesión:
- IU:
- Se incluye el nombre del idioma de la pista de audio como resguardo si
Localeno puede identificar un nombre visible (#988).
- Se incluye el nombre del idioma de la pista de audio como resguardo si
- Extensión de DASH:
- Se completan todos los elementos
Labeldel manifiesto enFormat.labels(#1054).
- Se completan todos los elementos
- Extensión RTSP:
- Se omiten los valores de información de sesión vacíos (i-tags) en el análisis de SDP (#1087).
- Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etc.):
- Inhabilita la extensión de MIDI como una dependencia local de forma predeterminada porque requiere que se configure un repositorio de Maven adicional. Los usuarios que necesiten este módulo desde una dependencia local pueden volver a habilitarlo.
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 URIs de recursos sin procesar
android.resource://package/[type/]name, en los quepackagees diferente del paquete de la aplicación actual. Siempre se documentó que esto funcionaba, pero no se implementó correctamente hasta ahora. - Normaliza los tipos de MIME establecidos por el código de la app o leídos de los medios para que estén completamente en minúsculas.
- Define anuncios con un
MediaItemcompleto en lugar de un soloUrienAdPlaybackState. - Aumenta
minSdka 19 (Android KitKat). Esto se alinea 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. - Se completan
artworkUriyartworkDataenMediaMetadata.Builder.populate(MediaMetadata)cuando al menos uno de ellos no es nulo (#964).
- Implementa la compatibilidad con los URIs de recursos sin procesar
- ExoPlayer:
- Agrega
PreloadMediaSourceyPreloadMediaPeriod, que permiten que las apps carguen previamente una fuente de contenido multimedia en una posición de inicio específica antes de la reproducción.PreloadMediaSourcese encarga de preparar la fuente de contenido multimedia para recibir elTimeline, preparar y almacenar en caché el período en la posición de inicio determinada, seleccionar pistas y cargar datos multimedia para el período. Las apps controlan el progreso de la precarga implementandoPreloadMediaSource.PreloadControly configuran la fuente precargada en el reproductor para la reproducción. - Se agregó
ExoPlayer.setImageOutput, que permite que las apps configurenImageRenderer.ImageOutput. DefaultRenderersFactoryahora proporciona unImageRendereral reproductor de forma predeterminada conImageOutputyImageDecoder.Factory.DEFAULTnulos.- Se emite el evento
Player.Listener.onPositionDiscontinuitycuando se omite el silencio (#765). - Se agregó compatibilidad experimental para analizar subtítulos durante la extracción. Puedes habilitar esta opción con
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). - Se admiten fuentes de medios adaptables con
PreloadMediaSource. - Implementa
HttpEngineDataSource, unHttpDataSourceque usa la API de HttpEngine. - Evita la creación de subclases de
CompositeSequenceableLoader. Este componente se había hecho extensible anteriormente, pero nunca se creó una subclase dentro de la biblioteca. Las personalizaciones se pueden realizar envolviendo una instancia con el patrón de decorador y, luego, implementando unCompositeSequenceableLoaderFactorypersonalizado. - Se corrigió un problema por el que repetir el mismo período provocaba que se borraran los metadatos de este elemento (#1007).
- Se cambió el nombre de los métodos
experimentalSetSubtitleParserFactoryenBundledChunkExtractor.FactoryyDefaultHlsExtractorFactoryasetSubtitleParserFactory, y se prohibió pasarnull. Usa los nuevos métodosexperimentalParseSubtitlesDuringExtraction(boolean)para controlar el comportamiento del análisis. - Se agregó compatibilidad para personalizar el
SubtitleParser.Factoryque se usa durante la extracción. Esto se puede lograr conMediaSource.Factory.setSubtitleParserFactory(). - Agrega el prefijo de la fuente a todos los campos
Format.idgenerados a partir deMergingMediaSource. Esto ayuda a identificar qué fuente produjo unFormat(#883). - Se corrigió la regex que se usa para validar los nombres de claves personalizadas de Common Media Client Data (CMCD). Para ello, se modificó de modo que solo verifique si hay guiones (#1028).
- Se detuvo la codificación doble de los parámetros de consulta de CMCD (#1075).
- Agrega
- Transformador:
- Se agregó compatibilidad para aplanar videos en cámara lenta SEF H.265/HEVC.
- Aumenta la velocidad de transmultiplexación, especialmente para las ediciones de "quitar video".
- Se agregó 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 recorte sea más compatible con las implementaciones de reproductores que no muestran el primer fotograma del video hasta su marca de tiempo de presentación (#829).
- Se agregó compatibilidad para optimizar las operaciones de recorte de MP4 de un solo recurso.
- Se agregó compatibilidad para garantizar que un fotograma de video tenga la primera marca de tiempo en el archivo de salida. Se corrigió el problema de los archivos de salida que comenzaban con un fotograma negro en los reproductores basados en iOS (#829).
- Selección de pistas:
- Agrega
DefaultTrackSelector.selectImageTrackpara habilitar la selección de pistas de imágenes. - Agrega
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledpara determinar si se debe seleccionar una pista de imagen si hay disponibles una pista de imagen y una pista de video. El valor predeterminado esfalse, lo que significa que se prioriza la selección de una pista de video.
- Agrega
- Extractores:
- Se agregó análisis adicional de AV1C al extractor de MP4 para recuperar los valores de
ColorInfo.colorSpace,ColorInfo.colorTransferyColorInfo.colorRange(#692). - MP3: Usa la búsqueda de tasa de bits constante (CBR) para los archivos con un encabezado
Info(el equivalente de CBR del encabezadoXing). Anteriormente, usábamos la tabla de búsqueda del encabezadoInfo, pero esto genera 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 extraen los tipos de audio de los descriptores de TS y se asignan a marcas de rol, lo que permite a los usuarios seleccionar pistas de audio con mayor información (#973).
- Se agregó análisis adicional de AV1C al extractor de MP4 para recuperar los valores de
- Audio:
- Video:
- Cambia el constructor
MediaCodecVideoRendererque toma un argumentoVideoFrameProcessor.Factoryy reemplázalo por un constructor que tome un argumentoVideoSinkProvider. Las apps que deseen insertar unVideoFrameProcessor.Factorypersonalizado pueden crear una instancia de unCompositingVideoSinkProviderque use elVideoFrameProcessor.Factorypersonalizado y pasar el proveedor de receptor de video aMediaCodecVideoRenderer.
- Cambia el constructor
- Texto:
- Se corrigió la serialización de las pistas de mapa de bits para resolver el error
Tried to marshall a Parcel that contained Binder objectscuando se usaDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708: Se ignora el valor de
rowLock. La especificación CEA-708-E S-2023 indica que se debe suponer querowLockycolumnLockson verdaderos, independientemente de los valores presentes en la transmisión (no se implementa la compatibilidad concolumnLock, por lo que se supone que siempre es falso).
- Se corrigió la serialización de las pistas de mapa de bits para resolver el error
- Imagen:
- Se agregó compatibilidad con miniaturas de DASH. Las imágenes de cuadrícula se recortan y se proporcionan miniaturas individuales cerca de sus tiempos de presentación.
ImageOutput
- Se agregó compatibilidad con miniaturas de DASH. Las imágenes de cuadrícula se recortan y se proporcionan miniaturas individuales cerca de sus tiempos de presentación.
- DRM:
- De forma predeterminada, reproduce muestras no encriptadas de "pista principal clara" en contenido DRM de inmediato, incluso si las claves para las muestras encriptadas posteriores aún no están listas. Esto puede provocar interrupciones durante la reproducción si las claves aún no están listas cuando la posición de reproducción alcanza las muestras encriptadas (pero, anteriormente, la reproducción no habría comenzado en absoluto en este punto). Este comportamiento se puede inhabilitar con
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyoDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
- De forma predeterminada, reproduce muestras no encriptadas de "pista principal clara" en contenido DRM de inmediato, incluso si las claves para las muestras encriptadas posteriores aún no están listas. Esto puede provocar interrupciones durante la reproducción si las claves aún no están listas cuando la posición de reproducción alcanza las muestras encriptadas (pero, anteriormente, la reproducción no habría comenzado en absoluto en este punto). Este comportamiento se puede inhabilitar con
- Extensión IMA:
- Se corrigió el problema por el que no se podían reproducir los anuncios de DASH y HLS sin la extensión de archivo adecuada.
- Sesión:
- Inhabilita la detección de doble clic para las apps de TV (#962).
- Se corrigió el problema por el que
MediaItem.RequestMetadatacon solo elementos adicionales no nulos no se transmitía entre los controladores y las sesiones de medios. - Agrega un constructor a
MediaLibrarySession.Builderque solo tome unContexten lugar de unMediaLibraryService.
- Extensión HLS:
- Se redujo la visibilidad de
HlsMediaPerioda paquete privado. No se debe depender directamente de este tipo desde fuera del paquete de HLS. - Se resuelven las búsquedas al principio de un segmento de manera más eficiente (#1031).
- Se redujo la visibilidad de
- Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etc.):
- Decodificador MIDI: Se ignoran los mensajes de eventos SysEx (#710).
- Utilidades de prueba:
- No pausar la reproducción en
TestPlayerRunHelper.playUntilPositionLa prueba mantiene la reproducción en estado de reproducción, pero suspende el progreso hasta que la prueba pueda agregar aserciones y más acciones.
- No pausar la reproducción en
- App de demo:
- Se agregó un módulo de demostración de formato corto para mostrar el uso de
PreloadMediaSourcecon el caso de uso de contenido de formato corto.
- Se agregó un módulo de demostración de formato corto para mostrar el uso de
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 de
LiveConfiguration.min/maxOffsetseguían ajustando el desplazamiento amin/maxOffset. - Se corrigió el problema por el que los diseños de canales OPUS y VORBIS eran incorrectos para 3, 5, 6, 7 y 8 canales (#8396).
- Se corrigió un problema por el que las selecciones de pistas después de buscar el punto cero en una transmisión en vivo permitían, de forma incorrecta, que la transmisión comenzara en su posición predeterminada (#9347).
- Se corrigió el problema por el que las instancias nuevas de
CmcdData.Factoryrecibían valores negativos parabufferedDurationUsde las fuentes de fragmentos, lo que generaba unIllegalArgumentException(#888).
- Se corrigió el problema por el que las búsquedas manuales fuera del rango de
- Transformador:
- Se solucionó un problema por el que el codificador generaba una excepción en el momento de la configuración debido a que se establecía una tasa de operación alta.
- Extractores:
- Marca los segmentos secundarios (no reproducibles) de HEVC en las fotos en movimiento JPEG como
ROLE_FLAG_ALTERNATEpara evitar que se seleccionen automáticamente para la reproducción debido a su mayor resolución. - Se corrigió la detección incorrecta de fotogramas clave para transmisiones TS H264 (#864).
- Se corrigió la estimación de la duración de las transmisiones TS que duran más de 47,721 segundos (#855).
- Marca los segmentos secundarios (no reproducibles) de HEVC en las fotos en movimiento JPEG como
- Audio:
- Se corrigió el control de EOS para
SilenceSkippingAudioProcessorcuando se llama varias veces (#712).
- Se corrigió el control de EOS para
- 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 hace que los streams AVC de 60 FPS se marquen como no compatibles (#693).
- Metadatos:
- Se corrigió un error por el que
MediaMetadatasolo se completaba a partir de comentarios de Vorbis con claves en mayúsculas (#876). - Se detecta
OutOfMemoryErrorcuando se analizan tramas ID3 muy grandes, lo que significa que la reproducción puede continuar sin la información de la etiqueta en lugar de fallar por completo.
- Se corrigió un error por el que
- DRM:
- Se extendió la solución alternativa para la URL de licencia de
https://default.urlClearKey espuria a la API 33 y versiones posteriores (anteriormente, la solución alternativa solo se aplicaba exactamente en la API 33) (#837). - Se corrigió
ERROR_DRM_SESSION_NOT_OPENEDcuando se cambia de contenido encriptado a contenido claro sin una superficie adjunta al reproductor. El error se produjo porque se usó de forma incorrecta un decodificador seguro para reproducir el contenido sin protección.
- Se extendió la solución alternativa para la URL de licencia de
- Sesión:
- Coloca las claves y los valores personalizados en
MediaMetadataCompatparaMediaMetadata.extrasyMediaMetadata.extrasparaMediaMetadataCompat(#756, #802). - Se corrigió la transmisión de
notifyChildrenChangedpara los controladores heredados (#644). - Se corrigió un error por el que establecer un tiempo negativo para un temporizador
setWheninhabilitado de la notificación provocaba una falla en algunos dispositivos (#903). - Se corrigió
IllegalStateExceptioncuando el controlador de notificaciones multimedia no había terminado de conectarse cuando se solicitó la primera actualización de la notificación (#917).
- Coloca las claves y los valores personalizados en
- IU:
- Extensión de 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.):
- Extensión de Cast:
- Se corrigió la creación de un objeto
Timelinepara que no falle la app cuando no se pueda cargar contenido multimedia en el dispositivo de transmisión (#708).
- Se corrigió la creación de un objeto
Versión 1.2.0
15 de noviembre de 2023
- Biblioteca común:
- Agrega un parámetro
@Nullable Throwablea los métodos de la interfazLog.Logger. El parámetromessagede estos métodos ya no contiene información sobre elThrowableque se pasó a los métodosLog.{d,i,w,e}(), por lo que las implementaciones deberán agregar manualmente esta información si lo desean (posiblemente conLogger.appendThrowableString(String, Throwable)). - Se corrigió un problema de compatibilidad con Kotlin en el que los parámetros de tipo genérico anulables y los tipos de elementos de array anulables no se detectaban como anulables. Los ejemplos son los parámetros de los métodos
TrackSelectorResultySimpleDecoder(#6792). - Cambia el comportamiento predeterminado de la IU y las notificaciones en
Util.shouldShowPlayButtonpara mostrar un botón de "reproducción" mientras se suprime temporalmente la reproducción (p.ej., debido a una pérdida transitoria del enfoque de audio). El comportamiento heredado se puede mantener conPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)oMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Actualiza
androidx.annotation:annotation-experimentala1.3.1para corregir https://issuetracker.google.com/251172715. - Mueve
ExoPlayer.setAudioAttributesa la interfazPlayer.
- Agrega un parámetro
- ExoPlayer:
- Se corrigieron problemas de búsqueda en transmisiones AC4 causados por no identificar correctamente las muestras de solo decodificación (#11000).
- Se agregó la supresión de la reproducción en dispositivos de salida de audio no aptos (p.ej., el altavoz integrado en dispositivos Wear OS) cuando esta función está habilitada a través de
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. El motivo de la supresión de la reproducción se actualizará comoPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTsi se intenta reproducir contenido cuando no hay salidas de audio adecuadas disponibles o si se desconectan todas las salidas adecuadas durante la reproducción. El motivo de la supresión se quitará cuando se conecte una salida adecuada. - Agrega
MediaSource.canUpdateMediaItemyMediaSource.updateMediaItempara aceptar actualizaciones deMediaItemdespués de la creación a través dePlayer.replaceMediaItem(s). - Se permiten las actualizaciones de
MediaItempara todas las clases deMediaSourceproporcionadas por la biblioteca a través dePlayer.replaceMediaItem(s)(#33, #9978). - Se cambia el nombre de
MimeTypes.TEXT_EXOPLAYER_CUESaMimeTypes.APPLICATION_MEDIA3_CUES. - Agrega
PngExtractorque envía y lee un archivo PNG completo enTrackOutputcomo una muestra. - Mejora el método
SequenceableLoader.continueLoading(long)en la interfazSequenceableLoaderparaSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontiene parámetros adicionales, incluidosplaybackSpeedylastRebufferRealtimeMs, además delplaybackPositionUsexistente. - Mejora el método
ChunkSource.getNextChunk(long, long, List, ChunkHolder)en la interfazChunkSourceaChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Se agregaron campos adicionales al registro de datos comunes de clientes multimedia (CMCD): insuficiencia de búfer (
bs), fecha límite (dl), velocidad de reproducción (pr) y tiempo de inicio (su) (#8699). - Agrega la profundidad de bits de luminancia y croma a
ColorInfo(#491). - Se agregaron campos adicionales al registro de datos comunes de clientes multimedia (CMCD): solicitud del siguiente objeto (
nor) y solicitud del siguiente rango (nrr) (#8699). - Se agregó la función para transmitir datos de Common Media Client Data (CMCD) con parámetros de consulta (#553).
- Se corrigió
ConcurrentModificationExceptionenExperimentalBandwidthMeter(#612). - Se agregó el parámetro
MediaPeriodIdaCompositeMediaSource.getMediaTimeForChildMediaTime. - Se admite
ClippingMediaSource(y otras fuentes con compensaciones de tiempo de período o ventana) enConcatenatingMediaSource2(#11226). - Cambia
BaseRenderer.onStreamChanged()para que también reciba un argumentoMediaPeriodId.
- Transformador:
- Analiza los datos de rotación de EXIF para las entradas de imágenes.
- Se quitaron el tipo de anotación
TransformationRequest.HdrModey sus constantes asociadas. En su lugar, usaComposition.HdrModey sus constantes asociadas. - Simplifica el
OverlaySettingspara corregir los problemas de rotación. - Se cambiaron los parámetros
frameRateydurationUsdeSampleConsumer.queueInputBitmapaTimestampIterator.
- Selección de pistas:
- Agrega
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesspara permitir o rechazar explícitamente la adaptación no fluida. El valor predeterminado mantiene su comportamiento actual detrue.
- Agrega
- Extractores:
- MPEG-TS: Asegúrate de que el último fotograma se renderice pasando la última unidad de acceso de una transmisión a la cola de muestras (#7909).
- Se corrigió un error de escritura al determinar
rotationDegrees. Se cambióprojectionPosePitchporprojectionPoseRoll(#461). - Quita la suposición de que las instancias de
Extractorse pueden inspeccionar directamente coninstanceof. Si quieres acceder en el tiempo de ejecución a los detalles de implementación de unExtractor, primero debes llamar aExtractor.getUnderlyingInstance. - Agrega
BmpExtractor. - Agrega
WebpExtractor. - Agrega
HeifExtractor. - Se agregó compatibilidad con QuickTime clásico a
Mp4Extractor.
- Audio:
- Se agregó compatibilidad con PCM big-endian de 24/32 bits en MP4 y Matroska, y se analizó la codificación de PCM para
lpcmen MP4. - Se agregó compatibilidad para extraer audio Vorbis en MP4.
- Se agregó
AudioSink.getFormatOffloadSupport(Format)que recupera el nivel de compatibilidad de descarga que el receptor puede proporcionar para el formato a través de unDefaultAudioOffloadSupportProvider. Devuelve el nuevoAudioOffloadSupportque contieneisFormatSupported,isGaplessSupportedyisSpeedChangeSupported. - Agrega
AudioSink.setOffloadMode()a través del cual se configura la descarga en el receptor de audio. El valor predeterminado esAudioSink.OFFLOAD_MODE_DISABLED. - La descarga se puede habilitar a través de
setAudioOffloadPreferenceenTrackSelectionParameters. 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
audioOffloadModePreferencese establece enAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorsolo seleccionará una pista de audio y solo si el formato de esa pista es compatible con la descarga. Si no se admite ninguna pista de audio en la descarga, no se seleccionará ninguna pista. - Se inhabilitó la compatibilidad sin interrupciones para la descarga cuando el nivel de API es anterior a 33 debido a un problema de posición de reproducción después de la transición de pista.
- Se quitó el parámetro
enableOffloadde la firma del métodoDefaultRenderersFactory.buildAudioSink. - Se quitó el método
DefaultAudioSink.Builder.setOffloadMode. - Quita el valor de intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Se agregó compatibilidad con los metadatos sin interrupciones de Opus durante la reproducción de la descarga.
- Se permite la recuperación del renderizador inhabilitando la descarga si falló en la primera escritura (#627).
- Se habilita la programación de descarga de forma predeterminada para la reproducción descargada solo de audio.
- Borra
ExoPlayer.experimentalSetOffloadSchedulingEnabledyAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. - Se cambió el nombre de
onExperimentalSleepingForOffloadChangedporonSleepingForOffloadChangedy el deonExperimentalOffloadedPlaybackporonOffloadedPlayback. - Mueve las interfaces y definiciones de
TrackSelectionParametersrelacionadas con el modo de descarga de audio a una claseAudioOffloadPreferencesinterna. - Agrega devoluciones de llamada
onAudioTrackInitializedyonAudioTrackReleasedaAnalyticsListener,AudioRendererEventListeneryAudioSink.Listener. - Se corrigió el problema de subdesbordamiento del búfer de audio de DTS Express (#650).
- Se corrigió un error por el que la verificación de capacidades para E-AC3-JOC arroja un
IllegalArgumentException(#677).
- Se agregó compatibilidad con PCM big-endian de 24/32 bits en MP4 y Matroska, y se analizó la codificación de PCM para
- Video:
- Permite que
MediaCodecVideoRendereruse unVideoFrameProcessor.Factorypersonalizado. - Se corrigió un error por el que no se podía renderizar el primer fotograma si el flujo de audio comenzaba con marcas de tiempo negativas (#291).
- Permite que
- Texto:
- Se quita
ExoplayerCuesDecoder. Las pistas de texto consampleMimeType = application/x-media3-cuesahora se controlan directamente conTextRenderersin necesidad de una instancia deSubtitleDecoder.
- Se quita
- Metadatos:
- Ya no se llamará a
MetadataDecoder.decodepara las muestras de "solo decodificación", ya que la implementación debe devolver un valor nulo de todos modos.
- Ya no se llamará a
- Efecto:
- Agrega la entrada de mapa de bits de la fila
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)por marca de tiempo. - Cambia
VideoFrameProcessor.registerInputStream()para que no se bloquee. Las apps deben implementarVideoFrameProcessor.Listener#onInputStreamRegistered(). - Se cambiaron los parámetros
frameRateydurationUsdeVideoFrameProcessor.queueInputBitmapaTimestampIterator.
- Agrega la entrada de mapa de bits de la fila
- Extensión IMA:
- Se corrigió un error por el que una transmisión en vivo de DASH de varios períodos que no es el primer elemento de una playlist puede generar una excepción (#571).
- Libera StreamManager antes de llamar a
AdsLoader.destroy() - Se modificó la versión del SDK de IMA a la 3.31.0.
- Sesión:
- Configura el comportamiento del servicio en primer plano de las notificaciones como
FOREGROUND_SERVICE_IMMEDIATEenDefaultMediaNotificationProvider(#167). - Usa solo
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()por encima del nivel de API 31 para evitar problemas con la API en desuso en dispositivos Samsung (#167). - Usa el controlador de notificaciones de medios 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 de medios que recibe
MediaSessionService.onStartCommand()dentro de Media3 en lugar de enrutarlos a la sesión de la plataforma y de vuelta a Media3. De esta manera, el controlador de llamadas siempre es el controlador de notificaciones de medios, y las apps pueden reconocer fácilmente las llamadas provenientes de la notificación de la misma manera en todos los niveles de API compatibles. - Se corrigió un error por el que
MediaController.getCurrentPosition()no avanzaba cuando se conectaba a un objetoMediaSessionCompatheredado. - Se agregó
MediaLibrarySession.getSubscribedControllers(mediaId)para mayor comodidad. - Anula
MediaLibrarySession.Callback.onSubscribe()para confirmar la disponibilidad del ID principal al que se suscribe el controlador. Si la operación se realiza correctamente, se acepta la suscripción y se llama anotifyChildrenChanged()de inmediato para informar al navegador (#561). - Se agregó el módulo de demostración de sesión para el SO Automotive y se habilitó la demostración de sesión para Android Auto.
- No establezcas la cola de la sesión del framework cuando
COMMAND_GET_TIMELINEno esté disponible para el controlador de notificaciones de medios. Con Android Auto como el controlador cliente que lee desde la sesión del framework, esto tiene el efecto de que el botónqueueen la IU de Android Auto no se muestra (#339). - Se usa
DataSourceBitmapLoaderde forma predeterminada en lugar deSimpleBitmapLoader(#271, #327). - Se agregó
MediaSession.Callback.onMediaButtonEvent(Intent), que permite que las apps anulen el control predeterminado de eventos de botones de medios.
- Configura el comportamiento del servicio en primer plano de las notificaciones como
- IU:
- Agrega una implementación de
Player.Listenerpara dispositivos Wear OS que controle la supresión de reproducción debido aPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT. Para ello, inicia un diálogo del sistema que permita al usuario conectar una salida de audio adecuada (p. ej., auriculares Bluetooth). El objeto de escucha reanudará automáticamente la reproducción si se conecta un dispositivo adecuado dentro de un tiempo de espera configurable (el valor predeterminado es de 5 minutos).
- Agrega una implementación de
- Descargas:
- Declara el tipo de servicio en primer plano "sincronización de datos" para
DownloadServicepara la compatibilidad con Android 14. Cuando se usa este servicio, la app también debe agregardataSynccomoforegroundServiceTypeen el manifiesto y agregar el permisoFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Declara el tipo de servicio en primer plano "sincronización de datos" para
- Extensión HLS:
- Se actualiza la playlist en vivo de HLS con un intervalo calculado a partir de la última hora de inicio de carga, en lugar de la última hora de finalización de carga (#663).
- Extensión de DASH:
- Permite varios identificadores DASH iguales en la URL de la plantilla de segmento.
- Se agregó compatibilidad experimental para analizar subtítulos durante la extracción. Esto mejora la compatibilidad para combinar subtítulos superpuestos, lo que incluye la resolución del parpadeo cuando se realiza la transición entre segmentos de subtítulos. Puedes habilitar esta opción con
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288).
- Extensión RTSP:
- Se corrigió una condición de carrera que podía provocar un
IndexOutOfBoundsExceptioncuando se volvía a TCP o se interrumpía la reproducción en algunas situaciones. - Se verifica el estado en la configuración de RTSP cuando se devuelve el estado de carga de
RtspMediaPeriod(#577). - Se ignoran los métodos de solicitud de Rtsp personalizados en el encabezado público de la respuesta de Options (#613).
- Se 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 mantener la conexión activa (#662).
- Se corrigió una condición de carrera que podía provocar un
- Extensiones de decodificador (FFmpeg, VP9, AV1, MIDI, etc.):
- Se lanzó el módulo del decodificador MIDI, que proporciona compatibilidad con la reproducción de archivos MIDI estándar a través de la biblioteca de Jsyn para sintetizar audio.
- Agrega
DecoderOutputBuffer.shouldBeSkippedpara marcar directamente los búferes de salida que no necesitan presentarse. Se prefiere usar este método en lugar deC.BUFFER_FLAG_DECODE_ONLY, que dejará de estar disponible. - Agrega
Decoder.setOutputStartTimeUsySimpleDecoder.isAtLeastOutputStartTimeUspara permitir que los decodificadores descarten muestras de solo decodificación antes de la hora de inicio. Se debe preferir esta opción aBuffer.isDecodeOnly, que quedará obsoleta. - Se corrigió el error de publicación del artefacto del decodificador de MIDI en el repositorio de Maven. Se cambió el nombre del artefacto a
media3-exoplayer-midi(#734).
- Extensión Leanback:
- Se corrigió un error por el que inhabilitar una superficie podía provocar una
ArithmeticExceptionen el código de Leanback (#617).
- Se corrigió un error por el que inhabilitar una superficie podía provocar una
- Utilidades de prueba:
- Haz que
TestExoPlayerBuilderyFakeClocksean compatibles con las pruebas de IU de Espresso y las pruebas de IU de Compose. Se corrigió un error por el que la reproducción avanzaba de forma no determinística durante las interacciones de vistas de Espresso o Compose.
- Haz que
- Se quitan los símbolos obsoletos:
- Se quitan
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)yTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). UsaComposition.Builder.setHdrMode(int)y pasaCompositionaTransformer.start(Composition, String)en su lugar. - Se quitó el método
DownloadNotificationHelper.buildProgressNotificationobsoleto. En su lugar, usa un método no obsoleto que tome un parámetronotMetRequirements.
- Se quitan
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
multidexagregada por accidente de todos los módulos (#499).
- Se quitó la dependencia
- ExoPlayer:
- Se corrigió un problema en
PlaybackStatsListenerpor el que se creabanPlaybackStatsfalsos después de que se borraba la playlist. - Se agregaron 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 bits superior (tb), duración del objeto (d), rendimiento medido (mtp) y tipo de objeto (ot) (#8699).
- Se corrigió un problema en
- Audio:
- Se corrigió un error por el que
Player.getState()nunca realizaba la transición aSTATE_ENDEDcuando se reproducían archivos muy cortos (#538).
- Se corrigió un error por el que
- Descarga de audio:
- Antepone las páginas de encabezado de ID de Ogg y de encabezado de comentario al flujo de bits para la reproducción de Opus descargada, de acuerdo con el RFC 7845.
- Video:
- H.265/HEVC: Se corrigió el análisis de la información de imágenes de referencia a corto y largo plazo del SPS.
- Texto:
- CEA-608: Se cambió la lógica de truncamiento de las indicaciones para que solo se considere el texto visible. Anteriormente, la sangría y el desplazamiento de tabulación se incluían cuando se limitaba la longitud de la pista a 32 caracteres (lo que era técnicamente correcto según la especificación) (#11019).
- Extensión IMA:
- Se modificó la versión del SDK de IMA a la 3.30.3.
- Sesión:
- Agrega un diseño personalizado al estado del controlador y proporciona un getter para acceder a él. Cuando cambia el diseño personalizado, se llama a
MediaController.Listener.onCustomLayoutChanged. Las apps que quieran enviar diferentes diseños personalizados a diferentes controladores de Media3 pueden hacerlo enMediaSession.Callback.onConnectusando unAcceptedResultBuilderpara asegurarse de que el diseño personalizado esté disponible para el controlador cuando se complete la conexión. - Se corrigieron los casos en los que
MediaLibraryServiceLegacyStubenviaba un error a unResultque no admitía esta acción, lo que producía unUnsupportedOperationException(#78). - Corrige la forma en que
PlayerWrappercrea unVolumeProviderCompatdeterminandovolumeControlTypea través de comandos heredados (COMMAND_ADJUST_DEVICE_VOLUMEyCOMMAND_SET_DEVICE_VOLUME) y comandos nuevos (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSyCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- Agrega un diseño personalizado al estado del controlador y proporciona un getter para acceder a él. Cuando cambia el diseño personalizado, se llama a
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 no apta y se reproduce cuando está listo. Se cambió el motivo de supresión por "Demasiado largo". (#15).
- Agrega comandos al reproductor:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_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ó
BuilderparaDeviceInfoy se marcó como obsoleto el constructor existente. - Se agregó
DeviceInfo.routingControllerIdpara especificar el ID del controlador de enrutamiento para las reproducciones remotas. - Agrega
Player.replaceMediaItem(s)como un atajo para agregar y quitar elementos en la misma posición (#8046).
- ExoPlayer:
- Permite que ExoPlayer controle los métodos de volumen del dispositivo solo si se habilitó explícitamente. Usa
ExoPlayer.Builder.setDeviceVolumeControlEnabledpara acceder a lo siguiente:getDeviceVolume()isDeviceMuted()setDeviceVolume(int)ysetDeviceVolume(int, int)increaseDeviceVolume(int)yincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)ydecreaseDeviceVolume(int, int)
- Agrega
FilteringMediaSource, que permite filtrar los tipos de pistas disponibles desde unMediaSource. - Se agregó compatibilidad para incluir datos comunes de clientes multimedia (CMCD) en las solicitudes salientes de los formatos de transmisión adaptable DASH, HLS y SmoothStreaming. Se incorporaron los siguientes campos:
br,bl,cid,rtpysid(#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.
- El registro de CMCD está inhabilitado de forma predeterminada. Usa
- Se agregó 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.jsonpersonalizado (#439). - Se agregó
ExoPlayer.setVideoEffects()para usarEffectdurante la reproducción de video. - Actualiza
SampleQueuepara almacenarsourceIdcomo unlongen lugar de unint. Esto cambia las firmas de los métodos públicosSampleQueue.sourceIdySampleQueue.peekSourceId. - Agrega parámetros a los métodos
LoadControl,shouldStartPlaybackyonTracksSelectedque permitan asociar estos métodos con elMediaPeriodpertinente. - Cambia la firma de
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)agregando un parámetro de línea de tiempo que contenga los períodos con los UID que se usan como claves en el mapa. Esto es necesario para evitar problemas de simultaneidad con las transmisiones en vivo de varios períodos. - Se dejaron de usar
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)yBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). En su lugar, se puede llamar a la variante de los métodos sin elmediaTimeOffsetUs. Ten en cuenta que, incluso para las variantes obsoletas, el desplazamiento ya no se agrega astartTimeUsyendTimeUsde los objetosMediaLoadDataque envía el dispatcher. - Se cambió el nombre de
ExoTrackSelection.blacklistporexcludeTracky el deisBlacklistedporisTrackExcluded. - Se corrigió el comportamiento incoherente entre
ExoPlayer.setMediaItem(s)yaddMediaItem(s)cuando se llamaba a una playlist vacía.
- Permite que ExoPlayer controle los métodos de volumen del dispositivo solo si se habilitó explícitamente. Usa
- Transformador:
- Se quita
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). En su lugar, usaExoPlayerAssetLoader.Factory(MediaSource.Factory)yTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory). - Se quita
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Se corrigió un error por el que la transformación podía bloquearse (lo que provocaba un tiempo de espera agotado del multiplexor) si se señalaba el final de la transmisión de video en el momento en que un fotograma de entrada estaba pendiente de procesamiento.
- Consulta los códecs a través de
MediaCodecListen lugar de usar utilidades defindDecoder/EncoderForFormatpara expandir la compatibilidad. - Se quitó la configuración de B-frame en
DefaultEncoderFactoryporque no funciona en algunos dispositivos.
- Se quita
- Selección de pistas:
- Se agregó
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, que está inhabilitado de forma predeterminada. Cuando está habilitado, elDefaultTrackSelectoractivará una nueva selección de pista cuando cambien las capacidades del renderizador.
- Se agregó
- Extractores:
- Audio:
- Se corrigió un error por el que fallaban algunas reproducciones cuando se habilitaba el túnel y
AudioProcessorsestaban activos, p.ej., para el recorte sin pausas (#10847). - Encapsula los marcos de Opus en paquetes Ogg en reproducciones directas (descarga).
- Extrapola la posición actual durante el sueño con la programación de descarga.
- Agrega
Renderer.release()yAudioSink.release()para liberar los recursos al final del ciclo de vida del jugador. - Detecta los cambios en las capacidades de audio en
DefaultAudioSink. Agrega un parámetro obligatoriocontexten el constructor deDefaultAudioSink, con el queDefaultAudioSinkse registrará como objeto de escucha enAudioCapabilitiesReceivery actualizará su propiedadaudioCapabilitiescuando se le informe sobre un cambio en las capacidades. - Propaga los cambios en las capacidades de audio a través de un nuevo evento
onAudioCapabilitiesChangeden la interfazAudioSink.Listenery una nueva interfazRendererCapabilities.Listenerque activa eventosonRendererCapabilitiesChanged. - Se agregó
ChannelMixingAudioProcessorpara aplicar el ajuste o la mezcla a los canales de audio. - Agrega el nuevo valor int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEaDecoderDiscardReasonspara descartar el decodificador de audio cuando sea posible el modo de bypass después de que cambien las capacidades de audio. - Se agregó compatibilidad con la reproducción directa de DTS Express y DTS:X (#335).
- Se corrigió un error por el que fallaban algunas reproducciones cuando se habilitaba el túnel y
- Video:
- Haz que
MediaCodecVideoRendererinforme unVideoSizecon un ancho y un alto de 0 cuando el renderizador esté inhabilitado. Se llama aPlayer.Listener.onVideoSizeChangedsegún corresponda cuando cambiaPlayer.getVideoSize(). Con este cambio, el tamaño del video de ExoPlayer conMediaCodecVideoRenderertiene un ancho y un alto de 0 cuandoPlayer.getCurrentTracksno admite video o cuando aún no se determinó el tamaño de la pista de video admitida.
- Haz que
- DRM:
- Se redujo la visibilidad de varios métodos internos de
DefaultDrmSessionque no se espera que se llamen desde fuera del paquete de DRM:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Se redujo la visibilidad de varios métodos internos de
- Muxer:
- Se agregó una nueva biblioteca de multiplexores que se puede usar para crear un archivo de contenedor MP4.
- Extensión IMA:
- Habilita las transmisiones en vivo de DASH de varios períodos para la 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 líneas de tiempo consecutivas variaba ligeramente.
- Sesión:
- Agrega el método auxiliar
MediaSession.getControllerForCurrentRequestpara obtener información sobre el controlador que actualmente llama a un métodoPlayer. - Se agregó
androidx.media3.session.MediaButtonReceiverpara permitir que las apps implementen la reanudación de la reproducción con eventos de botones de contenido multimedia enviados, por ejemplo, por auriculares Bluetooth (#167). - Se agregó la implementación predeterminada a
MediaSession.Callback.onAddMediaItemspara permitir que elMediaItemssolicitado se pase aPlayersi tieneLocalConfiguration(p.ej., URI) (#282). - Se agregaron los botones de comando "Buscar anterior" y "Buscar siguiente" en la vista de notificación de medios compacta de forma predeterminada para Android 12 y versiones anteriores (#410).
- Se agregó la implementación predeterminada a
MediaSession.Callback.onAddMediaItemspara permitir que elMediaItemssolicitado se pase aPlayersi tieneLocalConfiguration(p.ej., URI) (#282). - Se agregaron los botones de comando "Buscar anterior" y "Buscar siguiente" en la vista de notificación de medios compacta de forma predeterminada para Android 12 y versiones anteriores (#410).
- Agrega el método auxiliar
- IU:
- Agrega los métodos de Util
shouldShowPlayButtonyhandlePlayPauseButtonActionpara escribir elementos de IU personalizados con un botón de reproducción/pausa.
- Agrega los métodos de Util
- Extensión RTSP:
- Extensión de DASH:
- Quita el desplazamiento del tiempo de los medios de
MediaLoadData.startTimeMsyMediaLoadData.endTimeMspara las transmisiones de DASH de varios períodos. - Se corrigió un error por el que volver a preparar una fuente de medios de Dash en vivo de varios períodos producía una
IndexOutOfBoundsException(#10838).
- Quita el desplazamiento del tiempo de los medios de
- Extensión HLS:
- Agrega
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)para establecer un tiempo de espera para que el subproceso de carga espere a que se inicialiceTimestampAdjuster. Si la inicialización no se completa antes del tiempo de espera, se arroja unPlaybackExceptionpara evitar que la reproducción se detenga indefinidamente. El tiempo de espera se establece en cero de forma predeterminada (#323).
- Agrega
- Utilidades de prueba:
- Verifica si el esquema del URI no distingue mayúsculas de minúsculas en
DataSourceContractTest.
- Verifica si el esquema del URI no distingue mayúsculas de minúsculas en
- Se quitan los símbolos obsoletos:
- Se quitan los constructores
DefaultAudioSinky se usaDefaultAudioSink.Builderen su lugar. - Se quitó
HlsMasterPlaylisty se reemplazó porHlsMultivariantPlaylist. - Se quita
Player.stop(boolean). En su lugar, usaPlayer.stop()yPlayer.clearMediaItems()(siresetestrue). - Se quitaron dos constructores
SimpleCacheque dejaron de estar disponibles y se usa un constructor que no dejó de estar disponible y que toma unDatabaseProvideren su lugar para mejorar el rendimiento. - Se quitó el constructor
DefaultBandwidthMeter; en su lugar, usaDefaultBandwidthMeter.Builder. - Se quitan los constructores
DefaultDrmSessionManagery se usaDefaultDrmSessionManager.Builderen su lugar. - Se quitaron dos constructores
HttpDataSource.InvalidResponseCodeExceptionobsoletos y se usó un constructor no obsoleto que acepta campos adicionales(cause,responseBody) para mejorar el registro de errores. - Quita
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashyDownloadHelper.forSmoothStreaming, y usaDownloadHelper.forMediaItemen su lugar. - Se quitó el constructor
DownloadServiceque dejó de estar disponible. Usa un constructor que no haya dejado de estar disponible y que incluya la opción de proporcionar un parámetrochannelDescriptionResourceId. - Se quitaron las constantes de cadena obsoletas para Charsets (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEyUTF16LE_NAME). En su lugar, usa Charsets de Kotlin del paquetekotlin.text,java.nio.charset.StandardCharsetsocom.google.common.base.Charsets. - Se quitó el constructor
WorkManagerSchedulerque dejó de estar disponible. En su lugar, se usa un constructor que no dejó de estar disponible y que incluye la opción de proporcionar un parámetroContext. - Se quitaron los métodos obsoletos
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatycreateSampleFormat, que se usaban para crear instancias de la claseFormat. En su lugar, usaFormat.Builderpara crear instancias deFormat. - Se quitaron los métodos obsoletos
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateycopyWithVideoSize. En su lugar, se usanFormat.buildUpon()y métodos setter. - Se quitó el objeto
ExoPlayer.retry()obsoleto; en su lugar, usaprepare(). - Se quitó el constructor
DefaultTrackSelectorsin argumentos obsoleto; en su lugar, usaDefaultTrackSelector(Context). - Se quitó el constructor
OfflineLicenseHelperobsoleto. En su lugar, usaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Se quitó el constructor
DownloadManagerobsoleto. En su lugar, usa el constructor que toma unExecutor. - Se quitaron los constructores
Cueobsoletos; en su lugar, usaCue.Builder. - Se quitó el constructor
OfflineLicenseHelperobsoleto. En su lugar, usaOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Se quitaron cuatro métodos
AnalyticsListenerobsoletos:onDecoderEnabled. En su lugar, usaonAudioEnabledoonVideoEnabled.onDecoderInitialized, usaonAudioDecoderInitializedoonVideoDecoderInitializeden su lugar.onDecoderInputFormatChanged, usaonAudioInputFormatChangedoonVideoInputFormatChangeden su lugar.onDecoderDisabled. En su lugar, usaonAudioDisabledoonVideoDisabled.
- Se quitaron los objetos
Player.Listener.onSeekProcessedyAnalyticsListener.onSeekProcessedobsoletos; en su lugar, usaonPositionDiscontinuityconDISCONTINUITY_REASON_SEEK. - Se quitó
ExoPlayer.setHandleWakeLock(boolean). En su lugar, usasetWakeMode(int). - Se quitó el objeto
DefaultLoadControl.Builder.createDefaultLoadControl()obsoleto; en su lugar, usabuild(). - Se quitó el objeto
MediaItem.PlaybackPropertiesobsoleto; en su lugar, usaMediaItem.LocalConfiguration. El campo obsoletoMediaItem.playbackPropertiesahora es del tipoMediaItem.LocalConfiguration.
- Se quitan los constructores
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 contiene los siguientes cambios desde la versión 1.0.1:
- Biblioteca principal:
- Agrega
Buffer.isLastSample()que indica siBuffercontiene la marcaC.BUFFER_FLAG_LAST_SAMPLE. - Se solucionó el problema por el que es posible que no se renderice el último fotograma si se quita de la cola la última muestra con fotogramas sin leer la muestra de "fin de transmisión". (#11079).
- Agrega
- Extractores:
- Se corrigió el análisis de SPS H.265 en archivos MPEG-TS reutilizando 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 corrigió el problema por el que
MediaControllerno actualizaba sus comandos disponibles cuando se conectaba a unMediaSessionCompatheredado que actualizaba sus acciones. - Se corrigió el error que impedía que
MediaLibraryServicedevolviera nulo para una llamada de la IU del sistema aCallback.onGetLibraryRootconparams.isRecent == trueen el nivel de API 30 (#355). - Se corrigió la fuga de memoria de
MediaSessionServiceoMediaLibraryService(#346). - Se corrigió un error por el que una actualización combinada de
Timeliney de posición en unMediaSessionpodía hacer que unMediaControllerarroje unIllegalStateException.
- Se corrigió el problema por el que
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ó un error por el que los flujos de muestras vacíos en el contenido multimedia podían provocar que se detuviera la reproducción.
- Sesión:
- Se corrigió un error por el que varios elementos de la cola idénticos publicados por un
MediaSessionCompatheredado generaban una excepción enMediaController(#290). - Se agregó el reenvío faltante de
MediaSession.broadcastCustomCommandalMediaControllerCompat.Callback.onSessionEventheredado (#293). - Se corrigió un error por el que llamar a
MediaSession.setPlayerno actualizaba los comandos disponibles. - Se corrigió un problema por el que se ignoraban las instancias de
TrackSelectionOverrideenviadas desde unMediaControllersi hacían referencia a un grupo conFormat.metadata(#296). - Se corrigió el problema por el que
Player.COMMAND_GET_CURRENT_MEDIA_ITEMdebe estar disponible para acceder a los metadatos a través deMediaSessionCompatheredado. - Se corrigió un problema por el que las instancias de
MediaSessionen un subproceso en segundo plano provocaban fallas cuando se usaban enMediaSessionService(#318). - Se corrigió un problema por el que la biblioteca declaraba un receptor de botones de contenido multimedia sin que la app lo hubiera previsto (#314).
- Se corrigió un error por el que varios elementos de la cola idénticos publicados por un
- DASH:
- Se corrigió el manejo de líneas de tiempo de segmentos vacíos (#11014).
- RTSP:
- Se reintenta con TCP si la configuración de RTSP con UDP falla con el error 461 de RTSP 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:
- Descargas:
- Haz que la diferencia máxima del tiempo de inicio de dos segmentos que se combinarán sea configurable en
SegmentDownloadery las subclases (#248).
- Haz que la diferencia máxima del tiempo de inicio de dos segmentos que se combinarán sea configurable en
- Audio:
- Video:
- Asigna el formato HEVC HDR10 a
HEVCProfileMain10HDR10en lugar deHEVCProfileMain10. - Se agregó una solución alternativa para un problema del dispositivo en Chromecast con Google TV y Lenovo M10 FHD Plus que hace que los streams AVC de 60 FPS se marquen como no compatibles (#10898).
- Se corrigieron problemas de rendimiento en la liberación de fotogramas cuando se reproducen medios con una frecuencia de fotogramas mucho más alta que la frecuencia de actualización de la pantalla.
- Asigna el formato HEVC HDR10 a
- Transmisión:
- Se corrigió el
STATE_IDLEtransitorio cuando se realiza la transición entre elementos multimedia (#245).
- Se corrigió el
- RTSP:
- Se detecta la excepción IllegalArgumentException que se arroja al analizar los mensajes de respuesta de Describe de RTSP no válidos (#10971).
- Sesión:
- Se corrigió un error por el que el botón de reproducción/pausa de la notificación no se actualizaba con el estado del reproductor (#192).
- Extensión IMA:
- Se corrigió un error que impedía que se iniciaran las transmisiones de DAI sin anuncios porque no se recibía el primer evento
LOADED(y el único en el caso de que no hubiera anuncios).
- Se corrigió un error que impedía que se iniciaran las transmisiones de DAI sin anuncios porque no se recibía el primer evento
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.setPlaybackLooperque 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.seekTopara 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).
- Modifica la lógica de ordenamiento del decodificador del renderizador para mantener las preferencias de
- Extractores:
- Arroja una
ParserExceptionen lugar de unaNullPointerExceptionsi 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).
- Arroja una
- Audio:
- Usa la tasa de bits de formato de audio comprimido para calcular el tamaño mínimo del búfer de
AudioTracken las reproducciones directas (transferencia).
- Usa la tasa de bits de formato de audio comprimido para calcular el tamaño mínimo del búfer de
- Texto:
- Corrige
TextRendererpasando un índice no válido (negativo) aSubtitle.getEventTimesi un archivo de subtítulos no contiene indicadores. - SubRip: Agrega compatibilidad con archivos UTF-16 si comienzan con una marca de orden de bytes.
- Corrige
- Metadatos:
- Analiza varios valores separados por valores nulos de los marcos de ID3, como lo permite ID3 v2.4.
- Agrega
MediaMetadata.mediaTypepara indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos. - Agrega
MediaMetadata.isBrowsablecomo reemplazo deMediaMetadata.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
PlayerViewcuando se usa un diseño de derecha a izquierda (RTL) (#227).
- Corrige el
- Sesión:
- Agrega un
SimpleBasePlayerabstracto para ayudar a implementar la interfazPlayeren reproductores personalizados. - Agrega un método auxiliar para convertir el token de sesión de la plataforma en
SessionTokende Media3 (#171). - Usa
onMediaMetadataChangedpara activar las actualizaciones de la sesión multimedia de la plataforma (#219). - Agrega la sesión multimedia como argumento de
getMediaButtons()delDefaultMediaNotificationProvidery usa listas inmutables para brindar mayor claridad (#216). - Agrega el objeto de escucha de devolución de llamada
onSetMediaItemspara brindar medios y así modificar o establecer la listaMediaItem, 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
QueueTimelinesea más sólido en caso de un estado de sesión heredado con sombreado (#241).
- Agrega un
- Metadatos:
- Analiza varios valores separados por valores nulos de los marcos de ID3, como lo permite ID3 v2.4.
- Agrega
MediaMetadata.mediaTypepara indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos. - Agrega
MediaMetadata.isBrowsablecomo reemplazo deMediaMetadata.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
ImaServerSideAdInsertionMediaSourceen el subproceso de la aplicación para evitar problemas relacionados con los subprocesos. - Agrega una propiedad
focusSkipButtonWhenAvailableaImaServerSideAdInsertionMediaSource.AdsLoader.Builderpara 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()aImaServerSideAdInsertionMediaSource.AdsLoaderpara 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.
- Quita el objeto de escucha del reproductor de
- App de demo:
- 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.isTunnelingEnableda fin de verificar si la tunelización está habilitada para las pistas seleccionadas actualmente (#2518). - Se agregó
WrappingMediaSourcepara simplificar la unión de un soloMediaSource(#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
onMediaItemTransitionfaltante cuando se llama aseekToNextoseekToPreviousen una lista de reproducción de un solo elemento (#10667). - Se agrega
Player.getSurfaceSizeque 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).
- Se agregó
- Compilación:
- Se aplicó una
compileSdkVersionmínima para evitar errores de compilación (#10684). - Evita el bloque de publicación cuando se incluye en otra compilación de Gradle.
- Se aplicó una
- 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
ProgressiveDownloaderque generaba la descarga y la reproducción simultánea con el mismoPriorityTaskManager(#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).
- Se corrigió el posible bucle infinito en
- Video:
- Prueba el decodificador alternativo para Dolby Vision si la pantalla no lo admite (#9794).
- Audio:
- Usa
SingleThreadExecutorpara liberar instancias deAudioTracky evitar errores de OutOfMemory cuando se lanzan varios jugadores al mismo tiempo (#10057). - Agrega
AudioOffloadListener.onExperimentalOffloadedPlaybackpara el estado de transferencia de AudioTrack (#134). - Hace que
AudioTrackBufferSizeProvidersea una interfaz pública. - Se agregó
ExoPlayer.setPreferredAudioDevicepara establecer el dispositivo de salida de audio preferido (#135). - Se cambia el nombre de
androidx.media3.exoplayer.audio.AudioProcessoraandroidx.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).
- Usa
- Metadatos:
MetadataRendererahora se puede configurar para procesar metadatos apenas estén disponibles. Crea una instancia conMetadataRenderer(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 openedcuando 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.presentationTimeOffsetde los manifiestos (#10460).
- Se analiza
- IU:
- Usa las anulaciones actuales del reproductor como ajuste predeterminado en
TrackSelectionDialogBuilder(#10429).
- Usa las anulaciones actuales del reproductor como ajuste predeterminado en
- Sesión:
- Garantiza que los comandos siempre se ejecuten en el orden correcto, incluso si algunos requieren resolución asíncrona (#85).
- Agrega
DefaultMediaNotificationProvider.Builderpara compilar instancias deDefaultMediaNotificationProvider. 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étodoDefaultMediaNotificationProvider.setSmallIcon(int)para configurar el ícono pequeño de notificaciones (#104). - Garantiza que los comandos enviados antes de
MediaController.release()no se descarten (#99). SimpleBitmapLoaderpuede cargar mapa de bits a partir de URI defile://(#108).- Se corrigió la aserción que impide que
MediaControllerbusque un anuncio en un período (#122). - Cuando finaliza la reproducción, se detiene
MediaSessionServicedesde 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ó
DefaultNotificationProvideren 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:
- 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 identificarCastPlayercuando se controla la reproducción con unMediaController(#142).
- Implementa
- 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.
- Se quita
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
ShuffleOrderconExoPlayer.setShuffleOrder, se genere una llamada aPlayer.Listener#onTimelineChangedconreason=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
setDataSourceFactoryenDefaultMediaSourceFactory, que no funcionaba en algunos casos (#116).
- Asegúrate de que, si cambias
- Extractores:
- 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
playWhenReadyenLeanbackAdapter(10420).
- Escucha los cambios de
- Transmisión:
Versión 1.0.0-beta01
16 de junio de 2022
Se lanzó 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 conExoPlayer.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
nullaMediaSource.Factory.setDrmSessionManagerProviderniMediaSource.Factory.setLoadErrorHandlingPolicy. Las instancias deDefaultDrmSessionManagerProvideryDefaultLoadErrorHandlingPolicyse pueden pasar de forma explícita si es necesario. - Se agregó
MediaItem.RequestMetadatapara representar los metadatos necesarios a fin de reproducir contenido multimedia cuando no se conoce elLocalConfigurationexacto. También se quitóMediaMetadata.mediaUrl, ya que ahora se incluye enRequestMetadata. - Se agregó
Player.Command.COMMAND_SET_MEDIA_ITEMpara permitir que los jugadores dejen configurar un solo elemento.
- Habilita la compatibilidad con el diagnóstico de la plataforma de Android a través de
- Selección de pistas:
- Se compactó la clase
TrackSelectionOverridesenTrackSelectionParametersy promueveTrackSelectionOverridea una clase de nivel superior. - Se cambió el nombre de
TracksInfoporTracksy el deTracksInfo.TrackGroupInfoporTracks.Group. También se cambió el nombre dePlayer.getCurrentTracksInfoyPlayer.Listener.onTracksInfoChangedporPlayer.getCurrentTracksyPlayer.Listener.onTracksChanged. Esto incluye "anular la baja" del nombre del métodoPlayer.Listener.onTracksChanged, pero con diferentes tipos de parámetros. - Se cambió
DefaultTrackSelector.buildUponParametersyDefaultTrackSelector.Parameters.buildUponpara mostrarDefaultTrackSelector.Parameters.Builderen lugar deDefaultTrackSelector.ParametersBuilder, que dejó de estar disponible. - Se agregó
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, que está habilitado de forma predeterminada. Cuando se habilite,DefaultTrackSelectorpreferirá pistas de audio cuyo recuento de canales no supere las capacidades de salida del dispositivo. En dispositivos de mano,DefaultTrackSelectorpreferirá 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,DefaultTrackSelectorsupervisará los cambios en las propiedades de espacializador y activará una selección de pistas nueva en esos casos. Los dispositivos con un modo de IUtelevisionse excluyen de estas restricciones y se dará prioridad al formato con el recuento de canales más alto. Para habilitar esta función, la instanciaDefaultTrackSelectordebe construirse con unContext.
- Se compactó la clase
- Video:
- Se cambió el nombre de
DummySurfaceporPlaceholderSurface. - Se agregó compatibilidad con AV1 a
MediaCodecVideoRenderer.getCodecMaxInputSize.
- Se cambió el nombre de
- 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()deandroid.media.AudioAttributesa una nueva clase de wrapperAudioAttributesV21para 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
AudioTrackcon la máscara de canalAudioFormat.CHANNEL_OUT_7POINT1POINT4si 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 mostrarCueGroupen lugar deList<Cue>. - SSA: Admite la configuración de estilo
OutlineColourcuandoBorderStyle == 3(es decir,OutlineColourestablece 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.
- Se cambió
- Extractores:
- IU:
- Se corrigió la entrega de eventos a los
OnClickListenerconfigurados enPlayerViewen el caso deuseController=false(#9605). También se corrigió la entrega de eventos aOnLongClickListenerpara todas las configuraciones de vista. - Se corrigió el tratamiento incorrecto de una secuencia de eventos táctiles que salen de los límites de
PlayerViewantes deACTION_UPcomo 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ó
TrackSelectionViewyTrackSelectionDialogBuilderpara que funcionen con la interfazPlayeren lugar deExoPlayer. Esto permite que las vistas se usen con otras implementaciones dePlayery 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).
- Se corrigió la entrega de eventos a los
- 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
nullaDashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Las instancias deDefaultCompositeSequenceableLoaderFactoryse pueden pasar de forma explícita si es necesario.
- Se analiza el recuento de canales desde los elementos DTS
- 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
nullaHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryniHlsMediaSource.Factory.setPlaylistTrackerFactory. Las instancias deDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryo una referencia aDefaultHlsPlaylistTracker.FACTORYse pueden pasar de forma explícita si es necesario.
- Transmisión fluida:
- No se permite que se pase
nullaSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Las instancias deDefaultCompositeSequenceableLoaderFactoryse pueden pasar de forma explícita si es necesario.
- No se permite que se pase
- 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
DummyDataSourceporPlaceholderDataSource. - Se solucionó el control de la interrupción de OkHttp.
- Se cambió el nombre de
- Sesión:
- Se reemplazó
MediaSession.MediaItemFillerporMediaSession.Callback.onAddMediaItemspara permitir la resolución asíncrona de las solicitudes. - Ahora se admiten métodos
setMediaItems(s)cuandoMediaControllerse conecta a una sesión multimedia heredada. - Se quitaron
MediaController.setMediaUriyMediaSession.Callback.onSetMediaUri. La misma funcionalidad se puede lograr conMediaController.setMediaItemyMediaSession.Callback.onAddMediaItems. - Ahora se desvían las llamadas heredadas de
MediaControllera fin de reproducir contenido multimedia enMediaSession.Callback.onAddMediaItems, en lugar deonSetMediaUri. - Se agregaron
MediaNotification.ProvideryDefaultMediaNotificationProviderpara proporcionar personalización de la notificación. - Se agregaron
BitmapLoaderySimpleBitmapLoaderpara 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.MediaSessionCallbackporMediaSession.Callback, el deMediaLibrarySession.MediaLibrarySessionCallbackporMediaLibrarySession.Callbacky el deMediaSession.Builder.setSessionCallbackporsetCallback. - 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
MediaControllerImplBasedespués de lanzar el controlador (#74).
- Se reemplazó
- 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 actualizó la versión de CMake a
- Se quitaron los símbolos obsoletos:
- Se quitó
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Se usaPlayer.Listener.onTracksChanged(Tracks)en su lugar. - Se quitaron
Player.getCurrentTrackGroupsyPlayer.getCurrentTrackSelections. UsaPlayer.getCurrentTracksen su lugar. También puedes seguir usandoExoPlayer.getCurrentTrackGroupsyExoPlayer.getCurrentTrackSelections, aunque estos métodos permanecen obsoletos. - Se quitaron las constantes
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTyDEFAULT_TRACK_SELECTOR_PARAMETERSdeDownloadHelper. UsagetDefaultTrackSelectorParameters(Context)cuando sea posible y, de lo contrario, usaDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT. - Se quitó el constructor
DefaultTrackSelector(ExoTrackSelection.Factory). UsaDefaultTrackSelector(Context, ExoTrackSelection.Factory)en su lugar. - Se quitó
Transformer.Builder.setContext. En su lugar, se debe pasar elContextal constructorTransformer.Builder.
- Se quitó
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.setTrackIdyMediaItem.SubtitleConfiguration.Builder.setIdpara priorizar el campoSubtitleConfigurationy recurrir al valorFactorysi no está configurado (#10016).
- Se corrige la interacción de
- 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 deDefaultRenderersFactoryque anulenbuildVideoRenderers()obuildAudioRenderers()puedan acceder a la fábrica del adaptador de códec y pasarlo a las instanciasMediaCodecRendererque crean. - Se propagan los campos de encabezado ICY
nameygenreaMediaMetadata.stationyMediaMetadata.genrerespectivamente para que lleguen a la app a través dePlayer.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 deMediaCodec(#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#inputBufferCountaqueuedInputBufferCount. - Se hace el elemento
SimpleExoPlayer.renderersprivado. Se puede acceder a los procesadores a través deExoPlayer.getRenderer. - Se actualizaron algunos valores constantes de
AnalyticsListener.EventFlagspara que coincidan con los valores enPlayer.EventFlags. - Se divide
AnalyticsCollectoren una interfaz y una implementación predeterminada para permitir que R8 lo quite si una app no lo necesita.
- Se agrega el método protegido
- 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
TrackGroupenTrackGroupArray.TrackGroupsiempre se pueden distinguir si se configuraiden el constructorTrackGroup. 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
AdaptiveTrackSelectionpara 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
AudioCapabilitiespara que sea necesario pasarAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESde manera explícita en lugar denull. - Se permite la personalización del cálculo del tamaño del búfer de
AudioTrackmediante la inserción deAudioTrackBufferSizeProviderenDefaultAudioSink(#8891). - Vuelve a intentar la creación de
AudioTracksi el tamaño del búfer solicitado es superior a 1 MB (#9712).
- Extractores:
- Texto:
- Se agrega un campo
MediaItem.SubtitleConfiguration.idque se propaga al campoFormat.idde 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
Cea708Decoderlea más que el tamaño declarado de un bloque de servicios.
- Se agrega un campo
- DRM:
- Se quita
playbackLooperdeDrmSessionManager.(pre)acquireSession. Cuando una app usaDrmSessionManagerenMediaSourcepersonalizado, en su lugar,playbackLooperdebe pasarse aDrmSessionManager.setPlayer.
- Se quita
- 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
AdPlaybackStatepara 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:
- 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
maincomoC.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.Locationrelativas (#9939).
- Se agregan propiedades analizadas, esenciales y adicionales a
- HLS:
- Se propaga correctamente
Format.labelpara 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).
- Se propaga correctamente
- RTSP:
- Se proporciona una API de cliente a fin de anular
SocketFactoryque 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).
- Se proporciona una API de cliente a fin de anular
- Transformador:
- Se aumenta la versión mínima requerida de la API a 21.
TransformationExceptionahora se usa para describir errores que se producen durante una transformación.- Se agregó
TransformationRequestpara 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.getProgresscuando se liberan los lanzamientos del combinador. - Se agregó una app de demo para aplicar transformaciones.
- Extensión MediaSession:
- De forma predeterminada,
MediaSessionConnectorahora borra la lista de reproducción detenida. Las apps que quieran conservar la lista de reproducción pueden llamar asetClearMediaItemsOnStop(false)en el conector.
- De forma predeterminada,
- Extensión Cast:
- Extensión FFmpeg:
- Causa que
build_ffmpeg.shdependa de binutils de LLVM en lugar de los de GNU (#9933).
- Causa que
- 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 deplay-services-cast-frameworkno son compatibles con las apps orientadas a Android 12 y fallan conIllegalArgumentExceptioncuando se creanPendingIntent(#9528)..
- Se actualiza la extensión Cast para que dependa de
- Se quitan los símbolos obsoletos:
- Se quita
Player.EventListener. Se usaPlayer.Listeneren su lugar. - Se quitan
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryyMediaSourceFactory#setDrmUserAgent. Se usaMediaSourceFactory#setDrmSessionManagerProvideren su lugar. - Se quita
MediaSourceFactory#setStreamKeys. Se usaMediaItem.Builder#setStreamKeysen su lugar. - Se quita
MediaSourceFactory#createMediaSource(Uri). Se usaMediaSourceFactory#createMediaSource(MediaItem)en su lugar. - Se quita
setTagdeDashMediaSource,HlsMediaSourceySsMediaSource. Se usaMediaItem.Builder#setTagen su lugar. - Se quita
DashMediaSource#setLivePresentationDelayMs(long, boolean). Se usanMediaItem.Builder#setLiveConfigurationyMediaItem.LiveConfiguration.Builder#setTargetOffsetMspara anular el manifiesto, oDashMediaSource#setFallbackTargetLiveOffsetMspara proporcionar un valor de resguardo. - Se quita
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Ya no es posible inhabilitar la aplicación forzosa de subprocesos. - Se quitan
ActionFileyActionFileUpgradeUtil. Se usa ExoPlayer 2.16.1 o una versión anterior para usarActionFileUpgradeUtila fin de combinar archivos de acción heredados enDefaultDownloadIndex. - Se quita
ProgressiveMediaSource#setExtractorsFactory. Se usa el constructorProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)en su lugar. - Se quitan
ProgressiveMediaSource.Factory#setTagyProgressiveMediaSource.Factory#setCustomCacheKey. Se usanMediaItem.Builder#setTagyMediaItem.Builder#setCustomCacheKeyen su lugar. - Se quitan los constructores
DefaultRenderersFactory(Context, @ExtensionRendererMode int)yDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Se usan el constructorDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeyDefaultRenderersFactory#setAllowedVideoJoiningTimeMsen su lugar. - Se quitan todos los constructores públicos
CronetDataSource. Se usaCronetDataSource.Factoryen su lugar.
- Se quita
- Se cambia el siguiente
IntDefssolo 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 paquetecom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(en el paquetecom.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
Playerque 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.