Media3
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2023년 2월 16일 | - | 1.0.0-rc01 | - | - |
종속 항목 선언
Media3의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { def media3_version = "1.0.0-rc01" // 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.0.0-rc01" // 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") }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. Media3 Issue Tracker를 사용하여 질문, 알려진 문제, 기능 요청에 대한 답변을 찾고 새 문제를 제출할 수 있습니다.
버전 1.0.0
버전 1.0.0-rc01
2023년 2월 16일
androidx.media3:media3-*:1.0.0-rc01
이 출시되었습니다.
버전 1.0.0-rc01에 포함된 커밋을 확인하세요.
이 버전은 ExoPlayer 2.18.3 출시에 해당합니다.
- 핵심 라이브러리:
- 디코더가 미디어를 제대로 재생하지 못할 수 있다고 보고하더라도
MediaCodecSelector
의 환경설정을 유지하도록 렌더기의 디코더 순서 지정 로직을 조정합니다. 예를 들어 기본 선택기에서 기능 지원만 있는 하드웨어 디코더가 이 형식을 완전히 지원하는 소프트웨어 디코더보다 선호됩니다. (#10604) - 새 ExoPlayer 인스턴스의 기존 재생 스레드를 설정하는
ExoPlayer.Builder.setPlaybackLooper
를 추가합니다. - 다운로드 관리자 도우미가 삭제되도록 허용합니다. (#10776)
- 탐색에 사용되는 명령어도 나타내도록
BasePlayer.seekTo
에 매개변수를 추가합니다. - API 21 이상에서 드로어블을 로드할 때 테마를 사용합니다. (#220)
- 여러 미디어 항목을 단일 창으로 결합할 수 있는
ConcatenatingMediaSource2
를 추가합니다. (#247)
- 디코더가 미디어를 제대로 재생하지 못할 수 있다고 보고하더라도
- 추출기:
- trak atom을 파싱할 때 샘플 테이블(stbl)에 필수 샘플 설명(stsd)이 누락된 경우
NullPointerException
대신ParserException
이 발생합니다. - fMP4의 동기화 프레임으로 직접 이동할 때 샘플을 올바르게 건너뜁니다. (#10941)
- trak atom을 파싱할 때 샘플 테이블(stbl)에 필수 샘플 설명(stsd)이 누락된 경우
- 오디오:
- 압축된 오디오 형식 비트 전송률을 사용하여 직접 재생(패스 스루)에서
AudioTrack
의 최소 버퍼 크기를 계산합니다.
- 압축된 오디오 형식 비트 전송률을 사용하여 직접 재생(패스 스루)에서
- 텍스트:
- 자막 파일에 신호가 없는 경우
Subtitle.getEventTime
에 잘못된(음수) 색인을 전달하는TextRenderer
를 수정합니다. - SubRip: 바이트 순서 표시로 시작되는 경우 UTF-16 파일의 지원을 추가합니다.
- 자막 파일에 신호가 없는 경우
- 메타데이터:
- ID3 v2.4에서 허용하는 대로 ID3 프레임에서 여러 개의 null로 구분된 값을 파싱합니다.
MediaMetadata.mediaType
을 추가하여 메타데이터에 설명된 콘텐츠 유형 또는 폴더 유형을 표시합니다.MediaMetadata.folderType
대신MediaMetadata.isBrowsable
을 추가합니다. 폴더 유형은 다음 출시에서 지원 중단됩니다.
- DASH:
- 타일 수를 포함하여 이미지 적응 세트에 관한 전체 파싱을 추가합니다. (#3752)
- UI:
- 세션:
- 맞춤 플레이어용
Player
인터페이스를 구현할 수 있도록 추상SimpleBasePlayer
를 추가합니다. - 플랫폼 세션 토큰을 Media3
SessionToken
으로 변환하는 도우미 메서드를 추가합니다. (#171) onMediaMetadataChanged
를 사용하여 플랫폼 미디어 세션의 업데이트를 트리거합니다. (#219)- 미디어 세션을
DefaultMediaNotificationProvider
의getMediaButtons()
인수로 추가하고 명확성을 위해 변경 불가능한 목록을 사용합니다. (#216) MediaItem
목록을 수정/설정하는 수단을 제공하는onSetMediaItems
콜백 리스너를 추가하여 플레이어에 설정하기 전에 세션별 색인 및 위치를 시작합니다. (#156)- 블루투스가 아닌 미디어 버튼 이벤트의 두 번 탭 감지를 피합니다. (#233)
- 기존 세션 상태가 좋지 않은 경우
QueueTimeline
을 더 강력하게 만듭니다. (#241)
- 맞춤 플레이어용
- 메타데이터:
- ID3 v2.4에서 허용하는 대로 ID3 프레임에서 여러 개의 null로 구분된 값을 파싱합니다.
MediaMetadata.mediaType
을 추가하여 메타데이터에 설명된 콘텐츠 유형 또는 폴더 유형을 표시합니다.MediaMetadata.folderType
대신MediaMetadata.isBrowsable
을 추가합니다. 폴더 유형은 다음 출시에서 지원 중단됩니다.
- Cast 확장 프로그램:
- Cast SDK 버전을 21.2.0으로 범프합니다.
- IMA 확장 프로그램:
- 스레딩 문제를 방지하기 위해 애플리케이션 스레드에서
ImaServerSideAdInsertionMediaSource
의 플레이어 리스너를 삭제합니다. - 속성
focusSkipButtonWhenAvailable
을ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
에 추가하여 TV 기기에서 건너뛰기 버튼에 포커스를 두도록 요청하고 이를 기본적으로 true로 설정합니다. - 건너뛰기 버튼에 포커스를 맞추도록 프로그래매틱 방식으로 요청하려면
focusSkipButton()
메서드를ImaServerSideAdInsertionMediaSource.AdsLoader
에 추가합니다. - IMA SDK 버전을 3.29.0으로 범프합니다.
- 스레딩 문제를 방지하기 위해 애플리케이션 스레드에서
- 데모 앱:
- 런타임 시 다운로드 알림의 알림 권한을 요청합니다. (#10884)
버전 1.0.0-beta03
2022년 11월 22일
androidx.media3:media3-*:1.0.0-beta03
이 출시되었습니다.
버전 1.0.0-beta03에 포함된 커밋을 확인하세요.
이 버전은 ExoPlayer 2.18.2 출시에 해당합니다.
- 핵심 라이브러리:
- 현재 선택된 트랙에 터널링이 사용 설정되어 있는지
ExoPlayer.isTunnelingEnabled
를 추가하여 확인합니다. (#2518) WrappingMediaSource
를 추가하여 단일MediaSource
래핑을 간소화합니다. (#7279)- 사용 가능한 메모리가 충분하지 않아 재생이 중단되기 전에 백 버퍼를 삭제합니다.
- 오프로드가 사용 설정된 경우 Tracing 'doSomeWork' 블록을 닫습니다.
PlaybackStatsListener
에서 빠른 탐색의 세션 추적 문제를 수정합니다. (#180)- 단일 항목 재생목록에서
seekToNext
또는seekToPrevious
를 호출할 때 누락된onMediaItemTransition
콜백을 전송합니다. (#10667) - 동영상이 렌더링되는 노출 영역의 크기를 반환하는
Player.getSurfaceSize
를 추가합니다. - 플레이어 해제 중에 리스너를 삭제하면
IllegalStateException
이 발생할 수 있는 버그를 수정했습니다. (#10758)
- 현재 선택된 트랙에 터널링이 사용 설정되어 있는지
- 빌드:
- 최소
compileSdkVersion
을 적용하여 컴파일 오류를 방지합니다. (#10684) - 블록이 다른 Gradle 빌드에 포함된 경우 블록 게시를 방지합니다.
- 최소
- 트랙 선택:
- 디스플레이에서 지원하지 않는 경우 Dolby Vision보다 다른 트랙을 선호합니다. (#8944)
- 다운로드:
- 동영상:
- 디스플레이에서 지원하지 않는 경우 Dolby Vision에 다른 디코더를 사용해 봅니다. (#9794)
- 오디오:
- 동시에 여러 플레이어를 해제할 때 발생하는 OutOfMemory 오류를 방지하기 위해
AudioTrack
인스턴스를 해제하는 데SingleThreadExecutor
를 사용합니다. (#10057) - AudioTrack 오프로드 상태에
AudioOffloadListener.onExperimentalOffloadedPlayback
을 추가합니다. (#134) AudioTrackBufferSizeProvider
를 공개 인터페이스로 만듭니다.ExoPlayer.setPreferredAudioDevice
를 추가하여 선호하는 오디오 출력 장치를 설정합니다. (#135)androidx.media3.exoplayer.audio.AudioProcessor
의 이름을androidx.media3.common.audio.AudioProcessor
로 바꿉니다.- 모든 Android 버전에서 각각 8채널 및 12채널 오디오를 7.1 및 7.1.4 채널 마스크에 매핑합니다. (#10701)
- 동시에 여러 플레이어를 해제할 때 발생하는 OutOfMemory 오류를 방지하기 위해
- 메타데이터:
- 이제 메타데이터를 사용할 수 있을 때 이를 즉시 렌더링하도록
MetadataRenderer
를 구성할 수 있습니다.MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
로 인스턴스를 만들어 렌더러가 메타데이터를 일찍 출력할지 아니면 플레이어 위치에 맞춰 출력할지 지정합니다.
- 이제 메타데이터를 사용할 수 있을 때 이를 즉시 렌더링하도록
- DRM:
- 비어 있지 않지만 잘못된 라이선스 URL을 반환하는 Android 13 ClearKey 구현의 버그를 해결합니다.
- 재생목록에서 DRM 스키마 간에 전환(예: Widevine에서 ClearKey로)할 때 발생하는
setMediaDrmSession failed: session not opened
오류를 수정합니다.
- 텍스트:
- CEA-608: 필드 2의 서비스 전환 명령어가 올바르게 처리되는지 확인합니다. (#10666)
- DASH:
- 매니페스트에서
EventStream.presentationTimeOffset
를 파싱합니다. (#10460)
- 매니페스트에서
- UI:
TrackSelectionDialogBuilder
에 미리 설정된 대로 플레이어의 현재 재정의를 사용합니다. (#10429)
- 세션:
- 일부 명령어는 비동기 해상도가 필요한 경우에도 항상 올바른 순서로 실행됩니다. (#85)
DefaultMediaNotificationProvider.Builder
를 추가하여DefaultMediaNotificationProvider
인스턴스를 빌드합니다. 빌더는 제공자가 사용하는 알림 ID, 알림 채널 ID, 알림 채널 이름을 구성할 수 있습니다. 또한DefaultMediaNotificationProvider.setSmallIcon(int)
메서드를 추가하여 알림을 작은 아이콘으로 설정합니다. (#104)MediaController.release()
전에 전송된 명령어가 삭제되지 않도록 합니다. (#99)SimpleBitmapLoader
는file://
URI에서 비트맵을 로드할 수 있습니다. (#108)MediaController
가 일정 기간 동안 광고를 탐색하는 것을 방지하는 어설션을 수정했습니다. (#122)- 재생이 끝나면
MediaSessionService
가 포그라운드에서 중지되고 마지막으로 재생된 미디어 항목의 재생을 다시 시작하라는 알림이 표시됩니다. (#112) - 일시중지를 위해 대기 중인 인텐트로 포그라운드 서비스를 시작하지 마세요. (#167)
- API 26 및 API 27에서
DefaultNotificationProvider
로 생성된 알림과 관련 있는 '배지'를 수동으로 숨깁니다(API 28 이상에서는 배지가 자동으로 숨겨짐). (#131) - 기존 MediaSession에서 Media3 MediaController로의 두 번째 바인더 연결로 인해 IllegalStateExceptions가 발생하는 버그를 수정했습니다. (#49)
- RTSP:
- IMA:
- FFmpeg 확장 프로그램:
- FFmpeg 라이브러리를 NDK 23.1.7779620 이상과 연결하는 데 필요한 새 플래그를 추가합니다. (#9933)
- AV1 확장 프로그램:
- 최신 Android 스튜디오 버전과의 비호환성을 방지하기 위해 CMake 버전을 업데이트합니다. (#9933)
- Cast 확장 프로그램:
MediaController
로 재생을 제어할 때CastPlayer
를 식별할 수 있도록getDeviceInfo()
를 구현합니다. (#142)
- 변환기:
- 출력 샘플 생성이 너무 느린 경우를 감지하도록 Muxer 워치독 타이머를 추가합니다.
- 지원 중단된 기호 삭제:
Transformer.Builder.setOutputMimeType(String)
을 삭제합니다. 이 기능은 삭제되었습니다. 기본 Muxer를 사용할 경우 MIME 유형은 항상 MP4입니다.
버전 1.0.0-beta02
2022년 7월 21일
androidx.media3:media3-*:1.0.0-beta02
가 출시되었습니다.
버전 1.0.0-beta02에 포함된 커밋을 확인하세요.
이 버전은 ExoPlayer 2.18.1 출시에 해당합니다.
- 핵심 라이브러리:
ShuffleOrder
를ExoPlayer.setShuffleOrder
로 변경하면reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
를 통해Player.Listener#onTimelineChanged
가 호출됩니다. (#9889)- 점진적 미디어의 경우 선택한 트랙만 버퍼링된 위치에 포함합니다. (#10361)
- 모든 ExoPlayer 로그 출력에 맞춤 로거를 허용합니다. (#9752)
- 경우에 따라 작동하지 않았던
DefaultMediaSourceFactory
의setDataSourceFactory
구현을 수정합니다. (#116)
- 추출기:
- DASH:
- 매니페스트에서 ClearKey 라이선스 URL을 파싱합니다. (#10246)
- UI:
- TalkBack에서 재생 컨트롤 메뉴의 현재 활성 속도 옵션을 알려줍니다. (#10298)
- RTSP:
- VP8 분할 패킷 처리를 추가합니다. (#110)
- Leanback 확장 프로그램:
LeanbackAdapter
의playWhenReady
변경사항을 리슨합니다. (10420)
- 전송:
버전 1.0.0-beta01
2022년 6월 16일
androidx.media3:media3-*:1.0.0-beta01
이 출시되었습니다.
버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
이는 ExoPlayer 2.18.0 출시에 해당합니다.
- 핵심 라이브러리:
MediaMetricsManager
를 통해 Android 플랫폼 진단 지원을 사용 설정합니다. ExoPlayer는 재생 이벤트 및 성능 데이터를 플랫폼에 전달하여 기기의 시스템 성능 및 디버깅 정보를 제공하는 데 도움을 줍니다. 기기 사용자가 사용 및 진단 데이터를 공유하도록 설정한 경우 Google이 이 데이터를 수집할 수도 있습니다. 앱은ExoPlayer.Builder.setUsePlatformDiagnostics(false)
를 사용하여 ExoPlayer의 플랫폼 진단에 기여하는 옵션을 선택 해제할 수 있습니다.MergingMediaSource
를 사용할 때 트랙이 너무 자주 재설정되는 버그를 수정했습니다. 예를 들어 자막을 사이드로드하고 선택한 자막을 재생 중 변경하는 경우가 있습니다. (#10248)- API 29 및 30에서 5G-NSA 네트워크 유형 감지를 중지합니다. 이러한 재생에서는 4G 네트워크를 가정합니다.
MediaSource.Factory.setDrmSessionManagerProvider
및MediaSource.Factory.setLoadErrorHandlingPolicy
에null
을 전달하는 것을 허용하지 않습니다. 필요한 경우DefaultDrmSessionManagerProvider
및DefaultLoadErrorHandlingPolicy
인스턴스를 명시적으로 전달할 수 있습니다.MediaItem.RequestMetadata
를 추가하여 정확한LocalConfiguration
을 알 수 없는 경우 미디어를 재생하는 데 필요한 메타데이터를 나타냅니다. 또한,MediaMetadata.mediaUrl
이 이제RequestMetadata
에 포함되어 있기 때문에 이 속성을 삭제합니다.Player.Command.COMMAND_SET_MEDIA_ITEM
을 추가하여 플레이어가 단일 항목 설정을 허용하도록 합니다.
- 트랙 선택:
TrackSelectionOverrides
클래스를TrackSelectionParameters
로 평면화하고TrackSelectionOverride
를 최상위 클래스로 승격합니다.TracksInfo
를Tracks
로,TracksInfo.TrackGroupInfo
를Tracks.Group
으로 바꿉니다.Player.getCurrentTracksInfo
및Player.Listener.onTracksInfoChanged
또한Player.getCurrentTracks
및Player.Listener.onTracksChanged
로 바뀌었습니다. 여기에는Player.Listener.onTracksChanged
메서드 이름을 '지원 중단하지 않음'이 포함되지만, 다른 매개변수 유형을 사용합니다.- 지원 중단된
DefaultTrackSelector.ParametersBuilder
대신DefaultTrackSelector.Parameters.Builder
를 반환하도록DefaultTrackSelector.buildUponParameters
및DefaultTrackSelector.Parameters.buildUpon
을 변경합니다. - 기본적으로 사용 설정되는
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
를 추가합니다. 사용 설정된 경우DefaultTrackSelector
는 채널 수가 기기 출력 기능을 초과하지 않는 오디오 트랙을 선호합니다. 휴대기기에서DefaultTrackSelector
는 다중 채널 오디오 형식이 공간(Android 12L+) 오디오일 수 있거나 Dolby 서라운드 사운드 형식이 아닌 이상, 다중 채널 오디오 형식보다 스테레오/모노를 선호합니다. 또한 오디오 공간화를 지원하는 기기에서DefaultTrackSelector
는 Spatializer 속성의 변경을 모니터링하고 이러한 변경이 있는 경우 새 트랙 선택을 트리거합니다.television
UI 모드를 사용하는 기기는 이러한 제약 조건에서 제외되며 채널 수가 가장 많은 형식이 선호됩니다. 이 기능을 사용 설정하려면Context
로DefaultTrackSelector
인스턴스를 구성해야 합니다.
- 동영상:
DummySurface
의 이름을PlaceholderSurface
로 바꿉니다.MediaCodecVideoRenderer.getCodecMaxInputSize
에 AV1 지원을 추가합니다.
- 오디오:
- 비표준 MIME 유형을 광고하는 LG AC3 오디오 디코더를 사용합니다.
- API 21 미만에서 ART 확인이 느린 것을 방지하기 위해
AudioAttributes.getAudioAttributesV21()
의 반환 유형을android.media.AudioAttributes
에서 새로운AudioAttributesV21
래퍼 클래스로 변경합니다. - 형식 오디오 채널 수가 설정되지 않은 경우 오디오 패스 스루를 위해 플랫폼을 쿼리하거나(API 29 이상) 오디오 인코딩 채널 수를 가정하며, 이는 HLS 청크 없는 준비에서 발생합니다. (10204)
- 디코더가 12채널 PCM 오디오를 출력하는 경우 채널 마스크
AudioFormat.CHANNEL_OUT_7POINT1POINT4
로AudioTrack
을 구성합니다. (#10322)
- DRM
- 형식 변경 직후에 탐색할 때 DRM 세션이 항상 올바르게 업데이트되도록 합니다. (10274)
- 텍스트:
List<Cue>
대신CueGroup
을 반환하도록Player.getCurrentCues()
를 변경합니다.- SSA:
BorderStyle == 3
일 때(예:OutlineColour
가 큐의 배경을 설정함)OutlineColour
스타일 설정을 지원합니다. (#8435) - CEA-708: 데이터를 여러 서비스 블록으로 파싱하고 현재 선택한 서비스 번호와 연결되지 않은 블록을 무시합니다.
- Google 내부 자막 형식을 처리하는 데만 사용된
RawCcExtractor
를 삭제합니다.
- 추출기:
- UI:
useController=false
인 경우PlayerView
에 설정된OnClickListener
로 이벤트 전달을 수정합니다. (#9605) 또한 모든 뷰 구성에서OnLongClickListener
로의 이벤트 전달을 수정합니다.ACTION_UP
전에PlayerView
의 경계를 종료하는 터치 이벤트 시퀀스를 클릭으로 잘못 처리하는 문제를 수정했습니다. (#9861)- 탭할 때 컨트롤이 숨겨지는 대신 재생이 전환될 수도 있는
PlayerView
접근성 문제를 수정했습니다. (#8627) ExoPlayer
가 아닌Player
인터페이스에서 작동하도록TrackSelectionView
및TrackSelectionDialogBuilder
를 다시 작성합니다. 이렇게 하면 뷰를 다른Player
구현과 함께 사용할 수 있고 UI 모듈에서 ExoPlayer 모듈로의 종속 항목을 삭제할 수 있습니다. 브레이킹 체인지에 해당합니다.PlayerView
트랙 선택기에서 강제 텍스트 트랙을 표시하지 않고 '없음'이 선택된 경우 적절한 강제 텍스트 트랙을 선택된 상태로 유지합니다. (#9432)
- DASH:
- DTS
AudioChannelConfiguration
요소에서 채널 수를 파싱합니다. 그러면 DTS 스트림의 오디오 패스 스루가 다시 사용 설정됩니다. (#10159) DashMediaSource.Factory.setCompositeSequenceableLoaderFactory
에null
을 전달하는 것을 허용하지 않습니다. 필요한 경우DefaultCompositeSequenceableLoaderFactory
인스턴스를 명시적으로 전달할 수 있습니다.
- DTS
- HLS:
- 재생목록 CODECS 속성에 오디오 코덱이 포함되어 있지 않은 경우 청크 포함 준비로 대체합니다. (#10065)
HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
,HlsMediaSource.Factory.setPlaylistTrackerFactory
에null
을 전달하는 것을 허용하지 않습니다. 필요한 경우DefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
인스턴스 또는DefaultHlsPlaylistTracker.FACTORY
참조를 명시적으로 전달할 수 있습니다.
- 원활한 스트리밍:
SsMediaSource.Factory.setCompositeSequenceableLoaderFactory
에null
을 전달하는 것을 허용하지 않습니다. 필요한 경우DefaultCompositeSequenceableLoaderFactory
인스턴스를 명시적으로 전달할 수 있습니다.
- RTSP:
- H263용 RTP 리더를 추가합니다. (#63)
- MPEG4용 RTP 리더를 추가합니다. (#35)
- HEVC용 RTP 리더를 추가합니다. (#36)
- AMR용 RTP 리더를 추가합니다. 현재 모노 채널의 경우만 인터리브 처리되지 않은 AMR 스트림이 지원됩니다. 복합 AMR RTP 페이로드는 지원되지 않습니다. (#46)
- VP8용 RTP 리더를 추가합니다. (#47)
- WAV용 RTP 리더를 추가합니다. (#56)
- RTSP 기본 승인 헤더를 수정합니다. (#9544)
- ExoPlayer에 필요하지 않으므로 필수 SDP 필드를 더 이상 확인하지 않습니다. (#10049)
- RTSP 타이밍을 파싱할 때 변수가 확인된 예외가 발생합니다. (#10165)
- VP9용 RTP 리더를 추가합니다. (#47)
- OPUS용 RTP 리더를 추가합니다. (#53)
- 데이터 소스:
DummyDataSource
의 이름을PlaceholderDataSource
로 바꿉니다.- OkHttp 인터럽트 처리 문제를 해결합니다.
- 세션:
- 요청의 비동기 해결을 허용하도록
MediaSession.MediaItemFiller
를MediaSession.Callback.onAddMediaItems
로 대체합니다. MediaController
가 기존 미디어 세션에 연결될 때setMediaItems(s)
메서드를 지원합니다.MediaController.setMediaUri
및MediaSession.Callback.onSetMediaUri
를 삭제합니다.MediaController.setMediaItem
및MediaSession.Callback.onAddMediaItems
를 사용하여 동일한 기능을 달성할 수 있습니다.- 레거시
MediaController
호출을 전달하여 미디어를onSetMediaUri
대신MediaSession.Callback.onAddMediaItems
로 재생합니다. MediaNotification.Provider
및DefaultMediaNotificationProvider
를 추가하여 알림 맞춤설정을 제공합니다.- 예술작품 이미지를 다운로드하기 위한
BitmapLoader
및SimpleBitmapLoader
를 추가합니다. MediaSession.setCustomLayout()
을 추가하여 기존 세션과의 하위 호환성을 제공합니다.MediaSession.setSessionExtras()
를 추가하여 기존 세션과의 기능 패리티를 제공합니다.MediaSession.MediaSessionCallback
을MediaSession.Callback
으로,MediaLibrarySession.MediaLibrarySessionCallback
을MediaLibrarySession.Callback
으로,MediaSession.Builder.setSessionCallback
을setCallback
으로 바꿉니다.MediaControllerImplLegacy
의 NPE를 수정합니다. (#59)- 타임라인 변경 시 세션 위치 정보를 업데이트합니다. (#51)
- 컨트롤러 출시 후
MediaControllerImplBase
의 NPE를 수정합니다. (#74)
- 요청의 비동기 해결을 허용하도록
- 광고 재생/IMA:
- 미디어 평가 위원회(MRC) 추천에 맞게 광고 폴링 속도를 100밀리초 빈도에서 200밀리초 빈도로 줄입니다.
- FFmpeg 확장 프로그램:
- Android 스튜디오의 Gradle 동기화 실패를 야기하는 CMake 버그를 방지하기 위해 CMake 버전을
3.21.0+
로 업데이트합니다. (#9933)
- Android 스튜디오의 Gradle 동기화 실패를 야기하는 CMake 버그를 방지하기 위해 CMake 버전을
- 지원 중단된 기호 삭제:
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
를 삭제합니다. 대신Player.Listener.onTracksChanged(Tracks)
를 사용합니다.Player.getCurrentTrackGroups
및Player.getCurrentTrackSelections
를 삭제합니다. 대신Player.getCurrentTracks
를 사용합니다.ExoPlayer.getCurrentTrackGroups
및ExoPlayer.getCurrentTrackSelections
를 계속 사용할 수도 있지만 이러한 메서드는 지원 중단된 상태입니다.DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
및DEFAULT_TRACK_SELECTOR_PARAMETERS
상수가 삭제됩니다. 가능하다면getDefaultTrackSelectorParameters(Context)
를 대신 사용하고 그렇지 않으면DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
를 사용합니다.- 생성자
DefaultTrackSelector(ExoTrackSelection.Factory)
가 삭제됩니다. 대신DefaultTrackSelector(Context, ExoTrackSelection.Factory)
를 사용합니다. Transformer.Builder.setContext
가 삭제됩니다. 대신Context
를Transformer.Builder
생성자에 전달해야 합니다.
버전 1.0.0-alpha03
2022년 3월 14일
androidx.media3:media3-*:1.0.0-alpha03
이 출시되었습니다.
버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
이는 ExoPlayer 2.17.1 출시에 해당합니다.
- 오디오:
- HLS에서 Dolby Atmos(E-AC3-JOC)의 오디오 기능을 확인하는 중에 발생하는 오류를 수정했습니다.
- 추출기:
- FMP4: v0 및 v1 emsg atom이 모두 포함된 스트림에 관해 emsg 샘플 메타데이터가 잘못된 순서로 출력될 수 있는 문제를 수정했습니다. (#9996)
- 텍스트:
SubtitleConfiguration
필드의 우선순위를 지정하고 설정되지 않은 경우Factory
값으로 대체하도록SingleSampleMediaSource.Factory.setTrackId
및MediaItem.SubtitleConfiguration.Builder.setId
의 상호작용을 수정합니다. (#10016)
- 광고 재생:
- 실시간 HLS SSAI 스트림에서 광고 기간 사이의 오디오 언더런을 수정합니다.
버전 1.0.0-alpha02
2022년 3월 2일
androidx.media3:media3-*:1.0.0-alpha02
가 출시되었습니다.
버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
이는 ExoPlayer 2.17.0 출시에 해당합니다.
- 핵심 라이브러리:
buildVideoRenderers()
또는buildAudioRenderers()
를 재정의하는DefaultRenderersFactory
의 서브클래스가 코덱 어댑터 팩토리에 액세스하여 자신이 만든MediaCodecRenderer
인스턴스에 이를 전달할 수 있도록 보호된 메서드DefaultRenderersFactory.getCodecAdapterFactory()
를 추가합니다.Player.Listener.onMediaMetadataChanged()
를 통해 앱에 도달할 수 있도록 ICY 헤더 필드name
및genre
를 각각MediaMetadata.station
및MediaMetadata.genre
에 전파합니다. (#9677)DefaultHttpDataSource#getResponseHeaders
에서 null 키를 삭제합니다.MediaCodec
인스턴스 생성이 실패하면 절전 모드로 들어가 다시 시도합니다. 이렇게 하면 보안 코덱에서 다른 코덱으로 표시 경로를 전환할 때 일부 기기에서 발생하는 문제를 피할 수 있습니다. (#8696)- 사용자가
MediaCodec
에서 측정항목 데이터를 가져올 수 있도록MediaCodecAdapter.getMetrics()
를 추가합니다. (#9766) - Maven 종속 항목 해결을 수정합니다. (#8353)
- 지연 시간이 짧은 기능도 없고 속도 설정을 위한 사용자 요청도 없는 실시간 스트림에는 자동 속도 조정을 사용 중지합니다. (#9329)
DecoderCounters#inputBufferCount
의 이름을queuedInputBufferCount
로 바꿉니다.SimpleExoPlayer.renderers
를 비공개로 설정합니다. 렌더기에는ExoPlayer.getRenderer
를 통해 액세스할 수 있습니다.- 일부
AnalyticsListener.EventFlags
상수 값이Player.EventFlags
의 값과 일치하도록 업데이트되었습니다. - 앱에 필요하지 않은 경우 R8을 통해 제거할 수 있도록
AnalyticsCollector
를 인터페이스와 기본 구현으로 분할합니다.
- 트랙 선택:
- 트랙 선택 시 선호하는 동영상 역할 플래그를 지원합니다. (#9402)
- 조정할 여러 동영상 트랙을 선택할 때 선호하는 MIME 유형과 역할 플래그를 고려하도록 동영상 트랙 선택 로직을 업데이트합니다. (#9519)
- 조정 대상을 선택할 때 디코더 및 하드웨어 지원 수준이 동일한 형식만 선택하도록 동영상 및 오디오 트랙 선택 로직을 업데이트합니다. (#9565)
- 기본 하드웨어 가속 디코더가 여러 코덱을 지원하는 경우 더 효율적인 코덱을 우선 사용하도록 동영상 트랙 선택 로직을 업데이트합니다. (#4835)
- 기술적 트랙 선택 제약 조건(예: 선호되는 MIME 유형 또는 최대 채널 수)보다 오디오 콘텐츠 환경설정(예: '기본' 오디오 트랙 또는 시스템 언어와 일치하는 트랙)을 우선 적용합니다.
- 한 트랙 그룹을 재정의해도 동일한 유형의 다른 트랙 그룹은 중지되지 않는 트랙 선택 문제를 수정합니다. (#9675)
- 비어 있지 않은 트랙 재정의와 빈 트랙 재정의의 조합이 제대로 적용되지 않는 트랙 선택 문제를 수정합니다. (#9649)
TrackGroupArray
에서 중복된TrackGroup
을 금지합니다.TrackGroup
은TrackGroup
생성자에id
를 설정하여 언제든지 구별할 수 있습니다. 이를 통해 활성 트랙 재정의로 앱을 백그라운드로 전환한 후 재생을 다시 시작할 때 발생하는 비정상 종료가 수정됩니다. (#9718)- 라이브 에지와 매우 가까운 곳에서 재생되더라도 네트워크 대역폭이 충분하면 품질이 향상될 수 있도록
AdaptiveTrackSelection
의 로직을 수정합니다. (#9784)
- 동영상:
- 필요한 경우 호환되는 H264/H265 디코더를 사용하도록 Dolby Vision의 디코더 대체 로직을 수정합니다.
- 오디오:
- 필요한 경우 호환되는 E-AC3 디코더를 사용하도록 Dolby Atmos(E-AC3-JOC)의 디코더 대체 로직을 수정합니다.
null
대신AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
를 명시적으로 전달할 것을 요구하도록AudioCapabilities
API를 변경합니다.AudioTrackBufferSizeProvider
를DefaultAudioSink
에 삽입하여AudioTrack
버퍼 사이즈 계산의 맞춤설정을 허용합니다. (#8891)- 요청된 버퍼 사이즈가 1MB를 초과하는 경우
AudioTrack
생성을 다시 시도합니다. (#9712)
- 추출기:
- 텍스트:
- DRM:
DrmSessionManager.(pre)acquireSession
에서playbackLooper
를 삭제합니다. 맞춤MediaSource
에서 앱이DrmSessionManager
를 사용하는 경우 대신playbackLooper
를DrmSessionManager.setPlayer
에 전달해야 합니다.
- 광고 재생/IMA:
- IMA 동적 광고 삽입(DAI) 지원을 추가합니다. (#8213)
- 광고그룹을 재설정하여 다시 재생할 수 있도록
AdPlaybackState
에 메서드를 추가합니다. (#9615) - 광고 재생 중에는 재생 속도를 1.0으로 적용합니다. (#9018)
- 로드되지 않은 광고그룹으로 인해 재생이 즉시 재설정되는 문제를 해결합니다. (#9929)
- UI:
- DASH:
- HLS:
- RTSP:
- 변환기:
- 필요한 최소 API 버전을 21로 높입니다.
- 이제 변환 중에 발생하는 오류를 설명하는 데
TransformationException
이 사용됩니다. - 변환 옵션을 지정하기 위한
TransformationRequest
를 추가합니다. - 여러 리스너를 등록할 수 있도록 허용합니다.
- 코덱 출력을 부분적으로 읽었을 때 변환기가 멈추는 문제를 수정합니다.
- Muxer가 해제될 때
Transformer.getProgress
의 잠재적 NPE를 수정합니다. - 변환 적용을 위한 데모 앱을 추가합니다.
- MediaSession 확장 프로그램:
- 기본적으로 이제
MediaSessionConnector
는 중지 시 재생목록을 지웁니다. 재생목록을 보관하려는 앱은 커넥터에서setClearMediaItemsOnStop(false)
를 호출할 수 있습니다.
- 기본적으로 이제
- Cast 확장 프로그램:
- FFmpeg 확장 프로그램:
build_ffmpeg.sh
가 GNU의 bin utils 대신 LLVM의 bin utils를 사용하도록 설정합니다. (#9933)
- Android 12 호환성:
com.google.android.gms:play-services-cast-framework:20.1.0
을 사용하도록 Cast 확장 프로그램을 업그레이드합니다. 이전 버전의play-services-cast-framework
는 Android 12를 타겟팅하는 앱과 호환되지 않으며,PendingIntent
를 생성할 때IllegalArgumentException
과 함께 비정상 종료됩니다. (#9528)
- 지원 중단된 기호 삭제:
Player.EventListener
를 삭제합니다. 대신Player.Listener
를 사용합니다.MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
,MediaSourceFactory#setDrmUserAgent
가 삭제됩니다. 대신MediaSourceFactory#setDrmSessionManagerProvider
를 사용합니다.MediaSourceFactory#setStreamKeys
가 삭제됩니다. 대신MediaItem.Builder#setStreamKeys
를 사용합니다.MediaSourceFactory#createMediaSource(Uri)
가 삭제됩니다. 대신MediaSourceFactory#createMediaSource(MediaItem)
을 사용합니다.DashMediaSource
,HlsMediaSource
,SsMediaSource
에서setTag
가 삭제됩니다. 대신MediaItem.Builder#setTag
를 사용합니다.DashMediaSource#setLivePresentationDelayMs(long, boolean)
을 삭제합니다. 매니페스트를 재정의하려면MediaItem.Builder#setLiveConfiguration
과MediaItem.LiveConfiguration.Builder#setTargetOffsetMs
를 사용하고 대체 값을 제공하려면DashMediaSource#setFallbackTargetLiveOffsetMs
를 사용합니다.(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
가 삭제됩니다. 더 이상 스레드 적용을 선택 해제할 수 없습니다.ActionFile
및ActionFileUpgradeUtil
이 삭제됩니다.ActionFileUpgradeUtil
을 사용하여 기존 작업 파일을DefaultDownloadIndex
에 병합하려면 ExoPlayer 2.16.1 이전 버전을 사용합니다.ProgressiveMediaSource#setExtractorsFactory
가 삭제됩니다. 대신ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
생성자를 사용합니다.ProgressiveMediaSource.Factory#setTag
및ProgressiveMediaSource.Factory#setCustomCacheKey
가 삭제됩니다. 대신MediaItem.Builder#setTag
및MediaItem.Builder#setCustomCacheKey
를 사용합니다.DefaultRenderersFactory(Context, @ExtensionRendererMode int)
및DefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
생성자가 삭제됩니다. 대신DefaultRenderersFactory(Context)
생성자와DefaultRenderersFactory#setExtensionRendererMode
및DefaultRenderersFactory#setAllowedVideoJoiningTimeMs
를 사용합니다.- 모든 공개
CronetDataSource
생성자가 삭제됩니다. 대신CronetDataSource.Factory
를 사용합니다.
- 다음
IntDefs
만@Target(TYPE_USE)
로 변경됩니다. 이로 인해 Kotlin에서 사용 관련 컴파일이 중단될 수 있습니다. 주석을 이동하여 유형(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
(com.google.android.exoplayer2.ext.flac
패키지 내)@FlacExtractor.Flags
(com.google.android.exoplayer2.extractor.flac
패키지 내)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
버전 1.0.0-alpha01
2021년 10월 27일
androidx.media3:media3-*:1.0.0-alpha01
이 출시되었습니다.
버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
Media3은 ExoPlayer 등의 미디어 지원 라이브러리를 위한 새로운 공간입니다. 첫 번째 알파 버전에는 다음과 같은 미디어 사용 사례 구현을 위한 라이브러리의 초기 기능 구현이 포함되어 있습니다.
- 맞춤설정과 확장이 쉬운 Android용 애플리케이션 수준 미디어 플레이어인 ExoPlayer.
- 재생을 노출하고 제어하는 미디어 세션 기능. 이 새로운 세션 모듈은 ExoPlayer와 같은
Player
인터페이스를 사용합니다. - 미디어 재생 사용자 인터페이스를 빌드하는 UI 구성요소.
- ExoPlayer와 함께 사용할 다른 라이브러리의 모듈 래핑 기능(예: IMA SDK를 통한 광고 삽입).
자세한 내용은 Media3 GitHub 프로젝트를 참고하세요.
ExoPlayer는 이전에 별도의 ExoPlayer GitHub 프로젝트에서 호스팅되었습니다. Media3에서 패키지 이름은
androidx.media3.exoplayer
입니다. Google에서는 앱에 Media3으로 이전할 시간을 제공하기 위해 한동안 ExoPlayer GitHub 프로젝트를 계속 유지하고 출시할 계획입니다. Media3은 모든 ExoPlayer 모듈을 대체합니다. 단, 기존 media2 및 mediasession 확장 프로그램은 예외인데 이는 새 media3-session
모듈로 대체됩니다. 따라서 어댑터/커넥터 클래스를 사용하지 않고도 플레이어와 미디어 세션을 직접 통합할 수 있습니다.