Media3
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
16 de febrero de 2023 | - | 1.0.0-rc01 | - | - |
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.2.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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // 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 media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.2.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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // 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 media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Puedes usar la Herramienta de seguimiento de errores de Media3 a fin de encontrar respuestas a preguntas, problemas conocidos y solicitudes de funciones, así como para informar problemas nuevos.
Versión 1.0.0
Versión 1.0.0-rc01
16 de febrero de 2023
Lanzamiento de androidx.media3:media3-*:1.0.0-rc01
.
La versión 1.0.0-rc01 contiene estas confirmaciones.
Esta versión corresponde a la versión de ExoPlayer 2.18.3.
- Biblioteca principal:
- Modifica la lógica de ordenamiento del decodificador del renderizador para mantener las preferencias de
MediaCodecSelector
, incluso si un decodificador informa que no puede reproducir el contenido multimedia de forma eficiente. Por ejemplo, con el selector predeterminado, se preferirá el decodificador de hardware con compatibilidad funcional en lugar del decodificador de software que es totalmente compatible con el formato (#10604). - Agrega
ExoPlayer.Builder.setPlaybackLooper
que establezca un subproceso de reproducción preexistente para una instancia nueva de ExoPlayer. - Permite que se borren los asistentes del administrador de descargas (#10776).
- Agrega el parámetro a
BasePlayer.seekTo
para indicar también el comando que se usó en el salteo. - Usa el tema cuando cargues elementos de diseño en el nivel de API 21 o uno superior (#220).
- Agrega
ConcatenatingMediaSource2
, que permite combinar varios elementos multimedia en una sola ventana (#247).
- Modifica la lógica de ordenamiento del decodificador del renderizador para mantener las preferencias de
- Extractores:
- Arroja una
ParserException
en lugar de unaNullPointerException
si a la tabla de ejemplo (stbl) le falta una descripción de ejemplo obligatoria (stsd) cuando se analizan los átomos tipo trak. - Omite correctamente las muestras cuando se saltea directamente a un marco de sincronización en fMP4 (#10941).
- Arroja una
- Audio:
- Usa la tasa de bits de formato de audio comprimido para calcular el tamaño mínimo del búfer de
AudioTrack
en las reproducciones directas (transferencia).
- Usa la tasa de bits de formato de audio comprimido para calcular el tamaño mínimo del búfer de
- Texto:
- Corrige
TextRenderer
pasando un índice no válido (negativo) aSubtitle.getEventTime
si un archivo de subtítulos no contiene indicadores. - SubRip: Agrega compatibilidad con archivos UTF-16 si comienzan con una marca de orden de bytes.
- Corrige
- Metadatos:
- Analiza varios valores separados por valores nulos de los marcos de ID3, como lo permite ID3 v2.4.
- Agrega
MediaMetadata.mediaType
para indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos. - Agrega
MediaMetadata.isBrowsable
como reemplazo 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
PlayerView
cuando se usa un diseño de derecha a izquierda (RTL) (#227).
- Corrige el
- Sesión:
- Agrega un
SimpleBasePlayer
abstracto para ayudar a implementar la interfazPlayer
en reproductores personalizados. - Agrega un método auxiliar para convertir el token de sesión de la plataforma en
SessionToken
de Media3 (#171). - Usa
onMediaMetadataChanged
para activar las actualizaciones de la sesión multimedia de la plataforma (#219). - Agrega la sesión multimedia como argumento de
getMediaButtons()
delDefaultMediaNotificationProvider
y usa listas inmutables para brindar mayor claridad (#216). - Agrega el objeto de escucha de devolución de llamada
onSetMediaItems
para brindar medios y así modificar o establecer la 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
QueueTimeline
sea 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.mediaType
para indicar el tipo de contenido o el tipo de carpeta que se describe en los metadatos. - Agrega
MediaMetadata.isBrowsable
como 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
ImaServerSideAdInsertionMediaSource
en el subproceso de la aplicación para evitar problemas relacionados con los subprocesos. - Agrega una propiedad
focusSkipButtonWhenAvailable
aImaServerSideAdInsertionMediaSource.AdsLoader.Builder
para solicitar que se enfoque el botón Omitir en dispositivos de TV y establécelo como verdadero de forma predeterminada. - Agrega un método
focusSkipButton()
aImaServerSideAdInsertionMediaSource.AdsLoader
para solicitar de manera programática que se enfoque el botón Omitir. - Modifica la versión del SDK de IMA a la versión 3.29.0.
- 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.isTunnelingEnabled
a fin de verificar si la tunelización está habilitada para las pistas seleccionadas actualmente (#2518). - Se agregó
WrappingMediaSource
para simplificar la unión de un 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
onMediaItemTransition
faltante cuando se llama aseekToNext
oseekToPrevious
en una lista de reproducción de un solo elemento (#10667). - Se agrega
Player.getSurfaceSize
que muestra el tamaño de la superficie en la que se renderiza el video. - Se corrigió un error por el que la eliminación de objetos de escucha durante la versión del reproductor podía provocar una
IllegalStateException
(#10758).
- Se agregó
- Compilación:
- Se aplicó una
compileSdkVersion
mínima para evitar errores de compilación (#10684). - Evita el bloque de publicación cuando se incluye en otra compilación de Gradle.
- 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
ProgressiveDownloader
que 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
SingleThreadExecutor
para liberar instancias deAudioTrack
y evitar errores de OutOfMemory cuando se lanzan varios jugadores al mismo tiempo (#10057). - Agrega
AudioOffloadListener.onExperimentalOffloadedPlayback
para el estado de transferencia de AudioTrack (#134). - Hace que
AudioTrackBufferSizeProvider
sea una interfaz pública. - Se agregó
ExoPlayer.setPreferredAudioDevice
para establecer el dispositivo de salida de audio preferido (#135). - Se cambia el nombre de
androidx.media3.exoplayer.audio.AudioProcessor
aandroidx.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:
MetadataRenderer
ahora 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 opened
cuando se alterna entre esquemas DRM en una lista de reproducción (p. ej., de Widevine a ClearKey).
- Texto:
- CEA-608: Garantiza que los comandos de cambio de servicio en el campo 2 se manejen de forma correcta (#10666).
- DASH:
- Se analiza
EventStream.presentationTimeOffset
de los manifiestos (#10460).
- 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.Builder
para 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). SimpleBitmapLoader
puede cargar mapa de bits a partir de URI defile://
(#108).- Se corrigió la aserción que impide que
MediaController
busque un anuncio en un período (#122). - Cuando finaliza la reproducción, se detiene
MediaSessionService
desde el primer plano y se muestra una notificación para reiniciar la reproducción del último elemento multimedia reproducido (#112). - No se inicia un servicio en primer plano con un intent pendiente para pausar (#167).
- Oculta manualmente la "insignia" asociada con la notificación que creó
DefaultNotificationProvider
en el nivel de API 26 y 27 (la insignia se oculta de forma automática en el nivel API 28 y posteriores) (#131). - Se corrigió un error por el que una segunda conexión de Binder de una MediaSession heredada a un MediaController de Media3 ocasiona IllegalStateExceptions (#49).
- RTSP:
- 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 identificarCastPlayer
cuando 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
ShuffleOrder
conExoPlayer.setShuffleOrder
, se genere una llamada aPlayer.Listener#onTimelineChanged
conreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889). - Para los medios progresivos, incluye solo las pistas seleccionadas en la posición de almacenamiento en búfer (#10361).
- Se permite el registrador personalizado para todos los resultados de registro de ExoPlayer (#9752).
- Se corrigió la implementación de
setDataSourceFactory
enDefaultMediaSourceFactory
, 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
playWhenReady
enLeanbackAdapter
(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
null
aMediaSource.Factory.setDrmSessionManagerProvider
niMediaSource.Factory.setLoadErrorHandlingPolicy
. Las instancias deDefaultDrmSessionManagerProvider
yDefaultLoadErrorHandlingPolicy
se pueden pasar de forma explícita si es necesario. - Se agregó
MediaItem.RequestMetadata
para representar los metadatos necesarios a fin de reproducir contenido multimedia cuando no se conoce elLocalConfiguration
exacto. También se quitóMediaMetadata.mediaUrl
, ya que ahora se incluye enRequestMetadata
. - Se agregó
Player.Command.COMMAND_SET_MEDIA_ITEM
para 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
TrackSelectionOverrides
enTrackSelectionParameters
y promueveTrackSelectionOverride
a una clase de nivel superior. - Se cambió el nombre de
TracksInfo
porTracks
y el deTracksInfo.TrackGroupInfo
porTracks.Group
. También se cambió el nombre dePlayer.getCurrentTracksInfo
yPlayer.Listener.onTracksInfoChanged
porPlayer.getCurrentTracks
yPlayer.Listener.onTracksChanged
. Esto incluye "anular la baja" del nombre del métodoPlayer.Listener.onTracksChanged
, pero con diferentes tipos de parámetros. - Se cambió
DefaultTrackSelector.buildUponParameters
yDefaultTrackSelector.Parameters.buildUpon
para mostrarDefaultTrackSelector.Parameters.Builder
en lugar deDefaultTrackSelector.ParametersBuilder
, que dejó de estar disponible. - Se agregó
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
, que está habilitado de forma predeterminada. Cuando se habilite,DefaultTrackSelector
preferirá pistas de audio cuyo recuento de canales no supere las capacidades de salida del dispositivo. En dispositivos de mano,DefaultTrackSelector
preferirá los formatos estéreo o mono, en lugar de los formatos de audio multicanal, a menos que el formato multicanal pueda espacializarse (Android 12L y versiones posteriores) o sea un formato de sonido envolvente Dolby. Además, en los dispositivos compatibles con la espacialización de audio,DefaultTrackSelector
supervisará los cambios en las propiedades de espacializador y activará una selección de pistas nueva en esos casos. Los dispositivos con un modo de IUtelevision
se excluyen de estas restricciones y se dará prioridad al formato con el recuento de canales más alto. Para habilitar esta función, la instanciaDefaultTrackSelector
debe construirse con unContext
.
- Se compactó la clase
- Video:
- Se cambió el nombre de
DummySurface
porPlaceholderSurface
. - 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.AudioAttributes
a una nueva clase de wrapperAudioAttributesV21
para evitar una verificación lenta de ART en niveles de API inferiores a 21. - Consulta la plataforma (nivel de API 29 o superior) o supone el recuento de canales de codificación de audio para la transferencia de audio cuando el recuento de canales de audio de formato no está configurado, lo que se produce con la preparación sin fragmentos de HLS (10204).
- Se configura
AudioTrack
con la máscara de canalAudioFormat.CHANNEL_OUT_7POINT1POINT4
si el decodificador produce audio PCM de 12 canales (#10322).
- DRM
- Se asegura de que la sesión de DRM se actualice siempre de forma correcta cuando busque inmediatamente después de un cambio de formato (10274).
- Texto:
- Se cambió
Player.getCurrentCues()
para mostrarCueGroup
en lugar deList<Cue>
. - SSA: Admite la configuración de estilo
OutlineColour
cuandoBorderStyle == 3
(es decir,OutlineColour
establece el fondo de la indicación) (#8435). - CEA-708: Analiza datos en varios bloques de servicio e ignora bloques que no estén asociados con el número de servicio seleccionado en el momento.
- Se quitó
RawCcExtractor
, que solo se usaba para controlar un formato de subtítulos interno de Google.
- Se cambió
- Extractores:
- IU:
- Se corrigió la entrega de eventos a los
OnClickListener
configurados enPlayerView
en el caso deuseController=false
(#9605). También se corrigió la entrega de eventos aOnLongClickListener
para todas las configuraciones de vista. - Se corrigió el tratamiento incorrecto de una secuencia de eventos táctiles que salen de los límites de
PlayerView
antes deACTION_UP
como un clic (#9861). - Se corrigió el problema de accesibilidad a
PlayerView
, en el que la presión podía activar o desactivar la reproducción en lugar de ocultar los controles (#8627). - Se reescribió
TrackSelectionView
yTrackSelectionDialogBuilder
para que funcionen con la interfazPlayer
en lugar deExoPlayer
. Esto permite que las vistas se usen con otras implementaciones dePlayer
y quita la dependencia del módulo de IU con el módulo de ExoPlayer. Este es un cambio rotundo. - No se muestran pistas de texto forzado en el selector de pistas
PlayerView
; además, mantiene seleccionada una pista de texto forzado adecuada si se selecciona "Ninguno" (#9432).
- 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
null
aDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Las instancias deDefaultCompositeSequenceableLoaderFactory
se 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
null
aHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
niHlsMediaSource.Factory.setPlaylistTrackerFactory
. Las instancias deDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
o una referencia aDefaultHlsPlaylistTracker.FACTORY
se pueden pasar de forma explícita si es necesario.
- Transmisión fluida:
- No se permite que se pase
null
aSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
. Las instancias deDefaultCompositeSequenceableLoaderFactory
se 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
DummyDataSource
porPlaceholderDataSource
. - Se solucionó el control de la interrupción de OkHttp.
- Se cambió el nombre de
- Sesión:
- Se reemplazó
MediaSession.MediaItemFiller
porMediaSession.Callback.onAddMediaItems
para permitir la resolución asíncrona de las solicitudes. - Ahora se admiten métodos
setMediaItems(s)
cuandoMediaController
se conecta a una sesión multimedia heredada. - Se quitaron
MediaController.setMediaUri
yMediaSession.Callback.onSetMediaUri
. La misma funcionalidad se puede lograr conMediaController.setMediaItem
yMediaSession.Callback.onAddMediaItems
. - Ahora se desvían las llamadas heredadas de
MediaController
a fin de reproducir contenido multimedia enMediaSession.Callback.onAddMediaItems
, en lugar deonSetMediaUri
. - Se agregaron
MediaNotification.Provider
yDefaultMediaNotificationProvider
para proporcionar personalización de la notificación. - Se agregaron
BitmapLoader
ySimpleBitmapLoader
para descargar imágenes de material gráfico. - Se agregaron
MediaSession.setCustomLayout()
para proporcionar retrocompatibilidad con la sesión heredada. - Se agregaron
MediaSession.setSessionExtras()
para proporcionar paridad de funciones con la sesión heredada. - Se cambió el nombre de
MediaSession.MediaSessionCallback
porMediaSession.Callback
, el deMediaLibrarySession.MediaLibrarySessionCallback
porMediaLibrarySession.Callback
y el deMediaSession.Builder.setSessionCallback
porsetCallback
. - Se corrigió la NPE en
MediaControllerImplLegacy
(#59). - Se actualizó la información de posición de la sesión en el cambio de cronograma (#51).
- Se corrigió la NPE en
MediaControllerImplBase
después de lanzar el controlador (#74).
- 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.getCurrentTrackGroups
yPlayer.getCurrentTrackSelections
. UsaPlayer.getCurrentTracks
en su lugar. También puedes seguir usandoExoPlayer.getCurrentTrackGroups
yExoPlayer.getCurrentTrackSelections
, aunque estos métodos permanecen obsoletos. - Se quitaron las constantes
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
yDEFAULT_TRACK_SELECTOR_PARAMETERS
deDownloadHelper
. 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 elContext
al 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.setTrackId
yMediaItem.SubtitleConfiguration.Builder.setId
para priorizar el campoSubtitleConfiguration
y recurrir al valorFactory
si 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 deDefaultRenderersFactory
que anulenbuildVideoRenderers()
obuildAudioRenderers()
puedan acceder a la fábrica del adaptador de códec y pasarlo a las instanciasMediaCodecRenderer
que crean. - Se propagan los campos de encabezado ICY
name
ygenre
aMediaMetadata.station
yMediaMetadata.genre
respectivamente 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#inputBufferCount
aqueuedInputBufferCount
. - Se hace el elemento
SimpleExoPlayer.renderers
privado. Se puede acceder a los procesadores a través deExoPlayer.getRenderer
. - Se actualizaron algunos valores constantes de
AnalyticsListener.EventFlags
para que coincidan con los valores enPlayer.EventFlags
. - Se divide
AnalyticsCollector
en 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
TrackGroup
enTrackGroupArray
.TrackGroup
siempre se pueden distinguir si se configuraid
en 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
AdaptiveTrackSelection
para permitir un aumento de calidad con suficiente ancho de banda de red, incluso si la reproducción está muy cerca del borde activo (#9784).
- Video:
- Se corrige la lógica de resguardo del decodificador para Dolby Vision a fin de usar un decodificador H264/H265 compatible si es necesario.
- Audio:
- Se corrige la lógica de resguardo del decodificador para Dolby Atmos (E-AC3-JOC) a fin de usar un decodificador E-AC3 compatible si es necesario.
- Se cambian las API de
AudioCapabilities
para que sea necesario pasarAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
de manera explícita en lugar denull
. - Se permite la personalización del cálculo del tamaño del búfer de
AudioTrack
mediante la inserción deAudioTrackBufferSizeProvider
enDefaultAudioSink
(#8891). - Vuelve a intentar la creación de
AudioTrack
si el tamaño del búfer solicitado es superior a 1 MB (#9712).
- Extractores:
- Texto:
- Se agrega un campo
MediaItem.SubtitleConfiguration.id
que se propaga al campoFormat.id
de la pista de subtítulo creada a partir de la configuración (#9673). - Se agrega compatibilidad básica con los subtítulos de WebVTT en contenedores de Matroska (#9886).
- No se permite que
Cea708Decoder
lea más que el tamaño declarado de un bloque de servicios.
- Se agrega un campo
- DRM:
- Se quita
playbackLooper
deDrmSessionManager.(pre)acquireSession
. Cuando una app usaDrmSessionManager
enMediaSource
personalizado, en su lugar,playbackLooper
debe 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
AdPlaybackState
para permitir el restablecimiento de un grupo de anuncios a fin de que se pueda volver a reproducir (#9615). - Se aplica, de forma forzosa, la velocidad de reproducción de 1.0 durante la reproducción de anuncios (#9018).
- Se corrige un problema por el que un grupo de anuncios que no se cargaba causaba un restablecimiento inmediato de reproducción (#9929).
- IU:
- DASH:
- Se agregan propiedades analizadas, esenciales y adicionales a
Representation
(#9579). - Se admite la función de seguimiento
forced-subtitle
(#9727). - Ya no se interpreta la función de pista
main
comoC.SELECTION_FLAG_DEFAULT
. - Se corrige la lógica de exclusión de la URL base para manifiestos que no declaran el espacio de nombres de DVB (#9856).
- Se admiten URLs
MPD.Location
relativas (#9939).
- Se agregan propiedades analizadas, esenciales y adicionales a
- HLS:
- Se propaga correctamente
Format.label
para las transmisiones HLS de solo audio (#9608). - Se usa la preparación sin fragmentos de forma predeterminada para mejorar el tiempo de inicio. Si tus formatos contienen pistas de subtítulos multiplexados que no están declaradas en la lista de reproducción principal, debes agregarlas a esta lista, de modo que estén disponibles para reproducirse o debes desactivar la preparación sin fragmentos con
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
. - Se admite la búsqueda precisa de fotogramas clave en HLS (#2882).
- Se propaga correctamente
- RTSP:
- Se proporciona una API de cliente a fin de anular
SocketFactory
que se utiliza para cualquier conexión del servidor (#9606). - Se prefiere el método de autenticación DIGEST en lugar de BASIC si ambos están presentes (#9800).
- Se controla cuando no está disponible el tiempo de seguimiento de RTSP (#9775).
- Se ignoran los valores de encabezado de RTP-Info no válidos (#9619).
- Se proporciona una API de cliente a fin de anular
- Transformador:
- Se aumenta la versión mínima requerida de la API a 21.
TransformationException
ahora se usa para describir errores que se producen durante una transformación.- Se agregó
TransformationRequest
para especificar las opciones de transformación. - Se permite que se registren varios objetos de escucha.
- Se corrige el problema que atasca el transformador cuando el resultado del códec se lee de forma parcial.
- Se corrige la NPE posible en
Transformer.getProgress
cuando se liberan los lanzamientos del combinador. - Se agregó una app de demo para aplicar transformaciones.
- Extensión MediaSession:
- De forma predeterminada,
MediaSessionConnector
ahora borra la lista de reproducción detenida. Las apps que quieran conservar la lista de reproducción pueden llamar asetClearMediaItemsOnStop(false)
en el conector.
- De forma predeterminada,
- Extensión Cast:
- Extensión FFmpeg:
- Causa que
build_ffmpeg.sh
dependa 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-framework
no son compatibles con las apps orientadas a Android 12 y fallan conIllegalArgumentException
cuando 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.Listener
en su lugar. - Se quitan
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
yMediaSourceFactory#setDrmUserAgent
. Se usaMediaSourceFactory#setDrmSessionManagerProvider
en su lugar. - Se quita
MediaSourceFactory#setStreamKeys
. Se usaMediaItem.Builder#setStreamKeys
en su lugar. - Se quita
MediaSourceFactory#createMediaSource(Uri)
. Se usaMediaSourceFactory#createMediaSource(MediaItem)
en su lugar. - Se quita
setTag
deDashMediaSource
,HlsMediaSource
ySsMediaSource
. Se usaMediaItem.Builder#setTag
en su lugar. - Se quita
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. Se usanMediaItem.Builder#setLiveConfiguration
yMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
para anular el manifiesto, oDashMediaSource#setFallbackTargetLiveOffsetMs
para proporcionar un valor de resguardo. - Se quita
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
. Ya no es posible inhabilitar la aplicación forzosa de subprocesos. - Se quitan
ActionFile
yActionFileUpgradeUtil
. Se usa ExoPlayer 2.16.1 o una versión anterior para usarActionFileUpgradeUtil
a 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#setTag
yProgressiveMediaSource.Factory#setCustomCacheKey
. Se usanMediaItem.Builder#setTag
yMediaItem.Builder#setCustomCacheKey
en su lugar. - Se quitan los constructores
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
yDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Se usan el constructorDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
yDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
en su lugar. - Se quitan todos los constructores públicos
CronetDataSource
. Se usaCronetDataSource.Factory
en su lugar.
- Se quita
- Se cambia el siguiente
IntDefs
solo a@Target(TYPE_USE)
. Es posible que se interrumpa la compilación de usos en Kotlin, que se puede corregir si se mueve la anotación para anotar el tipo (Int
).@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(en el 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
Player
que ExoPlayer) - Componentes de la IU para compilar interfaces de usuario de reproducción de contenido multimedia
- Módulos que unen la funcionalidad en otras bibliotecas con el fin de usarlos con ExoPlayer, por ejemplo, la inserción de anuncios a través del SDK de IMA
Si deseas obtener más información, consulta el Proyecto de GitHub de Media3.
Anteriormente, ExoPlayer se alojaba en un proyecto de GitHub de ExoPlayer independiente. En Media3, el nombre de su paquete es androidx.media3.exoplayer
. Planeamos mantener y lanzar el proyecto de GitHub de ExoPlayer por un tiempo, de modo que las apps puedan migrar a Media3. Media3 tiene reemplazos para todos los módulos de ExoPlayer, excepto las extensiones heredadas media2 y mediasession, que se reemplazan con el nuevo módulo media3-session
. Esto brinda una integración directa entre las reproducciones y las sesiones de contenido multimedia sin necesidad de usar una clase de adaptador o conector.