Media3
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
27 พฤศจิกายน 2024 | 1.5.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Media3 คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูล
Groovy
dependencies { def media3_version = "1.5.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.5.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ คุณสามารถใช้เครื่องมือติดตามปัญหาของ Media3 เพื่อค้นหาคำตอบสำหรับคำถาม ปัญหาที่ทราบแล้ว และคำขอฟีเจอร์ รวมถึงเพื่อรายงานปัญหาใหม่
รุ่น 1.5
เวอร์ชัน 1.5.0
27 พฤศจิกายน 2024
androidx.media3:media3-*:1.5.0
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.5.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป:
- เพิ่ม
ForwardingSimpleBasePlayer
ที่อนุญาตให้ส่งต่อไปยังโปรแกรมเล่นอื่นโดยทำการปรับเปลี่ยนเล็กน้อยไปพร้อมกับการรับประกันความสอดคล้องและการจัดการผู้ฟังอย่างเต็มรูปแบบ (#1183) - แทนที่
SimpleBasePlayer.State.playlist
ด้วยเมธอดgetPlaylist()
- เพิ่มการลบล้างสำหรับ
SimpleBasePlayer.State.Builder.setPlaylist()
เพื่อระบุTimeline
และTracks
และMetadata
ในปัจจุบันโดยตรงแทนการสร้างโครงสร้างเพลย์ลิสต์ - เพิ่ม
minSdk
เป็น 21 (Android Lollipop) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด - เพิ่มอาร์ติแฟกต์
androidx.media3:media3-common-ktx
ซึ่งให้ฟังก์ชันการทำงานเฉพาะ Kotlin ที่สร้างขึ้นจากไลบรารีทั่วไป - เพิ่ม
Player.listen
ฟังก์ชันส่วนขยายที่หยุดชั่วคราวเพื่อเรียกใช้ coroutine เพื่อรับฟังPlayer.Events
ไปยังไลบรารีmedia3-common-ktx
- นำคำอธิบายประกอบ
@DoNotInline
ออกจากคลาสภายในที่อยู่นอกบรรทัดซึ่งเขียนขึ้นด้วยตนเอง ซึ่งออกแบบมาเพื่อหลีกเลี่ยงการยืนยันคลาสรันไทม์ที่ไม่สำเร็จ R8 เวอร์ชันล่าสุดจะทำการเรียกใช้นอกบรรทัดเช่นนี้โดยอัตโนมัติเพื่อหลีกเลี่ยงข้อผิดพลาดรันไทม์ (จึงไม่จำเป็นต้องทำการเรียกใช้นอกบรรทัดด้วยตนเองอีกต่อไป) ผู้ใช้ Gradle ทุกคนของไลบรารีต้องใช้ปลั๊กอิน Android Gradle เวอร์ชันที่ใช้ R8 เวอร์ชันที่ดำเนินการนี้อยู่แล้วเนื่องจากcompileSdk = 35
ผู้ใช้ไลบรารีที่มีระบบบิลด์ที่ไม่ใช่ Gradle จะต้องตรวจสอบว่าขั้นตอนการปรับขนาด/การสร้างความสับสนที่เทียบเท่า R8 ดำเนินการตามกระบวนการตัดส่วนเกินอัตโนมัติที่คล้ายกันเพื่อหลีกเลี่ยงการยืนยันคลาสรันไทม์ที่ไม่สำเร็จ การเปลี่ยนแปลงนี้เกิดขึ้นแล้วในไลบรารี AndroidX อื่นๆ
- เพิ่ม
- ExoPlayer:
- ตอนนี้คุณเรียกใช้
MediaCodecRenderer.onProcessedStreamChange()
กับรายการสื่อทุกรายการได้แล้ว ก่อนหน้านี้ไม่ได้เรียกใช้สำหรับรายการแรก ใช้MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
เพื่อเปิดใช้ - เพิ่ม
PreloadMediaSource.PreloadControl.onPreloadError
เพื่ออนุญาตให้มีการดำเนินการเมื่อเกิดข้อผิดพลาดในการติดตั้งใช้งานPreloadMediaSource.PreloadControl
- เพิ่ม
BasePreloadManager.Listener
เพื่อเผยแพร่เหตุการณ์การโหลดล่วงหน้าไปยังแอป - อนุญาตให้เปลี่ยนระยะหมดเวลาของไคลเอ็นต์ SNTP และลองใช้ที่อยู่อื่นอีกครั้งเมื่อหมดเวลา (#1540)
- นำ
MediaCodecAdapter.Configuration.flags
ออกเนื่องจากช่องเป็น 0 เสมอ - อนุญาตให้ผู้ใช้เลือกลำโพงในตัวสำหรับการเล่นใน Wear OS API 35 ขึ้นไป (ในกรณีที่อุปกรณ์โฆษณาว่ารองรับ)
- เลื่อนการบล็อกการโทรหา
Context.getSystemService(Context.AUDIO_SERVICE)
ไว้จนกว่าจะเปิดใช้การจัดการโฟกัสเสียง วิธีนี้ช่วยให้มั่นใจว่าจะไม่มีสายเรียกเข้าถูกบล็อกหากไม่ได้เปิดใช้การจัดการโฟกัสเสียง (#1616) - อนุญาตให้เล่นวิดีโอต่อไม่ว่าระยะเวลาที่บัฟเฟอร์ไว้จะนานเท่าใดก็ตามเมื่อโหลดไม่สำเร็จ (#1571)
- เพิ่ม
AnalyticsListener.onRendererReadyChanged()
เพื่อระบุเมื่อโปรแกรมแสดงผลแต่ละรายการพร้อมให้เล่น - แก้ไขบางครั้งที่
MediaCodec.CryptoException
ได้รับการรายงานเป็น "ข้อผิดพลาดของรันไทม์ที่ไม่คาดคิด" เมื่อMediaCodec.CryptoException
ทำงานในโหมดแบบไม่ประสานเวลา (ลักษณะการทำงานเริ่มต้นใน API 31 ขึ้นไป)MediaCodec
- ส่ง
bufferedDurationUs
แทนbufferedPositionUs
ด้วยPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
นอกจากนี้ หากเปลี่ยนDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
เป็นDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
แอปจะต้องส่งค่าที่แสดงระยะเวลาที่เฉพาะเจาะจงจากตําแหน่งเริ่มต้นเริ่มต้น ซึ่งแหล่งที่มาของสื่อที่เกี่ยวข้องจะต้องมีการโหลดล่วงหน้าด้วย IntDef นี้แทนตําแหน่ง - เพิ่มการใช้งาน
ForwardingRenderer
ที่ส่งต่อการเรียกใช้เมธอดทั้งหมดไปยังโปรแกรมแสดงผลอื่น (1703) - เพิ่มการโหลดเพลย์ลิสต์ล่วงหน้าสำหรับรายการถัดไปในเพลย์ลิสต์ แอปสามารถเปิดใช้การโหลดล่วงหน้าได้โดยเรียกใช้
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
ระบบจะปิดใช้การโหลดล่วงหน้าไว้โดยค่าเริ่มต้น เมื่อเลือกใช้และเพื่อไม่ให้รบกวนการเล่นDefaultLoadControl
จะจำกัดการโหลดล่วงหน้าให้เริ่มและดำเนินการต่อเฉพาะเมื่อวิดีโอเพลเยอร์ไม่ได้โหลดเพื่อเล่น แอปสามารถเปลี่ยนลักษณะการทํางานนี้ได้โดยใช้LoadControl.shouldContinuePreloading()
ตามความเหมาะสม (เช่น เมื่อลบล้างเมธอดนี้ในDefaultLoadControl
) การใช้งานLoadControl
เริ่มต้นจะปิดใช้การโหลดล่วงหน้าในกรณีที่แอปใช้การใช้งานLoadControl
ที่กําหนดเอง - เพิ่มเมธอด
MediaSourceEventListener.EventDispatcher.dispatchEvent()
เพื่ออนุญาตให้เรียกเหตุการณ์ของ Listener ของคลาสย่อย (1736) - เพิ่ม
DefaultPreloadManager.Builder
ที่สร้างอินสแตนซ์DefaultPreloadManager
และExoPlayer
ที่มีการกำหนดค่าที่แชร์อย่างสอดคล้องกัน - นําพารามิเตอร์
Renderer[]
ออกจากLoadControl.onTracksSelected()
เนื่องจากการใช้งานDefaultLoadControl
สามารถดึงข้อมูลประเภทสตรีมจากExoTrackSelection[]
ได้ - เลิกใช้งาน
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
แล้วและทำเครื่องหมายเมธอดเป็น "สุดท้าย" เพื่อป้องกันไม่ให้ลบล้าง คุณควรใช้DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
ใหม่แทน - รายงานเหตุการณ์
MediaSourceEventListener
จากแหล่งที่มารองในMergingMediaSource
ซึ่งจะส่งผลให้มีการรายงานเหตุการณ์การเริ่ม/ข้อผิดพลาด/ยกเลิก/เสร็จสมบูรณ์ของการโหลดคำบรรยายที่โหลดจากภายนอก (คำบรรยายที่เพิ่มด้วยMediaItem.LocalConfiguration.subtitleConfigurations
) ซึ่งอาจปรากฏเป็นเหตุการณ์การโหลดที่ซ้ำกันซึ่งมาจากAnalyticsListener
- ป้องกันไม่ให้ข้อผิดพลาดของคำบรรยายและข้อมูลเมตาหยุดการเล่นโดยสมบูรณ์
แต่ระบบจะปิดใช้แทร็กที่เป็นปัญหาและเล่นแทร็กที่เหลือต่อ (#1722)
- ในการจัดการคำบรรยายใหม่ (ระหว่างการดึงข้อมูล) ระบบจะแสดงการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น ข้อมูลคำบรรยายที่ไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404) ผ่าน
onLoadError
callbacks - ในการจัดการคำบรรยายแบบเดิม (ระหว่างการแสดงผล) ระบบจะแสดงเฉพาะข้อผิดพลาดในการโหลดที่เกี่ยวข้องผ่าน
onLoadError
callbacks ขณะที่ระบบจะไม่สนใจข้อผิดพลาดในการแยกวิเคราะห์ (ซึ่งเป็นลักษณะการทำงานที่มีอยู่ก่อนแล้ว)
- ในการจัดการคำบรรยายใหม่ (ระหว่างการดึงข้อมูล) ระบบจะแสดงการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น ข้อมูลคำบรรยายที่ไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404) ผ่าน
- แก้ไขข้อบกพร่องที่รายการหรือระยะเวลาในเพลย์ลิสต์ในสตรีม DASH แบบหลายช่วงเวลาที่มีระยะเวลาไม่ตรงกับเนื้อหาจริงอาจทำให้เฟรมค้างอยู่ที่ส่วนท้ายของรายการ (#1698)
- เพิ่มตัวตั้งค่าลงใน
SntpClient
เพื่อตั้งค่าเวลาผ่านไปสูงสุดนับตั้งแต่การอัปเดตครั้งล่าสุด หลังจากนั้นระบบจะเริ่มต้นไคลเอ็นต์อีกครั้ง (#1794)
- ตอนนี้คุณเรียกใช้
- Transformer:
- เพิ่ม
SurfaceAssetLoader
ซึ่งรองรับการจัดคิวข้อมูลวิดีโอไปยัง Transformer ผ่านSurface
ImageAssetLoader
รายงานอินพุตที่ไม่รองรับผ่านAssetLoader.onError
แทนที่จะแสดงIllegalStateException
- กำหนดให้การตั้งค่าระยะเวลาของรูปภาพโดยใช้
MediaItem.Builder.setImageDurationMs
เป็นข้อบังคับสำหรับการส่งออกรูปภาพ - เพิ่มการรองรับการส่งออกสำหรับช่องว่างในลําดับของ EditedMediaItems เสียง
- เพิ่ม
- การเลือกแทร็ก:
DefaultTrackSelector
: เลือกเสียงที่อิงตามวัตถุมากกว่าเสียงที่อิงตามแชแนลเมื่อปัจจัยอื่นๆ เท่ากัน
- เครื่องมือแยกข้อมูล:
- อนุญาตให้
Mp4Extractor
และFragmentedMp4Extractor
ระบุตัวอย่าง H264 ที่ตัวอย่างที่ตามมาไม่ได้ใช้เป็นข้อมูลอ้างอิง - เพิ่มตัวเลือกเพื่อเปิดใช้การกรอตามดัชนีใน
AmrExtractor
- ถือว่าไฟล์ MP3 ที่มีเฟรมที่ถูกต้องมากกว่า 128 KB ถูกตัดตอน (แทนที่จะถือว่าไม่ถูกต้อง) ซึ่งหมายความว่าไฟล์ที่มีข้อมูลไม่ใช่ MP3 ที่ส่วนท้ายซึ่งไม่มีข้อมูลเมตาอื่นๆ ที่ระบุความยาวของไบต์ MP3 จะหยุดเล่นที่ส่วนท้ายของข้อมูล MP3 แทนที่จะเล่นไม่สำเร็จพร้อมแสดง
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563) - แก้ไขการจัดการตัวอย่างของโฆษณาตอนต้นสำหรับตําแหน่งเริ่มต้นของสื่อที่ไม่ใช่เฟรมหลักเมื่อประมวลผลรายการแก้ไขในไฟล์ MP4 (#1659)
- ปรับปรุงการคำนวณอัตราเฟรมโดยใช้ระยะเวลาของสื่อจาก
mdhd
ช่องในMp4Extractor
และFragmentedMp4Extractor
(#1531) - แก้ไขการปรับขนาด
media_time
ในรายการแก้ไข MP4 ที่ไม่ถูกต้อง แม้ว่าsegment_duration
จะปรับขนาดอย่างถูกต้องแล้วโดยใช้มาตราส่วนเวลาของภาพยนตร์ แต่ตอนนี้media_time
ได้รับการปรับขนาดอย่างถูกต้องโดยใช้มาตราส่วนเวลาของแทร็กตามที่มาตรฐานรูปแบบ MP4 ระบุไว้ (#1792) - จัดการเฟรมที่ไม่เรียงลำดับในการคำนวณ
endIndices
สำหรับ MP4 ด้วยรายการแก้ไข (#1797) - แก้ไขการแยกวิเคราะห์ระยะเวลาของสื่อในช่อง
mdhd
ของไฟล์ MP4 เพื่อจัดการค่า-1
(#1819) - เพิ่มการรองรับการระบุช่อง
h263
ในไฟล์ MP4 สำหรับวิดีโอ H.263 (#1821) - เพิ่มการรองรับรูปแบบไฟล์สื่อพื้นฐาน ISO ระดับ 4 ของ AC-4 (#1265)
- อนุญาตให้
- DataSource:
- อัปเดต
HttpEngineDataSource
เพื่ออนุญาตให้ใช้งานตั้งแต่เวอร์ชัน S ส่วนขยาย 7 แทน API ระดับ 34 (#1262) DataSourceContractTest
: ยืนยันว่าDataSource.getUri()
แสดงผล URI ที่แก้ไขแล้ว (ตามที่ระบุไว้ในเอกสารประกอบ) หาก URL นี้แตกต่างจากที่ขอ การทดสอบจะระบุได้โดยใช้วิธีการใหม่DataSourceContractTest.TestResource.Builder.setResolvedUri()
DataSourceContractTest
: ยืนยันว่าDataSource.getUri()
และgetResponseHeaders()
แสดงผลค่า "เปิด" หลังจากการเรียกใช้open()
ไม่สำเร็จ (เนื่องจากทรัพยากร "ไม่พบ") และก่อนการเรียกใช้close()
ครั้งถัดไป- การลบล้าง
DataSourceContractTest.getNotFoundResources()
ช่วยให้คลาสย่อยทดสอบระบุทรัพยากร "ไม่พบ" ได้หลายรายการ และระบุส่วนหัวที่คาดไว้ได้ด้วย วิธีนี้ช่วยให้แยกแยะระหว่าง HTTP 404 (มีส่วนหัว) กับ "ไม่พบเซิร์ฟเวอร์" (ไม่มีส่วนหัว) ได้
- การลบล้าง
- อัปเดต
- เสียง:
- กำหนดค่าข้อมูลเมตาระดับเสียง CTA-2075 ในโค้ดรูปแบบโดยอัตโนมัติหากมีอยู่ในสื่อ
- ตรวจสอบว่าระดับเสียงลดลงอย่างราบรื่นเมื่อกรอ
- แก้ไขเสียงป๊อปที่อาจเกิดขึ้นระหว่างการกรอ
- แก้ไขข้อผิดพลาดการลบส่วนเกินของอัลกอริทึมการยืดเวลา/การเปลี่ยนระดับเสียงของ Sonic
- แก้ไขข้อบกพร่องใน
SpeedChangingAudioProcessor
ที่ทําให้เฟรมเอาต์พุตหลุด
- วิดีโอ:
MediaCodecVideoRenderer
หลีกเลี่ยงการถอดรหัสแท็บเล็ตที่ไม่ได้แสดงผลหรือใช้อ้างอิงโดยแท็บเล็ตอื่นๆ- ใน API 35 ขึ้นไป ตอนนี้
MediaCodecAdapter
อาจได้รับnull
Surface
ในconfigure
และเรียกใช้เมธอดใหม่detachOutputSurface
เพื่อนำSurface
ที่ตั้งไว้ก่อนหน้านี้ออก หากตัวแปลงรหัสรองรับการดำเนินการนี้ (MediaCodecInfo.detachedSurfaceSupported
) - ใช้ค่าอัตราส่วนพิกเซลที่
MediaCodecAdapter
ระบุไว้หากระบุไว้เมื่อประมวลผลonOutputFormatChanged
(#1371) - เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE ซึ่งทําให้ระบบทําเครื่องหมายสตรีม H264 ที่ปลอดภัย 60 fps ว่าไม่รองรับ (#1619)
- เพิ่มวิธีแก้ปัญหาสำหรับตัวแปลงรหัสที่ค้างหลังจากตัวอย่างสุดท้ายโดยไม่แสดงสัญญาณสิ้นสุดสตรีม
- ข้อความ:
- เพิ่ม
VoiceSpan
ที่กำหนดเองและป้อนข้อมูลสำหรับช่วงเสียง WebVTT (#1632) - ตรวจสอบว่า WebVTT ใน HLS ที่มีการประทับเวลาของคำบรรยายขนาดใหญ่มาก (ซึ่งจะแสดงเกิน
long
64 บิตเมื่อแสดงเป็นไมโครวินาทีและคูณด้วยฐานเวลา MPEG90,000
) แสดงขึ้น (#1763) - รองรับคำบรรยาย CEA-608 ในเนื้อหา Dolby Vision (#1820)
- แก้ไขการเล่นที่ค้างอยู่ในสตรีม DASH แบบหลายช่วงเวลาเมื่อเปิดใช้คำบรรยาย CEA-608 (#1863)
- เพิ่ม
- ข้อมูลเมตา:
- กําหนดประเภท
C.TRACK_TYPE_METADATA
ให้กับแทร็กที่มีเนื้อหา icy หรือ vnd.dvb.ait
- กําหนดประเภท
- รูปภาพ:
- เพิ่ม
ExternallyLoadedImageDecoder
เพื่อผสานรวมกับไลบรารีการโหลดรูปภาพภายนอกอย่าง Glide หรือ Coil ได้ง่ายขึ้น
- เพิ่ม
- DataSource:
- เพิ่ม
FileDescriptorDataSource
ซึ่งเป็นDataSource
ใหม่ที่ใช้อ่านจากFileDescriptor
ได้ (#3757)
- เพิ่ม
- ผล:
- เพิ่มวิธีแก้ปัญหา
DefaultVideoFrameProcessor
สำหรับการปรับขนาดSurfaceTexture
เล็กน้อยSurfaceTexture
อาจมีการขยายขนาดเล็กน้อยที่ตัดขอบ 1 เทเซลรอบขอบของบัฟเฟอร์ที่ครอบตัด ตอนนี้เราจัดการปัญหานี้แล้วเพื่อให้ผลลัพธ์ใกล้เคียงกับที่คาดไว้ - เร่งความเร็ว
DefaultVideoFrameProcessor.queueInputBitmap()
ด้วยเหตุนี้ การส่งออกรูปภาพเป็นวิดีโอด้วยTransformer
จึงเร็วขึ้น
- เพิ่มวิธีแก้ปัญหา
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
ArrayIndexOutOfBoundsException
ในImaServerSideAdInsertionMediaSource
- แก้ไขข้อบกพร่องที่การสตรีม DAI ที่แทรกฝั่งเซิร์ฟเวอร์โดยไม่มีโฆษณาตอนต้นอาจส่งผลให้เกิด
ArrayIndexOutOfBoundsException
เมื่อเล่นผ่านโฆษณาตอนกลางสุดท้าย (#1741)
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
- เซสชัน:
- เพิ่ม
MediaButtonReceiver.shouldStartForegroundService(Intent)
เพื่ออนุญาตให้แอประงับคําสั่งเล่นที่เข้ามาเพื่อเล่นต่อโดยลบล้างวิธีการนี้ โดยค่าเริ่มต้น ระบบจะเริ่มต้นบริการเสมอและไม่สามารถระงับการเล่นได้หากไม่ทำให้ระบบขัดข้องด้วยForegroundServiceDidNotStartInTimeException
(#1528) - แก้ไขข้อบกพร่องที่ทำให้ระบบส่งคำสั่งที่กำหนดเองจาก
MediaBrowser
ไปยังMediaSessionCompat.Callback
แทนที่จะส่งไปยังตัวแปรMediaBrowserServiceCompat
ของเมธอดเมื่อเชื่อมต่อกับบริการเดิม ซึ่งทำให้MediaBrowser
ไม่ได้รับค่าผลลัพธ์จริงที่บริการเดิมส่งกลับ (#1474) - จัดการ
IllegalArgumentException
ที่อุปกรณ์ของผู้ผลิตบางรายแสดงเมื่อตั้งค่าตัวรับการออกอากาศสำหรับ Intent ของปุ่มสื่อ (#1730) - เพิ่มปุ่มคำสั่งสำหรับรายการสื่อ ซึ่งจะเพิ่ม Media3 API สําหรับสิ่งที่เรียกว่า
Custom browse actions
กับไลบรารีเดิมที่มีMediaBrowserCompat
โปรดทราบว่าเมื่อใช้ Media3 ปุ่มคำสั่งสำหรับรายการสื่อจะใช้ได้กับทั้งMediaBrowser
และMediaController
ดูการเรียกดูการดำเนินการที่กำหนดเองของ AAOS - แก้ไขข้อบกพร่องที่บางครั้งตัวควบคุม Media3 ไม่อนุญาตให้แอปเซสชันเริ่มบริการที่ทำงานอยู่เบื้องหน้าหลังจากขอ
play()
- จำกัด
CommandButton.Builder.setIconUri
ให้ยอมรับเฉพาะ URI ของเนื้อหา - ส่งคำแนะนำการเชื่อมต่อของเบราว์เซอร์ Media3 ไปยัง
MediaBrowserCompat
เริ่มต้นเมื่อเชื่อมต่อกับMediaBrowserCompat
รุ่นเดิม บริการจะรับคำแนะนำการเชื่อมต่อที่ส่งผ่านเป็นคำแนะนำรูทได้ด้วยการเรียกใช้onGetRoot()
ครั้งแรก - แก้ไขข้อบกพร่องที่
MediaBrowser
ที่เชื่อมต่อกับบริการเบราว์เซอร์เดิมไม่ได้รับข้อผิดพลาดที่บริการส่งมาหลังจากที่เบราว์เซอร์สมัครใช้บริการparentid
- ปรับปรุงลักษณะการทำงานร่วมกันเพื่อให้เบราว์เซอร์ Media3 ที่เชื่อมต่อกับ
MediaBrowserService
รุ่นเดิมไม่ขอparentId
ย่อย 2 ครั้งเมื่อสมัครใช้บริการของMediaBrowserService
หลัก
- เพิ่ม
- UI:
- สร้างวิดีโอที่ยืด/ครอบตัดในตัวเลือกวิธีแก้ปัญหา
PlayerView
-in-Compose-AndroidView
เนื่องจากปัญหาเกี่ยวกับทรานซิชันที่ใช้ร่วมกันซึ่งอิงตาม XML แอปที่ใช้PlayerView
ในAndroidView
ต้องเรียกใช้PlayerView.setEnableComposeSurfaceSyncWorkaround
เพื่อเลือกใช้ (#1237, #1594) - เพิ่ม
setFullscreenButtonState
ลงในPlayerView
เพื่ออนุญาตให้อัปเดตไอคอนของปุ่มแบบเต็มหน้าจอตามต้องการ เช่น นอกแบนด์และไม่ตอบสนองต่อการโต้ตอบด้วยการคลิก (#1590, #184) - แก้ไขข้อบกพร่องที่ตัวเลือก "ไม่มี" ในการเลือกข้อความไม่ทำงานหากมีค่ากำหนดการเลือกแทร็กข้อความที่แอปกำหนด
- สร้างวิดีโอที่ยืด/ครอบตัดในตัวเลือกวิธีแก้ปัญหา
- ส่วนขยาย DASH:
- เพิ่มการรองรับระยะเวลาที่เริ่มต้นในช่วงกลางของกลุ่ม (#1440)
- ส่วนขยายสตรีมมิงอย่างราบรื่น:
- แก้ไขข้อผิดพลาด
Bad magic number for Bundle
เมื่อเล่นสตรีม SmoothStreaming ที่มีแทร็กข้อความ (#1779)
- แก้ไขข้อผิดพลาด
- ส่วนขยาย RTSP:
- ส่วนขยายโปรแกรมถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- เพิ่มโมดูลตัวถอดรหัส IAMF ซึ่งรองรับการเล่นไฟล์ MP4 ที่มีแทร็ก IAMF โดยใช้ไลบรารีเนทีฟ libiamf เพื่อสังเคราะห์เสียง
- การเล่นจะเปิดใช้รูปแบบสเตอริโอและ 5.1 พร้อมการจัดวางเสียงให้สมจริง รวมถึงเปิดใช้การติดตามการเคลื่อนไหวของศีรษะ (ไม่บังคับ) แต่ปัจจุบันยังไม่รองรับการเล่นเสียงแบบ Binaural
- เพิ่มการรองรับหน้าขนาด 16 KB สำหรับส่วนขยายโปรแกรมถอดรหัสใน Android 15 (#1685)
- เพิ่มโมดูลตัวถอดรหัส IAMF ซึ่งรองรับการเล่นไฟล์ MP4 ที่มีแทร็ก IAMF โดยใช้ไลบรารีเนทีฟ libiamf เพื่อสังเคราะห์เสียง
- ส่วนขยาย Cast
- หยุดล้างไทม์ไลน์หลังจาก CastSession ตัดการเชื่อมต่อ ซึ่งจะช่วยให้แอปผู้ส่งเล่นต่อได้แบบภายในหลังจากตัดการเชื่อมต่อ
- ป้อนข้อมูล
DeviceInfo
ของ CastPlayer เมื่อระบุContext
ซึ่งจะเปิดใช้การลิงก์MediaSession
กับRoutingSession
ซึ่งจําเป็นสําหรับการผสานรวมตัวสลับเอาต์พุต (#1056)
- ยูทิลิตีการทดสอบ
DataSourceContractTest
มีการทดสอบเพื่อยืนยันสิ่งต่อไปนี้แล้ว- อัปเดตสตรีมอินพุต
read position
แล้ว - ใช้บัฟเฟอร์เอาต์พุต
offset
อย่างถูกต้อง
- อัปเดตสตรีมอินพุต
- แอปเดโม
- แก้ไขปัญหาหน่วยความจำรั่วในแอปแบบสั้นเวอร์ชันเดโม (#1839)
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
Player.hasPrevious
Player.hasPreviousWindow()
ที่เลิกใช้งานแล้วออก ให้ใช้Player.hasPreviousMediaItem()
แทน - นำ
Player.previous()
เมธอดที่เลิกใช้งานแล้วออก ให้ใช้Player.seekToPreviousMediaItem()
แทน - นำเมธอด
DrmSessionEventListener.onDrmSessionAcquired
ที่เลิกใช้งานแล้วออก - นำตัวสร้าง
DefaultEncoderFactory
ที่เลิกใช้งานแล้วออก ให้ใช้DefaultEncoderFactory.Builder
แทน
- นำ
เวอร์ชัน 1.5.0-rc02
19 พฤศจิกายน 2024
ใช้ เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-rc01
13 พฤศจิกายน 2024
ใช้ เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-beta01
30 ตุลาคม 2024
ใช้ เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-alpha01
10 กันยายน 2024
ใช้ เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.4.0
เวอร์ชัน 1.4.1
27 สิงหาคม 2024
androidx.media3:media3-*:1.4.1
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.4.1 มีการคอมมิตเหล่านี้
- ExoPlayer:
- เครื่องมือแยกข้อมูล:
- MP3: แก้ไขข้อผิดพลาด
Searched too many bytes
โดยไม่สนใจข้อมูลที่ไม่อยู่ใน MP3 ต่อท้ายอย่างถูกต้อง โดยอิงตามช่องความยาวในเฟรมInfo
(#1480)
- MP3: แก้ไขข้อผิดพลาด
- ข้อความ:
- TTML: แก้ไขการจัดการค่า
tts:fontSize
ที่เป็นเปอร์เซ็นต์เพื่อให้รับค่าจากโหนดหลักที่มีค่าtts:fontSize
ที่เป็นเปอร์เซ็นต์อย่างถูกต้อง - แก้ไข
IndexOutOfBoundsException
ในLegacySubtitleUtil
เนื่องจากมีการจัดการกรณีที่เวลาเริ่มต้นของเอาต์พุตที่ขอมากกว่าหรือเท่ากับเวลาของเหตุการณ์สุดท้ายในSubtitle
อย่างไม่ถูกต้อง (#1516)
- TTML: แก้ไขการจัดการค่า
- DRM:
- แก้ไขข้อผิดพลาด
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
ในอุปกรณ์ที่ใช้ API 31 ขึ้นไปขณะเล่นเนื้อหา Widevine ระดับ L1 ข้อผิดพลาดนี้เกิดจากการใช้งานเฟรมเวิร์กMediaDrm.requiresSecureDecoder
(#1603) ที่ไม่สมบูรณ์
- แก้ไขข้อผิดพลาด
- ผล:
- เพิ่มวิธีการ
release()
ลงในGlObjectsProvider
- เพิ่มวิธีการ
- เซสชัน:
- ส่วนขยาย RTSP:
- ข้ามคำอธิบายสื่อที่ไม่ถูกต้องในการแยกวิเคราะห์ SDP (#1087)
เวอร์ชัน 1.4.0
25 กรกฎาคม 2024
androidx.media3:media3-*:1.4.0
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.4.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป:
- ส่งต่อการเรียกใช้การเลื่อนหาที่ถือว่าไม่มีการดำเนินการไปยังเมธอด
BasePlayer.seekTo()
และSimpleBasePlayer.handleSeek()
ที่ปกป้องแทนการละเว้น หากใช้เมธอดเหล่านี้ในโปรแกรมเล่นที่กำหนดเอง คุณอาจต้องจัดการการเรียกเพิ่มเติมเหล่านี้ด้วยmediaItemIndex == C.INDEX_UNSET
- นำการพึ่งพาการคอมไพล์ในการแปลง Sugar ของ Java 8 ที่ปรับปรุงแล้วออก (#1312)
- ตรวจสอบว่าระบบจะไม่สนใจระยะเวลาที่ส่งไปยัง
MediaItem.Builder.setImageDurationMs()
สำหรับMediaItem
ที่ไม่ใช่รูปภาพ (ตามที่ระบุไว้ในเอกสารประกอบ) - เพิ่ม
Format.customData
เพื่อจัดเก็บข้อมูลที่กําหนดเองซึ่งแอประบุเกี่ยวกับFormat
อินสแตนซ์
- ส่งต่อการเรียกใช้การเลื่อนหาที่ถือว่าไม่มีการดำเนินการไปยังเมธอด
- ExoPlayer:
- เพิ่ม
BasePreloadManager
ซึ่งจะประสานการโหลดล่วงหน้าสำหรับแหล่งที่มาหลายแห่งตามลำดับความสำคัญที่กำหนดโดยrankingData
คุณสามารถปรับแต่งได้โดยขยายคลาสนี้ เพิ่มDefaultPreloadManager
ซึ่งใช้PreloadMediaSource
เพื่อโหลดตัวอย่างสื่อจากแหล่งที่มาลงในหน่วยความจำล่วงหน้า และใช้จำนวนเต็มrankingData
ที่ระบุดัชนีของรายการใน UI - เพิ่ม
PlayerId
ลงในเมธอดส่วนใหญ่ของLoadControl
เพื่อเปิดใช้การติดตั้งใช้งานLoadControl
ที่รองรับผู้เล่นหลายคน - นำ
Buffer.isDecodeOnly()
และC.BUFFER_FLAG_DECODE_ONLY
ออก คุณไม่จำเป็นต้องตั้งค่า Flag นี้เนื่องจากโปรแกรมแสดงผลและโปรแกรมถอดรหัสจะตัดสินใจข้ามบัฟเฟอร์ตามการประทับเวลา การติดตั้งใช้งานRenderer
ที่กําหนดเองควรตรวจสอบว่าเวลาบัฟเฟอร์อย่างน้อยBaseRenderer.getLastResetPositionUs()
เพื่อตัดสินใจว่าควรแสดงตัวอย่างหรือไม่ การใช้งานSimpleDecoder
ที่กําหนดเองจะตรวจสอบได้isAtLeastOutputStartTimeUs()
หากจําเป็น หรือทําเครื่องหมายบัฟเฟอร์อื่นๆ ด้วยDecoderOutputBuffer.shouldBeSkipped
เพื่อข้ามบัฟเฟอร์เหล่านั้น - อนุญาตให้
TargetPreloadStatusControl.getTargetPreloadStatus(T)
แสดงผลค่า Null เพื่อระบุว่าไม่โหลดMediaSource
ล่วงหน้าด้วยrankingData
ที่ระบุ - เพิ่ม
remove(MediaSource)
ไปยังBasePreloadManager
- เพิ่ม
reset()
ลงในBasePreloadManager
เพื่อปล่อยแหล่งที่มาทั้งหมดที่ถือครองขณะเก็บอินสแตนซ์เครื่องมือจัดการการโหลดล่วงหน้าไว้ - เพิ่ม
ExoPlayer.setPriority()
(และBuilder.setPriority()
) เพื่อกำหนดค่าลําดับความสําคัญที่ใช้ในPriorityTaskManager
และความสําคัญของ MediaCodec จาก API 35 - แก้ไขปัญหาการอัปเดตเวลาในการบัฟเฟอร์ใหม่ครั้งล่าสุดซึ่งส่งผลให้คีย์
bs
(บัฟเฟอร์ไม่เพียงพอ) ใน CMCD ไม่ถูกต้อง (#1124) - เพิ่ม
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
เพื่อระบุว่าโหลดแหล่งที่มาจนจบแล้ว ซึ่งจะช่วยให้การติดตั้งใช้งานDefaultPreloadManager
และPreloadMediaSource.PreloadControl
ที่กําหนดเองโหลดแหล่งที่มาถัดไปล่วงหน้าหรือดําเนินการอื่นๆ ได้ - แก้ไขข้อบกพร่องที่การข้ามช่วงเงียบที่ท้ายรายการอาจทริกเกอร์ข้อยกเว้นการเล่น
- เพิ่ม
clear
ลงในPreloadMediaSource
เพื่อทิ้งระยะเวลาการโหลดล่วงหน้า - เพิ่มรหัสข้อผิดพลาดใหม่
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
ที่ใช้เมื่อมีการเรียกคืนทรัพยากรโค้ดสำหรับงานที่มีลำดับความสำคัญสูงกว่า - อนุญาตให้
AdsMediaSource
โหลดโฆษณาตอนต้นก่อนที่การเตรียมสื่อเนื้อหาเริ่มต้นจะเสร็จสมบูรณ์ (#1358) - แก้ไขข้อบกพร่องที่การเล่นย้ายไปที่
STATE_ENDED
เมื่อเตรียมสตรีมแบบสด DASH แบบหลายช่วงเวลาอีกครั้งหลังจากที่นำช่วงเวลาเดิมออกจากไฟล์ Manifest แล้ว - เปลี่ยนชื่อ
onTimelineRefreshed()
เป็นonSourcePrepared()
และonPrepared()
เป็นonTracksSelected()
ในPreloadMediaSource.PreloadControl
และเปลี่ยนชื่อ IntDefs ในDefaultPreloadManager.Stage
ด้วย - เพิ่มการรองรับแบบทดลองสำหรับการกำหนดเวลาแบบไดนามิกเพื่อปรับงานให้สอดคล้องกับรอบการตื่นของ CPU ได้ดียิ่งขึ้น และเลื่อนเวลาการตื่นขึ้นเมื่อโปรแกรมแสดงผลสามารถทำงานได้
คุณสามารถเปิดใช้โดยใช้
experimentalSetDynamicSchedulingEnabled()
เมื่อตั้งค่าอินสแตนซ์ ExoPlayer - เพิ่ม
Renderer.getDurationToProgressUs()
Renderer
สามารถใช้วิธีนี้เพื่อส่งค่าระยะเวลาที่การเล่นต้องส่งต่อไปยัง ExoPlayer เพื่อให้โปรแกรมแสดงผลทำงานต่อไปได้ หากตั้งค่าExoPlayer
ด้วยexperimentalSetDynamicSchedulingEnabled()
ExoPlayer
จะเรียกใช้เมธอดนี้เมื่อคํานวณเวลาเพื่อกําหนดเวลางาน - เพิ่ม
MediaCodecAdapter#OnBufferAvailableListener
เพื่อแจ้งเตือนเมื่อบัฟเฟอร์อินพุตและเอาต์พุตพร้อมให้MediaCodecRenderer
ใช้MediaCodecRenderer
จะส่งสัญญาณให้ExoPlayer
เมื่อได้รับการเรียกกลับเหล่านี้ และหากตั้งค่าExoPlayer
ด้วยexperimentalSetDynamicSchedulingEnabled()
แล้วExoPlayer
จะกำหนดเวลาลูปการทำงานเมื่อโปรแกรมแสดงผลทํางานได้ - ใช้คลาสข้อมูลสําหรับเมธอด
LoadControl
แทนพารามิเตอร์แต่ละรายการ - เพิ่ม
ExoPlayer.isReleased()
เพื่อตรวจสอบว่ามีเรียกใช้Exoplayer.release()
หรือไม่ - เพิ่ม
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
เพื่อกําหนดค่าตําแหน่งสูงสุดที่seekToPrevious()
จะเลื่อนไปยังรายการก่อนหน้า (#1425) - แก้ไขความไม่สอดคล้องกันของโฟกัสเสียงบางรายการ เช่น ไม่รายงานการสูญเสียโฟกัสอย่างสมบูรณ์หรือชั่วคราวขณะที่เพลเยอร์หยุดชั่วคราว (#1436)
- แก้ไข
IndexOutOfBoundsException
ที่อาจเกิดขึ้นจากโปรแกรมแยกที่รายงานแทร็กเพิ่มเติมหลังจากขั้นตอนเตรียมการเริ่มต้น (#1476) Effects
ในExoPlayer.setVideoEffect()
จะได้รับการประทับเวลาโดยนำออฟเซ็ตของโปรแกรมแสดงผลออกแล้ว (#1098)- แก้ไข
IllegalArgumentException
ที่อาจเกิดขึ้นเมื่อจัดการข้อผิดพลาดของโปรแกรมเล่นที่เกิดขึ้นขณะอ่านรายการอื่นในเพลย์ลิสต์ (#1483)
- เพิ่ม
- Transformer:
- เพิ่ม
audioConversionProcess
และvideoConversionProcess
ลงในExportResult
เพื่อระบุวิธีสร้างแทร็กที่เกี่ยวข้องในไฟล์เอาต์พุต - ผ่อนปรนการตรวจสอบระดับ H.264 ของการเพิ่มประสิทธิภาพการตัด
- เพิ่มการรองรับการเปลี่ยนระหว่างสื่ออินพุต SDR และ HDR ตามลำดับ
- เพิ่มการรองรับเอฟเฟกต์เสียงระดับการประพันธ์
- เพิ่มการรองรับการแปลงไฟล์ภาพ Ultra HDR เป็นวิดีโอ HDR
- แก้ไขปัญหาที่
DefaultAudioMixer
แสดงผลจำนวนไบต์ที่ไม่ถูกต้องหลังจากรีเซ็ตและนํามาใช้ซ้ำ - แก้ปัญหาข้อบกพร่องของตัวถอดรหัสที่จำกัดจำนวนช่องเสียงไว้ที่สเตอริโอเมื่อจัดการอินพุต PCM
- เมื่อเลือกแทร็กใน
ExoPlayerAssetLoader
ให้ละเว้นข้อจำกัดจำนวนช่องเสียง เนื่องจากข้อจำกัดดังกล่าวมีผลกับการเล่นเท่านั้น - แทนที่อินเทอร์เฟซ
androidx.media3.transformer.Muxer
ด้วยandroidx.media3.muxer.Muxer
และนําandroidx.media3.transformer.Muxer
ออก - แก้ไขการโหลดรูปภาพ HEIC จากรูปแบบ URI ของเนื้อหา (#1373)
- ปรับระยะเวลาของแทร็กเสียงใน
AudioGraphInput
เพื่อปรับปรุงการซิงค์ AV - นำช่อง
ExportResult.processedInputs
ออก หากคุณใช้ช่องนี้สำหรับรายละเอียดตัวแปลงรหัส ให้ใช้DefaultDecoderFactory.listener
แทน ในกรณีที่มีข้อยกเว้นเกี่ยวกับตัวแปลงรหัส รายละเอียดตัวแปลงรหัสจะแสดงในExportException.codecInfo
- เพิ่ม
- เครื่องมือแยกข้อมูล:
- MPEG-TS: เลื่อนการเปลี่ยนแปลงไปข้างหน้าเพื่อให้แน่ใจว่าระบบแสดงผลเฟรมสุดท้ายโดยส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) การใช้การแก้ไขเพื่อแก้ไขปัญหาที่เกิดขึ้นในสตรีม HLS ที่เป็น I-frame เท่านั้น(#1150) และในสตรีม HLS ที่เป็น H.262 (#1126)
- MP3: แนะนำให้ใช้ขนาดข้อมูลจากเฟรม
Info
แทนขนาดที่รายงานโดยสตรีมที่อยู่เบื้องหลัง (เช่น ขนาดไฟล์หรือส่วนหัวContent-Length
ของ HTTP) วิธีนี้จะช่วยยกเว้นข้อมูลตัวอย่างเพลงที่เล่นไม่ได้ (เช่น อาร์ตเวิร์กอัลบั้ม) ออกจากการคํานวณการกรอไปยังอัตราบิตคงที่ ซึ่งทําให้การกรอแม่นยํายิ่งขึ้น (#1376) - MP3: ใช้จำนวนเฟรมและข้อมูลอื่นๆ ในเฟรม
Info
(หากมี) เพื่อคํานวณอัตราบิตเฉลี่ยสำหรับการกรอตามอัตราบิตคงที่ แทนที่จะประมาณจากอัตราบิตของเฟรมหลังเฟรมInfo
ซึ่งอาจมีค่าต่ำเกินจริง เช่น เฟรมPCUT
(#1376) - แก้ไขการดึงข้อมูลรูปแบบเสียง PCM ในคอนเทนเนอร์ AVI
- เสียง:
- แก้ไขแอตทริบิวต์การเข้ารหัส DTS:X โปรไฟล์ 2 สำหรับการผ่านการเล่น (#1299)
- สําหรับการเล่นที่ระบบโหลดไว้ล่วงหน้า ให้รีเซ็ตช่องการติดตามสําหรับการเล่นสตรีมจนจบใน
DefaultAudioSink
ก่อนเรียกAudioTrack.stop()
เพื่อให้AudioTrack.StreamEventCallback#onPresentationEnded
ระบุได้อย่างถูกต้องเมื่อเล่นข้อมูลทั้งหมดที่รอดําเนินการแล้ว - แก้ไขข้อบกพร่องใน
SilenceSkippingAudioProcessor
ที่การเปลี่ยนรูปแบบเสียง (เช่น จากสเตอริโอเป็นโมโน) อาจทําให้ตัวประมวลผลแสดงข้อยกเว้น (#1352) - ใช้
MediaCodecAudioRenderer.getDurationToProgressUs()
เพื่อให้ ExoPlayer กำหนดเวลาลูปการทำงานหลักแบบไดนามิกเมื่อ MediaCodecAudioRenderer ทำงานได้
- วิดีโอ:
- แก้ไขปัญหาที่
Listener.onRenderedFirstFrame()
แสดงขึ้นเร็วเกินไปเมื่อเปลี่ยนแพลตฟอร์มระหว่างการเล่น - แก้ไขตรรกะสำรองของตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส AV1 ที่เข้ากันได้ หากจำเป็น (#1389)
- แก้ไขข้อยกเว้นของตัวแปลงรหัสที่อาจเกิดจากการเปิดใช้โปรแกรมแสดงผลวิดีโอขณะเล่น
- แก้ไขปัญหาที่
- ข้อความ:
- แก้ไขปัญหาที่ระบบข้ามคำบรรยายที่เริ่มต้นก่อนตำแหน่งการกรอ ปัญหานี้เกิดขึ้นใน Media3 1.4.0-alpha01 เท่านั้น
- เปลี่ยนลักษณะการแยกวิเคราะห์คำบรรยายแทนเสียงเริ่มต้นเพื่อให้เกิดขึ้นระหว่างการดึงข้อมูลแทนที่จะเป็นระหว่างการแสดงผล (ดูความแตกต่างระหว่างการดึงข้อมูลกับการแสดงผลได้ในแผนภาพสถาปัตยกรรมของ ExoPlayer)
- การเปลี่ยนแปลงนี้สามารถลบล้างได้โดยเรียกใช้ทั้ง
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
และTextRenderer.experimentalSetLegacyDecodingEnabled(true)
ดูวิธีต่อเชื่อมคอมโพเนนต์เหล่านี้กับอินสแตนซ์ExoPlayer
ในเอกสารเกี่ยวกับการปรับแต่ง เราจะนำเมธอดเหล่านี้ (และการสนับสนุนทั้งหมดสำหรับการถอดรหัสคำบรรยายแบบเดิม) ออกในรุ่นต่อๆ ไป - แอปที่มีการติดตั้งใช้งาน
SubtitleDecoder
ที่กำหนดเองต้องอัปเดตเพื่อติดตั้งใช้งานSubtitleParser
แทน (และSubtitleParser.Factory
แทนSubtitleDecoderFactory
)
- การเปลี่ยนแปลงนี้สามารถลบล้างได้โดยเรียกใช้ทั้ง
- PGS: แก้ไขการถอดรหัสความยาวกลุ่มเพื่อแก้ไข
0
เป็นดัชนีสีแทนที่จะเป็นค่าสีตามตัวอักษร (#1367) - CEA-708: ละเว้นค่า
rowLock
ข้อกำหนด CEA-708-E S-2023 ระบุว่าrowLock
และcolumnLock
ควรถือว่าทั้ง 2 ค่าเป็นจริง โดยไม่คำนึงถึงค่าที่มีอยู่ในสตรีม (ระบบไม่ได้รองรับcolumnLock
จึงถือว่าค่านี้เป็นเท็จเสมอ)- ข้อมูลนี้เดิมรวมอยู่ในบันทึกประจำรุ่น
1.3.0-alpha01
แต่ระบบเปลี่ยนกลับการเปลี่ยนแปลงนี้โดยไม่ได้ตั้งใจก่อนการเปิดตัว1.3.0-rc01
ปัญหานี้ได้รับการแก้ไขแล้ว การเปลี่ยนแปลงจึงปรากฏขึ้นอีกครั้ง
- ข้อมูลนี้เดิมรวมอยู่ในบันทึกประจำรุ่น
- CEA-708: หลีกเลี่ยงการใส่บรรทัดใหม่ซ้ำเนื่องจากการจัดการคำสั่ง "set pen location" ของ ExoPlayer ที่ไม่ซับซ้อน (#1315)
- แก้ไข
IllegalArgumentException
จากLegacySubtitleUtil
เมื่อตัวอย่างคำบรรยาย WebVTT ไม่มีคำบอกเวลา เช่น เป็นส่วนหนึ่งของสตรีม DASH (#1516)
- ข้อมูลเมตา:
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบแมปแท็ก MP4 "การจัดเรียงอัลบั้ม" (
soal
), "การจัดเรียงศิลปิน" (soar
) และ "การจัดเรียงศิลปินอัลบั้ม" (soaa
) กับแท็ก ID3TSO2
,TSOA
และTSOP
อย่างไม่ถูกต้อง (#1302) - แก้ไขการอ่านแท็กตัวเลข
gnre
(ประเภท) และtmpo
(จังหวะ) ของ MP4 (/iTunes) เมื่อค่ามีความยาวมากกว่า 1 ไบต์ - เผยแพร่เฟรม ID3
TCON
ไปยังMediaMetadata.genre
(#1305)
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบแมปแท็ก MP4 "การจัดเรียงอัลบั้ม" (
- รูปภาพ:
- เพิ่มการรองรับตารางภาพปก DASH ที่ไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัส (#1300)
- เพิ่มการรองรับ AVIF สำหรับ API 34 ขึ้นไป
- อนุญาตให้ใช้
null
เป็นพารามิเตอร์สําหรับExoPlayer.setImageOutput()
เพื่อล้างImageOutput
ที่ตั้งไว้ก่อนหน้านี้
- DataSource:
- รองรับ
android.resource://package/id
URI ของทรัพยากรดิบ โดยที่package
แตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน ก่อนหน้านี้ยังไม่มีการบันทึกว่าวิธีนี้ใช้งานได้ แต่นี่เป็นวิธีที่มีประสิทธิภาพมากกว่าในการเข้าถึงทรัพยากรในแพ็กเกจอื่นเมื่อเทียบกับการเข้าถึงตามชื่อ - ตรวจสอบว่า
url
ไม่ใช่ค่า Null ในคอนสตรัคเตอร์DataSpec
มีการกำกับเนื้อหาพารามิเตอร์นี้ไว้ว่าไม่ใช่ค่า Null อยู่แล้ว - อนุญาตให้
ByteArrayDataSource
แปลง URI เป็นอาร์เรย์ไบต์ระหว่างopen()
แทนที่จะกำหนดค่าแบบฮาร์ดโค้ดเมื่อสร้าง (#1405)
- รองรับ
- DRM:
- อนุญาตให้ตั้งค่า
LoadErrorHandlingPolicy
ในDefaultDrmSessionManagerProvider
(#1271)
- อนุญาตให้ตั้งค่า
- ผล:
- รองรับการเปลี่ยนแปลงความเร็วหลายรายการภายใน
EditedMediaItem
เดียวกัน หรือComposition
ในSpeedChangeEffect
- รองรับเอาต์พุต HLG และ PQ จากอินพุตบิตแมป HDR ขั้นสูง
- เพิ่มการรองรับ EGL_GL_COLORSPACE_BT2020_HLG_EXT ซึ่งจะปรับปรุงเอาต์พุตพื้นผิว HLG ใน ExoPlayer.setVideoEffect และ Debug SurfaceView ของ Transformer
- อัปเดตการใช้งานเมทริกซ์การวางซ้อนเพื่อให้สอดคล้องกับเอกสารประกอบโดยการพลิกค่า x และ y ที่ใช้ใน
setOverlayFrameAnchor()
หากใช้OverlaySettings.Builder.setOverlayFrameAnchor()
ให้พลิกค่า x และ y โดยคูณด้วย-1
- แก้ไขข้อบกพร่องที่
TimestampWrapper
ขัดข้องเมื่อใช้ร่วมกับExoPlayer#setVideoEffects
(#821) - เปลี่ยนพื้นที่ทํางานสี SDR เริ่มต้นจากสีเชิงเส้นเป็นวิดีโอ SDR รูปแบบไฟฟ้าของ BT 709 รวมถึงระบุตัวเลือกที่ 3 เพื่อคงรูปแบบสีเดิมไว้
- อนุญาตให้กำหนดลําดับ z ที่ไม่แน่นอนของ EditedMediaItemSequences (#1055)
- รักษาช่วงความสว่างให้สอดคล้องกันในเนื้อหา HDR แต่ละส่วน (ใช้ช่วง HLG)
- เพิ่มการรองรับการวางซ้อน Ultra HDR (บิตแมป) ในเนื้อหา HDR
- อนุญาตให้ใช้เอฟเฟกต์
SeparableConvolution
ก่อน API 26 - นำ
OverlaySettings.useHdr
ที่ไม่ได้ใช้ออกเนื่องจากช่วงไดนามิกของการวางซ้อนและเฟรมต้องตรงกัน - เพิ่มการรองรับ HDR สำหรับ
TextOverlay
คุณปรับความสว่างของข้อความวางซ้อนได้ด้วยOverlaySettings.Builder.setHdrLuminanceMultiplier()
- รองรับการเปลี่ยนแปลงความเร็วหลายรายการภายใน
- ส่วนขยาย IMA
- โปรโมต API ที่จําเป็นสําหรับแอปในการเล่นสตรีมโฆษณา DAI ให้เป็นเวอร์ชันเสถียร
- เพิ่ม
replaceAdTagParameters(Map <String, String>)
ลงในImaServerSideAdInsertionMediaSource.AdLoader
ซึ่งช่วยให้แทนที่พารามิเตอร์แท็กโฆษณาได้เมื่อรันไทม์ - แก้ไขข้อบกพร่องที่ไม่มีการเรียกใช้
VideoAdPlayer.VideoAdPlayerCallback.onError()
เมื่อเกิดข้อผิดพลาดของโปรแกรมเล่นระหว่างการเล่นโฆษณา (#1334) - อัปเกรด IMA SDK เป็นเวอร์ชัน 3.33.0 เพื่อแก้ไขปัญหา
NullPointerException
เมื่อใช้ URI ของแท็กโฆษณาdata://
(#700)
- เซสชัน:
- เปลี่ยนค่าเริ่มต้นของ
CommandButton.enabled
เป็นtrue
และตรวจสอบว่าค่าดังกล่าวเป็นเท็จได้สําหรับตัวควบคุมแม้ว่าคําสั่งที่เกี่ยวข้องจะพร้อมใช้งานก็ตาม - เพิ่มค่าคงที่ของไอคอนสำหรับ
CommandButton
ที่ควรใช้แทนทรัพยากรไอคอนที่กำหนดเอง - เพิ่ม
MediaSessionService.isPlaybackOngoing()
เพื่อให้แอปค้นหาว่าจำเป็นต้องหยุดบริการในonTaskRemoved()
หรือไม่ (#1219) - เพิ่ม
MediaSessionService.pauseAllPlayersAndStopSelf()
ที่สะดวกต่อการหยุดเล่นเซสชันทั้งหมดชั่วคราวและเรียกใช้stopSelf()
เพื่อสิ้นสุดวงจรชีวิตของMediaSessionService
- ลบล้าง
MediaSessionService.onTaskRemoved(Intent)
เพื่อให้มีการใช้งานเริ่มต้นที่ปลอดภัยซึ่งจะทําให้บริการทํางานอยู่เบื้องหน้าหากการเล่นกําลังดำเนินอยู่ หรือจะหยุดบริการก็ได้ - ซ่อนแถบเลื่อนหาจุดที่ต้องการในการแจ้งเตือนสื่อสำหรับสตรีมแบบสดโดยไม่ตั้งค่าระยะเวลาลงในข้อมูลเมตาของเซสชันแพลตฟอร์ม (#1256)
- ปรับการเปลี่ยนค่าของ
MediaMetadata
เป็นMediaDescriptionCompat
เพื่อใช้ลําดับและตรรกะที่ต้องการเดียวกันเมื่อเลือกพร็อพเพอร์ตี้ข้อมูลเมตาเช่นเดียวกับใน media1 - เพิ่ม
MediaSession.sendError()
ที่อนุญาตให้ส่งข้อผิดพลาดที่ไม่ร้ายแรงไปยังตัวควบคุม Media3 เมื่อใช้ตัวควบคุมการแจ้งเตือน (ดูหัวข้อMediaSession.getMediaNotificationControllerInfo()
) ระบบจะใช้ข้อผิดพลาดที่กําหนดเองเพื่ออัปเดตPlaybackState
ของเซสชันแพลตฟอร์มเป็นสถานะข้อผิดพลาดพร้อมข้อมูลข้อผิดพลาดที่ระบุ (#543) - เพิ่ม
MediaSession.Callback.onPlayerInteractionFinished()
เพื่อแจ้งให้เซสชันทราบเมื่อชุดการโต้ตอบของผู้เล่นจากตัวควบคุมหนึ่งๆ สิ้นสุดลง - เพิ่ม
SessionError
และใช้SessionResult
และLibraryResult
แทนรหัสข้อผิดพลาดเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดและวิธีแก้ไขข้อผิดพลาด (หากเป็นไปได้) - เผยแพร่โค้ดสําหรับแอปทดสอบตัวควบคุม media3 ซึ่งสามารถใช้เพื่อทดสอบการโต้ตอบกับแอปที่เผยแพร่เซสชันสื่อ
- เผยแพร่ข้อมูลเพิ่มเติมที่ส่งไปยัง
MediaSession[Builder].setSessionExtras()
ของตัวควบคุม media3 ไปยังPlaybackStateCompat.getExtras()
ของตัวควบคุม media1 - จับคู่ข้อผิดพลาดร้ายแรงและไม่ร้ายแรงจากเซสชันแพลตฟอร์ม A
PlaybackException
จับคู่กับสถานะข้อผิดพลาดร้ายแรงของPlaybackStateCompat
SessionError
ที่ส่งไปยังตัวควบคุมการแจ้งเตือนสื่อที่มีMediaSession.sendError(ControllerInfo, SessionError)
จะแมปกับข้อผิดพลาดที่ไม่ร้ายแรงในPlaybackStateCompat
ซึ่งหมายความว่ามีการตั้งค่ารหัสและข้อความแสดงข้อผิดพลาด แต่สถานะเซสชันแพลตฟอร์มยังคงแตกต่างจากSTATE_ERROR
- อนุญาตให้ตั้งค่ากิจกรรมเซสชันต่อตัวควบคุมเพื่อลบล้างกิจกรรมเซสชันส่วนกลาง คุณสามารถกําหนดกิจกรรมเซสชันสําหรับตัวควบคุมได้เมื่อเชื่อมต่อโดยสร้าง
ConnectionResult
ด้วยAcceptedResultBuilder.setSessionActivivty(PendingIntent)
เมื่อเชื่อมต่อแล้ว คุณสามารถอัปเดตกิจกรรมเซสชันด้วยMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
- ปรับปรุงการจำลองข้อผิดพลาดของการเรียก
MediaLibrarySession.Callback
ตอนนี้คุณกำหนดค่าการจําลองข้อผิดพลาดได้โดยใช้MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
เพื่อเลือกประเภทข้อผิดพลาดหรือเลือกไม่ใช้การจําลองข้อผิดพลาดซึ่งเปิดอยู่โดยค่าเริ่มต้น
- เปลี่ยนค่าเริ่มต้นของ
- UI:
- เพิ่มการรองรับการแสดงรูปภาพใน
PlayerView
เมื่อเชื่อมต่อกับExoPlayer
(#1144) - เพิ่มการปรับแต่งไอคอนต่างๆ ใน
PlayerControlView
ผ่านแอตทริบิวต์ xml เพื่ออนุญาตให้ใช้ภาพวาดที่แตกต่างกันต่ออินสแตนซ์PlayerView
แทนการลบล้างแบบทั่วโลก (#1200) - แก้ปัญหาข้อบกพร่องของแพลตฟอร์มที่ทําให้วิดีโอยืด/ครอบตัดเมื่อใช้
SurfaceView
ใน ComposeAndroidView
ใน API 34 (#1237)
- เพิ่มการรองรับการแสดงรูปภาพใน
- การดาวน์โหลด
- ตรวจสอบว่า
DownloadHelper
ไม่ได้เปิดเผยอินสแตนซ์Renderer
ที่ยังไม่ได้เผยแพร่ ซึ่งอาจส่งผลให้แอปขัดข้องด้วยIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224)
- ตรวจสอบว่า
- ส่วนขยาย Cronet:
- แก้ไข
SocketTimeoutException
ในCronetDataSource
ใน Cronet บางเวอร์ชัน คำขอที่ได้จากคอลแบ็กจะไม่เหมือนกันเสมอไป ซึ่งส่งผลให้การเรียกกลับไม่เสร็จสมบูรณ์และคำขอหมดเวลา (https://issuetracker.google.com/328442628)
- แก้ไข
- ส่วนขยาย HLS:
- แก้ไขข้อบกพร่องที่ตัวอย่าง EMSG ที่รอดำเนินการซึ่งรอการหยุดชะงักได้รับการมอบสิทธิ์ใน
HlsSampleStreamWrapper
ด้วยออฟเซตที่ไม่ถูกต้องซึ่งทําให้เกิดIndexOutOfBoundsException
หรือIllegalArgumentException
(#1002) - แก้ไขข้อบกพร่องที่เพลย์ลิสต์ที่ไม่ใช่หลักโหลดซ้ำสตรีม LL-HLS อยู่เรื่อยๆ (#1240)
- แก้ไขข้อบกพร่องที่การเปิดใช้ CMCD สำหรับ HLS ที่มีกลุ่มเริ่มต้นทำให้
Source Error
และIllegalArgumentException
- แก้ไขข้อบกพร่องที่เพลย์ลิสต์ที่เล่นอยู่ซึ่งไม่ใช่เพลย์ลิสต์หลักไม่รีเฟรชระหว่างการเล่นแบบสด (#1240)
- แก้ไขข้อบกพร่องที่การเปิดใช้ CMCD สำหรับสตรีมแบบสด HLS ทำให้เกิดข้อผิดพลาด
ArrayIndexOutOfBoundsException
(#1395)
- แก้ไขข้อบกพร่องที่ตัวอย่าง EMSG ที่รอดำเนินการซึ่งรอการหยุดชะงักได้รับการมอบสิทธิ์ใน
- ส่วนขยาย DASH:
- ส่วนขยาย Cast
- แก้ไขข้อบกพร่องที่แปลงชื่ออัลบั้มของ
MediaQueueItem
เป็นชื่อศิลปินในรายการสื่อ Media3 (#1255)
- แก้ไขข้อบกพร่องที่แปลงชื่ออัลบั้มของ
- ยูทิลิตีการทดสอบ
- ติดตั้งใช้งาน
onInit()
และonRelease()
ในFakeRenderer
- เปลี่ยนเมธอด
TestPlayerRunHelper.runUntil()/playUntil()
ให้ดำเนินการไม่สำเร็จเมื่อเกิดข้อผิดพลาดที่ไม่ร้ายแรง (เช่น ข้อผิดพลาดที่รายงานไปยังAnalyticsListener.onVideoCodecError()
) ใช้เชนเมธอดTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
ใหม่เพื่อปิดใช้ลักษณะการทำงานนี้
- ติดตั้งใช้งาน
- แอปเดโม:
- ใช้
DefaultPreloadManager
ในแอปสาธิตแบบสั้น - อนุญาตให้ตั้งค่าโหมดซ้ำด้วยอาร์กิวเมนต์
Intent
จากบรรทัดคำสั่ง (#1266) - ใช้
HttpEngineDataSource
เป็นHttpDataSource
เมื่ออุปกรณ์รองรับ
- ใช้
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
CronetDataSourceFactory
ออก ให้ใช้CronetDataSource.Factory
instead. - นำตัวสร้าง
DataSpec
บางรายการออก ให้ใช้DataSpec.Builder
แทน - นำวิธีการชำระเงิน
setContentTypePredicate(Predicate)
ออกจากDefaultHttpDataSource
,OkHttpDataSource
และCronetDataSource
ให้ใช้วิธีเทียบเท่าในXXXDataSource.Factory
แต่ละรายการแทน - นำตัวสร้าง
OkHttpDataSource
และOkHttpDataSourceFactory
ออก ให้ใช้OkHttpDataSource.Factory
แทน - นำ
PlayerMessage.setHandler(Handler)
ออก ให้ใช้setLooper(Looper)
instead. - นำช่อง
Timeline.Window.isLive
ออก ให้ใช้เมธอดisLive()
แทน - นำตัวสร้าง
DefaultHttpDataSource
ออก ให้ใช้DefaultHttpDataSource.Factory
แทน - นำ
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
ออก ให้ใช้DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
แทน - นำ
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
ออก ให้ใช้MediaCodecInfo.canReuseCodec(Format, Format)
แทน - นำ
DrmSessionManager.DUMMY
และgetDummyDrmSessionManager()
วิธีการชำระเงินออก ให้ใช้DrmSessionManager.DRM_UNSUPPORTED
แทน - นำ
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
,VideoRendererEventListener.onVideoInputFormatChanged(Format)
ออก ใช้การโอเวอร์โหลดที่รับDecoderReuseEvaluation
แทน - นําค่าคงที่
RendererSupport.FormatSupport
IntDef และFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
ออก ใช้ IntDef และค่าคงที่ที่เทียบเท่าในandroidx.media3.common.C
แทน (เช่นC.FORMAT_HANDLED
) - นำอินเทอร์เฟซ
Bundleable
ออก ซึ่งรวมถึงการนำช่องค่าคงที่Bundleable.Creator<Foo> CREATOR
ทั้งหมดออก ผู้เรียกใช้ควรใช้เมธอดBundle toBundle()
และstatic Foo fromBundle(Bundle)
กับแต่ละประเภทแทน
- นำ
เวอร์ชัน 1.4.0-rc01
10 กรกฎาคม 2024
ใช้ เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-beta01
26 มิถุนายน 2024
ใช้ เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-alpha02
7 มิถุนายน 2024
ใช้ เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-alpha01
17 เมษายน 2024
ใช้ เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.3.0
เวอร์ชัน 1.3.1
11 เมษายน 2024
androidx.media3:media3-*:1.3.1
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.3.1 มีการคอมมิตเหล่านี้
- คลังทั่วไป:
- เพิ่ม
Format.labels
เพื่ออนุญาตให้ใช้ป้ายกำกับที่แปลแล้วหรือป้ายกำกับอื่นๆ
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาที่
PreloadMediaPeriod
เก็บสตรีมไว้ไม่ได้เมื่อโหลดล่วงหน้าอีกครั้ง - ใช้
TrackSelectionResult
ที่เกี่ยวข้องที่ถูกต้องกับระยะเวลาการเล่นในการเลือกแทร็กอีกครั้ง - เริ่มโปรแกรมแสดงผลที่เปิดใช้ก่อนเวลาหลังจากเลื่อนระยะเวลาการเล่นไปข้างหน้าเท่านั้นเมื่อเปลี่ยนระหว่างรายการสื่อ (#1017)
- เพิ่มประเภทผลลัพธ์ที่ขาดหายไปในกฎ
-keepclasseswithmembers
ของ ProGuard สำหรับDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187)
- แก้ไขปัญหาที่
- Transformer:
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่แสดงเนื่องจาก
MediaMuxer
ไม่รองรับการประทับเวลาการนำเสนอเชิงลบก่อน API 30
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่แสดงเนื่องจาก
- การเลือกแทร็ก:
DefaultTrackSelector
: แนะนำให้ใช้แทร็กวิดีโอที่มีอัตราเฟรม "เหมาะสม" (>=10 fps) มากกว่าแทร็กที่มีอัตราเฟรมต่ำกว่าหรือไม่กำหนด วิธีนี้ช่วยให้มั่นใจว่าโปรแกรมเล่นจะเลือกแทร็กวิดีโอ "จริง" ใน MP4 ที่ดึงมาจากภาพเคลื่อนไหวซึ่งมีแทร็ก HEVC 2 แทร็กที่แทร็กหนึ่งมีความละเอียดสูงกว่าแต่มีจำนวนเฟรมน้อยมาก (#1051)
- เครื่องมือแยกข้อมูล:
- แก้ไขปัญหาที่ระบบไม่ข้ามการเติมเมื่ออ่านข้อมูลขนาดแปลกๆ จากไฟล์ WAV (#1117)
- MP3: ป้อนข้อมูล
Format.averageBitrate
จากเฟรมข้อมูลเมตา เช่นXING
และVBRI
- MPEG-TS: เปลี่ยนกลับการเปลี่ยนแปลงที่มีจุดประสงค์เพื่อให้แน่ใจว่าระบบจะแสดงผลเฟรมสุดท้ายโดยส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) เนื่องจากการเปลี่ยนแปลงนี้ทำให้เกิดปัญหาใหม่กับสตรีม HLS ที่มีเฉพาะเฟรม I (#1150) และสตรีม HLS ที่ใช้ H.262 (#1126)
- เสียง:
- อนุญาตให้กู้คืนโปรแกรมแสดงผลโดยปิดใช้การโอนหากแทร็กเสียงเริ่มต้นไม่สำเร็จในโหมดการโอน
- วิดีโอ:
- เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ซึ่งทําให้ระบบทําเครื่องหมายสตรีม H265 60 fps ว่าไม่รองรับ
- เพิ่มวิธีแก้ปัญหาที่ช่วยให้เฟรมแรกได้รับการแสดงผลเสมอขณะทำการส่งผ่านข้อมูล แม้ว่าอุปกรณ์จะไม่ดำเนินการนี้โดยอัตโนมัติตามที่ API กำหนด (#1169) (#966)
- แก้ไขปัญหาที่การจัดการข้อมูลสี HDR ทําให้ตัวแปลงรหัสทํางานผิดปกติและป้องกันไม่ให้สลับรูปแบบแบบปรับเปลี่ยนได้สำหรับแทร็กวิดีโอ SDR (#1158)
- ข้อความ:
- WebVTT: ป้องกันไม่ให้คำบอกทางที่อยู่ติดกันโดยตรงสร้าง
CuesWithTiming
อินสแตนซ์เพิ่มเติมที่ไม่ถูกต้องจากWebvttParser.parse
(#1177)
- WebVTT: ป้องกันไม่ให้คำบอกทางที่อยู่ติดกันโดยตรงสร้าง
- DRM:
- แก้ปัญหา
NoSuchMethodError
ที่อาจแสดงขึ้นโดยเฟรมเวิร์กMediaDrm
แทนResourceBusyException
หรือNotProvisionedException
ในอุปกรณ์ Android 14 บางรุ่น (#1145)
- แก้ปัญหา
- ผล:
- ปรับปรุงการแมปโทนสี PQ เป็น SDR ด้วยการแปลงพื้นที่สี
- เซสชัน:
- UI:
- แสดงชื่อภาษาของแทร็กเสียงเป็นทางเลือกในกรณีที่
Locale
ไม่สามารถระบุชื่อที่แสดง (#988)
- แสดงชื่อภาษาของแทร็กเสียงเป็นทางเลือกในกรณีที่
- ส่วนขยาย DASH:
- ป้อนข้อมูลองค์ประกอบ
Label
ทั้งหมดจากไฟล์ Manifest ลงในFormat.labels
(#1054)
- ป้อนข้อมูลองค์ประกอบ
- ส่วนขยาย RTSP:
- ข้ามค่าข้อมูลเซสชัน (แท็ก i) ที่ว่างเปล่าในการแยกวิเคราะห์ SDP (#1087)
- ส่วนขยายโปรแกรมถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ปิดใช้ส่วนขยาย MIDI ในฐานะทรัพยากรที่ต้องพึ่งพาในเครื่องโดยค่าเริ่มต้น เนื่องจากต้องมีการกำหนดค่าที่เก็บ Maven เพิ่มเติม ผู้ใช้ที่ต้องการใช้ข้อบังคับนี้จากข้อกำหนดเบื้องต้นในเครื่องจะเปิดใช้ข้อบังคับดังกล่าวอีกครั้งได้
เวอร์ชัน 1.3.0
6 มีนาคม 2024
androidx.media3:media3-*:1.3.0
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.3.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป:
- ใช้การรองรับ URI แหล่งข้อมูลไฟล์ดิบ
android.resource://package/[type/]name
โดยที่package
แตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน การดำเนินการนี้ได้รับการบันทึกไว้ว่าใช้งานได้เสมอ แต่ยังไม่มีการใช้งานอย่างถูกต้องจนถึงตอนนี้ - เปลี่ยนประเภท MIME ที่โค้ดแอปตั้งค่าหรืออ่านจากสื่อให้เป็นตัวพิมพ์เล็กทั้งหมด
- กําหนดโฆษณาด้วย
MediaItem
แบบเต็มแทนUri
เดียวในAdPlaybackState
- เพิ่ม
minSdk
เป็น 19 (Android KitKat) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด และจําเป็นต่อเราในการอัปเกรดข้อกําหนดของ AndroidX เป็นเวอร์ชันล่าสุด - ป้อนข้อมูลทั้ง
artworkUri
และartworkData
ในMediaMetadata.Builder.populate(MediaMetadata)
เมื่ออย่างน้อย 1 รายการไม่มีค่า Null (#964)
- ใช้การรองรับ URI แหล่งข้อมูลไฟล์ดิบ
- ExoPlayer:
- เพิ่ม
PreloadMediaSource
และPreloadMediaPeriod
ที่อนุญาตให้แอปโหลดแหล่งที่มาของสื่อเนื้อหาล่วงหน้าที่ตำแหน่งเริ่มต้นที่เฉพาะเจาะจงก่อนเล่นPreloadMediaSource
มีหน้าที่เตรียมแหล่งที่มาของสื่อเนื้อหาเพื่อรับTimeline
, เตรียมและแคชระยะเวลาที่ตําแหน่งเริ่มต้นที่ระบุ เลือกแทร็ก และโหลดข้อมูลสื่อของระยะเวลา แอปควบคุมความคืบหน้าในการโหลดล่วงหน้าโดยใช้PreloadMediaSource.PreloadControl
และตั้งค่าแหล่งที่มาที่โหลดไว้ล่วงหน้าให้กับโปรแกรมเล่นเพื่อเล่น - เพิ่ม
ExoPlayer.setImageOutput
ที่อนุญาตให้แอปตั้งค่าImageRenderer.ImageOutput
- ตอนนี้
DefaultRenderersFactory
จะส่งImageRenderer
ไปยังโปรแกรมเล่นโดยค่าเริ่มต้นพร้อมImageOutput
และImageDecoder.Factory.DEFAULT
ที่ว่าง - ส่งเหตุการณ์
Player.Listener.onPositionDiscontinuity
เมื่อข้ามช่วงเงียบ (#765) - เพิ่มการรองรับเวอร์ชันทดลองสำหรับการแยกวิเคราะห์คำบรรยายระหว่างการดึงข้อมูล คุณเปิดใช้ฟีเจอร์นี้ได้โดยใช้
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
- รองรับแหล่งที่มาของสื่อแบบปรับเปลี่ยนได้ด้วย
PreloadMediaSource
- ติดตั้งใช้งาน
HttpEngineDataSource
ซึ่งเป็นHttpDataSource
โดยใช้ HttpEngine API - ป้องกันการแบ่งชั้น
CompositeSequenceableLoader
คอมโพเนนต์นี้เคยทำให้ขยายได้แต่ไม่เคยมีคลาสย่อยภายในไลบรารี การปรับแต่งทำได้โดยการตัดอินสแตนซ์โดยใช้รูปแบบตัวตกแต่งและการใช้CompositeSequenceableLoaderFactory
ที่กําหนดเอง - แก้ไขปัญหาที่การซ้ำเวลาเดียวกันทำให้ข้อมูลเมตาจากรายการนี้ถูกล้าง (#1007)
- เปลี่ยนชื่อเมธอด
experimentalSetSubtitleParserFactory
ในBundledChunkExtractor.Factory
และDefaultHlsExtractorFactory
เป็นsetSubtitleParserFactory
และห้ามไม่ให้ส่งnull
ใช้เมธอดexperimentalParseSubtitlesDuringExtraction(boolean)
ใหม่เพื่อควบคุมลักษณะการแยกวิเคราะห์ - เพิ่มการรองรับการปรับแต่ง
SubtitleParser.Factory
ที่ใช้ในระหว่างการดึงข้อมูล ซึ่งทำได้ด้วยMediaSource.Factory.setSubtitleParserFactory()
- เพิ่มคำนำหน้าแหล่งที่มาในช่อง
Format.id
ทั้งหมดที่สร้างขึ้นจากMergingMediaSource
ซึ่งจะช่วยระบุแหล่งที่มาที่ผลิตFormat
(#883) - แก้ไขนิพจน์ทั่วไปที่ใช้ตรวจสอบชื่อคีย์ Common Media Client Data (CMCD) ที่กําหนดเองโดยแก้ไขให้ตรวจสอบเฉพาะขีดกลาง (#1028)
- หยุดการเข้ารหัสพารามิเตอร์การค้นหา CMCD ซ้ำ (#1075)
- เพิ่ม
- Transformer:
- เพิ่มการรองรับการแปลงวิดีโอสโลว์โมชัน H.265/HEVC SEF เป็นวิดีโอแบบแบน
- เพิ่มความเร็วในการแปลงรหัส โดยเฉพาะสำหรับการแก้ไข "นำวิดีโอออก"
- เพิ่ม API เพื่อให้ไฟล์เอาต์พุตเริ่มต้นที่เฟรมวิดีโอ ซึ่งอาจทำให้เอาต์พุตของการดำเนินการตัดแต่งเข้ากันได้มากขึ้นกับการใช้งานโปรแกรมเล่นที่ไม่แสดงเฟรมวิดีโอแรกจนกว่าจะถึงการประทับเวลาของการแสดง (#829)
- เพิ่มการรองรับการเพิ่มประสิทธิภาพการดำเนินการตัด MP4 ของชิ้นงานเดียว
- เพิ่มการรองรับเพื่อให้เฟรมวิดีโอมีการประทับเวลาแรกในไฟล์เอาต์พุต แก้ไขไฟล์เอาต์พุตที่ขึ้นต้นด้วยเฟรมสีดําในโปรแกรมเล่น iOS (#829)
- การเลือกแทร็ก:
- เพิ่ม
DefaultTrackSelector.selectImageTrack
เพื่อเปิดใช้การเลือกแทร็กรูปภาพ - เพิ่ม
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
เพื่อระบุว่าจะเลือกแทร็กรูปภาพหรือไม่หากมีทั้งแทร็กรูปภาพและแทร็กวิดีโอ ค่าเริ่มต้นคือfalse
ซึ่งหมายความว่าระบบจะให้ความสำคัญกับการเลือกแทร็กวิดีโอ
- เพิ่ม
- เครื่องมือแยกข้อมูล:
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมลงในโปรแกรมแยก MP4 เพื่อดึงค่า
ColorInfo.colorSpace
,ColorInfo.colorTransfer
และColorInfo.colorRange
(#692) - MP3: ใช้การค้นหาอัตราบิตคงที่ (CBR) สำหรับไฟล์ที่มีส่วนหัว
Info
(เทียบเท่า CBR ของส่วนหัวXing
) ก่อนหน้านี้เราใช้ตารางการกรอจากส่วนหัวInfo
แต่การกรอนี้มีความแม่นยำน้อยกว่าการละเว้นและถือว่าไฟล์เป็น CBR - MPEG2-TS: เพิ่มการรองรับ DTS, DTS-LBR และ DTS:X Profile2 (#275)
- ดึงข้อมูลประเภทเสียงจากตัวระบุ TS และจับคู่กับ Flag บทบาท ซึ่งจะช่วยให้ผู้ใช้เลือกแทร็กเสียงได้อย่างมีข้อมูลมากขึ้น (#973)
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมลงในโปรแกรมแยก MP4 เพื่อดึงค่า
- เสียง:
- วิดีโอ:
- เปลี่ยนเครื่องมือสร้าง
MediaCodecVideoRenderer
ที่ใช้อาร์กิวเมนต์VideoFrameProcessor.Factory
แล้วแทนที่ด้วยเครื่องมือสร้างที่ใช้อาร์กิวเมนต์VideoSinkProvider
แอปที่ต้องการแทรกVideoFrameProcessor.Factory
ที่กําหนดเองสามารถสร้างCompositingVideoSinkProvider
ที่ใช้VideoFrameProcessor.Factory
ที่กําหนดเอง และส่งผู้ให้บริการส่งผ่านวิดีโอไปยังMediaCodecVideoRenderer
- เปลี่ยนเครื่องมือสร้าง
- ข้อความ:
- แก้ไขการทำให้เป็นอนุกรมของคำแนะนำแบบบิตแมปเพื่อแก้ไขข้อผิดพลาด
Tried to marshall a Parcel that contained Binder objects
เมื่อใช้DefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836) - CEA-708: ละเว้นค่า
rowLock
ข้อกำหนด CEA-708-E S-2023 ระบุว่าrowLock
และcolumnLock
ควรถือว่าทั้ง 2 ค่าเป็นจริง โดยไม่คำนึงถึงค่าที่มีอยู่ในสตรีม (ระบบไม่ได้รองรับcolumnLock
จึงถือว่าค่านี้เป็นเท็จเสมอ)
- แก้ไขการทำให้เป็นอนุกรมของคำแนะนำแบบบิตแมปเพื่อแก้ไขข้อผิดพลาด
- รูปภาพ:
- เพิ่มการรองรับภาพปก DASH ระบบจะครอบตัดรูปภาพในตารางกริดและจัดเตรียมภาพขนาดย่อแต่ละรายการให้
ImageOutput
ใกล้เคียงกับเวลาที่แสดง
- เพิ่มการรองรับภาพปก DASH ระบบจะครอบตัดรูปภาพในตารางกริดและจัดเตรียมภาพขนาดย่อแต่ละรายการให้
- DRM:
- เล่นตัวอย่างเพลงที่ "นำหน้าชัดเจน" ซึ่งไม่มีการเข้ารหัสในเนื้อหา DRM โดยค่าเริ่มต้นทันที แม้ว่าคีย์สำหรับตัวอย่างเพลงที่เข้ารหัสในภายหลังจะยังไม่พร้อมใช้งานก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อมเมื่อตำแหน่งการเล่นถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้การเล่นจะไม่เริ่มต้นเลยเมื่อถึงจุดนี้) ลักษณะการทำงานนี้สามารถปิดใช้ได้ด้วย
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
หรือDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
- เล่นตัวอย่างเพลงที่ "นำหน้าชัดเจน" ซึ่งไม่มีการเข้ารหัสในเนื้อหา DRM โดยค่าเริ่มต้นทันที แม้ว่าคีย์สำหรับตัวอย่างเพลงที่เข้ารหัสในภายหลังจะยังไม่พร้อมใช้งานก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อมเมื่อตำแหน่งการเล่นถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้การเล่นจะไม่เริ่มต้นเลยเมื่อถึงจุดนี้) ลักษณะการทำงานนี้สามารถปิดใช้ได้ด้วย
- ส่วนขยาย IMA
- แก้ไขปัญหาที่เล่นโฆษณา DASH และ HLS ที่ไม่มีนามสกุลไฟล์ที่เหมาะสมไม่ได้
- เซสชัน:
- ปิดใช้การตรวจจับการคลิกสองครั้งสำหรับแอปทีวี (#962)
- แก้ไขปัญหาที่
MediaItem.RequestMetadata
ที่มีเพียงข้อมูลเพิ่มเติมที่ไม่ใช่ค่า Null ไม่ได้ส่งระหว่างตัวควบคุมสื่อกับเซสชัน - เพิ่มคอนสตรคเตอร์ใน
MediaLibrarySession.Builder
ที่รับเฉพาะContext
แทนMediaLibraryService
- ส่วนขยาย HLS:
- ลด
HlsMediaPeriod
เป็นระดับการเข้าถึงระดับแพ็กเกจ ไม่ควรใช้ประเภทนี้โดยตรงจากภายนอกแพ็กเกจ HLS - แก้ปัญหาเพื่อค้นหาจุดเริ่มต้นของกลุ่มอย่างมีประสิทธิภาพมากขึ้น (#1031)
- ลด
- ส่วนขยายโปรแกรมถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ตัวถอดรหัส MIDI: ละเว้นข้อความเหตุการณ์ SysEx (#710)
- ยูทิลิตีการทดสอบ
- อย่าหยุดเล่นชั่วคราวใน
TestPlayerRunHelper.playUntilPosition
การทดสอบจะเล่นวิดีโอต่อไปในสถานะเล่น แต่หยุดความคืบหน้าไว้จนกว่าการทดสอบจะเพิ่มการยืนยันและการดําเนินการเพิ่มเติมได้
- อย่าหยุดเล่นชั่วคราวใน
- แอปเดโม:
- เพิ่มโมดูลสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
PreloadMediaSource
กับ Use Case ของเนื้อหาแบบสั้น
- เพิ่มโมดูลสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
เวอร์ชัน 1.3.0-rc01
22 กุมภาพันธ์ 2024
เวอร์ชัน 1.3.0-beta01
7 กุมภาพันธ์ 2024
เวอร์ชัน 1.3.0-alpha01
15 มกราคม 2024
เวอร์ชัน 1.2.0
เวอร์ชัน 1.2.1
9 มกราคม 2024
- ExoPlayer:
- แก้ปัญหาที่การกรอด้วยตนเองนอกช่วง
LiveConfiguration.min/maxOffset
จะปรับออฟเซ็ตกลับไปที่min/maxOffset
- แก้ไขปัญหาเลย์เอาต์ช่อง OPUS และ VORBIS ไม่ถูกต้องสำหรับช่อง 3, 5, 6, 7 และ 8 (#8396)
- แก้ไขปัญหาที่การเลือกแทร็กหลังจากกรอไป 0 วินาทีในสตรีมแบบสดทำให้สตรีมเริ่มเล่นที่ตำแหน่งเริ่มต้นอย่างไม่ถูกต้อง (#9347)
- แก้ไขปัญหาที่อินสแตนซ์ใหม่ของ
CmcdData.Factory
ได้รับค่าเชิงลบสำหรับbufferedDurationUs
จากแหล่งที่มาของข้อมูลโค้ด ทำให้IllegalArgumentException
(#888)
- แก้ปัญหาที่การกรอด้วยตนเองนอกช่วง
- Transformer:
- แก้ปัญหาที่โปรแกรมเปลี่ยนไฟล์จะแสดงขึ้นเมื่อถึงเวลากําหนดค่าเนื่องจากตั้งค่าอัตราการทํางานสูง
- เครื่องมือแยกข้อมูล:
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในรูปภาพเคลื่อนไหว JPEG เป็น
ROLE_FLAG_ALTERNATE
เพื่อป้องกันไม่ให้ระบบเลือกแทร็กดังกล่าวให้เล่นโดยอัตโนมัติเนื่องจากมีความละเอียดสูงกว่า - แก้ไขการตรวจจับคีย์เฟรมที่ไม่ถูกต้องสำหรับสตรีม TS H264 (#864)
- แก้ไขการประมาณระยะเวลาของสตรีม TS ที่ยาวกว่า 47721 วินาที (#855)
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในรูปภาพเคลื่อนไหว JPEG เป็น
- เสียง:
- แก้ไขการจัดการ EOS สำหรับ
SilenceSkippingAudioProcessor
เมื่อเรียกใช้หลายครั้ง (#712)
- แก้ไขการจัดการ EOS สำหรับ
- วิดีโอ:
- เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ซึ่งทําให้ระบบทําเครื่องหมายสตรีม AVC 60 fps ว่าไม่รองรับ (#693)
- ข้อมูลเมตา:
- แก้ไขข้อบกพร่องที่
MediaMetadata
สร้างขึ้นจากความคิดเห็น Vorbis เท่านั้น ที่มีคีย์ตัวพิมพ์ใหญ่ (#876) - จับ
OutOfMemoryError
เมื่อแยกวิเคราะห์เฟรม ID3 ขนาดใหญ่มาก ซึ่งหมายความว่าการเล่นจะเล่นต่อได้โดยไม่ต้องใช้ข้อมูลแท็กแทนที่การเล่นจะเล่นไม่ได้เลย
- แก้ไขข้อบกพร่องที่
- DRM:
- ขยายวิธีแก้ปัญหาสำหรับ URL ใบอนุญาต
https://default.url
ของ ClearKey ที่ผิดพลาดไปยัง API ระดับ 33 ขึ้นไป (ก่อนหน้านี้วิธีแก้ปัญหาใช้ได้กับ API ระดับ 33 เท่านั้น) (#837) - แก้ไข
ERROR_DRM_SESSION_NOT_OPENED
เมื่อเปลี่ยนจากเนื้อหาที่เข้ารหัสเป็นเนื้อหาที่ชัดเจนโดยไม่มีแพลตฟอร์มที่แนบอยู่กับโปรแกรมเล่น ข้อผิดพลาดนี้เกิดจากการใช้โปรแกรมถอดรหัสที่ปลอดภัยเพื่อเล่นเนื้อหาที่ชัดเจนอย่างไม่ถูกต้อง
- ขยายวิธีแก้ปัญหาสำหรับ URL ใบอนุญาต
- เซสชัน:
- ใส่คีย์และค่าที่กำหนดเองใน
MediaMetadataCompat
ถึงMediaMetadata.extras
และMediaMetadata.extras
ถึงMediaMetadataCompat
(#756, #802) - แก้ไขการออกอากาศ
notifyChildrenChanged
สำหรับตัวควบคุมรุ่นเดิม (#644) - แก้ไขข้อบกพร่องที่การตั้งค่าเวลาติดลบสำหรับตัวจับเวลา
setWhen
ของการแจ้งเตือนที่ปิดใช้ทำให้อุปกรณ์บางเครื่องขัดข้อง (#903) - แก้ไข
IllegalStateException
เมื่อตัวควบคุมการแจ้งเตือนสื่อยังไม่ได้เชื่อมต่อให้เสร็จสมบูรณ์เมื่อมีการขอการอัปเดตการแจ้งเตือนครั้งแรก (#917)
- ใส่คีย์และค่าที่กำหนดเองใน
- UI:
- ส่วนขยาย DASH:
- แยกวิเคราะห์ "f800" เป็นจำนวนช่อง 5 สำหรับ Dolby ในไฟล์ Manifest ของ DASH (#688)
- ส่วนขยายโปรแกรมถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ส่วนขยาย Cast
- ตรวจสอบการสร้าง
Timeline
เพื่อไม่ให้แอปขัดข้องเมื่อโหลดสื่อในอุปกรณ์แคสต์ไม่สำเร็จ (#708)
- ตรวจสอบการสร้าง
เวอร์ชัน 1.2.0
15 พฤศจิกายน 2023
- คลังทั่วไป:
- เพิ่มพารามิเตอร์
@Nullable Throwable
ลงในเมธอดในLog.Logger
ตัวแปร พารามิเตอร์message
ของเมธอดเหล่านี้จะไม่มีข้อมูลเกี่ยวกับThrowable
ที่ส่งไปยังเมธอดLog.{d,i,w,e}()
อีกต่อไป ดังนั้นการติดตั้งใช้งานจะต้องเพิ่มข้อมูลนี้ด้วยตนเองหากต้องการ (อาจใช้Logger.appendThrowableString(String, Throwable)
) - แก้ไขปัญหาความเข้ากันได้ของ Kotlin ที่ระบบไม่ตรวจพบว่าพารามิเตอร์ประเภททั่วไปที่อนุญาตค่า Null และประเภทองค์ประกอบอาร์เรย์ที่อนุญาตค่า Null เป็นประเภทที่อนุญาตค่า Null ตัวอย่างคือพารามิเตอร์เมธอด
TrackSelectorResult
และSimpleDecoder
(#6792) - เปลี่ยน UI และลักษณะการแจ้งเตือนเริ่มต้นใน
Util.shouldShowPlayButton
เพื่อแสดงปุ่ม "เล่น" ขณะที่การหยุดเล่นชั่วคราว (เช่น เนื่องจากการสูญเสียโฟกัสเสียงชั่วคราว) คุณคงลักษณะการทำงานเดิมได้โดยใช้PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
หรือMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213) - อัปเกรด
androidx.annotation:annotation-experimental
เป็น1.3.1
เพื่อแก้ไข https://issuetracker.google.com/251172715 - ย้าย
ExoPlayer.setAudioAttributes
ไปยังอินเทอร์เฟซPlayer
- เพิ่มพารามิเตอร์
- ExoPlayer:
- แก้ไขปัญหาการกรอในสตรีม AC4 ที่เกิดจากการระบุตัวอย่างสำหรับการถอดรหัสเท่านั้นไม่ถูกต้อง (#11000)
- เพิ่มการระงับการเล่นในอุปกรณ์เอาต์พุตเสียงที่ไม่เหมาะสม (เช่น ลำโพงในตัวของอุปกรณ์ Wear OS) เมื่อเปิดใช้ฟีเจอร์นี้ผ่าน
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
ระบบจะอัปเดตเหตุผลในการระงับการเล่นเป็นPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
หากมีการพยายามเล่นเมื่อไม่มีเอาต์พุตเสียงที่เหมาะสม หรือหากมีการยกเลิกการเชื่อมต่อเอาต์พุตที่เหมาะสมทั้งหมดในระหว่างการเล่น ระบบจะนำเหตุผลในการระงับออกเมื่อเชื่อมต่อเอาต์พุตที่เหมาะสมแล้ว - เพิ่ม
MediaSource.canUpdateMediaItem
และMediaSource.updateMediaItem
เพื่อยอมรับการอัปเดตMediaItem
หลังจากสร้างผ่านPlayer.replaceMediaItem(s)
- อนุญาตให้
MediaItem
อัปเดตคลาสMediaSource
ทั้งหมดที่ได้จากไลบรารีผ่านPlayer.replaceMediaItem(s)
(#33, #9978) - เปลี่ยนชื่อ
MimeTypes.TEXT_EXOPLAYER_CUES
เป็นMimeTypes.APPLICATION_MEDIA3_CUES
- เพิ่ม
PngExtractor
ที่ส่งและอ่านไฟล์ PNG ทั้งหมดลงในTrackOutput
เป็นตัวอย่างเดียว - ปรับปรุงเมธอด
SequenceableLoader.continueLoading(long)
ในอินเทอร์เฟซSequenceableLoader
เป็นSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
LoadingInfo
มีพารามิเตอร์เพิ่มเติม ซึ่งรวมถึงplaybackSpeed
และlastRebufferRealtimeMs
นอกเหนือจากplaybackPositionUs
ที่มีอยู่ - ปรับปรุง
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
method ในอินเทอร์เฟซChunkSource
เป็นChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
- เพิ่มช่องเพิ่มเติมในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ได้แก่ บัฟเฟอร์ที่ขาดแคลน (
bs
), กำหนดเวลา (dl
), อัตราการเล่น (pr
) และเวลาเริ่มต้น (su
) (#8699) - เพิ่มความลึกของบิตของค่าความสว่างและค่าสีเป็น
ColorInfo
(#491) - เพิ่มช่องเพิ่มเติมในการบันทึก Common Media Client Data (CMCD) ได้แก่ คำขอออบเจ็กต์ถัดไป (
nor
) และคำขอช่วงถัดไป (nrr
) (#8699) - เพิ่มฟังก์ชันการทำงานเพื่อส่งข้อมูล Common Media Client Data (CMCD) โดยใช้พารามิเตอร์การค้นหา (#553)
- แก้ไข
ConcurrentModificationException
ในExperimentalBandwidthMeter
(#612) - เพิ่มพารามิเตอร์
MediaPeriodId
ลงในCompositeMediaSource.getMediaTimeForChildMediaTime
- รองรับ
ClippingMediaSource
(และแหล่งที่มาอื่นๆ ที่มีระยะ/ช่วงเวลาที่เลื่อน) ในConcatenatingMediaSource2
(#11226) - เปลี่ยน
BaseRenderer.onStreamChanged()
ให้รับอาร์กิวเมนต์MediaPeriodId
ด้วย
- Transformer:
- แยกวิเคราะห์ข้อมูลการหมุน EXIF สำหรับอินพุตรูปภาพ
- นำประเภทคำอธิบายประกอบ
TransformationRequest.HdrMode
และค่าคงที่ที่เกี่ยวข้องออก ให้ใช้Composition.HdrMode
และค่าคงที่ที่เกี่ยวข้องแทน - ลดความซับซ้อนของ
OverlaySettings
เพื่อแก้ไขปัญหาการหมุน - เปลี่ยนพารามิเตอร์
frameRate
และdurationUs
ของSampleConsumer.queueInputBitmap
เป็นTimestampIterator
- การเลือกแทร็ก:
- เพิ่ม
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
เพื่ออนุญาตหรือไม่อนุญาตการปรับที่ไม่ราบรื่นอย่างชัดเจน ค่าเริ่มต้นจะยังคงเป็นลักษณะการทำงานปัจจุบันของtrue
- เพิ่ม
- เครื่องมือแยกข้อมูล:
- MPEG-TS: ตรวจสอบว่าระบบแสดงผลเฟรมสุดท้ายโดยส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909)
- แก้ไขคำที่พิมพ์ผิดเมื่อระบุ
rotationDegrees
เปลี่ยนจากprojectionPosePitch
เป็นprojectionPoseRoll
(#461) - นำข้อสันนิษฐานที่ว่าสามารถตรวจสอบอินสแตนซ์
Extractor
โดยตรงด้วยinstanceof
ออก หากต้องการเข้าถึงรายละเอียดการใช้งานของExtractor
ในรันไทม์ คุณต้องเรียกใช้Extractor.getUnderlyingInstance
ก่อน - เพิ่ม
BmpExtractor
- เพิ่ม
WebpExtractor
- เพิ่ม
HeifExtractor
- เพิ่มการรองรับ QuickTime Classic ใน
Mp4Extractor
- เสียง:
- เพิ่มการรองรับ PCM แบบ Big Endian 24/32 บิตใน MP4 และ Matroska และแยกวิเคราะห์การเข้ารหัส PCM สำหรับ
lpcm
ใน MP4 - เพิ่มการรองรับการแยกเสียง Vorbis ใน MP4
- เพิ่ม
AudioSink.getFormatOffloadSupport(Format)
ที่ดึงข้อมูลระดับการรองรับการโอนข้อมูลไปยังอุปกรณ์ปลายทางที่ซิงค์สามารถให้บริการสำหรับรูปแบบผ่านDefaultAudioOffloadSupportProvider
ผลลัพธ์ที่ได้คือAudioOffloadSupport
ใหม่ที่มีisFormatSupported
,isGaplessSupported
และisSpeedChangeSupported
- เพิ่ม
AudioSink.setOffloadMode()
ที่ใช้กำหนดค่าการโอนข้อมูลในซิงค์เสียง ค่าเริ่มต้นคือAudioSink.OFFLOAD_MODE_DISABLED
- คุณเปิดใช้การย้ายข้อมูลไปยัง SD Card ผ่าน
setAudioOffloadPreference
ในTrackSelectionParameters
ได้ หากค่ากำหนดที่ตั้งไว้คือเปิดใช้ อุปกรณ์รองรับการโอนสำหรับรูปแบบนั้น และการเลือกแทร็กเป็นแทร็กเสียงแทร็กเดียว ระบบจะเปิดใช้การโอนเสียง - หากตั้งค่า
audioOffloadModePreference
เป็นAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
DefaultTrackSelector
จะเลือกเฉพาะแทร็กเสียงในกรณีที่ระบบรองรับรูปแบบของแทร็กนั้นในการโอน หากระบบไม่รองรับแทร็กเสียงในการโอน ระบบจะไม่เลือกแทร็กใดๆ - การปิดใช้การรองรับการเล่นแบบไม่มีช่วงพักระหว่างเพลงสำหรับการโอนเมื่อเป็น API ระดับก่อน 33 เนื่องจากปัญหาตำแหน่งการเล่นหลังจากการเปลี่ยนแทร็ก
- นําพารามิเตอร์
enableOffload
ออกจากลายเซ็นเมธอดDefaultRenderersFactory.buildAudioSink
- นำวิธีการชำระเงิน
DefaultAudioSink.Builder.setOffloadMode
ออก - นำค่า intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
ออก - เพิ่มการรองรับข้อมูลเมตาของ Opus แบบไม่มีช่วงพักระหว่างการเล่นขณะสตรีม
- อนุญาตให้กู้คืนโปรแกรมแสดงผลโดยปิดใช้การโอนหากเขียนครั้งแรกไม่สำเร็จ (#627)
- เปิดใช้การตั้งเวลาการออฟโหลดโดยค่าเริ่มต้นสำหรับการเล่นแบบออฟโหลดเฉพาะเสียง
- ลบ
ExoPlayer.experimentalSetOffloadSchedulingEnabled
และAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
- เปลี่ยนชื่อ
onExperimentalSleepingForOffloadChanged
เป็นonSleepingForOffloadChanged
และonExperimentalOffloadedPlayback
เป็นonOffloadedPlayback
- ย้าย
TrackSelectionParameters
อินเทอร์เฟซ และคำจำกัดความที่เกี่ยวข้องกับโหมดการโอนเสียงไปยังคลาสAudioOffloadPreferences
ภายใน - เพิ่มการเรียกกลับ
onAudioTrackInitialized
และonAudioTrackReleased
ไปยังAnalyticsListener
,AudioRendererEventListener
และAudioSink.Listener
- แก้ไขปัญหาบัฟเฟอร์เสียง DTS Express ต่ำกว่าเกณฑ์ (#650)
- แก้ไขข้อบกพร่องที่การตรวจสอบความสามารถของ E-AC3-JOC แสดงข้อผิดพลาด
IllegalArgumentException
(#677)
- เพิ่มการรองรับ PCM แบบ Big Endian 24/32 บิตใน MP4 และ Matroska และแยกวิเคราะห์การเข้ารหัส PCM สำหรับ
- วิดีโอ:
- อนุญาตให้
MediaCodecVideoRenderer
ใช้VideoFrameProcessor.Factory
ที่กําหนดเอง - แก้ไขข้อบกพร่องที่ไม่สามารถแสดงผลเฟรมแรกได้หากสตรีมเสียงเริ่มต้นด้วยการประทับเวลาเชิงลบ (#291)
- อนุญาตให้
- ข้อความ:
- นำ
ExoplayerCuesDecoder
ออก ตอนนี้TextRenderer
จะจัดการแทร็กข้อความที่มีsampleMimeType = application/x-media3-cues
โดยตรงโดยไม่ต้องใช้อินสแตนซ์SubtitleDecoder
- นำ
- ข้อมูลเมตา:
- ระบบจะไม่เรียกใช้
MetadataDecoder.decode
สำหรับตัวอย่าง "decode-only" อีกต่อไป เนื่องจากการติดตั้งใช้งานต้องแสดงผลเป็น null อยู่แล้ว
- ระบบจะไม่เรียกใช้
- ผล:
- เพิ่ม
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
การจัดคิวอินพุตบิตแมปตามการประทับเวลา - เปลี่ยน
VideoFrameProcessor.registerInputStream()
เป็น "ไม่บล็อก" แอปต้องใช้VideoFrameProcessor.Listener#onInputStreamRegistered()
- เปลี่ยนพารามิเตอร์
frameRate
และdurationUs
ของVideoFrameProcessor.queueInputBitmap
เป็นTimestampIterator
- เพิ่ม
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่ทำให้สตรีมแบบสด DASH แบบหลายช่วงเวลาซึ่งไม่ใช่รายการแรกในเพลย์ลิสต์แสดงข้อยกเว้นได้ (#571)
- ปล่อย StreamManager ก่อนที่จะเรียก
AdsLoader.destroy()
- อัปเกรด IMA SDK เป็นเวอร์ชัน 3.31.0
- เซสชัน:
- ตั้งค่าลักษณะการทํางานของบริการที่ทำงานอยู่เบื้องหน้าของการแจ้งเตือนเป็น
FOREGROUND_SERVICE_IMMEDIATE
ในDefaultMediaNotificationProvider
(#167) - ใช้เฉพาะ
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
API ระดับ 31 ขึ้นไปเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับ API ที่เลิกใช้งานในอุปกรณ์ Samsung (#167) - ใช้ตัวควบคุมการแจ้งเตือนสื่อเป็นพร็อกซีเพื่อตั้งค่าคําสั่งที่ใช้ได้และเลย์เอาต์ที่กําหนดเองซึ่งใช้ในการสร้างการแจ้งเตือนและเซสชันแพลตฟอร์ม
- แปลงเหตุการณ์ปุ่มสื่อที่
MediaSessionService.onStartCommand()
ได้รับภายใน Media3 แทนการส่งเหตุการณ์ไปยังเซสชันแพลตฟอร์มแล้วกลับไปที่ Media3 ซึ่งหมายความว่าตัวควบคุมการโทรจะเป็นตัวควบคุมการแจ้งเตือนสื่อเสมอ และแอปจะจดจำการโทรที่มาจากข้อความแจ้งเตือนในลักษณะเดียวกันได้ง่ายๆ ในทุกระดับ API ที่รองรับ - แก้ไขข้อบกพร่องที่
MediaController.getCurrentPosition()
ไม่เลื่อนไปข้างหน้าเมื่อเชื่อมต่อกับMediaSessionCompat
รุ่นเดิม - เพิ่ม
MediaLibrarySession.getSubscribedControllers(mediaId)
เพื่อใช้อ้างอิง - ลบล้าง
MediaLibrarySession.Callback.onSubscribe()
เพื่อยืนยันความพร้อมใช้งานของรหัสหลักที่ตัวควบคุมสมัครใช้บริการ หากดำเนินการสำเร็จ ระบบจะยอมรับการสมัครใช้บริการและเรียกใช้notifyChildrenChanged()
ทันทีเพื่อแจ้งให้เบราว์เซอร์ทราบ (#561) - เพิ่มโมดูลการสาธิตเซสชันสำหรับ Automotive OS และเปิดใช้การสาธิตเซสชันสำหรับ Android Auto
- อย่าตั้งค่าคิวของเซสชันเฟรมเวิร์กเมื่อ
COMMAND_GET_TIMELINE
ไม่พร้อมใช้งานสำหรับตัวควบคุมการแจ้งเตือนสื่อ เมื่อใช้ Android Auto เป็นเครื่องมือควบคุมไคลเอ็นต์ที่อ่านจากเซสชันเฟรมเวิร์ก ผลที่ได้คือปุ่มqueue
ใน UI ของ Android Auto จะไม่แสดง (#339) - ใช้
DataSourceBitmapLoader
โดยค่าเริ่มต้นแทนSimpleBitmapLoader
(#271, #327) - เพิ่ม
MediaSession.Callback.onMediaButtonEvent(Intent)
ที่อนุญาตให้แอปลบล้างการจัดการเหตุการณ์ของปุ่มสื่อเริ่มต้น
- ตั้งค่าลักษณะการทํางานของบริการที่ทำงานอยู่เบื้องหน้าของการแจ้งเตือนเป็น
- UI:
- เพิ่มการใช้งาน
Player.Listener
สำหรับอุปกรณ์ Wear OS ที่จัดการกับการระงับการเล่นเนื่องจากPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
โดยเปิดกล่องโต้ตอบของระบบเพื่อให้ผู้ใช้เชื่อมต่อเอาต์พุตเสียงที่เหมาะสม (เช่น หูฟังบลูทูธ) เครื่องเล่นจะเล่นต่อโดยอัตโนมัติหากมีอุปกรณ์ที่เหมาะสมเชื่อมต่ออยู่ภายในระยะหมดเวลาที่กําหนดได้ (ค่าเริ่มต้นคือ 5 นาที)
- เพิ่มการใช้งาน
- การดาวน์โหลด
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้า "การซิงค์ข้อมูล" สำหรับ
DownloadService
เพื่อให้เข้ากันได้กับ Android 14 เมื่อใช้บริการนี้ แอปจะต้องเพิ่มdataSync
เป็นforegroundServiceType
ในไฟล์ Manifest และเพิ่มสิทธิ์FOREGROUND_SERVICE_DATA_SYNC
ด้วย (#11239)
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้า "การซิงค์ข้อมูล" สำหรับ
- ส่วนขยาย HLS:
- รีเฟรชเพลย์ลิสต์สตรีมแบบสด HLS ด้วยช่วงเวลาที่คำนวณจากเวลาเริ่มต้นการโหลดครั้งล่าสุดแทนเวลาการโหลดเสร็จสมบูรณ์ครั้งล่าสุด (#663)
- ส่วนขยาย DASH:
- อนุญาตตัวระบุ DASH เดียวกันหลายรายการใน URL ของเทมเพลตกลุ่ม
- เพิ่มการรองรับเวอร์ชันทดลองสำหรับการแยกวิเคราะห์คำบรรยายระหว่างการดึงข้อมูล ซึ่งรองรับการผสานคำบรรยายที่ซ้อนทับกันได้ดียิ่งขึ้น รวมถึงแก้ปัญหาการกะพริบเมื่อเปลี่ยนระหว่างส่วนคำบรรยาย คุณเปิดใช้ฟีเจอร์นี้ได้โดยใช้
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288)
- ส่วนขยาย RTSP:
- แก้ไขเงื่อนไขการแข่งขันที่อาจทําให้
IndexOutOfBoundsException
เมื่อเปลี่ยนไปใช้ TCP หรือการเล่นค้างในบางสถานการณ์ - ตรวจสอบสถานะในการตั้งค่า RTSP เมื่อแสดงสถานะการโหลดของ
RtspMediaPeriod
(#577) - ละเว้นวิธีการส่งคำขอ Rtsp แบบกำหนดเองในส่วนหัวสาธารณะของการตอบกลับตัวเลือก (#613)
- ใช้ค่าระยะหมดเวลาของคำตอบการตั้งค่า RTSP ในช่วงเวลาที่ส่งคำขอตัวเลือก RTSP แบบ "Keep-Alive" (#662)
- แก้ไขเงื่อนไขการแข่งขันที่อาจทําให้
- ส่วนขยายโปรแกรมถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- เปิดตัวโมดูลตัวถอดรหัส MIDI ซึ่งรองรับการเล่นไฟล์ MIDI มาตรฐานโดยใช้ไลบรารี Jsyn เพื่อสังเคราะห์เสียง
- เพิ่ม
DecoderOutputBuffer.shouldBeSkipped
เพื่อทําเครื่องหมายบัฟเฟอร์เอาต์พุตที่ไม่ต้องแสดงโดยตรง ซึ่งวิธีนี้แนะนำมากกว่าC.BUFFER_FLAG_DECODE_ONLY
ที่จะเลิกใช้งาน - เพิ่ม
Decoder.setOutputStartTimeUs
และSimpleDecoder.isAtLeastOutputStartTimeUs
เพื่ออนุญาตให้โปรแกรมถอดรหัสส่งตัวอย่างที่ถอดรหัสเท่านั้นก่อนเวลาเริ่มต้น ซึ่งควรใช้แทนBuffer.isDecodeOnly
ที่จะเลิกใช้งาน - แก้ไขข้อบกพร่องในการเผยแพร่อาร์ติแฟกต์ตัวถอดรหัส MIDI ไปยังที่เก็บ Maven เปลี่ยนชื่ออาร์ติแฟกต์เป็น
media3-exoplayer-midi
(#734)
- ส่วนขยาย Leanback
- แก้ไขข้อบกพร่องที่การปิดใช้แพลตฟอร์มอาจทำให้เกิด
ArithmeticException
ในรหัส Leanback (#617)
- แก้ไขข้อบกพร่องที่การปิดใช้แพลตฟอร์มอาจทำให้เกิด
- ยูทิลิตีการทดสอบ
- ทําให้
TestExoPlayerBuilder
และFakeClock
เข้ากันได้กับการทดสอบ UI ของ Espresso และการทดสอบ UI ของ Compose การแก้ไขนี้ช่วยแก้ไขข้อบกพร่องที่การเล่นจะข้ามไปข้างหน้าแบบไม่แน่นอนระหว่างการโต้ตอบกับมุมมอง Espresso หรือ Compose
- ทําให้
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
และTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
ออก ให้ใช้Composition.Builder.setHdrMode(int)
และส่งComposition
ไปยังTransformer.start(Composition, String)
แทน - นําเมธอด
DownloadNotificationHelper.buildProgressNotification
ที่เลิกใช้งานออก แล้วใช้เมธอดที่ยังไม่เลิกใช้งานซึ่งใช้พารามิเตอร์notMetRequirements
แทน
- นำ
เวอร์ชัน 1.2.0-rc01
1 พฤศจิกายน 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-beta01
19 ตุลาคม 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-alpha02
29 กันยายน 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-alpha01
17 สิงหาคม 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.1
16 สิงหาคม 2023
- คลังทั่วไป:
- นำข้อกำหนด
multidex
ที่เพิ่มโดยไม่ตั้งใจออกจากโมดูลทั้งหมด (#499)
- นำข้อกำหนด
- ExoPlayer:
- แก้ไขปัญหาใน
PlaybackStatsListener
ที่ระบบสร้างPlaybackStats
ที่ไม่ถูกต้องหลังจากล้างเพลย์ลิสต์ - เพิ่มช่องเพิ่มเติมในการบันทึก Common Media Client Data (CMCD) ได้แก่ รูปแบบสตรีมมิง (sf), ประเภทสตรีม (st), เวอร์ชัน (v), อัตราบิตสูงสุด (tb), ระยะเวลาของออบเจ็กต์ (d), ปริมาณข้อมูลที่วัดได้ (mtp) และประเภทออบเจ็กต์ (ot) (#8699)
- แก้ไขปัญหาใน
- เสียง:
- แก้ไขข้อบกพร่องที่
Player.getState()
ไม่เคยเปลี่ยนเป็นSTATE_ENDED
เมื่อเล่นไฟล์ที่สั้นมาก (#538)
- แก้ไขข้อบกพร่องที่
- การโอนเสียงออก:
- ใส่ส่วนหัวรหัส Ogg และหน้าส่วนหัวความคิดเห็นไว้หน้าบิตสตรีมสำหรับการเล่น Opus ที่ส่งออกตาม RFC 7845
- วิดีโอ:
- H.265/HEVC: แก้ไขการแยกวิเคราะห์ข้อมูลภาพอ้างอิงระยะสั้นและระยะยาวของ SPS
- ข้อความ:
- CEA-608: เปลี่ยนตรรกะการตัดข้อความให้เหลือเฉพาะข้อความที่มองเห็นได้ ก่อนหน้านี้ ระบบจะรวมการเยื้องและระยะห่างแท็บไว้ด้วยเมื่อจํากัดความยาวของคำบอกใบ้ไว้ที่ 32 อักขระ (ซึ่งถูกต้องตามข้อกําหนดทางเทคนิค) (#11019)
- ส่วนขยาย IMA
- อัปเกรด IMA SDK เป็นเวอร์ชัน 3.30.3
- เซสชัน:
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุตัวรับเพื่อเข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
MediaController.Listener.onCustomLayoutChanged
แอปที่ต้องการส่งเลย์เอาต์ที่กำหนดเองที่แตกต่างกันไปยังตัวควบคุม Media3 ตัวอื่นจะทำได้ในMediaSession.Callback.onConnect
โดยใช้AcceptedResultBuilder
เพื่อให้แน่ใจว่าตัวควบคุมจะใช้เลย์เอาต์ที่กำหนดเองได้เมื่อเชื่อมต่อเสร็จสมบูรณ์ - แก้ไขกรณีที่
MediaLibraryServiceLegacyStub
ส่งข้อผิดพลาดไปยังResult
ที่ไม่รองรับ ซึ่งทำให้เกิดUnsupportedOperationException
(#78) - แก้ไขวิธีที่
PlayerWrapper
สร้างVolumeProviderCompat
โดยกำหนดvolumeControlType
ผ่านทั้งคำสั่งเดิม (COMMAND_ADJUST_DEVICE_VOLUME
และCOMMAND_SET_DEVICE_VOLUME
) และคำสั่งใหม่ (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
และCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554)
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุตัวรับเพื่อเข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
เวอร์ชัน 1.1.0
5 กรกฎาคม 2023
- คลังทั่วไป:
- เพิ่มเหตุผลในการระงับเส้นทางเสียงที่ไม่เหมาะสมและเล่นเมื่อพร้อม เปลี่ยนเหตุผลในการระงับนานเกินไป (#15)
- เพิ่มคำสั่งลงในโปรแกรมเล่น
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- เพิ่มเมธอดที่โอเวอร์โหลดลงใน Player ซึ่งช่วยให้ผู้ใช้ระบุ Flag ระดับเสียงได้ ดังนี้
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- เพิ่ม
Builder
สำหรับDeviceInfo
และเลิกใช้งานคอนสตรัคเตอร์ที่มีอยู่ - เพิ่ม
DeviceInfo.routingControllerId
เพื่อระบุตัวควบคุมการกำหนดเส้นทางสำหรับการเล่นจากระยะไกล - เพิ่ม
Player.replaceMediaItem(s)
เป็นทางลัดสำหรับเพิ่มและนำรายการออกที่ตำแหน่งเดียวกัน (#8046)
- ExoPlayer:
- อนุญาตให้ ExoPlayer ควบคุมวิธีการควบคุมระดับเสียงของอุปกรณ์ก็ต่อเมื่อเลือกใช้อย่างชัดเจนเท่านั้น ใช้
ExoPlayer.Builder.setDeviceVolumeControlEnabled
เพื่อเข้าถึงสิ่งต่อไปนี้getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
และsetDeviceVolume(int, int)
increaseDeviceVolume(int)
และincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
และdecreaseDeviceVolume(int, int)
- เพิ่ม
FilteringMediaSource
ที่อนุญาตให้กรองประเภทแทร็กที่ใช้ได้จากMediaSource
- เพิ่มการรองรับการรวมข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ในคำขอขาออกของรูปแบบสตรีมมิงแบบปรับเปลี่ยนได้ ได้แก่ DASH, HLS และ SmoothStreaming เราได้รวมช่องต่อไปนี้
br
,bl
,cid
,rtp
และsid
(#8699) โครงสร้าง API และเมธอด API- การบันทึก CMCD จะปิดอยู่โดยค่าเริ่มต้น ให้ใช้
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
เพื่อเปิดใช้ - ระบบจะเปิดใช้คีย์ทั้งหมดโดยค่าเริ่มต้น ให้ลบล้าง
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
เพื่อกรองคีย์ที่จะบันทึก - ลบล้าง
CmcdConfiguration.RequestConfig.getCustomData()
เพื่อเปิดใช้การบันทึกคีย์ที่กำหนดเอง
- การบันทึก CMCD จะปิดอยู่โดยค่าเริ่มต้น ให้ใช้
- เพิ่มการดำเนินการเพิ่มเติมลงในไฟล์ Manifest ของเดโมหลักเพื่อให้เริ่มแอปเดโมด้วยไฟล์
*.exolist.json
ที่กําหนดเองได้ง่ายขึ้น (#439) - เพิ่ม
ExoPlayer.setVideoEffects()
สำหรับการใช้Effect
ระหว่างการเล่นวิดีโอ - อัปเดต
SampleQueue
เพื่อจัดเก็บsourceId
เป็นlong
แทนint
ซึ่งจะเปลี่ยนลายเซ็นของเมธอดสาธารณะSampleQueue.sourceId
และSampleQueue.peekSourceId
- เพิ่มพารามิเตอร์ลงใน
LoadControl
เมธอดshouldStartPlayback
และonTracksSelected
ที่อนุญาตให้เชื่อมโยงเมธอดเหล่านี้กับMediaPeriod
ที่เกี่ยวข้อง - เปลี่ยนลายเซ็นของ
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
โดยเพิ่มพารามิเตอร์ไทม์ไลน์ที่มีช่วงเวลาที่มี UID ที่ใช้เป็นตัวคีย์ในแผนที่ ซึ่งจำเป็นต้องทำเพื่อหลีกเลี่ยงปัญหาการเรียกใช้พร้อมกันในสตรีมแบบสดหลายช่วงเวลา - เลิกใช้งาน
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
และBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
คุณเรียกใช้ตัวแปรของเมธอดที่ไม่มีmediaTimeOffsetUs
แทนได้ โปรดทราบว่าแม้จะใช้ตัวแปรที่เลิกใช้งานแล้ว ระบบก็จะไม่เพิ่มออฟเซตลงในstartTimeUs
และendTimeUs
ของออบเจ็กต์MediaLoadData
ที่ตัวจัดเตรียมข้อมูลส่ง - เปลี่ยนชื่อ
ExoTrackSelection.blacklist
เป็นexcludeTrack
และisBlacklisted
เป็นisTrackExcluded
- แก้ไขลักษณะการทำงานที่ไม่สอดคล้องกันระหว่าง
ExoPlayer.setMediaItem(s)
และaddMediaItem(s)
เมื่อเรียกใช้ในเพลย์ลิสต์ว่าง
- อนุญาตให้ ExoPlayer ควบคุมวิธีการควบคุมระดับเสียงของอุปกรณ์ก็ต่อเมื่อเลือกใช้อย่างชัดเจนเท่านั้น ใช้
- Transformer:
- นำ
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
ออก ให้ใช้ExoPlayerAssetLoader.Factory(MediaSource.Factory)
และTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
แทน - นำ
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
ออก - แก้ไขข้อบกพร่องที่การเปลี่ยนรูปแบบอาจค้าง (ส่งผลให้ตัวรวมข้อมูลหมดเวลา) หากมีการส่งสัญญาณสิ้นสุดสตรีมวิดีโอในขณะที่เฟรมอินพุตกำลังรอการประมวลผล
- ค้นหาตัวแปลงรหัสผ่าน
MediaCodecList
แทนการใช้ยูทิลิตีfindDecoder/EncoderForFormat
เพื่อขยายการรองรับ - นำการกำหนดค่าเฟรม B ใน
DefaultEncoderFactory
ออกเนื่องจากใช้ไม่ได้ในอุปกรณ์บางเครื่อง
- นำ
- การเลือกแทร็ก:
- เพิ่ม
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
ซึ่งปิดอยู่โดยค่าเริ่มต้น เมื่อเปิดใช้DefaultTrackSelector
จะทริกเกอร์การเลือกแทร็กใหม่เมื่อความสามารถของโปรแกรมแสดงผลมีการเปลี่ยนแปลง
- เพิ่ม
- เครื่องมือแยกข้อมูล:
- เสียง:
- แก้ไขข้อบกพร่องที่การเล่นบางอย่างไม่สำเร็จเมื่อเปิดใช้การทําอุโมงค์และ
AudioProcessors
ทํางานอยู่ เช่น สำหรับการตัดต่อแบบไม่มีช่วงพัก (#10847) - บรรจุเฟรม Opus ในแพ็กเก็ต Ogg ในการเล่นโดยตรง (การโอน)
- คาดคะเนตำแหน่งปัจจุบันขณะอยู่ในโหมดสลีปด้วยการกำหนดเวลาการโอน
- เพิ่ม
Renderer.release()
และAudioSink.release()
เพื่อเผยแพร่ทรัพยากรเมื่อสิ้นสุดวงจรชีวิตของผู้เล่น - ฟังการเปลี่ยนแปลงความสามารถของเสียงใน
DefaultAudioSink
เพิ่มพารามิเตอร์context
ที่จําเป็นในคอนสตรคเตอร์ของDefaultAudioSink
ซึ่งDefaultAudioSink
จะลงทะเบียนเป็นผู้ฟังของAudioCapabilitiesReceiver
และอัปเดตพร็อพเพอร์ตี้audioCapabilities
เมื่อได้รับแจ้งว่ามีการเปลี่ยนแปลงความสามารถ - เผยแพร่การเปลี่ยนแปลงความสามารถด้านเสียงผ่านเหตุการณ์ใหม่
onAudioCapabilitiesChanged
ในอินเทอร์เฟซAudioSink.Listener
และอินเทอร์เฟซใหม่RendererCapabilities.Listener
ซึ่งทริกเกอร์เหตุการณ์onRendererCapabilitiesChanged
- เพิ่ม
ChannelMixingAudioProcessor
เพื่อใช้การปรับขนาด/การผสมกับแชแนลเสียง - เพิ่มค่า int ใหม่
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
ลงในDecoderDiscardReasons
เพื่อทิ้งโปรแกรมถอดรหัสเสียงเมื่อใช้โหมดการข้ามได้หลังจากความสามารถด้านเสียงมีการเปลี่ยนแปลง - เพิ่มการรองรับการเล่น DTS Express และ DTS:X โดยตรง (#335)
- แก้ไขข้อบกพร่องที่การเล่นบางอย่างไม่สำเร็จเมื่อเปิดใช้การทําอุโมงค์และ
- วิดีโอ:
- ทําให้
MediaCodecVideoRenderer
รายงานVideoSize
ที่มีความกว้างและความสูงเป็น 0 เมื่อปิดใช้โปรแกรมแสดงผลPlayer.Listener.onVideoSizeChanged
จะเรียกใช้ตามความเหมาะสมเมื่อPlayer.getVideoSize()
มีการเปลี่ยนแปลง การเปลี่ยนแปลงนี้จะทำให้ขนาดวิดีโอของ ExoPlayer ที่มีMediaCodecVideoRenderer
มีความกว้างและความสูงเป็น 0 เมื่อPlayer.getCurrentTracks
ไม่รองรับวิดีโอ หรือยังไม่ได้กำหนดขนาดของแทร็กวิดีโอที่รองรับ
- ทําให้
- DRM:
- ลดระดับการเข้าถึงของเมธอดภายในเท่านั้นหลายรายการใน
DefaultDrmSession
ซึ่งไม่คาดว่าจะมีการเรียกใช้จากภายนอกแพ็กเกจ DRM ดังนี้void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- ลดระดับการเข้าถึงของเมธอดภายในเท่านั้นหลายรายการใน
- ตัวรวมสัญญาณ:
- เพิ่มคลังตัวรวมไฟล์ใหม่ซึ่งสามารถใช้สร้างไฟล์คอนเทนเนอร์ MP4
- ส่วนขยาย IMA
- เปิดใช้สตรีม DASH แบบสดหลายช่วงเวลาสำหรับ DAI โปรดทราบว่าการใช้งานในปัจจุบันยังไม่รองรับการกรอในสตรีมแบบสด (#10912)
- แก้ไขข้อบกพร่องที่ระบบแทรกกลุ่มโฆษณาใหม่ในสตรีมแบบสดเนื่องจากตําแหน่งเนื้อหาที่คำนวณในไทม์ไลน์ต่อเนื่องแตกต่างกันเล็กน้อย
- เซสชัน:
- เพิ่มเมธอดตัวช่วย
MediaSession.getControllerForCurrentRequest
เพื่อรับข้อมูลเกี่ยวกับตัวควบคุมที่เรียกใช้เมธอดPlayer
อยู่ - เพิ่ม
androidx.media3.session.MediaButtonReceiver
เพื่อเปิดใช้แอปเพื่อใช้เหตุการณ์ปุ่มสื่อที่ส่งโดยอุปกรณ์ เช่น หูฟังบลูทูธ เพื่อเริ่มเล่นอีกครั้ง (#167) - เพิ่มการใช้งานเริ่มต้นใน
MediaSession.Callback.onAddMediaItems
เพื่ออนุญาตให้ส่งMediaItems
ที่ขอไปยังPlayer
หากมีLocalConfiguration
(เช่น URI) (#282) - เพิ่มปุ่มคำสั่ง "กรอไปก่อนหน้า" และ "กรอไปถัดไป" ในมุมมองการแจ้งเตือนสื่อแบบกะทัดรัดโดยค่าเริ่มต้นสำหรับ Android 12 และต่ำกว่า (#410)
- เพิ่มการใช้งานเริ่มต้นใน
MediaSession.Callback.onAddMediaItems
เพื่ออนุญาตให้ส่งMediaItems
ที่ขอไปยังPlayer
หากมีLocalConfiguration
(เช่น URI) (#282) - เพิ่มปุ่มคำสั่ง "กรอไปก่อนหน้า" และ "กรอไปถัดไป" ในมุมมองการแจ้งเตือนสื่อแบบกะทัดรัดโดยค่าเริ่มต้นสำหรับ Android 12 และต่ำกว่า (#410)
- เพิ่มเมธอดตัวช่วย
- UI:
- เพิ่มเมธอด Util
shouldShowPlayButton
และhandlePlayPauseButtonAction
เพื่อเขียนองค์ประกอบ UI ที่กําหนดเองที่มีปุ่มเล่น/หยุดชั่วคราว
- เพิ่มเมธอด Util
- ส่วนขยาย RTSP:
- ส่วนขยาย DASH:
- นำการเลื่อนเวลาของสื่อออกจาก
MediaLoadData.startTimeMs
และMediaLoadData.endTimeMs
สำหรับสตรีม DASH หลายช่วงเวลา - แก้ไขข้อบกพร่องที่การเตรียมแหล่งข้อมูลสื่อ Dash แบบสดหลายช่วงเวลาอีกครั้งทำให้
IndexOutOfBoundsException
แสดงขึ้น (#10838)
- นำการเลื่อนเวลาของสื่อออกจาก
- ส่วนขยาย HLS:
- เพิ่ม
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
เพื่อตั้งค่าการหมดเวลาสำหรับเธรดการโหลดเพื่อรอให้TimestampAdjuster
เริ่มต้น หากการเริ่มต้นไม่เสร็จสมบูรณ์ก่อนหมดเวลา ระบบจะแสดงข้อยกเว้นPlaybackException
เพื่อหลีกเลี่ยงการเล่นที่หยุดชะงักไปเรื่อยๆ ระบบจะตั้งค่าการหมดเวลาเป็น 0 โดยค่าเริ่มต้น (#323)
- เพิ่ม
- ยูทิลิตีการทดสอบ
- ตรวจสอบชุดรูปแบบ URI ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน
DataSourceContractTest
- ตรวจสอบชุดรูปแบบ URI ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ใน
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำตัวสร้าง
DefaultAudioSink
ออก และใช้DefaultAudioSink.Builder
แทน - นำ
HlsMasterPlaylist
ออก แล้วใช้HlsMultivariantPlaylist
แทน - นำ
Player.stop(boolean)
ออก ให้ใช้Player.stop()
และPlayer.clearMediaItems()
(หากreset
คือtrue
) แทน - นำตัวสร้าง
SimpleCache
2 รายการที่เลิกใช้งานออก และใช้ตัวสร้างที่ไม่มีการเลิกใช้งานซึ่งรับDatabaseProvider
แทนเพื่อประสิทธิภาพที่ดียิ่งขึ้น - นำตัวสร้าง
DefaultBandwidthMeter
ออก และใช้DefaultBandwidthMeter.Builder
แทน - นำตัวสร้าง
DefaultDrmSessionManager
ออก และใช้DefaultDrmSessionManager.Builder
แทน - นำตัวสร้าง
HttpDataSource.InvalidResponseCodeException
2 รายการที่เลิกใช้งานออก ใช้ตัวสร้างที่ยังไม่เลิกใช้งานซึ่งยอมรับฟิลด์เพิ่มเติม(cause
,responseBody
) เพื่อปรับปรุงการบันทึกข้อผิดพลาด - นำ
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
และDownloadHelper.forSmoothStreaming
ออก ใช้DownloadHelper.forMediaItem
แทน - นำตัวสร้าง
DownloadService
ที่เลิกใช้งานออก ใช้ตัวสร้างที่ยังไม่เลิกใช้งานซึ่งมีตัวเลือกในการระบุพารามิเตอร์channelDescriptionResourceId
- นำค่าคงที่สตริงที่เลิกใช้งานสำหรับชุดอักขระ (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
และUTF16LE_NAME
) ออก และใช้ชุดอักขระ Kotlin จากแพ็กเกจkotlin.text
,java.nio.charset.StandardCharsets
หรือcom.google.common.base.Charsets
แทน - นำตัวสร้าง
WorkManagerScheduler
ที่เลิกใช้งานออก ใช้ตัวสร้างที่ไม่มีการเลิกใช้งานซึ่งมีตัวเลือกให้ระบุพารามิเตอร์Context
แทน - นำเมธอด
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
และcreateSampleFormat
ที่เลิกใช้งานแล้วออก ซึ่งใช้ในการสร้างอินสแตนซ์ของคลาสFormat
แต่ให้ใช้Format.Builder
เพื่อสร้างอินสแตนซ์ของFormat
แทน - นำเมธอดที่เลิกใช้งานแล้วออก เช่น
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
และcopyWithVideoSize
และใช้เมธอดFormat.buildUpon()
และcopyWithMaxInputSize
แทน - นำ
ExoPlayer.retry()
ที่เลิกใช้งานแล้วออก โปรดใช้prepare()
แทน - นำตัวสร้าง
DefaultTrackSelector
ที่มีอาร์กิวเมนต์เป็น 0 ซึ่งเลิกใช้งานแล้วออก โปรดใช้DefaultTrackSelector(Context)
แทน - นำตัวสร้าง
OfflineLicenseHelper
ที่เลิกใช้งานออก โปรดใช้OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
แทน - นำตัวสร้าง
DownloadManager
ที่เลิกใช้งานออก และใช้ตัวสร้างที่รับExecutor
แทน - นำตัวสร้าง
Cue
ที่เลิกใช้งานออก โปรดใช้Cue.Builder
แทน - นำตัวสร้าง
OfflineLicenseHelper
ที่เลิกใช้งานออก โปรดใช้OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
แทน - นำเมธอด
AnalyticsListener
4 รายการที่เลิกใช้งานแล้วออกonDecoderEnabled
ให้ใช้onAudioEnabled
และ/หรือonVideoEnabled
แทนonDecoderInitialized
ให้ใช้onAudioDecoderInitialized
และ/หรือonVideoDecoderInitialized
แทนonDecoderInputFormatChanged
ให้ใช้onAudioInputFormatChanged
และ/หรือonVideoInputFormatChanged
แทนonDecoderDisabled
ให้ใช้onAudioDisabled
และ/หรือonVideoDisabled
แทน
- นำ
Player.Listener.onSeekProcessed
และAnalyticsListener.onSeekProcessed
ที่ใช้ไม่ได้แล้วออก และใช้onPositionDiscontinuity
กับDISCONTINUITY_REASON_SEEK
แทน - นำ
ExoPlayer.setHandleWakeLock(boolean)
ออก แล้วใช้setWakeMode(int)
แทน - นำ
DefaultLoadControl.Builder.createDefaultLoadControl()
ที่เลิกใช้งานแล้วออก โปรดใช้build()
แทน - นำ
MediaItem.PlaybackProperties
ที่เลิกใช้งานแล้วออก โปรดใช้MediaItem.LocalConfiguration
แทน ฟิลด์ที่เลิกใช้งานแล้วMediaItem.playbackProperties
เป็นประเภทMediaItem.LocalConfiguration
แล้ว
- นำตัวสร้าง
เวอร์ชัน 1.1.0-rc01
21 มิถุนายน 2023
ใช้ เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.1.0-beta01
7 มิถุนายน 2023
ใช้ เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.1.0-alpha01
10 พฤษภาคม 2023
ใช้ เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.2
18 พฤษภาคม 2023
androidx.media3:media3-*:1.0.2
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.2 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.7
รุ่นนี้มีการเปลี่ยนแปลงต่อไปนี้นับตั้งแต่รุ่น 1.0.1
- ไลบรารีหลัก
- เพิ่ม
Buffer.isLastSample()
ที่ระบุว่าBuffer
มี FlagC.BUFFER_FLAG_LAST_SAMPLE
หรือไม่ - แก้ไขปัญหาที่อาจไม่แสดงผลเฟรมสุดท้ายหากนำตัวอย่างที่มีเฟรมสุดท้ายออกจากคิวโดยไม่อ่านตัวอย่าง "สิ้นสุดสตรีม" (#11079)
- เพิ่ม
- เครื่องมือแยกข้อมูล:
- แก้ไขการแยกวิเคราะห์ SPS ของ H.265 ในไฟล์ MPEG-TS โดยใช้ตรรกะการแยกวิเคราะห์ที่ใช้ซ้ำแล้วโดยโปรแกรมแยก RTSP และ MP4 (#303)
- ข้อความ:
- SSA: เพิ่มการรองรับไฟล์ UTF-16 หากเริ่มต้นด้วยเครื่องหมายลำดับไบต์ (#319)
- เซสชัน:
- แก้ไขข้อผิดพลาดที่
MediaController
ไม่อัปเดตคำสั่งที่ใช้ได้เมื่อเชื่อมต่อกับMediaSessionCompat
รุ่นเดิมที่อัปเดตการดำเนินการ - แก้ไขข้อบกพร่องที่ทำให้
MediaLibraryService
แสดงผลเป็นค่าว่างสําหรับการเรียกจาก UI ของระบบไปยังCallback.onGetLibraryRoot
ด้วยparams.isRecent == true
ใน API 30 (#355) - แก้ไขหน่วยความจำรั่วไหลของ
MediaSessionService
หรือMediaLibraryService
(#346) - แก้ไขข้อบกพร่องที่การรวม
Timeline
กับการอัปเดตตำแหน่งในMediaSession
อาจทำให้MediaController
แสดงIllegalStateException
- แก้ไขข้อผิดพลาดที่
เวอร์ชัน 1.0.1
18 เมษายน 2023
androidx.media3:media3-*:1.0.1
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.1 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.6
- ไลบรารีหลัก
- รีเซ็ตการลบล้างสตรีมแบบสดเป้าหมายเมื่อกรอไปยังตำแหน่งเริ่มต้น (#11051)
- แก้ไขข้อบกพร่องที่ทำให้สตรีมตัวอย่างเพลงว่างเปล่าในสื่ออาจทำให้การเล่นค้าง
- เซสชัน:
- แก้ไขข้อบกพร่องที่รายการคิวที่เหมือนกันหลายรายการซึ่งเผยแพร่โดย
MediaSessionCompat
เดิมทำให้เกิดข้อยกเว้นในMediaController
(#290) - เพิ่มการส่งต่อ
MediaSession.broadcastCustomCommand
ที่ขาดหายไปไปยังMediaControllerCompat.Callback.onSessionEvent
รุ่นเดิม (#293) - แก้ไขข้อบกพร่องที่การเรียกใช้
MediaSession.setPlayer
ไม่อัปเดตคำสั่งที่ใช้ได้ - แก้ไขปัญหาที่ระบบจะไม่สนใจอินสแตนซ์
TrackSelectionOverride
ที่ส่งจากMediaController
หากมีการอ้างอิงกลุ่มที่มีFormat.metadata
(#296) - แก้ไขปัญหาที่
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
ต้องพร้อมใช้งานเพื่อเข้าถึงข้อมูลเมตาผ่านMediaSessionCompat
รุ่นเดิม - แก้ไขปัญหาที่อินสแตนซ์
MediaSession
ในเธรดแบ็กกราวนด์ทําให้เกิดความขัดข้องเมื่อใช้ในMediaSessionService
(#318) - แก้ไขปัญหาที่ไลบรารีประกาศตัวรับปุ่มสื่อโดยที่แอปไม่ได้ตั้งใจ (#314)
- แก้ไขข้อบกพร่องที่รายการคิวที่เหมือนกันหลายรายการซึ่งเผยแพร่โดย
- DASH:
- แก้ไขการจัดการไทม์ไลน์กลุ่มที่ว่างเปล่า (#11014)
- RTSP:
- ลองอีกครั้งด้วย TCP หากการตั้งค่า RTSP ด้วย UDP ไม่สำเร็จโดยมีข้อผิดพลาด RTSP 461 UnsupportedTransport (#11069)
เวอร์ชัน 1.0.0
22 มีนาคม 2023
androidx.media3:media3-*:1.0.0
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.5
ไม่มีการเปลี่ยนแปลงนับตั้งแต่ 1.0.0-rc02
เวอร์ชัน 1.0.0-rc02
2 มีนาคม 2023
androidx.media3:media3-*:1.0.0-rc02
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-rc02 มีการคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.4
- ไลบรารีหลัก
- การดาวน์โหลด
- กำหนดความแตกต่างสูงสุดของเวลาเริ่มต้นของกลุ่ม 2 กลุ่มที่จะผสานใน
SegmentDownloader
และคลาสย่อยได้ (#248)
- กำหนดความแตกต่างสูงสุดของเวลาเริ่มต้นของกลุ่ม 2 กลุ่มที่จะผสานใน
- เสียง:
- วิดีโอ:
- แมปรูปแบบ HEVC HDR10 เป็น
HEVCProfileMain10HDR10
แทนHEVCProfileMain10
- เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ซึ่งทําให้ระบบทําเครื่องหมายสตรีม AVC 60 fps ว่าไม่รองรับ (#10898)
- แก้ไขปัญหาด้านประสิทธิภาพของเฟรมที่ปล่อยเมื่อเล่นสื่อที่มีอัตราเฟรมสูงกว่าอัตราการรีเฟรชหน้าจอมาก
- แมปรูปแบบ HEVC HDR10 เป็น
- แคสต์
- แก้ไข
STATE_IDLE
ชั่วคราวเมื่อเปลี่ยนระหว่างรายการสื่อ (#245)
- แก้ไข
- RTSP:
- จับ IllegalArgumentException ที่โยนในการแยกวิเคราะห์ RTSP ที่ไม่ถูกต้อง อธิบายข้อความตอบกลับ (#10971)
- เซสชัน:
- แก้ไขข้อบกพร่องที่ปุ่มเล่น/หยุดชั่วคราวของการแจ้งเตือนไม่อัปเดตตามสถานะโปรแกรมเล่น (#192)
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาไม่เริ่มขึ้นเนื่องจากไม่ได้รับการแจ้งเตือนเหตุการณ์
LOADED
รายการแรก (และในกรณีที่ไม่มีโฆษณา เหตุการณ์เดียว)
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาไม่เริ่มขึ้นเนื่องจากไม่ได้รับการแจ้งเตือนเหตุการณ์
เวอร์ชัน 1.0.0-rc01
16 กุมภาพันธ์ 2023
androidx.media3:media3-*:1.0.0-rc01
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-rc01 มีการคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.3
- ไลบรารีหลัก
- ปรับแต่งตรรกะการจัดลำดับโปรแกรมถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากําหนดของ
MediaCodecSelector
แม้ว่าโปรแกรมถอดรหัสจะรายงานว่าอาจเล่นสื่อได้อย่างมีประสิทธิภาพ ตัวอย่างเช่น เมื่อใช้ตัวเลือกเริ่มต้น ระบบจะเลือกเครื่องมือถอดรหัสฮาร์ดแวร์ที่รองรับเฉพาะฟังก์ชันการทำงานแทนเครื่องมือถอดรหัสซอฟต์แวร์ที่รองรับรูปแบบอย่างเต็มรูปแบบ (#10604) - เพิ่ม
ExoPlayer.Builder.setPlaybackLooper
ที่ตั้งค่าเธรดการเล่นที่มีอยู่สำหรับอินสแตนซ์ ExoPlayer ใหม่ - อนุญาตให้ล้างตัวช่วยของเครื่องมือจัดการการดาวน์โหลด (#10776)
- เพิ่มพารามิเตอร์ลงใน
BasePlayer.seekTo
เพื่อระบุคําสั่งที่ใช้สําหรับการกรอ - ใช้ธีมเมื่อโหลด drawable ใน API 21 ขึ้นไป (#220)
- เพิ่ม
ConcatenatingMediaSource2
ที่ช่วยให้รวมรายการสื่อหลายรายการไว้ในหน้าต่างเดียวได้ (#247)
- ปรับแต่งตรรกะการจัดลำดับโปรแกรมถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากําหนดของ
- เครื่องมือแยกข้อมูล:
- แสดง
ParserException
แทนNullPointerException
หากตารางตัวอย่าง (stbl) ไม่มีคำอธิบายตัวอย่าง (stsd) ที่จำเป็นเมื่อแยกวิเคราะห์อะตอม trak - ข้ามตัวอย่างอย่างถูกต้องเมื่อกรอไปยังเฟรมการซิงค์ใน fMP4 โดยตรง (#10941)
- แสดง
- เสียง:
- ใช้อัตราบิตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำสำหรับ
AudioTrack
ในการเล่นโดยตรง (การส่งผ่าน)
- ใช้อัตราบิตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำสำหรับ
- ข้อความ:
- แก้ไข
TextRenderer
ส่งอินเด็กซ์ที่ไม่ถูกต้อง (ติดลบ) ไปยังSubtitle.getEventTime
หากไฟล์คำบรรยายไม่มีคำบอกทาง - SubRip: เพิ่มการรองรับไฟล์ UTF-16 หากเริ่มต้นด้วยเครื่องหมายการจัดลำดับไบต์
- แก้ไข
- ข้อมูลเมตา:
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaType
เพื่อระบุประเภทเนื้อหาหรือประเภทโฟลเดอร์ที่ข้อมูลเมตาอธิบาย - เพิ่ม
MediaMetadata.isBrowsable
แทนMediaMetadata.folderType
เราจะเลิกใช้งานประเภทโฟลเดอร์นี้ในรุ่นถัดไป
- DASH:
- เพิ่มการแยกวิเคราะห์แบบเต็มสำหรับชุดการปรับรูปภาพ รวมถึงจำนวนไทล์ (#3752)
- UI:
- แก้ไขรายการที่เลิกใช้งานแล้ว
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
เพื่อให้แน่ใจว่าระบบจะส่งการเปลี่ยนแปลงระดับการมองเห็นไปยัง Listener ที่ลงทะเบียนไว้ (#229) - แก้ไขลําดับของตัวควบคุมโปรแกรมเล่นตรงกลางใน
PlayerView
เมื่อใช้เลย์เอาต์แบบอ่านจากขวาไปซ้าย (RTL) (#227)
- แก้ไขรายการที่เลิกใช้งานแล้ว
- เซสชัน:
- เพิ่ม
SimpleBasePlayer
นามธรรมเพื่อช่วยใช้อินเทอร์เฟซPlayer
สำหรับโปรแกรมเล่นที่กำหนดเอง - เพิ่มเมธอดตัวช่วยเพื่อแปลงโทเค็นเซสชันของแพลตฟอร์มเป็น Media3
SessionToken
(#171) - ใช้
onMediaMetadataChanged
เพื่อทริกเกอร์การอัปเดตเซสชันสื่อของแพลตฟอร์ม (#219) - เพิ่มเซสชันสื่อเป็นอาร์กิวเมนต์ของ
getMediaButtons()
ของDefaultMediaNotificationProvider
และใช้ลิสต์แบบคงที่เพื่อความชัดเจน (#216) - เพิ่ม
onSetMediaItems
Listener ของคอลแบ็กเพื่อให้มีวิธีแก้ไข/ตั้งค่ารายการ ดัชนีเริ่มต้น และตำแหน่งตามเซสชันก่อนที่จะตั้งค่าในเพลเยอร์ (#156)MediaItem
- หลีกเลี่ยงการตรวจจับการแตะสองครั้งสำหรับเหตุการณ์ปุ่มสื่อที่ไม่ใช่บลูทูธ (#233)
- ทําให้
QueueTimeline
มีประสิทธิภาพมากขึ้นในกรณีที่สถานะเซสชันเดิมไม่ชัดเจน (#241)
- เพิ่ม
- ข้อมูลเมตา:
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaType
เพื่อระบุประเภทเนื้อหาหรือประเภทโฟลเดอร์ที่ข้อมูลเมตาอธิบาย - เพิ่ม
MediaMetadata.isBrowsable
แทนMediaMetadata.folderType
เราจะเลิกใช้งานประเภทโฟลเดอร์นี้ในรุ่นถัดไป
- ส่วนขยายแคสต์
- อัปเกรด Cast SDK เป็นเวอร์ชัน 21.2.0
- ส่วนขยาย IMA
- นำโปรแกรมฟังเสียงของ
ImaServerSideAdInsertionMediaSource
ออกจากเธรดแอปพลิเคชันเพื่อหลีกเลี่ยงปัญหาการแยกเธรด - เพิ่มพร็อพเพอร์ตี้
focusSkipButtonWhenAvailable
ลงในImaServerSideAdInsertionMediaSource.AdsLoader.Builder
เพื่อส่งคำขอมุ่งเน้นไปที่ปุ่มข้ามในอุปกรณ์ทีวีและตั้งค่าเป็น "จริง" โดยค่าเริ่มต้น - เพิ่มเมธอด
focusSkipButton()
ลงในImaServerSideAdInsertionMediaSource.AdsLoader
เพื่อส่งคําขอโฟกัสปุ่มข้ามแบบเป็นโปรแกรม - อัปเกรด IMA SDK เป็นเวอร์ชัน 3.29.0
- นำโปรแกรมฟังเสียงของ
- แอปเดโม:
- ขอสิทธิ์การแจ้งเตือนสำหรับการแจ้งเตือนการดาวน์โหลดเมื่อรันไทม์ (#10884)
เวอร์ชัน 1.0.0-beta03
22 พฤศจิกายน 2022
androidx.media3:media3-*:1.0.0-beta03
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-beta03 มีการคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.2
- ไลบรารีหลัก
- เพิ่ม
ExoPlayer.isTunnelingEnabled
เพื่อตรวจสอบว่าเปิดใช้การทําอุโมงค์สําหรับแทร็กที่กำลังเลือกอยู่หรือไม่ (#2518) - เพิ่ม
WrappingMediaSource
เพื่อทำให้การตัดMediaSource
รายการเดียวง่ายขึ้น (#7279) - ทิ้งบัฟเฟอร์ด้านหลังก่อนที่การเล่นจะค้างเนื่องจากหน่วยความจำไม่เพียงพอ
- ปิดบล็อกการติดตาม "doSomeWork" เมื่อเปิดใช้การโอน
- แก้ไขปัญหาการติดตามเซสชันด้วยการกรอไปข้างหน้าอย่างรวดเร็วใน
PlaybackStatsListener
(#180) - ส่งการเรียกกลับ
onMediaItemTransition
ที่ขาดหายไปเมื่อเรียกseekToNext
หรือseekToPrevious
ในเพลย์ลิสต์ที่มีรายการเดียว (#10667) - เพิ่ม
Player.getSurfaceSize
ที่จะแสดงผลขนาดของพื้นผิวที่แสดงผลวิดีโอ - แก้ไขข้อบกพร่องที่การนำผู้ฟังออกระหว่างการเผยแพร่เพลเยอร์อาจทำให้เกิดข้อผิดพลาด
IllegalStateException
(#10758)
- เพิ่ม
- บิลด์:
- บังคับใช้
compileSdkVersion
ขั้นต่ำเพื่อหลีกเลี่ยงข้อผิดพลาดในการคอมไพล์ (#10684) - หลีกเลี่ยงการเผยแพร่บล็อกเมื่อรวมอยู่ในบิลด์ Gradle อื่น
- บังคับใช้
- การเลือกแทร็ก
- แสดงแทร็กอื่นๆ แทน Dolby Vision หากจอแสดงผลไม่รองรับ (#8944)
- การดาวน์โหลด
- วิดีโอ:
- ลองใช้โปรแกรมถอดรหัสอื่นสำหรับ Dolby Vision หากจอแสดงผลไม่รองรับ (#9794)
- เสียง:
- ใช้
SingleThreadExecutor
สำหรับการปล่อยอินสแตนซ์AudioTrack
เพื่อหลีกเลี่ยงข้อผิดพลาด OutOfMemory เมื่อปล่อยผู้เล่นหลายรายพร้อมกัน (#10057) - เพิ่ม
AudioOffloadListener.onExperimentalOffloadedPlayback
สำหรับสถานะการโอนไฟล์ออฟโหลดของ AudioTrack (#134) - ทำให้
AudioTrackBufferSizeProvider
เป็นอินเทอร์เฟซสาธารณะ - เพิ่ม
ExoPlayer.setPreferredAudioDevice
เพื่อตั้งค่าอุปกรณ์เอาต์พุตเสียงที่ต้องการ (#135) - เปลี่ยนชื่อ
androidx.media3.exoplayer.audio.AudioProcessor
เป็นandroidx.media3.common.audio.AudioProcessor
- แมปเสียง 8 ช่องและ 12 ช่องไปยังมาสก์ช่อง 7.1 และ 7.1.4 ตามลำดับใน Android ทุกเวอร์ชัน (#10701)
- ใช้
- ข้อมูลเมตา:
- ตอนนี้คุณกำหนดค่า
MetadataRenderer
ให้แสดงผลข้อมูลเมตาได้ทันทีที่ข้อมูลพร้อมใช้งาน สร้างอินสแตนซ์ด้วยMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
เพื่อระบุว่าโปรแกรมแสดงผลจะแสดงข้อมูลเมตาก่อนเวลาหรือจะแสดงข้อมูลเมตาให้สอดคล้องกับตําแหน่งโปรแกรมเล่น
- ตอนนี้คุณกำหนดค่า
- DRM:
- แก้ปัญหาข้อบกพร่องในการใช้งาน ClearKey ของ Android 13 ซึ่งแสดงผล URL ใบอนุญาตที่ไม่ว่างเปล่าแต่ใช้งานไม่ได้
- แก้ไขข้อผิดพลาด
setMediaDrmSession failed: session not opened
เมื่อสลับระหว่างรูปแบบ DRM ในเพลย์ลิสต์ (เช่น จาก Widevine เป็น ClearKey)
- ข้อความ:
- CEA-608: ตรวจสอบว่าคำสั่งสวิตช์บริการในช่อง 2 ได้รับการจัดการอย่างถูกต้อง (#10666)
- DASH:
- แยกวิเคราะห์
EventStream.presentationTimeOffset
จากไฟล์ Manifest (#10460)
- แยกวิเคราะห์
- UI:
- ใช้การลบล้างปัจจุบันของโปรแกรมเล่นเป็นค่าที่กำหนดล่วงหน้าใน
TrackSelectionDialogBuilder
(#10429)
- ใช้การลบล้างปัจจุบันของโปรแกรมเล่นเป็นค่าที่กำหนดล่วงหน้าใน
- เซสชัน:
- ตรวจสอบว่าระบบเรียกใช้คําสั่งตามลําดับที่ถูกต้องเสมอ แม้ว่าคําสั่งบางอย่างจะต้องใช้การแก้ไขแบบไม่พร้อมกัน (#85)
- เพิ่ม
DefaultMediaNotificationProvider.Builder
เพื่อสร้างDefaultMediaNotificationProvider
อินสแตนซ์ ผู้สร้างสามารถกําหนดค่ารหัสการแจ้งเตือน รหัสช่องทางการแจ้งเตือน และชื่อช่องทางการแจ้งเตือนที่ผู้ให้บริการใช้ นอกจากนี้ ให้เพิ่มเมธอดDefaultMediaNotificationProvider.setSmallIcon(int)
เพื่อตั้งค่าไอคอนการแจ้งเตือนขนาดเล็ก (#104) - ตรวจสอบว่าระบบไม่ได้ทิ้งคําสั่งที่ส่งก่อน
MediaController.release()
(#99) SimpleBitmapLoader
สามารถโหลดบิตแมปจาก URI ของfile://
ได้ (#108)- แก้ไขการยืนยันที่ป้องกันไม่ให้
MediaController
กรอข้ามโฆษณาในระยะเวลาหนึ่ง (#122) - เมื่อการเล่นสิ้นสุดลง ระบบจะหยุด
MediaSessionService
จากเบื้องหน้าและแสดงการแจ้งเตือนเพื่อเริ่มเล่นรายการสื่อที่เล่นล่าสุดอีกครั้ง (#112) - อย่าเริ่มบริการที่ทำงานอยู่เบื้องหน้าด้วย Intent ที่รอดำเนินการเพื่อหยุดชั่วคราว (#167)
- ซ่อน "ป้าย" ที่เชื่อมโยงกับการแจ้งเตือนที่สร้างขึ้นโดย
DefaultNotificationProvider
ใน API 26 และ API 27 ด้วยตนเอง (ระบบจะซ่อนป้ายโดยอัตโนมัติใน API 28 ขึ้นไป) (#131) - แก้ไขข้อบกพร่องที่การเชื่อมต่อ Binder ครั้งที่ 2 จาก MediaSession รุ่นเดิมกับ MediaController ของ Media3 ทําให้เกิด IllegalStateException (#49)
- RTSP:
- IMA:
- ส่วนขยาย FFmpeg
- เพิ่ม Flag ที่จำเป็นใหม่เพื่อลิงก์ไลบรารี FFmpeg กับ NDK 23.1.7779620 ขึ้นไป (#9933)
- ส่วนขยาย AV1
- อัปเดตเวอร์ชัน CMake เพื่อหลีกเลี่ยงการทำงานร่วมกันไม่ได้กับ Android Studio เวอร์ชันล่าสุด (#9933)
- ส่วนขยายแคสต์
- ใช้
getDeviceInfo()
เพื่อให้สามารถระบุCastPlayer
เมื่อควบคุมการเล่นด้วยMediaController
(#142)
- ใช้
- Transformer:
- เพิ่มตัวจับเวลาเฝ้าติดตามตัวรวมสัญญาณเพื่อตรวจหาว่าการสร้างตัวอย่างเอาต์พุตช้าเกินไปหรือไม่
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
Transformer.Builder.setOutputMimeType(String)
ออก ฟีเจอร์นี้ถูกนําออกแล้ว ประเภท MIME จะเป็น MP4 เสมอเมื่อใช้โปรแกรมรวมไฟล์เริ่มต้น
- นำ
เวอร์ชัน 1.0.0-beta02
21 กรกฎาคม 2022
androidx.media3:media3-*:1.0.0-beta02
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-beta02 มีการคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.1
- ไลบรารีหลัก
- ตรวจสอบว่าการเปลี่ยน
ShuffleOrder
ด้วยExoPlayer.setShuffleOrder
ส่งผลให้มีการเรียกใช้Player.Listener#onTimelineChanged
ด้วยreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889) - สำหรับสื่อแบบ Progressive ให้ใส่เฉพาะแทร็กที่กำหนดไว้ในตำแหน่งที่บัฟเฟอร์ไว้ (#10361)
- อนุญาตให้ใช้โปรแกรมบันทึกที่กำหนดเองสำหรับเอาต์พุตบันทึกทั้งหมดของ ExoPlayer (#9752)
- แก้ไขการใช้งาน
setDataSourceFactory
ในDefaultMediaSourceFactory
ซึ่งใช้งานไม่ได้ในบางกรณี (#116)
- ตรวจสอบว่าการเปลี่ยน
- เครื่องมือแยกข้อมูล:
- DASH:
- แยกวิเคราะห์ URL ใบอนุญาต ClearKey จากไฟล์ Manifest (#10246)
- UI:
- ตรวจสอบว่า TalkBack ประกาศตัวเลือกความเร็วที่ใช้งานอยู่ในปัจจุบันในเมนูการควบคุมการเล่น (#10298)
- RTSP:
- เพิ่มการจัดการแพ็กเก็ต VP8 ที่กระจัดกระจาย (#110)
- ส่วนขยาย Leanback
- ฟังการเปลี่ยนแปลง
playWhenReady
ในLeanbackAdapter
(10420)
- ฟังการเปลี่ยนแปลง
- แคสต์
เวอร์ชัน 1.0.0-beta01
16 มิถุนายน 2022
androidx.media3:media3-*:1.0.0-beta01
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้
ซึ่งสอดคล้องกับรุ่น ExoPlayer 2.18.0
- ไลบรารีหลัก
- เปิดใช้การรองรับการวินิจฉัยแพลตฟอร์ม Android ผ่าน
MediaMetricsManager
ExoPlayer จะส่งต่อเหตุการณ์การเล่นและข้อมูลประสิทธิภาพไปยังแพลตฟอร์ม ซึ่งจะช่วยระบุข้อมูลประสิทธิภาพของระบบและการแก้ไขข้อบกพร่องในอุปกรณ์ นอกจากนี้ Google อาจรวบรวมข้อมูลนี้ด้วยหากผู้ใช้อุปกรณ์เปิดใช้การแชร์ข้อมูลการใช้งานและการวินิจฉัย แอปสามารถเลือกไม่เข้าร่วมการวินิจฉัยแพลตฟอร์มสําหรับ ExoPlayer ได้โดยใช้ExoPlayer.Builder.setUsePlatformDiagnostics(false)
- แก้ไขข้อบกพร่องที่ระบบรีเซ็ตแทร็กบ่อยเกินไปเมื่อใช้
MergingMediaSource
เช่น เมื่อโหลดคำบรรยายจากภายนอกและเปลี่ยนคำบรรยายที่เลือกระหว่างการเล่น (#10248) - หยุดตรวจหาประเภทเครือข่าย 5G-NSA ใน API 29 และ 30 การเล่นเหล่านี้จะถือว่าใช้เครือข่าย 4G
- ไม่อนุญาตให้ส่ง
null
ไปยังMediaSource.Factory.setDrmSessionManagerProvider
และMediaSource.Factory.setLoadErrorHandlingPolicy
คุณสามารถส่งอินสแตนซ์ของDefaultDrmSessionManagerProvider
และDefaultLoadErrorHandlingPolicy
ได้อย่างชัดเจนหากจำเป็น - เพิ่ม
MediaItem.RequestMetadata
เพื่อแสดงข้อมูลเมตาที่จําเป็นสําหรับเล่นสื่อเมื่อไม่ทราบLocalConfiguration
ที่แน่นอน และนำMediaMetadata.mediaUrl
ออกด้วยเนื่องจากตอนนี้รวมอยู่ในRequestMetadata
แล้ว - เพิ่ม
Player.Command.COMMAND_SET_MEDIA_ITEM
เพื่ออนุญาตให้ผู้เล่นตั้งค่ารายการเดียว
- เปิดใช้การรองรับการวินิจฉัยแพลตฟอร์ม Android ผ่าน
- การเลือกแทร็ก
- ผสานชั้นเรียน
TrackSelectionOverrides
เข้ากับTrackSelectionParameters
และเลื่อนชั้นTrackSelectionOverride
เป็นชั้นเรียนระดับบนสุด - เปลี่ยนชื่อ
TracksInfo
เป็นTracks
และTracksInfo.TrackGroupInfo
เป็นTracks.Group
Player.getCurrentTracksInfo
และPlayer.Listener.onTracksInfoChanged
เปลี่ยนชื่อเป็นPlayer.getCurrentTracks
และPlayer.Listener.onTracksChanged
แล้ว ซึ่งรวมถึง "การเลิกเลิกใช้งาน" ชื่อเมธอดPlayer.Listener.onTracksChanged
แต่มีพารามิเตอร์ประเภทอื่น - เปลี่ยน
DefaultTrackSelector.buildUponParameters
และDefaultTrackSelector.Parameters.buildUpon
ให้แสดงผลเป็นDefaultTrackSelector.Parameters.Builder
แทนDefaultTrackSelector.ParametersBuilder
ที่เลิกใช้งานแล้ว - เพิ่ม
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
ซึ่งเปิดใช้โดยค่าเริ่มต้น เมื่อเปิดใช้DefaultTrackSelector
จะเลือกแทร็กเสียงที่มีจำนวนช่องไม่เกินความสามารถของเอาต์พุตอุปกรณ์ ในอุปกรณ์แบบพกพาDefaultTrackSelector
จะเลือกรูปแบบเสียงสเตอริโอ/โมโนมากกว่ารูปแบบเสียงหลายช่อง เว้นแต่ว่ารูปแบบหลายช่องจะเป็นเสียงรอบทิศทาง (Android 12L ขึ้นไป) หรือเป็นรูปแบบเสียงเซอร์ราวด์ Dolby นอกจากนี้ ในอุปกรณ์ที่รองรับการจัดวางเสียงDefaultTrackSelector
จะตรวจสอบการเปลี่ยนแปลงในพร็อพเพอร์ตี้การจัดวางเสียง และเรียกใช้การเลือกแทร็กใหม่ตามการเปลี่ยนแปลงเหล่านี้ อุปกรณ์ที่มีtelevision
โหมด UI จะยกเว้นจากข้อจำกัดเหล่านี้และระบบจะเลือกรูปแบบที่มีจำนวนแชแนลสูงสุด หากต้องการเปิดใช้ฟีเจอร์นี้ อินสแตนซ์DefaultTrackSelector
ต้องสร้างขึ้นด้วยContext
- ผสานชั้นเรียน
- วิดีโอ:
- เปลี่ยนชื่อ
DummySurface
เป็นPlaceholderSurface
- เพิ่มการรองรับ AV1 ลงใน
MediaCodecVideoRenderer.getCodecMaxInputSize
- เปลี่ยนชื่อ
- เสียง:
- ใช้โปรแกรมถอดรหัสเสียง AC3 ของ LG ที่โฆษณาประเภท MIME ที่ไม่เป็นไปตามมาตรฐาน
- เปลี่ยนประเภทผลลัพธ์ของ
AudioAttributes.getAudioAttributesV21()
จากandroid.media.AudioAttributes
เป็นคลาสAudioAttributesV21
wrapper ใหม่ เพื่อป้องกันไม่ให้การยืนยัน ART ใน API < 21 ทำงานช้า - ค้นหาแพลตฟอร์ม (API 29 ขึ้นไป) หรือใช้จำนวนช่องการเข้ารหัสเสียงสำหรับการส่งผ่านเสียงเมื่อไม่ได้ตั้งค่าจำนวนช่องเสียงของรูปแบบ ซึ่งเกิดขึ้นเมื่อเตรียม HLS แบบไม่มีข้อมูลโค้ด (10204)
- กำหนดค่า
AudioTrack
ด้วยมาสก์ช่องAudioFormat.CHANNEL_OUT_7POINT1POINT4
หากตัวถอดรหัสแสดงผลเสียง PCM 12 ช่อง (#10322
- DRM
- ตรวจสอบว่าเซสชัน DRM ได้รับการอัปเดตอย่างถูกต้องเสมอเมื่อกรอไปข้างหน้าหรือกรอกลับทันทีหลังจากมีการเปลี่ยนแปลงรูปแบบ (10274)
- ข้อความ:
- เปลี่ยน
Player.getCurrentCues()
ให้แสดงผลCueGroup
แทนList<Cue>
- SSA: รองรับการตั้งค่าสไตล์
OutlineColour
เมื่อBorderStyle == 3
(เช่นOutlineColour
ตั้งค่าพื้นหลังของคำบอกใบ้) (#8435) - CEA-708: แยกวิเคราะห์ข้อมูลออกเป็นบล็อกบริการหลายรายการและละเว้นบล็อกที่ไม่ได้เชื่อมโยงกับหมายเลขบริการที่เลือกอยู่ในปัจจุบัน
- นำ
RawCcExtractor
ออก ซึ่งใช้เพื่อจัดการรูปแบบคำบรรยายภายในของ Google เท่านั้น
- เปลี่ยน
- เครื่องมือแยกข้อมูล:
- UI:
- แก้ไขการแสดงเหตุการณ์ไปยัง
OnClickListener
ที่กําหนดในPlayerView
ในกรณีที่useController=false
(#9605) และแก้ไขการส่งเหตุการณ์ไปยังOnLongClickListener
สําหรับการกําหนดค่ามุมมองทั้งหมดด้วย - แก้ไขการประมวลผลลำดับเหตุการณ์การแตะซึ่งออกจากขอบเขตของ
PlayerView
ก่อนACTION_UP
เป็นคลิกอย่างไม่ถูกต้อง (#9861) - แก้ไขปัญหาการช่วยเหลือพิเศษของ
PlayerView
ที่การแตะอาจสลับการเล่นแทนที่จะซ่อนการควบคุม (#8627) - เขียน
TrackSelectionView
และTrackSelectionDialogBuilder
ใหม่ให้ทำงานกับอินเทอร์เฟซPlayer
แทนExoPlayer
วิธีนี้ช่วยให้ใช้มุมมองกับการใช้งานPlayer
อื่นๆ ได้ และนำการพึ่งพาจากโมดูล UI ไปยังโมดูล ExoPlayer ออก การเปลี่ยนแปลงนี้ถือเป็นการเปลี่ยนแปลงครั้งสําคัญ - ไม่แสดงแทร็กข้อความที่บังคับในตัวเลือกแทร็ก
PlayerView
และเลือกแทร็กข้อความที่บังคับที่เหมาะสมไว้เสมอหากเลือก "ไม่มี" (#9432)
- แก้ไขการแสดงเหตุการณ์ไปยัง
- DASH:
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
AudioChannelConfiguration
ซึ่งจะเปิดใช้การส่งผ่านเสียงสำหรับสตรีม DTS อีกครั้ง (#10159) - ไม่อนุญาตให้ส่ง
null
ไปยังDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
คุณสามารถส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory
อย่างชัดเจนได้หากจำเป็น
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
- HLS:
- เปลี่ยนกลับไปใช้การเตรียมแบบเป็นกลุ่มหากแอตทริบิวต์ CODECS ของเพลย์ลิสต์ไม่มีตัวแปลงรหัสเสียง (#10065)
- ไม่อนุญาตให้ส่ง
null
ไปยังHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
และHlsMediaSource.Factory.setPlaylistTrackerFactory
คุณสามารถส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
หรือการอ้างอิงถึงDefaultHlsPlaylistTracker.FACTORY
อย่างชัดเจนได้หากจำเป็น
- สตรีมมิงแบบราบรื่น:
- ไม่อนุญาตให้ส่ง
null
ไปยังSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
คุณสามารถส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory
อย่างชัดเจนได้หากจำเป็น
- ไม่อนุญาตให้ส่ง
- RTSP:
- เพิ่มโปรแกรมอ่าน RTP สำหรับ H263 (#63)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ MPEG4 (#35)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ HEVC (#36)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ AMR ปัจจุบันรองรับเฉพาะสตรีม AMR แบบโมโนแชแนลที่ไม่มีการสับเปลี่ยนเท่านั้น ระบบไม่รองรับเพย์โหลด AMR RTP แบบคอมโพเนนต์ (#46)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ VP8 (#47)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ WAV (#56)
- แก้ไขส่วนหัวของการตรวจสอบสิทธิ์พื้นฐาน RTSP (#9544)
- หยุดตรวจสอบฟิลด์ SDP ที่ต้องกรอกเนื่องจาก ExoPlayer ไม่จำเป็นต้องใช้ (#10049)
- Throw checked exception when parsing RTSP timing (#10165)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ VP9 (#47)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ OPUS (#53)
- แหล่งข้อมูล
- เปลี่ยนชื่อ
DummyDataSource
เป็นPlaceholderDataSource
- วิธีแก้ปัญหาการจัดการการขัดจังหวะของ OkHttp
- เปลี่ยนชื่อ
- เซสชัน:
- แทนที่
MediaSession.MediaItemFiller
ด้วยMediaSession.Callback.onAddMediaItems
เพื่ออนุญาตการแก้ไขคำขอแบบอะซิงโครนัส - รองรับเมธอด
setMediaItems(s)
เมื่อMediaController
เชื่อมต่อกับเซสชันสื่อเดิม - นำ
MediaController.setMediaUri
และMediaSession.Callback.onSetMediaUri
ออก ฟังก์ชันการทำงานเดียวกันนี้ยังทำได้โดยใช้MediaController.setMediaItem
และMediaSession.Callback.onAddMediaItems
- โอนการโทร
MediaController
เดิมเพื่อเล่นสื่อไปยังMediaSession.Callback.onAddMediaItems
แทนonSetMediaUri
- เพิ่ม
MediaNotification.Provider
และDefaultMediaNotificationProvider
เพื่อปรับแต่งการแจ้งเตือน - เพิ่ม
BitmapLoader
และSimpleBitmapLoader
เพื่อดาวน์โหลดอาร์ตเวิร์กหรือรูปภาพ - เพิ่ม
MediaSession.setCustomLayout()
เพื่อให้เข้ากันได้แบบย้อนหลังกับเซสชันเดิม - เพิ่ม
MediaSession.setSessionExtras()
เพื่อให้ฟีเจอร์ทำงานได้เหมือนกันกับเซสชันเดิม - เปลี่ยนชื่อ
MediaSession.MediaSessionCallback
เป็นMediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
เป็นMediaLibrarySession.Callback
และMediaSession.Builder.setSessionCallback
เป็นsetCallback
- แก้ไข NPE ใน
MediaControllerImplLegacy
(#59) - อัปเดตข้อมูลตำแหน่งเซสชันในไทม์ไลน์ change(#51)
- แก้ไข NPE ใน
MediaControllerImplBase
หลังจากปล่อยตัวควบคุม (#74)
- แทนที่
- การเล่นโฆษณา / IMA
- ลดอัตราการค้นหาโฆษณาจากทุกๆ 100 มิลลิวินาทีเป็นทุกๆ 200 มิลลิวินาที เพื่อให้สอดคล้องกับคำแนะนำของ Media Rating Council (MRC)
- ส่วนขยาย FFmpeg
- อัปเดต CMake เป็นเวอร์ชัน
3.21.0+
เพื่อหลีกเลี่ยงข้อบกพร่องของ CMake ที่ทําให้ซิงค์ gradle ของ AndroidStudio ไม่สําเร็จ (#9933)
- อัปเดต CMake เป็นเวอร์ชัน
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
ออก ให้ใช้Player.Listener.onTracksChanged(Tracks)
instead. - นำ
Player.getCurrentTrackGroups
และPlayer.getCurrentTrackSelections
ออก ให้ใช้Player.getCurrentTracks
instead. นอกจากนี้ คุณยังใช้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
14 มีนาคม 2022
androidx.media3:media3-*:1.0.0-alpha03
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-alpha03 มีคอมมิตเหล่านี้
ซึ่งสอดคล้องกับรุ่น ExoPlayer 2.17.1
- เสียง:
- แก้ไขข้อผิดพลาดในการตรวจสอบความสามารถของเสียงสำหรับ Dolby Atmos (E-AC3-JOC) ใน HLS
- เครื่องมือแยกข้อมูล:
- FMP4: แก้ไขปัญหาที่ข้อมูลเมตาของตัวอย่าง emsg อาจแสดงผลในลำดับที่ไม่ถูกต้องสำหรับสตรีมที่มีทั้งอะตอม emsg v0 และ v1 (#9996)
- ข้อความ:
- แก้ไขการโต้ตอบของ
SingleSampleMediaSource.Factory.setTrackId
และMediaItem.SubtitleConfiguration.Builder.setId
เพื่อจัดลําดับความสําคัญของช่องSubtitleConfiguration
และกลับไปใช้ค่าFactory
หากไม่ได้ตั้งค่าไว้ (#10016)
- แก้ไขการโต้ตอบของ
- การเล่นโฆษณา
- แก้ไขเสียงที่เล่นไม่ทันระหว่างช่วงโฆษณาในสตรีม SSAI ของ HLS แบบสด
เวอร์ชัน 1.0.0-alpha02
2 มีนาคม 2022
androidx.media3:media3-*:1.0.0-alpha02
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-alpha02 มีการคอมมิตเหล่านี้
ซึ่งสอดคล้องกับรุ่น ExoPlayer 2.17.0
- ไลบรารีหลัก:
- เพิ่มเมธอดที่ได้รับการป้องกัน
DefaultRenderersFactory.getCodecAdapterFactory()
เพื่อให้คลาสย่อยของDefaultRenderersFactory
ที่ลบล้างbuildVideoRenderers()
หรือbuildAudioRenderers()
สามารถเข้าถึงโรงงานอะแดปเตอร์โค้ดและส่งไปยังอินสแตนซ์MediaCodecRenderer
ที่สร้างขึ้น - เผยแพร่ช่องส่วนหัว ICY
name
และgenre
ไปยังMediaMetadata.station
และMediaMetadata.genre
ตามลำดับเพื่อให้เข้าถึงแอปผ่านPlayer.Listener.onMediaMetadataChanged()
(#9677) - นำคีย์ Null ออกจาก
DefaultHttpDataSource#getResponseHeaders
- หยุดชั่วคราวแล้วลองอีกครั้งเมื่อสร้างอินสแตนซ์
MediaCodec
ไม่สําเร็จ วิธีนี้ช่วยแก้ปัญหาที่เกิดขึ้นในอุปกรณ์บางเครื่องเมื่อเปลี่ยนแพลตฟอร์มจากตัวแปลงรหัสที่ปลอดภัยเป็นตัวแปลงรหัสอื่น (#8696) - เพิ่ม
MediaCodecAdapter.getMetrics()
เพื่ออนุญาตให้ผู้ใช้รับข้อมูลเมตริกจากMediaCodec
(#9766) - แก้ไขการแก้ไขข้อกำหนดของ Maven (#8353)
- ปิดใช้การปรับความเร็วอัตโนมัติสำหรับสตรีมแบบสดที่ไม่มีฟีเจอร์เวลาในการตอบสนองต่ำหรือคำขอของผู้ใช้ในการตั้งค่าความเร็ว (#9329)
- เปลี่ยนชื่อ
DecoderCounters#inputBufferCount
เป็นqueuedInputBufferCount
- ทำให้
SimpleExoPlayer.renderers
เป็นส่วนตัว คุณสามารถเข้าถึงโปรแกรมแสดงผลได้ผ่านExoPlayer.getRenderer
- อัปเดตค่าคงที่
AnalyticsListener.EventFlags
บางค่าให้ตรงกับค่าในPlayer.EventFlags
- แยก
AnalyticsCollector
ออกเป็นอินเทอร์เฟซและการใช้งานเริ่มต้นเพื่อให้ R8 นำออกได้หากแอปไม่ต้องการ
- เพิ่มเมธอดที่ได้รับการป้องกัน
- การเลือกแทร็ก
- รองรับการแจ้งว่าวิดีโอมีบทบาทที่ต้องการในการเลือกแทร็ก (#9402)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอให้พิจารณาประเภท MIME และ Flag บทบาทที่ต้องการเมื่อเลือกแทร็กวิดีโอหลายรายการสำหรับการปรับเปลี่ยน (#9519)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอและเสียงเพื่อเลือกเฉพาะรูปแบบสำหรับตัวเลือกแบบปรับเปลี่ยนได้ซึ่งรองรับโปรแกรมถอดรหัสและฮาร์ดแวร์ในระดับเดียวกัน (#9565)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอเพื่อเลือกใช้ตัวแปลงรหัสที่มีประสิทธิภาพมากขึ้นหากตัวถอดรหัสหลักที่เร่งฮาร์ดแวร์รองรับตัวแปลงรหัสหลายรายการ (#4835)
- โปรดใช้ค่ากำหนดเนื้อหาเสียง (เช่น แทร็กเสียง "เริ่มต้น" หรือแทร็กซึ่งตรงกับภาษาของภาษาที่แสดงของระบบ) แทนข้อจำกัดทางเทคนิคในการเลือกแทร็ก (เช่น ประเภท MIME ที่ต้องการ หรือจำนวนช่องสูงสุด)
- แก้ไขปัญหาการเลือกแทร็กซึ่งการลบล้างกลุ่มแทร็กหนึ่งไม่ได้ปิดใช้กลุ่มแทร็กอื่นๆ ประเภทเดียวกัน (#9675)
- แก้ไขปัญหาการเลือกแทร็กที่ไม่ใช้การลบล้างแทร็กแบบผสมกันทั้งแบบว่างเปล่าและแบบไม่ว่างเปล่าอย่างถูกต้อง (#9649)
- ห้ามใช้
TrackGroup
ซ้ำในTrackGroupArray
TrackGroup
s สามารถทำให้แยกแยะกันได้เสมอโดยการตั้งค่าid
ในเครื่องมือสร้างTrackGroup
การแก้ไขนี้จะช่วยแก้ปัญหาข้อขัดข้องเมื่อเล่นต่อหลังจากแอปทำงานอยู่เบื้องหลังโดยมีแทร็กที่กำลังเล่นอยู่ซึ่งมีการลบล้าง (#9718) - แก้ไขตรรกะใน
AdaptiveTrackSelection
เพื่ออนุญาตให้คุณภาพเพิ่มขึ้นภายใต้แบนด์วิดท์เครือข่ายที่เพียงพอ แม้ว่าการเล่นจะใกล้กับเวลาถ่ายทอดสดมาก (#9784)
- วิดีโอ:
- แก้ไขตรรกะสำรองของตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส H264/H265 ที่เข้ากันได้ หากจำเป็น
- เสียง:
- แก้ไขตรรกะสำรองของตัวถอดรหัสสำหรับ Dolby Atmos (E-AC3-JOC) เพื่อใช้ตัวถอดรหัส E-AC3 ที่เข้ากันได้ หากจำเป็น
- เปลี่ยน
AudioCapabilities
API ให้กำหนดให้ต้องส่งAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
อย่างชัดเจนแทนnull
- อนุญาตให้ปรับแต่งการคํานวณขนาดบัฟเฟอร์
AudioTrack
โดยใส่AudioTrackBufferSizeProvider
ลงในDefaultAudioSink
(#8891) - ลองสร้าง
AudioTrack
อีกครั้งหากขนาดบัฟเฟอร์ที่ขอมากกว่า 1 MB (#9712)
- เครื่องมือแยกข้อมูล:
- ข้อความ:
- DRM:
- นำ
playbackLooper
ออกจากDrmSessionManager.(pre)acquireSession
เมื่อแอปใช้DrmSessionManager
ในMediaSource
ที่กําหนดเอง จะต้องส่งplaybackLooper
ไปยังDrmSessionManager.setPlayer
แทน
- นำ
- การเล่นโฆษณา / IMA
- เพิ่มการรองรับการแทรกโฆษณาแบบไดนามิก (DAI) ของ IMA (#8213)
- เพิ่มวิธีการไปยัง
AdPlaybackState
เพื่ออนุญาตให้รีเซ็ตกลุ่มโฆษณาเพื่อให้เล่นอีกครั้งได้ (#9615) - บังคับใช้ความเร็วในการเล่น 1.0 ระหว่างการเล่นโฆษณา (#9018)
- แก้ไขปัญหาที่กลุ่มโฆษณาที่โหลดไม่สําเร็จทําให้ระบบรีเซ็ตการเล่นทันที (#9929)
- UI:
- DASH:
- เพิ่มพร็อพเพอร์ตี้สําคัญและเพิ่มเติมที่แยกวิเคราะห์แล้วลงใน
Representation
(#9579) - รองรับบทบาทการติดตาม
forced-subtitle
(#9727) - หยุดตีความบทบาทแทร็ก
main
เป็นC.SELECTION_FLAG_DEFAULT
- แก้ไขตรรกะการยกเว้น URL พื้นฐานสำหรับไฟล์ Manifest ที่ไม่ได้ประกาศเนมสเปซ DVB (#9856)
- รองรับ URL
MPD.Location
แบบสัมพัทธ์ (#9939)
- เพิ่มพร็อพเพอร์ตี้สําคัญและเพิ่มเติมที่แยกวิเคราะห์แล้วลงใน
- HLS:
- ป้อนข้อมูล
Format.label
สำหรับสตรีม HLS ที่มีเฉพาะเสียงอย่างถูกต้อง (#9608) - ใช้การเตรียมแบบไม่มีข้อมูลโค้ดเป็นค่าเริ่มต้นเพื่อปรับปรุงเวลาเริ่มต้น หากการแสดงผลของคุณมีแทร็กคำบรรยายแทนเสียงที่มัลติเพล็กซ์ซึ่งไม่ได้ประกาศไว้ในเพลย์ลิสต์หลัก คุณควรเพิ่มลงในเพลย์ลิสต์หลักเพื่อให้พร้อมเล่น หรือปิดการเตรียมแบบไม่แบ่งออกเป็นส่วนๆ ด้วย
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
- รองรับการกรอไปยังเฟรมหลักที่แม่นยำใน HLS (#2882)
- ป้อนข้อมูล
- RTSP:
- Transformer:
- เพิ่มเวอร์ชัน API ขั้นต่ำที่จำเป็นเป็น 21
- ตอนนี้
TransformationException
ใช้เพื่ออธิบายข้อผิดพลาดที่เกิดขึ้นระหว่างการเปลี่ยนรูปแบบ - เพิ่ม
TransformationRequest
เพื่อระบุตัวเลือกการเปลี่ยนรูปแบบ - อนุญาตให้ลงทะเบียนผู้ฟังได้หลายราย
- แก้ไข Transformer ค้างเมื่ออ่านเอาต์พุตของโค้ดได้เพียงบางส่วน
- แก้ไข NPE ที่อาจเกิดขึ้นใน
Transformer.getProgress
เมื่อปล่อยตัวรวมไฟล์ throw - เพิ่มแอปสาธิตเพื่อใช้การเปลี่ยนรูปแบบ
- ส่วนขยาย MediaSession
- โดยค่าเริ่มต้น
MediaSessionConnector
จะล้างเพลย์ลิสต์เมื่อหยุดเล่น แอปที่ต้องการเก็บเพลย์ลิสต์ไว้สามารถเรียกใช้setClearMediaItemsOnStop(false)
ในเครื่องมือเชื่อมต่อ
- โดยค่าเริ่มต้น
- ส่วนขยายแคสต์
- ส่วนขยาย FFmpeg
- ทําให้
build_ffmpeg.sh
ขึ้นกับ utils ของ bin ของ LLVM แทนของ GNU (#9933)
- ทําให้
- ความเข้ากันได้กับ Android 12
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
com.google.android.gms:play-services-cast-framework:20.1.0
play-services-cast-framework
เวอร์ชันเก่าจะใช้ร่วมกับแอปที่กําหนดเป้าหมายเป็น Android 12 ไม่ได้ และจะขัดข้องด้วยIllegalArgumentException
เมื่อสร้างPendingIntent
(#9528)
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
- นำสัญลักษณ์ที่เลิกใช้งานออก
- นำ
Player.EventListener
ออก ให้ใช้Player.Listener
แทน - นำ
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
และMediaSourceFactory#setDrmUserAgent
ออก ให้ใช้MediaSourceFactory#setDrmSessionManagerProvider
แทน - นำ
MediaSourceFactory#setStreamKeys
ออก ให้ใช้MediaItem.Builder#setStreamKeys
แทน - นำ
MediaSourceFactory#createMediaSource(Uri)
ออก ให้ใช้MediaSourceFactory#createMediaSource(MediaItem)
แทน - นำ
setTag
ออกจากDashMediaSource
,HlsMediaSource
และSsMediaSource
ให้ใช้MediaItem.Builder#setTag
แทน - นำ
DashMediaSource#setLivePresentationDelayMs(long, boolean)
ออก ใช้MediaItem.Builder#setLiveConfiguration
และMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
เพื่อลบล้างไฟล์ Manifest หรือDashMediaSource#setFallbackTargetLiveOffsetMs
เพื่อระบุค่าสำรอง - นำ
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
ออก คุณจะเลือกไม่ใช้การบังคับใช้ชุดข้อความไม่ได้อีกต่อไป - นำ
ActionFile
และActionFileUpgradeUtil
ออก ใช้ ExoPlayer 2.16.1 หรือก่อนหน้าเพื่อใช้ActionFileUpgradeUtil
เพื่อผสานไฟล์การดําเนินการเดิมเข้ากับDefaultDownloadIndex
- นำ
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
27 ตุลาคม 2021
androidx.media3:media3-*:1.0.0-alpha01
ได้รับการปล่อยแล้ว
เวอร์ชัน 1.0.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
Media3 เป็นบ้านหลังใหม่สำหรับคลังการสนับสนุนสื่อ ซึ่งรวมถึง ExoPlayer เวอร์ชันอัลฟ่าแรกมีการใช้งานไลบรารีที่ใช้งานได้ในช่วงต้นสําหรับการใช้งานกรณีการใช้งานสื่อ ซึ่งรวมถึง
- ExoPlayer ซึ่งเป็นโปรแกรมเล่นสื่อระดับแอปพลิเคชันสำหรับ Android ที่ปรับแต่งและขยายการทำงานได้ง่าย
- ฟังก์ชันการทำงานของเซสชันสื่อสำหรับแสดงและควบคุมการเล่น โมดูลเซสชันใหม่นี้ใช้อินเทอร์เฟซ
Player
เดียวกันกับ ExoPlayer - คอมโพเนนต์ UI สำหรับการสร้างอินเทอร์เฟซผู้ใช้การเล่นสื่อ
- โมดูลที่รวมฟังก์ชันการทำงานในไลบรารีอื่นๆ เพื่อใช้กับ ExoPlayer เช่น การแทรกโฆษณาผ่าน IMA SDK
ดูข้อมูลเพิ่มเติมได้ที่โปรเจ็กต์ Media3 ใน GitHub
ก่อนหน้านี้ ExoPlayer โฮสต์อยู่ในโปรเจ็กต์ GitHub ของ ExoPlayer แยกต่างหาก ใน Media3 ชื่อแพ็กเกจคือ androidx.media3.exoplayer
เราวางแผนที่จะดูแลรักษาและเผยแพร่โปรเจ็กต์ ExoPlayer ใน GitHub ต่อไปอีกระยะหนึ่งเพื่อให้แอปมีเวลาในการย้ายข้อมูลไปยัง Media3 Media3 มีโมดูลทดแทนสำหรับโมดูล ExoPlayer ทั้งหมด ยกเว้นส่วนขยาย media2 และ mediasession รุ่นเดิม ซึ่งถูกแทนที่ด้วยโมดูล media3-session
ใหม่ ซึ่งจะผสานรวมโปรแกรมเล่นกับเซสชันสื่อโดยตรงโดยไม่ต้องใช้คลาสอะแดปเตอร์/คอนเน็กเตอร์