Media3

미디어 사용 사례를 위한 지원 라이브러리입니다.
최근 업데이트 공개 버전 출시 후보 베타 버전 알파 버전
2022년 7월 21일 - - 1.0.0-beta02 -

종속 항목 선언

Media3의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

Groovy

dependencies {
    val media3_version = "1.0.0-beta02"

    // 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-beta02"

    // 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-beta02

2022년 7월 21일

androidx.media3:media3-*:1.0.0-beta02가 출시되었습니다. 버전 1.0.0-beta02에 포함된 커밋을 확인하세요.

이 버전은 ExoPlayer 2.18.1 출시에 해당합니다.

  • 핵심 라이브러리:
    • ShuffleOrderExoPlayer.setShuffleOrder로 변경하면 reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED를 통해 Player.Listener#onTimelineChanged가 호출됩니다. (#9889)
    • 점진적 미디어의 경우 선택한 트랙만 버퍼링된 위치에 포함합니다. (#10361)
    • 모든 ExoPlayer 로그 출력에 맞춤 로거를 허용합니다. (#9752)
    • 경우에 따라 작동하지 않았던 DefaultMediaSourceFactorysetDataSourceFactory 구현을 수정합니다. (#116)
  • 추출기:
    • H265 단기 참조 사진 세트의 파싱을 수정합니다. (#10316)
    • esds 상자의 비트 전송률 파싱을 수정합니다. (#10381)
  • DASH:
    • 매니페스트에서 ClearKey 라이선스 URL을 파싱합니다. (#10246)
  • UI:
    • TalkBack에서 재생 컨트롤 메뉴의 현재 활성 속도 옵션을 알려줍니다. (#10298)
  • RTSP:
    • VP8 분할 패킷 처리를 추가합니다. (#110)
  • Leanback 확장 프로그램:
    • LeanbackAdapterplayWhenReady 변경사항을 수신합니다. (10420)
  • 전송:
    • CastTimeline에서 Window.mediaItem으로 재생목록 메서드에 전달된 MediaItem을 사용합니다 (#25, #8212)
    • CastPlayerPlayer.getMetadata()Listener.onMediaMetadataChanged()를 지원합니다. (#25)

버전 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.setDrmSessionManagerProviderMediaSource.Factory.setLoadErrorHandlingPolicynull을 전달하는 것을 허용하지 않습니다. 필요한 경우 DefaultDrmSessionManagerProviderDefaultLoadErrorHandlingPolicy 인스턴스를 명시적으로 전달할 수 있습니다.
    • MediaItem.RequestMetadata를 추가하여 정확한 LocalConfiguration을 알 수 없는 경우 미디어를 재생하는 데 필요한 메타데이터를 나타냅니다. 또한, MediaMetadata.mediaUrl이 이제 RequestMetadata에 포함되어 있기 때문에 이 속성을 삭제합니다.
    • Player.Command.COMMAND_SET_MEDIA_ITEM을 추가하여 플레이어가 단일 항목 설정을 허용하도록 합니다.
  • 트랙 선택:
    • TrackSelectionOverrides 클래스를 TrackSelectionParameters로 평면화하고 TrackSelectionOverride를 최상위 클래스로 승격합니다.
    • TracksInfoTracks로, TracksInfo.TrackGroupInfoTracks.Group으로 바꿉니다. Player.getCurrentTracksInfoPlayer.Listener.onTracksInfoChanged 또한 Player.getCurrentTracksPlayer.Listener.onTracksChanged로 바뀌었습니다. 여기에는 Player.Listener.onTracksChanged 메서드 이름을 '지원 중단하지 않음'이 포함되지만, 다른 매개변수 유형을 사용합니다.
    • 지원 중단된 DefaultTrackSelector.ParametersBuilder 대신 DefaultTrackSelector.Parameters.Builder를 반환하도록 DefaultTrackSelector.buildUponParametersDefaultTrackSelector.Parameters.buildUpon을 변경합니다.
    • 기본적으로 사용 설정되는 DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities를 추가합니다. 사용 설정된 경우 DefaultTrackSelector는 채널 수가 기기 출력 기능을 초과하지 않는 오디오 트랙을 선호합니다. 휴대기기에서 DefaultTrackSelector는 다중 채널 오디오 형식이 공간(Android 12L+) 오디오일 수 있거나 Dolby 서라운드 사운드 형식이 아닌 이상, 다중 채널 오디오 형식보다 스테레오/모노를 선호합니다. 또한 오디오 공간화를 지원하는 기기에서 DefaultTrackSelectorSpatializer 속성의 변경을 모니터링하고 이러한 변경이 있는 경우 새 트랙 선택을 트리거합니다. television UI 모드를 사용하는 기기는 이러한 제약 조건에서 제외되며 채널 수가 가장 많은 형식이 선호됩니다. 이 기능을 사용 설정하려면 ContextDefaultTrackSelector 인스턴스를 구성해야 합니다.
  • 동영상:
    • 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_7POINT1POINT4AudioTrack을 구성합니다. (#10322)
  • DRM
    • 형식 변경 직후에 탐색할 때 DRM 세션이 항상 올바르게 업데이트되도록 합니다. (10274)
  • 텍스트:
    • List<Cue> 대신 CueGroup을 반환하도록 Player.getCurrentCues()를 변경합니다.
    • SSA: BorderStyle == 3일 때(예: OutlineColour가 큐의 배경을 설정함) OutlineColour 스타일 설정을 지원합니다. (#8435)
    • CEA-708: 데이터를 여러 서비스 블록으로 파싱하고 현재 선택한 서비스 번호와 연결되지 않은 블록을 무시합니다.
    • Google 내부 자막 형식을 처리하는 데만 사용된 RawCcExtractor를 삭제합니다.
  • 추출기:
    • AVI 지원을 추가합니다. (#2092)
    • Matroska: Opus 트랙의 DiscardPadding을 파싱합니다.
    • MP4: esds 상자에서 비트 전송률을 파싱합니다.
    • Ogg: 중복된 Opus ID 및 주석 헤더를 허용합니다. (#10038)
  • UI:
    • useController=false인 경우 PlayerView에 설정된 OnClickListener로 이벤트 전달을 수정합니다. (#9605) 또한 모든 뷰 구성에서 OnLongClickListener로의 이벤트 전달을 수정합니다.
    • ACTION_UP 전에 PlayerView의 경계를 종료하는 터치 이벤트 시퀀스를 클릭으로 잘못 처리하는 문제를 수정했습니다. (#9861)
    • 탭할 때 컨트롤이 숨겨지는 대신 재생이 전환될 수도 있는 PlayerView 접근성 문제를 수정했습니다. (#8627)
    • ExoPlayer가 아닌 Player 인터페이스에서 작동하도록 TrackSelectionViewTrackSelectionDialogBuilder를 다시 작성합니다. 이렇게 하면 뷰를 다른 Player 구현과 함께 사용할 수 있고 UI 모듈에서 ExoPlayer 모듈로의 종속 항목을 삭제할 수 있습니다. 브레이킹 체인지에 해당합니다.
    • PlayerView 트랙 선택기에서 강제 텍스트 트랙을 표시하지 않고 '없음'이 선택된 경우 적절한 강제 텍스트 트랙을 선택된 상태로 유지합니다. (#9432)
  • DASH:
    • DTS AudioChannelConfiguration 요소에서 채널 수를 파싱합니다. 그러면 DTS 스트림의 오디오 패스 스루가 다시 사용 설정됩니다. (#10159)
    • DashMediaSource.Factory.setCompositeSequenceableLoaderFactorynull을 전달하는 것을 허용하지 않습니다. 필요한 경우 DefaultCompositeSequenceableLoaderFactory 인스턴스를 명시적으로 전달할 수 있습니다.
  • HLS:
    • 재생목록 CODECS 속성에 오디오 코덱이 포함되어 있지 않은 경우 청크 포함 준비로 대체합니다. (#10065)
    • HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory, HlsMediaSource.Factory.setPlaylistTrackerFactorynull을 전달하는 것을 허용하지 않습니다. 필요한 경우 DefaultCompositeSequenceableLoaderFactory, DefaultHlsPlaylistParserFactory 인스턴스 또는 DefaultHlsPlaylistTracker.FACTORY 참조를 명시적으로 전달할 수 있습니다.
  • 원활한 스트리밍:
    • SsMediaSource.Factory.setCompositeSequenceableLoaderFactorynull을 전달하는 것을 허용하지 않습니다. 필요한 경우 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.MediaItemFillerMediaSession.Callback.onAddMediaItems로 대체합니다.
    • MediaController가 기존 미디어 세션에 연결될 때 setMediaItems(s) 메서드를 지원합니다.
    • MediaController.setMediaUriMediaSession.Callback.onSetMediaUri를 삭제합니다. MediaController.setMediaItemMediaSession.Callback.onAddMediaItems를 사용하여 동일한 기능을 달성할 수 있습니다.
    • 레거시 MediaController 호출을 전달하여 미디어를 onSetMediaUri 대신 MediaSession.Callback.onAddMediaItems로 재생합니다.
    • MediaNotification.ProviderDefaultMediaNotificationProvider를 추가하여 알림 맞춤설정을 제공합니다.
    • 예술작품 이미지를 다운로드하기 위한 BitmapLoaderSimpleBitmapLoader를 추가합니다.
    • MediaSession.setCustomLayout()을 추가하여 기존 세션과의 하위 호환성을 제공합니다.
    • MediaSession.setSessionExtras()를 추가하여 기존 세션과의 기능 패리티를 제공합니다.
    • MediaSession.MediaSessionCallbackMediaSession.Callback으로, MediaLibrarySession.MediaLibrarySessionCallbackMediaLibrarySession.Callback으로, MediaSession.Builder.setSessionCallbacksetCallback으로 바꿉니다.
    • MediaControllerImplLegacy의 NPE를 수정합니다. (#59)
    • 타임라인 변경 시 세션 위치 정보를 업데이트합니다. (#51)
    • 컨트롤러 출시 후 MediaControllerImplBase의 NPE를 수정합니다. (#74)
  • 광고 재생/IMA:
    • 미디어 평가 위원회(MRC) 추천에 맞게 광고 폴링 속도를 100밀리초 빈도에서 200밀리초 빈도로 줄입니다.
  • FFmpeg 확장 프로그램:
    • Android 스튜디오의 Gradle 동기화 실패를 야기하는 CMake 버그를 방지하기 위해 CMake 버전을 3.21.0+로 업데이트합니다. (#9933)
  • 지원 중단된 기호 삭제:
    • Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)가 삭제됩니다. 대신 Player.Listener.onTracksChanged(Tracks)를 사용합니다.
    • Player.getCurrentTrackGroupsPlayer.getCurrentTrackSelections가 삭제됩니다. 대신 Player.getCurrentTracks를 사용합니다. ExoPlayer.getCurrentTrackGroupsExoPlayer.getCurrentTrackSelections를 계속 사용할 수도 있지만 이러한 메서드는 지원 중단된 상태입니다.
    • DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTDEFAULT_TRACK_SELECTOR_PARAMETERS 상수가 삭제됩니다. 가능하다면 getDefaultTrackSelectorParameters(Context)를 대신 사용하고 그렇지 않으면 DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT를 사용합니다.
    • 생성자 DefaultTrackSelector(ExoTrackSelection.Factory)가 삭제됩니다. 대신 DefaultTrackSelector(Context, ExoTrackSelection.Factory)를 사용합니다.
    • Transformer.Builder.setContext가 삭제됩니다. 대신 ContextTransformer.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.setTrackIdMediaItem.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 헤더 필드 namegenre를 각각 MediaMetadata.stationMediaMetadata.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을 금지합니다. TrackGroupTrackGroup 생성자에 id를 설정하여 언제든지 구별할 수 있습니다. 이를 통해 활성 트랙 재정의로 앱을 백그라운드로 전환한 후 재생을 다시 시작할 때 발생하는 비정상 종료가 수정됩니다. (#9718)
    • 라이브 에지와 매우 가까운 곳에서 재생되더라도 네트워크 대역폭이 충분하면 품질이 향상될 수 있도록 AdaptiveTrackSelection의 로직을 수정합니다. (#9784)
  • 동영상:
    • 필요한 경우 호환되는 H264/H265 디코더를 사용하도록 Dolby Vision의 디코더 대체 로직을 수정합니다.
  • 오디오:
    • 필요한 경우 호환되는 E-AC3 디코더를 사용하도록 Dolby Atmos(E-AC3-JOC)의 디코더 대체 로직을 수정합니다.
    • null 대신 AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES를 명시적으로 전달할 것을 요구하도록 AudioCapabilities API를 변경합니다.
    • AudioTrackBufferSizeProviderDefaultAudioSink에 삽입하여 AudioTrack 버퍼 사이즈 계산의 맞춤설정을 허용합니다. (#8891)
    • 요청된 버퍼 사이즈가 1MB를 초과하는 경우 AudioTrack 생성을 다시 시도합니다. (#9712)
  • 추출기:
    • WAV: RF64 스트림 지원을 추가합니다. (#9543)
    • H.265 SPS NAL 단위의 잘못된 파싱을 수정합니다. (#9719)
    • Ogg Opus 및 Ogg Vorbis 파일의 Vorbis 주석(METADATA_BLOCK_PICTURE 포함)을 파싱합니다.
  • 텍스트:
    • 구성에서 생성된 자막 트랙의 Format.id 필드에 전파되는 MediaItem.SubtitleConfiguration.id 필드를 추가합니다. (#9673)
    • Matroska 컨테이너에 WebVTT 자막에 관한 기본 지원을 추가합니다. (#9886)
    • Cea708Decoder가 선언된 크기의 서비스 블록 이상은 읽지 못하도록 금지합니다.
  • DRM:
    • DrmSessionManager.(pre)acquireSession에서 playbackLooper를 삭제합니다. 맞춤 MediaSource에서 앱이 DrmSessionManager를 사용하는 경우 대신 playbackLooperDrmSessionManager.setPlayer에 전달해야 합니다.
  • 광고 재생/IMA:
    • IMA 동적 광고 삽입(DAI) 지원을 추가합니다. (#8213)
    • 광고그룹을 재설정하여 다시 재생할 수 있도록 AdPlaybackState에 메서드를 추가합니다. (#9615)
    • 광고 재생 중에는 재생 속도를 1.0으로 적용합니다. (#9018)
    • 로드되지 않은 광고그룹으로 인해 재생이 즉시 재설정되는 문제를 해결합니다. (#9929)
  • UI:
    • 특정 테마를 사용할 때 StyledPlayerView 되감기 및 빨리 감기 버튼의 숫자 색상을 수정합니다. (#9765)
    • 재생 속도 문자열을 올바르게 변환합니다. (#9811)
  • DASH:
    • 파싱된 필수 속성과 보조 속성을 Representation에 추가합니다. (#9579)
    • forced-subtitle 트랙 역할을 지원합니다. (#9727)
    • main 트랙 역할을 C.SELECTION_FLAG_DEFAULT로 해석하는 것을 중지합니다.
    • DVB 네임스페이스를 선언하지 않는 매니페스트의 기본 URL 제외 로직을 수정합니다. (#9856)
    • 상대 MPD.Location URL을 지원합니다. (#9939)
  • HLS:
    • 오디오 전용 HLS 스트림의 Format.label을 올바르게 채웁니다. (#9608)
    • 기본적으로 청크 없는 준비를 사용하여 시작 시간을 개선합니다. 마스터 재생목록에 선언되지 않은 다중 자막 트랙이 렌더링 결과에 포함된 경우 해당 트랙을 마스터 재생목록에 추가해야 재생에 사용할 수 있습니다. 또는 HlsMediaSource.Factory.setAllowChunklessPreparation(false)를 사용하여 청크 없는 준비를 사용 중지해야 합니다.
    • HLS에서 키 프레임의 정확한 탐색을 지원합니다. (#2882)
  • RTSP:
    • 서버 연결에 사용되는 SocketFactory를 재정의하는 클라이언트 API를 제공합니다. (#9606)
    • 둘 다 존재하는 경우 BASIC보다 DIGEST 인증 방법을 우선 적용합니다. (#9800)
    • RTSP 트랙 타이밍을 사용할 수 없는 경우를 처리합니다. (#9775)
    • 잘못된 RTP-Info 헤더 값을 무시합니다. (#9619)
  • 변환기:
    • 필요한 최소 API 버전을 21로 높입니다.
    • 이제 변환 중에 발생하는 오류를 설명하는 데 TransformationException이 사용됩니다.
    • 변환 옵션을 지정하기 위한 TransformationRequest를 추가합니다.
    • 여러 리스너를 등록할 수 있도록 허용합니다.
    • 코덱 출력을 부분적으로 읽었을 때 변환기가 멈추는 문제를 수정합니다.
    • Muxer가 해제될 때 Transformer.getProgress의 잠재적 NPE를 수정합니다.
    • 변환 적용을 위한 데모 앱을 추가합니다.
  • MediaSession 확장 프로그램:
    • 기본적으로 이제 MediaSessionConnector는 중지 시 재생목록을 지웁니다. 재생목록을 보관하려는 앱은 커넥터에서 setClearMediaItemsOnStop(false)를 호출할 수 있습니다.
  • Cast 확장 프로그램:
    • CastPlayeronIsPlayingChanged를 올바르게 호출하지 못하게 하는 버그를 수정합니다. (#9792).
    • DefaultMediaItemConverter를 사용하는 아트워크가 포함된 오디오 메타데이터를 지원합니다. (#9663)
  • 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#setLiveConfigurationMediaItem.LiveConfiguration.Builder#setTargetOffsetMs를 사용하고 대체 값을 제공하려면 DashMediaSource#setFallbackTargetLiveOffsetMs를 사용합니다.
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread가 삭제됩니다. 더 이상 스레드 적용을 선택 해제할 수 없습니다.
    • ActionFileActionFileUpgradeUtil이 삭제됩니다. ActionFileUpgradeUtil을 사용하여 기존 작업 파일을 DefaultDownloadIndex에 병합하려면 ExoPlayer 2.16.1 이전 버전을 사용합니다.
    • ProgressiveMediaSource#setExtractorsFactory가 삭제됩니다. 대신 ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) 생성자를 사용합니다.
    • ProgressiveMediaSource.Factory#setTagProgressiveMediaSource.Factory#setCustomCacheKey가 삭제됩니다. 대신 MediaItem.Builder#setTagMediaItem.Builder#setCustomCacheKey를 사용합니다.
    • DefaultRenderersFactory(Context, @ExtensionRendererMode int)DefaultRenderersFactory(Context, @ExtensionRendererMode int, long) 생성자가 삭제됩니다. 대신 DefaultRenderersFactory(Context) 생성자와 DefaultRenderersFactory#setExtensionRendererModeDefaultRenderersFactory#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 모듈로 대체됩니다. 따라서 어댑터/커넥터 클래스를 사용하지 않고도 플레이어와 미디어 세션을 직접 통합할 수 있습니다.