Media3
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 22 ตุลาคม 2025 | 1.8.0 | - | - | 1.9.0-alpha01 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มการอ้างอิงใน Media3 คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงใน โปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับ
แอปหรือโมดูล
ดึงดูด
dependencies { def media3_version = "1.8.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น คุณสามารถใช้ เครื่องมือติดตามปัญหาของ Media3 เพื่อค้นหาคำตอบ สำหรับคำถาม ปัญหาที่ทราบ และคำขอฟีเจอร์ รวมถึงยื่นเรื่องปัญหาใหม่
เวอร์ชัน 1.9.0
เวอร์ชัน 1.9.0-alpha01
22 ตุลาคม 2025
androidx.media3:media3-*:1.9.0-alpha01 ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.9.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- อัปเดต
minSdkเป็น23ให้สอดคล้องกับไลบรารี AndroidX อื่นๆ - เพิ่ม
PlayerTransferStateซึ่งช่วยให้โอนสถานะการเล่น ระหว่างอินสแตนซ์Playerได้ - เพิ่มเมธอด
void mute()และvoid unmute()ลงใน Player เพื่อรักษา และคืนค่าระดับเสียงของ Player ก่อนและหลังการตั้งค่าเป็น ศูนย์ - เผยแพร่คลาสยูทิลิตี
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerและStuckPlayerDetectorที่ก่อนหน้านี้ใช้โดยExoPlayerภายในเพื่ออนุญาต การนำกลับมาใช้ซ้ำสำหรับผู้เล่นรายอื่น (#1893) - แก้ไขการจัดการ Listener เมื่อเครื่องเล่นที่มอบสิทธิ์พื้นฐานใช้ความเท่าเทียมกันของการอ้างอิงเพื่อเปรียบเทียบอินสแตนซ์ Listener (#2675)
ForwardingPlayer - เพิ่ม
Player.listenToฟังก์ชันส่วนขยายการระงับในmedia3-common-ktxไลบรารีที่ระบุPlayer.Eventsที่ควรดำเนินการ - แก้ไขข้อขัดข้องใน
BasePlayer.getBufferedPercentageที่เกิดจากจำนวนเต็ม ล้นเมื่อตำแหน่งบัฟเฟอร์ที่รายงานมีค่ามากกว่าระยะเวลาที่รายงานอย่างไม่น่าเชื่อ (#2750)
- อัปเดต
- ExoPlayer:
- เพิ่มการตรวจหาโปรแกรมเล่นที่ค้างซึ่งจะทริกเกอร์
StuckPlayerExceptionข้อผิดพลาดของโปรแกรมเล่นหากโปรแกรมเล่นดูเหมือนจะค้าง กรณีนี้จะเกิดขึ้นในกรณีต่อไปนี้ โดยคุณสามารถกำหนดค่าการหมดเวลาเริ่มต้นแต่ละรายการได้ในExoPlayer.Builderหากจำเป็น- หลังจาก
STATE_BUFFERING10 นาทีขณะพยายามเล่นและไม่มีความคืบหน้าในการบัฟเฟอร์ - หลังจากผ่านไป 10 วินาทีขณะพยายามเล่นและไม่มีความคืบหน้าในการเล่น
STATE_READY - หลังจาก
STATE_READYนาทีที่เกินระยะเวลาที่ประกาศไว้โดยที่ ยังไม่ถึงจุดสิ้นสุดของรายการ - หลังจากผ่านไป 10 นาทีโดยมีเหตุผลในการระงับการเล่นขณะพยายาม เล่น
- หลังจาก
- เปิดใช้การจัดการ Wake Lock โดยค่าเริ่มต้นเพื่อแก้ไขปัญหาเกี่ยวกับการบัฟเฟอร์ระหว่าง
การเล่นในเบื้องหลัง ซึ่งเทียบเท่ากับการตั้งค่า
ExoPlayer.Builder.setWakeModeเป็นC.WAKE_MODE_LOCAL - เพิ่มตรรกะการฟังเพื่ออัปเดตรหัสอุปกรณ์เสมือนโดยอัตโนมัติเมื่อมีการรายงานการเปลี่ยนแปลงไปยัง
Contextที่ส่งไปยังExoPlayer.Builderในตอนแรก - เพิ่ม
ExoPlayer.setVirtualDeviceIdเพื่ออัปเดตรหัสอุปกรณ์เสมือนที่ได้รับจากContextที่ส่งไปยังExoPlayer.Builderด้วยตนเอง - ตรวจสอบว่าโปรแกรมแสดงผลไม่ได้ใช้ข้อมูลจากรายการในเพลย์ลิสต์ถัดไปนานกว่า 10 วินาทีก่อนที่รายการปัจจุบันจะสิ้นสุด
- เพิ่ม
setSeekBackIncrementMs,setSeekForwardIncrementMsและsetMaxSeekToPreviousPositionMsลงในExoPlayerเพื่ออัปเดตการตั้งค่าเหล่านี้ หลังการก่อสร้าง (#2736) - เพิ่มฟังก์ชันการแคชล่วงหน้าใน
DefaultPreloadManagerตอนนี้แอปสามารถ ส่งคืนDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)หรือDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)ผ่านTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)เพื่อระบุว่าต้องแคชล่วงหน้าสำหรับรายการสื่อ - ใช้ฟังก์ชันการแคชล่วงหน้าของ
DefaultPreloadManagerในแอปเดโมแบบวิดีโอสั้น - เพิ่ม
DefaultLoadControl.Builderตัวตั้งค่าสำหรับการเล่นในเครื่องและปรับ ค่าเริ่มต้นของDefaultLoadControlให้ทำงานได้ดีกับไฟล์ในเครื่อง ที่หลากหลาย - แก้ไขข้อบกพร่องที่การตั้งค่าเพลย์ลิสต์ว่างเปล่าอาจทำให้เพลเยอร์อยู่ในสถานะ
STATE_READYหรือSTATE_BUFFERING - ปรับปรุง API ของเครื่องมือจัดการการโหลดล่วงหน้า
- เพิ่ม
addMediaItems(List<MediaItem>, List<T>)และaddMediaSources(List<MediaSource>, List<T>)ที่เพิ่มรายการสื่อ หรือแหล่งที่มาของสื่อเป็นชุด และเรียกใช้invalidate()โดยอัตโนมัติในภายหลัง - เพิ่ม
removeMediaItems((List<MediaItem>)และremoveMediaSources(List<MediaSource>)ที่นำรายการสื่อ หรือแหล่งที่มาของสื่อออกเป็นชุด และตรวจสอบว่าเครื่องมือจัดการการโหลดล่วงหน้า จะไม่เริ่มโหลดล่วงหน้าหรือโหลดล่วงหน้าต่อสำหรับรายการใดๆ หลังจาก นำออก - อนุญาตให้
DefaultPreloadManager.setCurrentPlayingIndex(int)ยกเลิกตัวเองโดยอัตโนมัติ แอปไม่จำเป็นต้องเรียกใช้invalidate()อย่างชัดเจนอีกต่อไปหลังจากอัปเดตดัชนี การเล่นปัจจุบัน
- เพิ่ม
- เพิ่มความสามารถในการข้ามการรีเซ็ตคีย์เฟรมสำหรับการกรอไปข้างหน้าภายในกลุ่มรูปภาพเดียวกันขณะอยู่ในโหมดการลาก
- เพิ่ม
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)เพื่อให้แอปตั้งค่าไบต์บัฟเฟอร์เป้าหมายสำหรับเพลเยอร์ที่มีplayerNameที่ระบุ ตอนนี้DefaultLoadControlสามารถตัดสินใจ ของผู้เล่นแต่ละคนแยกกันได้โดยอิงตามไบต์ที่จัดสรรและไบต์ บัฟเฟอร์เป้าหมายของตนเอง - เพิ่ม
SkipInfoลงในAdPlaybackState.AdGroupเพื่อส่งข้อมูลการข้าม สำหรับโฆษณาแต่ละรายการในกลุ่มโฆษณา - แก้ไขข้อบกพร่องที่การเรียกใช้
removeMediaItems(List)ระหว่างเล่น โฆษณาหลังม้วนฟิล์มทำให้เกิดข้อขัดข้อง (#2746) - แก้ไขการเล่นเพลย์ลิสต์ที่กระตุกบางครั้งซึ่งเกิดจากการตั้งค่าเฟรมเป็นตัวอย่างสุดท้ายและแสดงผลอย่างไม่ถูกต้อง เสมอ
- เปิดใช้เส้นทางการลองอีกครั้งหากเพลเยอร์สร้างรหัสเซสชันเสียงไม่สำเร็จ (#2382, #2678)
- เพิ่มการรองรับเพื่อควบคุมไบต์บัฟเฟอร์ทั้งหมดสำหรับแหล่งที่มาใน
DefaultPreloadManagerเพื่อหลีกเลี่ยงไม่ให้ไบต์บัฟเฟอร์ทั้งหมดสำหรับการโหลดล่วงหน้าจาก เพิ่มขึ้นโดยพลการ หากต้องการใช้ตรรกะการควบคุมเริ่มต้น แอปสามารถตั้งค่า ไบต์ของบัฟเฟอร์เป้าหมายสำหรับการโหลดล่วงหน้าผ่านDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)สำหรับplayerNameของPlayerId.Preload.name("preload") และแทรกDefaultLoadControlที่สร้างขึ้นผ่านDefaultPreloadManager.Builder.setLoadControl(LoadControl)
- เพิ่มการตรวจหาโปรแกรมเล่นที่ค้างซึ่งจะทริกเกอร์
- CompositionPlayer:
- เผยแพร่
CompositionPlayerภายใต้คำอธิบายประกอบ@ExperimentalApiใหม่เพื่อ ระบุว่าพร้อมสำหรับการทดสอบ แต่ยังอยู่ระหว่าง การพัฒนา API บางรายการมีแนวโน้มที่จะเปลี่ยนแปลงอย่างมากในรุ่น ต่อๆ ไป และมีปัญหาและข้อจำกัดที่ทราบเกี่ยวกับกรณีการใช้งานบางอย่าง (บางอย่างไม่มีในเอกสาร) - เพิ่มการรองรับ
COMMAND_SET_AUDIO_ATTRIBUTESและการจัดการโฟกัสเสียง ในCompositionPlayer - เพิ่มการรองรับการเปลี่ยนความเร็วในลำดับรองใน
CompositionPlayer
- เผยแพร่
- Transformer
- ใช้
InAppMp4Muxerเป็นตัวมัลติเพล็กซ์เริ่มต้น - เพิ่ม
EditedMediaItem.Builder#setSpeed()และเลิกใช้งานEffects#createExperimentalSpeedChangingEffects() - แทนที่
forceAudioTrackและforceVideoTrackด้วยtrackTypesในEditedMediaItemSequence
- ใช้
- การเลือกแทร็ก
- เพิ่ม
TrackSelectionParameters.selectTextByDefaultเพื่อเลือกแทร็กข้อความใดก็ได้โดยไม่ต้องระบุค่ากำหนดอื่นๆ ที่เฉพาะเจาะจงกว่า - เพิ่ม
preferredVideoLabels,preferredAudioLabelsและpreferredTextLabelsในTrackSelectionParametersเพื่อระบุ ค่ากำหนดสำหรับแทร็กที่มีป้ายกำกับเฉพาะ เช่น แทร็กที่อ่านจาก แท็ก HLS NAME (#1666)
- เพิ่ม
- โปรแกรมแยกข้อมูล
- FLAC: ปรับปรุงการตรวจหาส่วนหัวเพื่อลดโอกาสที่จะพบส่วนหัวที่ไม่ถูกต้องในข้อมูล FLAC ที่เข้ารหัส ซึ่งจะส่งผลให้เกิดข้อผิดพลาดในการถอดรหัส (#558)
- MP3: อนุญาตให้มีช่องว่างระหว่าง (และก่อน) แท็ก ID3 ที่จุดเริ่มต้นของไฟล์ MP3 (#811, #5718)
- MP4: แยกความแตกต่างระหว่างประเภท MIME ของ
audio/mpeg(MP3),audio/mpeg-L1และaudio/mpeg-L2โดยการดูค่าเลเยอร์ของตัวอย่างแรก ก่อนที่จะปล่อยรูปแบบแทร็กจากตัวแยก (#2683) - MP4: ปรับปรุงประสิทธิภาพการดมกลิ่นของไฟล์ขนาดใหญ่มากโดยถือว่ากล่อง
stblที่มีขนาดใหญ่กว่า 1 MB หมายความว่าไฟล์ต้องไม่เป็นแบบแยกส่วน (#2650) - Matroska: เพิ่มการรองรับการตรวจหา DTS-HD (#6225)
- แก้ไขปัญหาใน
MatroskaExtractorที่การกรออาจไม่ถูกต้อง สำหรับไฟล์ที่มีหลายแทร็ก ตอนนี้ระบบจะเชื่อมโยงคิวพอยต์กับแทร็กที่เกี่ยวข้องอย่างถูกต้อง ซึ่งจะช่วยให้การกรอแม่นยำยิ่งขึ้น - MP4: เพิ่มการรองรับข้อมูลเมตา
©mvn(ชื่อการเคลื่อนไหว) และ©mvi(ดัชนีการเคลื่อนไหว) ซึ่งตอนนี้จะแสดงเป็นออบเจ็กต์TextInformationFrameในFormat.metadataโดยมีรหัสเป็นMVNMและMVINตามลำดับ (#2754) - MPEG-TS: แก้ไข
IllegalArgumentExceptionจากReorderingBufferQueueที่เกิดจากแพ็กเก็ต PES ที่ไม่มีการประทับเวลา (#2764) - MP4: ละเว้นแทร็กที่ไม่มีกล่อง
stsd(แทนที่จะแยกวิเคราะห์ทั้งไฟล์ไม่สำเร็จ) - เพิ่มการรองรับการแยกรูปภาพเคลื่อนไหว HEIC
HeifExtractorสามารถ แยกวิเคราะห์ไฟล์ HEIC ที่มีแทร็กวิดีโอและเสียงที่ฝังอยู่ได้แล้ว - MP3: เปลี่ยน
FLAG_ENABLE_INDEX_SEEKINGเพื่อให้ต้องการค้นหาข้อมูล จากส่วนหัวของข้อมูลเมตา (เช่น Xing และ VBRI) เมื่อมี และกลับไปใช้ การค้นหาตามดัชนีหากไม่มีข้อมูลการค้นหาอื่นๆ ซึ่งจะ ปรับปรุงประสิทธิภาพสำหรับไฟล์ที่มีข้อมูลเมตาการค้นหา (#2839)
- Inspector:
- เปิดตัวโมดูล
:media3-inspectorใหม่เพื่อเป็นหน้าแรกเฉพาะสำหรับยูทิลิตีการตรวจสอบสื่อ ตอนนี้โมดูลนี้มีandroidx.media3.inspector.MetadataRetrieverใหม่ ซึ่งจะให้ API แบบรวมสําหรับทั้งข้อมูลเมตาและการแยกเฟรม ตอนนี้เราเลิกใช้งานandroidx.media3.exoplayer.MetadataRetrieverที่มีอยู่แล้วและหันมาใช้ เวอร์ชันใหม่นี้แทน - เปิดตัว
androidx.media3.inspector.FrameExtractorซึ่งเป็น API สาธารณะใหม่ สำหรับการแยกเฟรมAutoCloseableคลาสนี้มีวิธี แยกเฟรมที่รองรับวิดีโอ HDR, เอฟเฟกต์วิดีโอ และการเลือกตัว ถอดรหัสที่กำหนดเอง โดยควรสร้างผ่านBuilderสำหรับMediaItemที่เฉพาะเจาะจง - FrameExtractor: เพิ่ม
getThumbnail()เพื่อดึงเฟรมภาพขนาดย่อที่เป็นตัวแทนจากไฟล์สื่อโดยไม่ต้องระบุการประทับเวลาที่เฉพาะเจาะจง
- เปิดตัวโมดูล
- เสียง:
- ทำให้
AudioProcessorอินสแตนซ์รับรู้การกรอ - อนุญาตให้แทรกอินเทอร์เฟซ
AudioOutputProviderใหม่ลงในDefaultAudioSink.Builderเพื่อรองรับเส้นทางเอาต์พุตเสียงที่กำหนดเอง ค่าเริ่มต้นคือAudioTrackAudioOutputProvider - การเลื่อนโดยใช้แฮนเดิลใน
GainProcessor - ใช้ความสามารถของโปรไฟล์และระดับตัวถอดรหัส AC-4 ในการประเมินการรองรับรูปแบบแทร็ก (#2580)
- หลีกเลี่ยงความล่าช้าที่อาจเกิดขึ้นจากการจัดการการเรียกกลับการเปลี่ยนแปลงการกำหนดเส้นทางที่ จุดเริ่มต้นของการเล่น (#2646)
- อนุญาตให้ใช้ตัวแปลงรหัสซ้ำสำหรับรูปแบบ EAC3, EAC3-JOC และ AC-4 (#1346)
- เพิ่มการรองรับตัวอย่าง PCM แบบลอยใน
Sonic - เพิ่มการรองรับตัวอย่าง PCM 16 บิตใน
ToFloatPcmAudioProcessor
- ทำให้
- วิดีโอ
- ปิดใช้การนำตัวแปลงรหัสกลับมาใช้ซ้ำสำหรับเนื้อหา Dolby Vision ที่มีโปรไฟล์ต่างกัน
- ข้อความ:
- แก้ไขการแยกวิเคราะห์คำบรรยายแทนเสียง CEA-6/708 ในเนื้อหา Dolby Vision (#2775)
- รูปภาพ:
- แก้ไขปัญหา ScrubbingMode ที่ทำให้เพลเยอร์ค้างขณะกรอแทร็กภาพขนาดย่อ DASH (#2815)
- DRM:
- เปลี่ยนประเภทการคืนค่าของเมธอด
MediaDrmCallbackจากbyte[]เป็นประเภทMediaDrmCallback.Responseใหม่ เพื่อให้ส่งคืนข้อมูลเพิ่มเติมที่ไม่บังคับได้ นี่เป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้องในแหล่งที่มา แต่สามารถแก้ไขข้อขัดข้องได้ง่ายๆ โดยการห่อbyte[]ค่าที่ส่งคืนก่อนหน้าด้วยnew Responseก่อนที่จะส่งคืน - เพิ่มข้อมูลคำขอคีย์ เช่น URL และเวลาในการตอบสนอง ไปยัง
AnalyticsListener.onDrmKeysLoaded(#1001) - ย้ายข้อมูลคำขอการจัดสรรจากพารามิเตอร์ URL ไปยังเนื้อหา POST
- เปลี่ยนประเภทการคืนค่าของเมธอด
- Muxers:
- เพิ่ม
MediaMuxerCompatซึ่งเป็นตัวแทนที่ใช้แทนเฟรมเวิร์กMediaMuxerได้ - เพิ่ม
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()เพื่ออนุญาต การสร้างภาพเคลื่อนไหว - เพิ่ม
WebmMuxerเพื่ออนุญาตให้มัลติเพล็กซ์สตรีมสื่อOPUS,VORBIS,VP8และVP9ลงในรูปแบบไฟล์webm
- เพิ่ม
- ส่วนขยาย IMA
- การนำกฎ ProGuard ที่กำหนดเองออก เพื่อให้แอปสามารถใช้กฎที่เผยแพร่ใน ที่เก็บถาวรของ IMA สำหรับ Android แทนได้
- เพิ่ม
ImaServerSideAdInsertionUriBuilder.setNetworkCodeซึ่งเป็น API ใหม่สำหรับ การตั้งรหัสเครือข่าย Google Ad Manager ให้ IMA SDK จัดการตัวระบุโฆษณา ตามที่ระบุในการตั้งค่า Google Ad Manager รหัสเครือข่าย ไม่บังคับ แต่แนะนำสำหรับคำขอสตรีมแบบ Full Service หากต้องการค้นหารหัสเครือข่าย โปรดดูบทความนี้ - อัปเดตการขึ้นต่อกันของ IMA เป็น 3.37.0 ซึ่งต้องเปิดใช้การลบการอ้างอิงไลบรารีหลัก แอปที่ขึ้นต่อกันจะต้องเปิดใช้ฟีเจอร์นี้ด้วย ดูหมายเหตุเกี่ยวกับการกำหนดค่าของ IMA
- รองรับตัวเลือก UI ที่กำหนดเองของ IMA DAI ในเครื่องมือสร้าง URI ของ SSAI ตัวเลือก UI ที่กำหนดเอง สำหรับการแทรกโฆษณาฝั่งเซิร์ฟเวอร์ประกอบด้วยการรองรับการแสดงผล "ข้ามได้" และ "เกี่ยวกับโฆษณานี้" ปัจจุบันฟีเจอร์นี้พร้อมให้บริการแก่ผู้เผยแพร่โฆษณาบางรายที่อยู่ในรายการที่อนุญาต การเปลี่ยนแปลงนี้ยังอัปเกรด IMA SDK เป็นเวอร์ชัน 3.38.0 (หมายเหตุประจำรุ่น) เพื่อเข้าถึง API ตัวเลือก UI ที่กำหนดเองด้วย
- เซสชัน:
- เพิ่มพารามิเตอร์ใหม่ใน
MediaSession.Callback.onPlaybackResumptionเพื่อ ระบุว่าการเรียกเกิดขึ้นเพื่อรวบรวมข้อมูลเท่านั้นหรือเพื่อเริ่ม การเล่น (#1764) - อัปเดต
MediaSession.ControllerInfo.isTrustedเพื่อประกาศ คอนโทรลเลอร์จากแอปของตัวเองเป็นคอนโทรลเลอร์ที่เชื่อถือได้ด้วย (#2542) - เพิ่ม
MediaSessionService.triggerNotificationUpdateเพื่อทริกเกอร์การอัปเดต การแจ้งเตือนด้วยตนเอง (#1833) - เพิ่ม
ProgressListenerลงในวิธีการคำสั่งที่กำหนดเอง - เปลี่ยนค่าเริ่มต้นสำหรับ
MediaLibrarySession.Builder.setLibraryErrorReplicationModeเป็นไม่ ร้ายแรง - เพิ่ม
Contextพารามิเตอร์ไปยังMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625) - อ่านรหัสควบคุมระดับเสียงจากแพลตฟอร์ม
PlaybackInfoแทนที่จะ ดึงข้อมูลผ่าน Binder ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะอ่านประเภทการเล่นและระดับเสียง รหัสควบคุมแบบอะตอมและตรงกัน - แก้ไขข้อบกพร่องที่กรอง
ACTION_UPเหตุการณ์สำคัญออกก่อนส่ง ไปยังการเรียกกลับเพื่อการจัดการที่กำหนดเอง ซึ่งจะทำให้การทำงานสอดคล้องกับสิ่งที่ media1 ทำและสิ่งที่แพลตฟอร์มทำ (#2637) - แก้ไขข้อบกพร่องที่
getCurrentTimeline()ถูกเรียกใช้โดยPlayerWrapperแม้ว่าคำสั่งจะไม่พร้อมใช้งานก็ตาม (#2665) - แก้ไขข้อบกพร่องที่ทำให้ข้อความยังคงอยู่ในคิวข้อความของ Looper หลัก ซึ่งทำให้เกิดการรั่วไหลของหน่วยความจำหลังจากที่บริการสิ้นสุดลง (#2692)
- เมื่อเชื่อมต่อกับแอปเซสชันเดิมที่มี
MediaBrowserระบบจะส่งคำสั่งที่กำหนดเองไปยังเซสชันก็ต่อเมื่อมีการโฆษณาการดำเนินการที่กำหนดเองเป็นการดำเนินการที่กำหนดเองในPlaybackStateCompatของเซสชันเดิม ระบบจะส่งการกระทำที่กำหนดเองอื่นๆ ทั้งหมดไปยังบริการ - ใช้
onAudioSessionIdChangedเพื่อแจ้งตัวควบคุมสื่อเมื่อเซสชันตั้งค่ารหัสเซสชันเสียง (#244) - แก้ไขข้อบกพร่องที่
KEYCODE_HEADSETHOOKไม่ได้เริ่มโปรแกรมเล่นเมื่อมีเหตุการณ์คีย์สื่อIntentมาถึงในonStartCommand()ปัญหานี้ได้รับการแก้ไขแล้ว โดยการจัดการ "KEYCODE_HEADSETHOOK" เช่นเดียวกับKEYCODE_MEDIA_PLAY_PAUSE(#2816) - แก้ไขข้อบกพร่องที่ไม่ได้สื่อสารขนาดของ Surface ระหว่างเซสชัน
และตัวควบคุม ซึ่งส่งผลให้ใช้เอฟเฟกต์วิดีโอใน
เซสชันเดโมไม่สำเร็จ หากคุณใช้ตัวควบคุม นี่อาจเป็นการเปลี่ยนแปลงที่ทำให้เกิดข้อผิดพลาดหากเพลเยอร์ของคุณจัดการการเรียกใช้
setVideoSurfaceHolderไม่ได้ - แก้ไขการส่งต่อค่าข้อมูลเมตาที่ไม่ใช่
StringCharSequenceเช่น สตริงที่จัดรูปแบบด้วยแท็ก span (#2853)
- เพิ่มพารามิเตอร์ใหม่ใน
- UI:
- เพิ่มคลาส
ProgressStateWithTickIntervalและ Composable ที่เกี่ยวข้องลงในโมดูลmedia3-ui-composerememberProgressStateWithTickIntervalโดยใช้ตัวยึดสถานะนี้ในdemo-composeเพื่อแสดงตำแหน่งปัจจุบันและระยะเวลาในรูปแบบข้อความ - เพิ่ม
MuteButtonStateไปยังui-composeที่จัดการการปิดเสียงของPlayerระดับเสียง โดยจะใช้ตัวยึดสถานะนี้ในdemo-composeเพื่อแสดง ปุ่มเปิด/ปิดเสียง - เพิ่มคลาส
ProgressStateWithTickCountและ Composable ที่เกี่ยวข้องrememberProgressStateWithTickCountลงในโมดูลmedia3-ui-composeโดยจะใช้ตัวยึดสถานะนี้ในdemo-composeเพื่อแสดงความคืบหน้า เป็นแถบความคืบหน้าแบบอ่านอย่างเดียวแนวนอน - เพิ่ม
ContentFrameComposable ไปยังmedia3-ui-composeซึ่งรวมการจัดการPlayerSurfaceเข้ากับการปรับขนาดสัดส่วนภาพและการครอบด้วยชัตเตอร์ - แก้ไขข้อบกพร่องที่ทราบในแพลตฟอร์ม API 34 ซึ่งทำให้วิดีโอถูกยืด/ครอบตัด
เมื่อใช้
SurfaceViewภายใน ComposeAndroidViewและส่งผลต่อ ComposablesContentFrameและPlayerSurfaceที่มีSURFACE_TYPE_SURFACE_VIEW(#1237, #2811) - สร้าง
media3-ui-compose-material3โมดูลใหม่และเพิ่ม Composables ที่มีธีม Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) ลงในโมดูล - เพิ่มการรองรับการวางปุ่มเส้นทางสื่อใน
PlayerView
- เพิ่มคลาส
- ส่วนขยาย HLS
- แยกวิเคราะห์แอตทริบิวต์การข้ามโฆษณาคั่นระหว่างหน้าของ HLS
- แมปแอตทริบิวต์การควบคุมการข้ามจากเพลย์ลิสต์ HLS และเอกสารรายการเนื้อหา
ลงใน
AdPlaybackStateเพื่อการเข้าถึงแบบสาธารณะ - แก้ไขข้อบกพร่องที่เวลาเริ่มต้นของเพลย์ลิสต์หายไปเมื่อนำแท็ก EXT-X-PROGRAM-START-DATE ที่กำหนดเวลาเริ่มต้นออกจาก เพลย์ลิสต์ (#2760)
- ใช้การค้นหาแบบไบนารีเพื่อค้นหาดัชนีกลุ่มของตำแหน่งที่กำหนดใน เพลย์ลิสต์ (#2826
- ส่วนขยาย DASH
- แก้ไขปัญหา
UnsupportedOperationExceptionเมื่อเล่นสตรีม DASH ที่มีไฟล์ Manifest URIdata:แบบไม่ลำดับชั้น (#2688) - รีเซ็ต
LiveConfigurationเป็นค่าที่ระบุโดยMediaItemของDashMediaSourceเมื่อเผยแพร่และเมื่อผู้ใช้อัปเดตรายการสื่อ (#2606) - หลีกเลี่ยงการขัดข้องที่เกิดจากการอัปเดต Manifest ที่ไม่ถูกต้องซึ่งไม่ได้รายงาน เป็นข้อผิดพลาดของเพลเยอร์ (#2805)
- แก้ไขปัญหา
- ส่วนขยาย RTSP
- จัดการข้อผิดพลาดของแพ็กเก็ต RTP ที่ขาดหายไปเมื่อประมวลผลหน่วย NAL ที่แยกส่วน สำหรับ H264 และ H265 (#2613)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- ส่วนขยาย AV1: ตอนนี้ตัวถอดรหัสซอฟต์แวร์ AV1 ใช้ไลบรารี
dav1dประสิทธิภาพสูง แทนการติดตั้งใช้งานlibgav1ก่อนหน้านี้เพื่อ ปรับปรุงความเร็วในการถอดรหัส
- ส่วนขยาย AV1: ตอนนี้ตัวถอดรหัสซอฟต์แวร์ AV1 ใช้ไลบรารี
- ส่วนขยาย Cast
- เพิ่ม
CastPlayer.Builderซึ่งจะช่วยให้CastPlayerเล่นทั้งไฟล์ในเครื่อง และไฟล์ที่แคสต์ได้ หากต้องการคงลักษณะการทำงานแบบเดิมของCastPlayerที่รองรับเฉพาะการเล่นผ่าน Cast คุณสามารถใช้RemoteCastPlayerได้ ตัวสร้างที่มีอยู่ก่อนหน้าCastPlayerจะยังคงมีลักษณะการทำงานแบบเดิม แต่จะเลิกใช้งานเพื่อหันไปใช้ตัวสร้างCastPlayerหรือRemoteCastPlayerแทน - หยุดบังคับใช้ประเภท MIME ที่ไม่ใช่ Null ใน
DefaultMediaItemConverter - ใช้
MediaItem.mediaMetadata.mediaTypeเพื่ออนุมาน MEDIA_TYPE ของ Cast ที่จะใช้ในDefaultCastOptionsProvider#toMediaQueueItemเมื่อมี - เปิดใช้การโอนจากระยะไกลไปยังเครื่องใน
DefaultCastOptionsProvider - เพิ่มการรองรับ Cast ในการสาธิตเซสชัน
- เพิ่มการรองรับการแสดงปุ่มเส้นทางสื่อใน Composable UI
- เพิ่มการรองรับการแสดงปุ่มเส้นทางสื่อในเมนูแถบการทำงาน
- เพิ่มการรองรับการแสดงปุ่มเส้นทางสื่อเป็น UI ของมุมมอง
- เพิ่ม
- โปรแกรมทดสอบ:
- เพิ่มความแตกต่างของเวลาสูงสุดสำหรับลักษณะการทำงานของการเลื่อนอัตโนมัติของ
FakeClockโดยค่าเริ่มต้นจะเป็น 1 วินาที แต่กำหนดค่าได้ผ่านFakeClock.Builder - เพิ่มความแตกต่างของเวลาสูงสุดระหว่างข้อความสำหรับ
RobolectricUtil.runMainLooperUntil(และrunLooperUntil) โดยค่าเริ่มต้นจะเป็น 1 วินาที แต่กำหนดค่าได้ผ่านการโอเวอร์โหลดใหม่ของเมธอดเหล่านี้ - ย้าย
CapturingRenderersFactoryจากtest-utilsไปยังtest-utils-robolectric
- เพิ่มความแตกต่างของเวลาสูงสุดสำหรับลักษณะการทำงานของการเลื่อนอัตโนมัติของ
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำตัวสร้าง
DefaultPreloadManagerที่เลิกใช้งานแล้วออก โปรดใช้DefaultPreloadManager.Builderแทน - นำตัวสร้าง
EditedMediaItemSequenceที่เลิกใช้งานแล้วออก โปรดใช้EditedMediaItemSequence.Builderแทน
- นำตัวสร้าง
เวอร์ชัน 1.8.0
เวอร์ชัน 1.8.0
30 กรกฎาคม 2025
เวอร์ชัน 1.8.0 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่มการรองรับการแทนที่เพลเยอร์ใน
ForwardingSimpleBasePlayer
- เพิ่มการรองรับการแทนที่เพลเยอร์ใน
- ExoPlayer:
- เพิ่ม Getter สำหรับโหมดสุ่มไปยังอินเทอร์เฟซ
ExoPlayer(#2522) - ส่งข้อยกเว้นให้ชัดเจนยิ่งขึ้นหากมีการเข้าถึง
DefaultAudioSinkจาก หลายเธรด หากเกิดกรณีนี้เนื่องจากการเรียกใช้RendererCapabilities.getFormatSupportนอกเพลเยอร์ โปรดตรวจสอบ ว่าได้เรียกใช้เมธอดนี้ในเธรดเดียวกันกับเธรดการเล่นของ ExoPlayer หรือ ใช้อินสแตนซ์อื่นที่ไม่ใช่อินสแตนซ์ที่ใช้สำหรับการเล่น (#1191) - แก้ไขข้อบกพร่องที่ระบบอาจทำเครื่องหมายรูปแบบเสียงที่ไม่ใช่สเตอริโอบนทีวีว่า
DefaultTrackSelectorไม่รองรับ - ตรวจสอบว่าเฟรมสุดท้ายได้รับการแสดงผลอย่างถูกต้องเมื่อใช้แฟล็ก
DECODE_ONLYของ MediaCodec (ซึ่งเปิดใช้โดยค่าเริ่มต้นในโหมดการกวาด) - เพิ่มการรองรับการใช้รหัสอุปกรณ์เสมือนจาก
Contextที่ส่งไปยังExoPlayer.Builder - เปิดใช้การจัดเวลาแบบไดนามิกโดยค่าเริ่มต้นในโหมดขัด
- หลีกเลี่ยงการโหลดแหล่งที่มาซ้ำโดยไม่จำเป็นเมื่อกรอรายการไปจนถึงตอนท้าย
- ใช้
MediaCodec.BUFFER_FLAG_DECODE_ONLYโดยค่าเริ่มต้นในโหมดการลาก - ส่ง
IllegalStateExceptionเมื่อPreloadMediaSourceเล่นโดยExoPlayerที่มีเธรดการเล่นต่างจากเธรดการโหลดล่วงหน้า (#2495) - เพิ่ม
cloneAndMoveลงในShuffleModeด้วยการติดตั้งใช้งานเริ่มต้น (#2226) - เปลี่ยนลักษณะการทำงานเริ่มต้นของ
Renderer.getMinDurationToProgressUsเพื่อ แสดงค่าที่ใหญ่ขึ้นหากไม่จำเป็นต้องเรียกใช้render - แก้ไขข้อบกพร่องที่การจัดกำหนดการภายในทำให้เฟรมสุดท้ายล่าช้าเมื่อกรอไปยัง
จุดสิ้นสุดขณะหยุดชั่วคราว ตอนนี้การแก้ไขข้อบกพร่องจะมีผลก็ต่อเมื่อเปิดใช้
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled - เพิ่ม
ExoPlayer.setScrubbingModeEnabled(boolean)วิธีการ ซึ่งจะเพิ่มประสิทธิภาพ เพลเยอร์สำหรับการกรอหลายครั้ง (เช่น จากผู้ใช้ที่ลาก แถบเลื่อนไปมา) คุณปรับแต่งลักษณะการทำงานของโหมดการกวาดได้ ด้วยsetScrubbingModeParameters(..)ในExoPlayerและExoPlayer.Builder - อนุญาตให้ปรับแต่งความคลาดเคลื่อนในการกรอแบบเศษส่วนในโหมดการลากผ่าน
- เพิ่มอัตราการทำงานของตัวแปลงรหัสในโหมดการกรอ
- แก้ไขข้อบกพร่องที่อาจทำให้ไม่มีการรายงานข้อผิดพลาดในการเตรียมเนื้อหาของ
AdsMediaSource(#2337) - แก้ไขการรั่วไหลของหน่วยความจำใน
MergingMediaSourceเช่น เมื่อใช้ การโหลดคำบรรยายแทนเสียงจากภายนอก (#2338) - อนุญาตให้
CmcdConfiguration.Factoryส่งคืนnullเพื่อปิดใช้การบันทึก CMCD สำหรับรายการสื่อที่เฉพาะเจาะจง (#2386) - เพิ่มขนาดบัฟเฟอร์รูปภาพเริ่มต้นจาก 128 KB (ข้อผิดพลาดจากการคัดลอกและวางจาก แทร็กข้อความ) เป็น 26 MB ซึ่งมีขนาดใหญ่พอสำหรับรูปภาพ Ultra HDR ขนาด 50 MP (#2417)
- เพิ่ม
PreCacheHelperที่อนุญาตให้แอปแคชสื่อรายการเดียวล่วงหน้าโดยมี ตำแหน่งเริ่มต้นและระยะเวลาที่ระบุ - เพิ่มการรองรับการโหลดล่วงหน้าจากตำแหน่งที่ระบุใน
DefaultPreloadManager
- เพิ่ม Getter สำหรับโหมดสุ่มไปยังอินเทอร์เฟซ
- Transformer
- เพิ่ม
CodecDbLiteที่ช่วยให้การตั้งค่าการเข้ารหัสวิดีโอได้รับการเพิ่มประสิทธิภาพเฉพาะชิปเซ็ต - เพิ่มแฟล็ก
setEnableCodecDbLiteลงในDefaultEncoderFactoryเพื่อเปิดใช้ การเพิ่มประสิทธิภาพการตั้งค่า CodecDB Lite โดยค่าเริ่มต้น ระบบจะตั้งค่าสถานะนี้เป็น false - การเติมช่องว่างเริ่มต้น (เพิ่มผ่าน
addGap()) ด้วยเสียงเงียบในตอนนี้ ต้องตั้งค่าexperimentalSetForceAudioTrack(true)อย่างชัดเจนในEditedMediaItemSequence.Builderหากช่องว่างอยู่ตรงกลางของ ลำดับ ก็ไม่จำเป็นต้องใช้แฟล็กนี้ - ย้ายอินเทอร์เฟซ
Muxerจากmedia3-transformerไปยังmedia3-muxer - กำหนดให้ต้องตั้งค่า
MediaItem.Builder().setImageDuration(long)เพื่อ นำเข้ารายการสื่อเป็นรูปภาพ - เพิ่ม
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)ซึ่งรวมถึงรายการแก้ไข MP4 เมื่อตัดเพื่อสั่งให้เพลเยอร์ ไม่สนใจตัวอย่างระหว่างคีย์เฟรมก่อนจุดเริ่มต้นของการตัด และ จุดเริ่มต้นของการตัด - อัปเดตแอป Composition Demo ให้ใช้ Kotlin และ Jetpack Compose แล้วเพิ่ม
VideoCompositorSettingsที่กำหนดเองเพื่อจัดเรียงลำดับเป็นเลย์เอาต์ 2x2 หรือ PIP
- เพิ่ม
- โปรแกรมแยกข้อมูล
- แยกวิเคราะห์ข้อมูลเมตาจากไฟล์ MP4 ที่แยกส่วน (#2084)
- JPEG: รองรับรูปภาพเคลื่อนไหวที่ไม่มีกลุ่ม Exif ที่จุดเริ่มต้น (#2552)
- เพิ่มการรองรับการกรอใน MP4 แบบแยกส่วนที่มีอะตอม
sidxหลายรายการ คุณเปิดใช้ลักษณะการทำงานนี้ได้โดยใช้ฟีเจอร์FLAG_MERGE_FRAGMENTED_SIDXในFragmentedMp4Extractor(#9373) - ไม่สนใจตารางการค้นหาที่ว่างเปล่าในไฟล์ FLAC (รวมถึงไฟล์ที่มีเฉพาะจุดค้นหาตัวยึดตำแหน่ง ) และกลับไปใช้การค้นหาแบบไบนารีหากทราบ ระยะเวลาของไฟล์ (#2327)
- แก้ไขการแยกวิเคราะห์หน่วย SEI ของ H.265 เพื่อข้ามประเภท SEI ที่ไม่รู้จักโดยสมบูรณ์ (#2456)
- อัปเดต
WavExtractorเพื่อใช้ข้อมูล SubFormat ของส่วนขยายส่วนหัวสำหรับ รูปแบบเสียงเมื่อแยกวิเคราะห์ไฟล์ประเภทWAVE_FORMAT_EXTENSIBLE - MP4: เพิ่มการรองรับกล่อง
ipcmและfpcmที่กำหนดแทร็กเสียง PCM ดิบ (ไม่รองรับ PCM แบบจุดลอยตัว 64 บิต) - MP4: จัดการส่วนการหมุนของ
tkhdเมทริกซ์การแปลงที่ ทั้งหมุนและพลิกวิดีโอ ซึ่งจะช่วยให้วิดีโอที่สะท้อน ซึ่งถ่ายด้วยกล้องหน้าของ iPhone แสดงผลได้อย่างถูกต้อง แต่ สะท้อนในแกน y อย่างไม่ถูกต้อง (#2012) - MP3: ใช้ระยะเวลาและขนาดข้อมูลจากข้อมูลเมตาอัตราบิตแปรผัน Xing, VBRI และที่คล้ายกันซึ่งค้นหาไม่ได้
เมื่อเปลี่ยนกลับไปใช้การค้นหาอัตราบิตคงที่
เนื่องจาก
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194)
- เสียง:
- แก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้
AnalyticsListener.onAudioPositionAdvancingเมื่อเริ่มเล่นเสียงใกล้กับจุดสิ้นสุดของสื่อมาก - เพิ่มการรองรับรูปแบบตัวอย่าง PCM เชิงเส้นทั้งหมดใน
ChannelMappingAudioProcessorและTrimmingAudioProcessor - เพิ่มการรองรับช่องว่างของเสียงใน
CompositionPlayer - นำการโทรที่น่าสงสัยไปยัง
BaseAudioProcessor#flush()ออกจากBaseAudioProcessor#reset() - อนุญาตการอัปมิกซ์/ดาวน์มิกซ์กำลังคงที่ใน DefaultAudioMixer
- ตั้งค่า
ChannelMappingAudioProcessor,TrimmingAudioProcessorและToFloatPcmAudioProcessorเป็นสาธารณะ (#2339) - ใช้
AudioTrack#getUnderrunCount()ในAudioTrackPositionTrackerเพื่อ ตรวจหาการทำงานไม่ต่อเนื่องในDefaultAudioSinkแทนการประมาณค่า แบบสุดความสามารถ - ปรับปรุงการปรับค่าการประทับเวลาของเสียงให้ราบรื่นขึ้นในกรณีที่ตำแหน่งของ อุปกรณ์เอาต์พุตเสียงมีการเปลี่ยนแปลงโดยไม่คาดคิด
- แก้ไขข้อบกพร่องที่ทำให้การซิงค์ภาพและเสียงไม่ทำงานในช่วง 10 วินาทีแรกหลังจากกลับมาเล่นต่อ จากหยุดชั่วคราวเมื่อเชื่อมต่อกับอุปกรณ์บลูทูธ
- แก้ไขข้อบกพร่องที่ทำให้
AnalyticsListener.onAudioPositionAdvancingไม่ได้ รายงานเวลาที่เสียงเริ่มเลื่อน แต่รายงานเวลาของการวัดครั้งแรก - แก้ไขการกู้คืนเป็นเสียงหลายช่องหลังจากเปลี่ยนกลับเป็นเสียงสเตอริโอบนอุปกรณ์บางเครื่อง (#2258)
- แก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้
- วิดีโอ
- ขยายการแก้ปัญหาชั่วคราวสำหรับ Surface ที่ถอดออกไปยังอุปกรณ์ "lenovo" และ "motorola" (#2059)
- ปรับปรุงการปล่อยเฟรมวิดีโอที่ราบรื่นเมื่อเริ่มต้นระบบในกรณีที่ตัวอย่างเสียงไม่ได้ เริ่มที่ตำแหน่งที่ขออย่างแน่นอน
- ขยายการแก้ปัญหาชั่วคราวสำหรับ Surface ที่ถอดออกไปยังอุปกรณ์ "realme" (#2059)
- เพิ่ม
ExoPlayerAPI เวอร์ชันทดลองเพื่อรวมแฟล็กMediaCodec.BUFFER_FLAG_DECODE_ONLYเมื่อจัดคิวบัฟเฟอร์อินพุตแบบถอดรหัสเท่านั้น โดยแฟล็กนี้จะส่งสัญญาณให้ตัวถอดรหัสข้ามบัฟเฟอร์ที่ถอดรหัสได้อย่างเดียว จึงทำให้การค้นหาเร็วขึ้น เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag - ปรับปรุงการตรวจสอบประสิทธิภาพตัวแปลงรหัสสำหรับตัวแปลงรหัสวิดีโอซอฟต์แวร์ ซึ่งอาจส่งผลให้มีการทำเครื่องหมายแทร็กเพิ่มเติมบางรายการเป็น
EXCEEDS_CAPABILITIES - แก้ไขข้อผิดพลาดในการเล่น VP9 Widevine ในอุปกรณ์บางรุ่น (#2408)
- ข้อความ:
- เพิ่มการรองรับแทร็ก VobSub ในไฟล์ MP4 (#2510)
- แก้ไขการหยุดเล่นชั่วคราวเมื่อโหลดส่วนคำบรรยายแทนเสียงไม่สำเร็จในตอนแรกและ โหลดสำเร็จในภายหลัง ตามด้วยส่วนคำบรรยายแทนเสียงที่ว่างเปล่าหลายส่วน (#2517)
- แก้ไข SSA และ SubRip เพื่อแสดงคิวที่กำลังดำเนินการเมื่อเปิดใช้คำบรรยายแทนเสียง (#2309)
- แก้ไขการเล่นที่หยุดชะงักเมื่อเปลี่ยนจากสตรีมที่มีข้อผิดพลาดของคำบรรยายแทนเสียง เป็นไลฟ์สดที่มีแทร็กคำบรรยายแทนเสียงว่างเปล่า (#2328)
- แก้ไขคำบรรยายแทนเสียง CEA-608 ที่อ่านไม่ออกเมื่อเล่นสตรีม H.262 ที่มีเฟรม B (#2372)
- เพิ่มการรองรับคำบรรยาย SSA ที่มี
CodecId = S_TEXT/SSAในไฟล์ Matroska ก่อนหน้านี้MatroskaExtractorรองรับเฉพาะCodecId = S_TEXT/ASSซึ่งหมายถึงตัวแปร "ขั้นสูง" (v4 ขึ้นไป) ของ คำบรรยายแทนเสียง SubStation Alpha (แต่ตรรกะการแยกวิเคราะห์ของ ExoPlayer เหมือนกัน สำหรับทั้ง 2 ตัวแปร) (#2384) - เพิ่มการรองรับพร็อพเพอร์ตี้
layerในไฟล์คำบรรยายแทนเสียง SubStation Alpha (SSA) ซึ่งใช้เพื่อกำหนดลำดับ Z ของคิวเมื่อมีคิวมากกว่า 1 รายการแสดงบนหน้าจอพร้อมกัน (#2124)
- ข้อมูลเมตา
- เพิ่มการรองรับการดึงข้อมูลระยะเวลาของสื่อและ
TimelineไปยังMetadataRetrieverและย้ายข้อมูลไปยัง APIAutoCloseableที่อิงตามอินสแตนซ์ ใช้Builderใหม่เพื่อสร้างอินสแตนซ์สำหรับMediaItemจากนั้นเรียกใช้retrieveTrackGroups(),retrieveTimeline()และretrieveDurationUs()เพื่อรับListenableFutureสำหรับข้อมูลเมตา ตอนนี้เราเลิกใช้งานเมธอดแบบคงที่ก่อนหน้าแล้ว (#2462)
- เพิ่มการรองรับการดึงข้อมูลระยะเวลาของสื่อและ
- รูปภาพ:
- จำกัดบิตแมปที่ถอดรหัสแล้วให้มีขนาดเท่ากับขนาดการแสดงผลใน
BitmapFactoryImageDecoderเพื่อหลีกเลี่ยงไม่ให้แอปขัดข้องเนื่องจากCanvas: trying to draw too large bitmap.จากPlayerViewเมื่อพยายาม แสดงรูปภาพขนาดใหญ่มาก (เช่น 50MP) - เปลี่ยนลายเซ็นของ
DefaultRenderersFactory.getImageDecoderFactory()เพื่อใช้Contextพารามิเตอร์ - ปรับขนาดเอาต์พุตบิตแมปสูงสุดที่ใช้ใน
CompositionPlayerให้ตรงกับขนาดที่ใช้ในTransformer(หมายความว่าCompositionPlayerจะไม่พิจารณาขนาดการแสดงผลเมื่อถอดรหัสบิตแมป ซึ่งต่างจากExoPlayer)
- จำกัดบิตแมปที่ถอดรหัสแล้วให้มีขนาดเท่ากับขนาดการแสดงผลใน
- DRM:
- เพิ่มการโอเวอร์โหลดใหม่ของ
OfflineLicenseHelper.newWidevineInstanceที่ยอมรับMediaItem.DrmConfigurationเพื่อให้ใช้ส่วนหัวของคำขอ HTTP ได้อย่างถูกต้อง (#2169)
- เพิ่มการโอเวอร์โหลดใหม่ของ
- ผลลัพธ์
- เพิ่ม
Presentation.createForShortSide(int)ที่สร้างPresentationซึ่งช่วยให้ด้านที่สั้นที่สุดตรงกับค่าที่ระบุเสมอ โดยไม่คำนึงถึงการวางแนวของอินพุต
- เพิ่ม
- Muxers:
- แก้ไขข้อบกพร่องที่ไม่ได้ตั้งค่าสถานะตัวอย่างที่ถูกต้องสำหรับตัวอย่างเสียงใน MP4 ที่แยกส่วน
writeSampleData()ตอนนี้ API ใช้คลาสBufferInfoเฉพาะของ Muxer แทนMediaCodec.BufferInfoแล้ว- เพิ่ม
Muxer.Factory#supportsWritingNegativeTimestampsInEditListซึ่ง ค่าเริ่มต้นเป็น false
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่ข้อผิดพลาดในการโหลดในโฆษณาหนึ่งอาจทำให้กลุ่มโฆษณาอื่นไม่ถูกต้องโดยไม่ตั้งใจ
- แก้ไขข้อบกพร่องที่กลุ่มโฆษณาหลังจากสิ้นสุดช่วงเวลา VOD ทำให้การเล่นหยุดชะงัก
ระบบจะไม่จัดคิวกลุ่มโฆษณาที่มีเวลาเริ่มต้นหลังจากช่วงเวลาที่กำหนดไว้ใน
MediaPeriodQueueอีกต่อไป (#2215)
- เซสชัน:
- แก้ไขข้อบกพร่องที่ระบบไม่สนใจการเชื่อมต่อจากตัวควบคุม Media3 ของบุคคลที่สามที่ไม่มีสิทธิ์
- นำเครื่องหมายถูกสำหรับคำสั่งที่ใช้ได้ออกเมื่อส่งคำสั่งที่กำหนดเองไปยัง
MediaBrowserServiceCompatรุ่นเดิม ซึ่งจะสอดคล้องกับลักษณะการทำงาน ของตัวควบคุม/เบราว์เซอร์เดิมเมื่อเชื่อมต่อกับแอปเดิม - แก้ไขข้อบกพร่องที่ทำให้ระบบ ถือว่าข้อผิดพลาดในการเล่นครั้งแรกของผู้เล่นเป็นข้อยกเว้นที่กำหนดเองแบบถาวรอย่างไม่ถูกต้อง ซึ่งจะทำให้แอปพลิเคชัน กู้คืนไม่ได้
- แก้ไขข้อบกพร่องที่การเปลี่ยนแปลงตัวควบคุมบางอย่างซึ่งไม่ได้จัดการโดย
เซสชันอาจทำให้เกิด
IllegalStateExceptions - แก้ไขข้อบกพร่องที่การดำเนินการของตัวควบคุมซึ่งเซสชันไม่ได้จัดการอาจ ทำให้ตัวควบคุมอยู่ในสถานะที่ไม่ถูกต้อง
- แก้ไขคำเตือนการละเมิดการเปิดใช้ที่ไม่ปลอดภัยของ StrictMode (#2330)
- แก้ไขข้อบกพร่องที่การเรียกใช้
setSessionExtrasจากเทรดหลักเมื่อ เรียกใช้เพลเยอร์จากเทรดแอปพลิเคชันอื่นที่ไม่ใช่เทรดหลัก ทำให้เกิดIllegalStateException(#2265) - ไม่แสดงการแจ้งเตือนโดยอัตโนมัติหากตั้งค่าเพลเยอร์ด้วยรายการสื่อโดยไม่ได้เตรียมหรือเล่นรายการเหล่านั้น
(#2423https://github.com/androidx/media/issues/2423) ลักษณะการทำงานนี้
กำหนดค่าได้ผ่าน
MediaSessionService.setShowNotificationForIdlePlayer - เพิ่ม
PlaybackExceptionที่กำหนดเองสำหรับคอนโทรลเลอร์ทั้งหมดหรือบางตัว - แก้ไขข้อบกพร่องที่การกรอในไลฟ์สดบน
MediaControllerอาจทำให้เกิดIllegalArgumentException - สำหรับไลฟ์สด ให้หยุดเผยแพร่ตำแหน่งการเล่นและความสามารถในการ กรอในรายการปัจจุบันสำหรับตัวควบคุมสื่อของแพลตฟอร์ม เพื่อหลีกเลี่ยง อาร์ติแฟกต์ตำแหน่งใน UI ของ Android Auto (และตัวควบคุมอื่นๆ ที่ใช้ ข้อมูลนี้จากเซสชันสื่อของแพลตฟอร์ม) (#1758)
- แก้ไขข้อบกพร่องที่การส่งค่า Null ไปยัง
getLibraryRootของMediaBrowserที่เชื่อมต่อกับMediaBrowserServiceCompatรุ่นเดิมทำให้เกิดNullPointerException - แก้ไขข้อบกพร่องที่การส่งการดำเนินการที่กำหนดเอง ผลการค้นหา หรือคำขอ getItem
ทำให้แอปเซสชันเดิมขัดข้องพร้อมกับ
ClassNotFoundException - แก้ไขข้อบกพร่องที่ทำให้มีการแชร์
MediaItem.LocalConfiguration.uriไปยังMediaMetadataของเซสชันแพลตฟอร์ม หากต้องการแชร์ URI โดยเจตนาเพื่อ อนุญาตให้ตัวควบคุมส่งคำขอสื่ออีกครั้ง ให้ตั้งค่าMediaItem.RequestMetadata.mediaUriแทน
- UI:
- แก้ไขข้อบกพร่องที่
PlayerSurfaceภายในคอมโพเนนต์ที่นำกลับมาใช้ใหม่ เช่นLazyColumnทำงานไม่ถูกต้อง (#2493) - แก้ไขข้อบกพร่องของ Compose ซึ่งทำให้เกิดช่องว่างระหว่างการตั้งค่าสถานะปุ่มเริ่มต้นกับการสังเกตการเปลี่ยนแปลงสถานะ (เช่น รูปร่างไอคอนหรือการเปิดใช้) ตอนนี้ระบบจะตรวจจับการเปลี่ยนแปลงใดๆ ที่เกิดขึ้นกับผู้เล่นนอก ระยะเวลาสังเกตการณ์ (#2313)
- เพิ่มตัวยึดสถานะและ Composable ลงในโมดูล
media3-ui-composeสำหรับSeekBackButtonStateและSeekForwardButtonState - เพิ่มการรองรับโหมดการกรอของ ExoPlayer ไปยัง
PlayerControlViewเมื่อ เปิดใช้แล้ว ระบบจะเปลี่ยนเพลเยอร์เป็นโหมดกรอเมื่อผู้ใช้เริ่ม ลากแถบตัวควบคุมการกรอ เรียกใช้player.seekToทุกครั้งที่มี การเคลื่อนไหว แล้วออกจากโหมดกรอเมื่อปล่อยการสัมผัสจาก หน้าจอ คุณเปิดใช้การผสานรวมนี้ได้โดยใช้time_bar_scrubbing_enabled = trueใน XML หรือเมธอดsetTimeBarScrubbingEnabled(boolean)จาก Java/Kotlin - ทำให้
PlayerSurfaceยอมรับอาร์กิวเมนต์Playerที่เป็น Null ได้
- แก้ไขข้อบกพร่องที่
- การดาวน์โหลด
- เพิ่มการรองรับการดาวน์โหลดบางส่วนสำหรับสตรีมแบบต่อเนื่อง แอปสามารถเตรียมสตรีมแบบ
โปรเกรสซีฟด้วย
DownloadHelperและขอDownloadRequestจากผู้ช่วยโดยระบุตำแหน่งเริ่มต้นและสิ้นสุดของสื่อตามเวลาที่การดาวน์โหลดควรครอบคลุมDownloadRequestที่ส่งกลับมาจะมีช่วงไบต์ที่แก้ไขแล้ว ซึ่งใช้สร้างProgressiveDownloaderและดาวน์โหลดเนื้อหาที่เกี่ยวข้องได้ - เพิ่ม
DownloadHelper.Factoryซึ่งจะแทนที่เมธอดแบบคงที่DownloadHelper.forMediaItem() - เพิ่ม
Factoryสำหรับการติดตั้งใช้งานSegmentDownloader - เพิ่มการรองรับการดาวน์โหลดบางส่วนสำหรับสตรีมแบบปรับอัตโนมัติ แอปสามารถเตรียมสตรีมแบบปรับอัตราการส่งข้อมูลได้ด้วย
DownloadHelperและขอDownloadRequestจากตัวช่วยโดยระบุตำแหน่งเริ่มต้นและสิ้นสุดของสื่อตามเวลาที่การดาวน์โหลดควรครอบคลุมDownloadRequestที่ส่งคืนมา จะมีช่วงเวลาที่แก้ไขแล้ว ซึ่งใช้สร้างSegmentDownloaderที่เฉพาะเจาะจง และดาวน์โหลดเนื้อหา ที่เกี่ยวข้องได้
- เพิ่มการรองรับการดาวน์โหลดบางส่วนสำหรับสตรีมแบบต่อเนื่อง แอปสามารถเตรียมสตรีมแบบ
โปรเกรสซีฟด้วย
- ส่วนขยาย Cronet
- เพิ่มการจัดการคุกกี้อัตโนมัติ (#5975)
- ส่วนขยาย HLS
- แก้ไขข้อบกพร่องที่
HlsSampleStreamWrapperพยายามค้นหาภายในบัฟเฟอร์ เมื่อไม่มี Chunk ในบัฟเฟอร์ #2598 - แก้ไขข้อบกพร่องที่การเลือกแทร็กเปลี่ยนแปลงหลังจากโหลดส่วนที่มีเวลาในการตอบสนองต่ำ และคำแนะนำในการโหลดล่วงหน้าอาจทำให้การเล่นค้างหรือหยุดชะงัก (#2299)
- ป้องกันการโหลดซ้ำมากเกินไปโดยรอครึ่งหนึ่งของระยะเวลาเป้าหมายเมื่อเซิร์ฟเวอร์ไม่ยอมรับ
CAN-BLOCK-RELOAD=YES(#2317) - แก้ไขข้อบกพร่องที่ทำให้การเล่นหยุดชะงักเมื่อเริ่มสตรีมโฆษณาคั่นระหว่างหน้า ก่อนโฆษณากลางม้วน และพยายามแก้ไขรายการชิ้นงานสำหรับโฆษณาที่ไม่ถูกต้อง (#2558)
- แก้ไขการแยกวิเคราะห์เพลย์ลิสต์เพื่อยอมรับ
\f(ฟีดแบบฟอร์ม) ในค่าแอตทริบิวต์สตริงที่ยกมา (#2420) - รองรับการอัปเดตโฆษณาคั่นที่มีรหัสเดียวกัน (#2427)
- แก้ไขข้อบกพร่องที่บางครั้งข้อผิดพลาดในการโหลดเพลย์ลิสต์ไม่ได้รับการเผยแพร่เมื่อ ไลฟ์สดไม่มีกลุ่มให้โหลด (#2401https://github.com/androidx/media/issues/2401)
- จัดกลุ่มการแสดงผลคำบรรยายแทนเสียงตามแท็ก NAME ในลักษณะเดียวกับที่จัดกลุ่มการแสดงผลเสียงอยู่แล้ว (#1666)
- รองรับ X-ASSET-LIST และสตรีมแบบสดด้วย
HlsInterstitialsAdsLoader
- แก้ไขข้อบกพร่องที่
- ส่วนขยาย DASH
- แก้ไขปัญหาที่ชุดการปรับเปลี่ยนการกรอวิดีโอจะผสานกับชุดการปรับเปลี่ยนหลัก
เพื่อสร้าง
TrackGroupที่ไม่ถูกต้อง (#2148) - แก้ไขข้อบกพร่องที่การลดระยะเวลาของช่วง DASH อาจทำให้เกิดข้อยกเว้น เมื่อไปป์ไลน์การแสดงผล อ่านตัวอย่างที่อยู่นอกเหนือระยะเวลาใหม่แล้ว (#2440)
- แก้ไขข้อบกพร่องที่ระบบไม่เปลี่ยนเส้นทางเมื่อใช้พารามิเตอร์การค้นหา CMCD (#2475)
- แก้ไขปัญหาที่ชุดการปรับเปลี่ยนการกรอวิดีโอจะผสานกับชุดการปรับเปลี่ยนหลัก
เพื่อสร้าง
- ส่วนขยาย RTSP
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- แก้ไขข้อบกพร่องที่
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeไม่มีผลกับส่วนขยายตัวถอดรหัสเสียง (#2258)
- แก้ไขข้อบกพร่องที่
- ส่วนขยาย Cast
- โปรแกรมทดสอบ:
- เพิ่ม
advance(player).untilPositionAtLeastและuntilMediaItemIndexไปยังTestPlayerRunHelperเพื่อให้ผู้เล่นเลื่อนไปจนกว่าจะถึง ตำแหน่งที่ระบุ ในกรณีส่วนใหญ่ วิธีการเหล่านี้มีความน่าเชื่อถือมากกว่าวิธีการuntilPositionและuntilStartOfMediaItemที่มีอยู่ - ย้าย
FakeDownloaderไปยังโมดูลtest-utils-robolectricเพื่อนำไปใช้ซ้ำในการทดสอบอื่นๆ - นำ
transformer.TestUtil.addAudioDecoders(String...)transformer.TestUtil.addAudioEncoders(String...)และtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)ออกแล้ว ใช้ShadowMediaCodecConfigเพื่อกำหนดค่าตัวเข้ารหัส และตัวถอดรหัสเงาแทน - แทนที่คำนำหน้า "exotest" ด้วย "media3" ในชื่อตัวแปลงรหัสที่รายงานโดย
ShadowMediaCodecConfig
- เพิ่ม
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำตัวสร้าง
SegmentDownloaderที่เลิกใช้งานแล้วSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)และตัวสร้างที่เกี่ยวข้องในคลาสย่อยDashDownloader,HlsDownloaderและSsDownloaderออกแล้ว - นำ
Player.hasNext()และPlayer.hasNextWindow()ที่เลิกใช้งานแล้วออก โปรดใช้Player.hasNextMediaItem()แทน - นำ
Player.next()ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToNextMediaItem()แทน - นำ
Player.seekToPreviousWindow()ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToPreviousMediaItem()แทน - นำ
Player.seekToNextWindow()ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToNextMediaItem()แทน - นำ
BaseAudioProcessorที่เลิกใช้งานแล้วออกในโมดูลexoplayerใช้BaseAudioProcessorในโมดูลcommon - นำตัวสร้าง
MediaCodecVideoRendererที่เลิกใช้งานแล้วออกMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
- นำตัวสร้าง
เวอร์ชัน 1.8.0-rc02
24 กรกฎาคม 2025
ใช้เวอร์ชันเสถียร 1.8.0
เวอร์ชัน 1.8.0-rc01
16 กรกฎาคม 2025
ใช้เวอร์ชันเสถียร 1.8.0
เวอร์ชัน 1.8.0-beta01
2 กรกฎาคม 2025
ใช้เวอร์ชันเสถียร 1.8.0
เวอร์ชัน 1.8.0-alpha01
19 พฤษภาคม 2025
ใช้เวอร์ชันเสถียร 1.8.0
เวอร์ชัน 1.7.0
เวอร์ชัน 1.7.1
16 พฤษภาคม 2025
รุ่นนี้มีโค้ดเดียวกับ 1.6.1 และเผยแพร่เพื่อให้แสดงเป็นรุ่นที่ "ใหม่กว่า" 1.7.0 ซึ่งเป็นรุ่นอัลฟ่าที่ติดแท็กเป็นเสถียรโดยไม่ตั้งใจ (ดูด้านล่าง)
เวอร์ชัน 1.7.0
16 พฤษภาคม 2025
รุ่นนี้ควรเป็น 1.7.0-alpha01 แต่มีการติดแท็กเป็น
1.7.0 (เช่น เสถียร) โดยไม่ได้ตั้งใจใน maven.google.com โปรดอย่าใช้ ใช้เวอร์ชัน 1.6.1 ต่อไปหรืออัปเกรดเป็น 1.7.1 (ซึ่งมีโค้ดเดียวกับ 1.6.1)
เวอร์ชัน 1.6.0
1.6.1
14 เมษายน 2025
androidx.media3:media3-*:1.6.1 ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.6.1 มี
การเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่ม
PlaybackParameters.withPitch(float)วิธีคัดลอกPlaybackParametersอย่างง่ายดายด้วยpitchค่าใหม่ (#2257)
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาที่การเปลี่ยนรายการสื่อไม่สำเร็จเนื่องจากข้อผิดพลาดของโปรแกรมแสดงผลที่กู้คืนได้ ระหว่างการเริ่มต้นรายการสื่อถัดไป (#2229)
- แก้ไขปัญหาที่
ProgressiveMediaPeriodแสดงIllegalStateExceptionเมื่อPreloadMediaSourceพยายามเรียกใช้getBufferedDurationUs()ก่อนที่จะเตรียมใช้งาน (#2315) - แก้ไขการส่ง
CmcdDataในคำขอไฟล์ Manifest สำหรับ DASH, HLS และ SmoothStreaming (#2253) - ตรวจสอบว่าใช้
AdPlaybackState.withAdDurationsUs(long[][])ได้หลังจาก นำกลุ่มโฆษณาออกแล้ว ผู้ใช้ยังคงต้องส่งอาร์เรย์ของ ระยะเวลาสำหรับกลุ่มโฆษณาที่นำออก ซึ่งอาจเป็นค่าว่างหรือ Null (#2267)
- โปรแกรมแยกข้อมูล
- MP4: แยกวิเคราะห์
alternate_groupจากกล่องtkhdและแสดงเป็นรายการMp4AlternateGroupDataในFormat.metadataของแต่ละแทร็ก (#2242)
- MP4: แยกวิเคราะห์
- เสียง:
- แก้ไขปัญหาการโอนที่ตำแหน่งอาจค้างเมื่อเล่น เพลย์ลิสต์เนื้อหาสั้น (#1920)
- เซสชัน:
- ลดระยะหมดเวลาการรวบรวมข้อมูลสำหรับการเรียกกลับของแพลตฟอร์ม
MediaSessionจาก 500 เป็น 100 มิลลิวินาที และเพิ่มตัวตั้งค่าเวอร์ชันทดลองเพื่อให้แอปกำหนดค่านี้ได้ - แก้ไขปัญหาที่การแจ้งเตือนปรากฏขึ้นอีกครั้งหลังจากที่ผู้ใช้ปิดไปแล้ว (#2302)
- แก้ไขข้อบกพร่องที่เซสชันแสดงไทม์ไลน์แบบ 1 รายการเมื่อ
โปรแกรมเล่นสรุปไม่มีรายการ กรณีนี้เกิดขึ้นเมื่อเพลเยอร์ที่ห่อหุ้มไม่มี
COMMAND_GET_TIMELINEขณะที่COMMAND_GET_CURRENT_MEDIA_ITEMพร้อมใช้งานและเพลเยอร์ที่ห่อหุ้มว่างเปล่า (#2320) - แก้ไขข้อบกพร่องที่ระบบจะเพิกเฉยต่อการเรียกใช้
MediaSessionService.setMediaNotificationProviderโดยไม่มีการแจ้งเตือน หลังจากมีการโต้ตอบอื่นๆ กับบริการ เช่นsetForegroundServiceTimeoutMs(#2305)
- ลดระยะหมดเวลาการรวบรวมข้อมูลสำหรับการเรียกกลับของแพลตฟอร์ม
- UI:
- เปิดใช้
PlayerSurfaceเพื่อทำงานร่วมกับExoPlayer.setVideoEffectsและCompositionPlayer - แก้ไขข้อบกพร่องที่
PlayerSurfaceไม่สามารถเรียบเรียงใหม่ด้วยPlayerใหม่
- เปิดใช้
- ส่วนขยาย HLS
- แก้ไขปัญหาที่ไม่ได้ตั้งค่าระยะเวลาของก้อนข้อมูลใน
CmcdDataสำหรับสื่อ HLS ซึ่งทำให้การยืนยันไม่สำเร็จเมื่อประมวลผลกลุ่มสื่อที่เข้ารหัส (#2312)
- แก้ไขปัญหาที่ไม่ได้ตั้งค่าระยะเวลาของก้อนข้อมูลใน
- ส่วนขยาย RTSP
- เพิ่มการรองรับ URI ที่มีรูปแบบ RTSPT เป็นวิธีในการกำหนดค่าเซสชัน RTSP ให้ใช้ TCP (#1484)
- ส่วนขยาย Cast
- เพิ่มการรองรับข้อมูลเมตาของเพลย์ลิสต์ (#2235)
1.6.0
26 มีนาคม 2025
androidx.media3:media3-*:1.6.0 ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.6.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป
- เพิ่ม
AudioManagerCompatและAudioFocusRequestCompatเพื่อแทนที่ ชั้นเรียนที่เทียบเท่าในandroidx.media - อัปเกรด Kotlin จาก 1.9.20 เป็น 2.0.20 และใช้ปลั๊กอิน Compose Compiler Gradle อัปเกรดไลบรารี KotlinX Coroutines จาก 1.8.1 เป็น 1.9.0
- นำวิธีการ
Format.toBundle(boolean excludeMetadata)ออก แล้วใช้Format.toBundle()แทน - แก้ไขข้อบกพร่องใน
SimpleBasePlayerซึ่งการตั้งค่าใหม่currentMediaItemIndexในStateหลังจากsetPlaylistด้วยnullMediaMetadataจะไม่ประเมินข้อมูลเมตาอีกครั้ง (#1940) - เปลี่ยนสิทธิ์เข้าถึง
SimpleBasePlayer.Stateจากแบบป้องกันเป็นแบบสาธารณะเพื่อให้จัดการการอัปเดตในชั้นเรียนอื่นๆ ได้ง่ายขึ้น (#2128)
- เพิ่ม
- ExoPlayer:
- เพิ่ม
MediaExtractorCompatซึ่งเป็นคลาสใหม่ที่มีฟีเจอร์เทียบเท่ากับแพลตฟอร์มMediaExtractor - เพิ่มการรองรับการอุ่นเครื่องล่วงหน้าของ "ExoPlayer" เวอร์ชันทดลองสำหรับการเล่นโดยใช้
MediaCodecVideoRendererคุณสามารถกำหนดค่าDefaultRenderersFactoryผ่านexperimentalSetEnableMediaCodecVideoRendererPrewarmingเพื่อ ระบุMediaCodecVideoRendererรองให้กับExoPlayerหากเปิดใช้ExoPlayerจะประมวลผลล่วงหน้าสำหรับวิดีโอของรายการสื่อที่ต่อเนื่อง ในระหว่างการเล่นเพื่อลดเวลาในการตอบสนองของการเปลี่ยนรายการสื่อ - ลดค่าเริ่มต้นสำหรับ
bufferForPlaybackMsและbufferForPlaybackAfterRebufferMsในDefaultLoadControlเป็น 1,000 และ 2,000 มิลลิวินาทีตามลำดับ - เริ่มต้น
DeviceInfoและระดับเสียงของอุปกรณ์แบบไม่พร้อมกัน (หากเปิดใช้ โดยใช้setDeviceVolumeControlEnabled) ค่าเหล่านี้จะใช้ไม่ได้ ทันทีหลังจากExoPlayer.Builder.build()และPlayer.Listenerจะแจ้งการเปลี่ยนแปลงผ่านonDeviceInfoChangedและonDeviceVolumeChanged - รหัสเซสชันเสียงเริ่มต้นจะไม่พร้อมใช้งานทันทีหลังจาก
สร้างเพลเยอร์อีกต่อไป คุณใช้
AnalyticsListener.onAudioSessionIdChangedเพื่อฟังการอัปเดต ครั้งแรกได้หากต้องการ - พิจารณาภาษาเมื่อเลือกแทร็กวิดีโอ โดยค่าเริ่มต้น ให้เลือกแทร็กวิดีโอ "หลัก" ที่ตรงกับภาษาของแทร็กเสียงที่เลือก หากมี คุณระบุค่ากำหนดภาษาของวิดีโออย่างชัดเจนได้โดยใช้
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) - เพิ่มพารามิเตอร์
selectedAudioLanguageไปยังเมธอดDefaultTrackSelector.selectVideoTrack() - เพิ่มพารามิเตอร์
retryCountลงในMediaSourceEventListener.onLoadStartedและเมธอดMediaSourceEventListener.EventDispatcherที่เกี่ยวข้อง - แก้ไขข้อบกพร่องที่รายการเพลย์ลิสต์หรือช่วงในสตรีม DASH แบบหลายช่วง ที่มีระยะเวลาไม่ตรงกับเนื้อหาจริงอาจทำให้เฟรม ค้างที่ส่วนท้ายของรายการ (#1698)
- ย้าย
BasePreloadManager.ListenerไปยังระดับบนสุดPreloadManagerListener RenderersFactory.createSecondaryRendererสามารถนำมาใช้เพื่อจัดเตรียม โปรแกรมแสดงผลรองสำหรับการอุ่นเครื่องล่วงหน้าได้ การเตรียมข้อมูลล่วงหน้าช่วยให้การเปลี่ยน รายการสื่อระหว่างการเล่นเร็วขึ้น- เปิดใช้การส่ง
CmcdDataสำหรับคำขอไฟล์ Manifest ในการสตรีมแบบปรับอัตรา รูปแบบ DASH, HLS และ SmoothStreaming (#1951) - ระบุ
MediaCodecInfoของตัวแปลงสัญญาณที่จะเริ่มต้นในMediaCodecRenderer.onReadyToInitializeCodec(#1963) - เปลี่ยน
AdsMediaSourceเพื่อให้AdPlaybackStatesเติบโตได้โดย การผนวกกลุ่มโฆษณา ระบบจะตรวจพบการแก้ไขที่ไม่ถูกต้องและส่ง ข้อยกเว้น - แก้ไขปัญหาที่เฟรมเพิ่มเติมแบบถอดรหัสอย่างเดียวอาจแสดงขึ้นอย่างรวดเร็ว ต่อเนื่องเมื่อเปลี่ยนไปใช้สื่อเนื้อหาหลังจากโฆษณาตอนกลาง
DefaultRenderersFactoryเพิ่มอินสแตนซ์MetadataRenderer2 รายการเพื่อ เปิดใช้แอปให้รับรูปแบบข้อมูลเมตาที่แตกต่างกัน 2 รูปแบบโดยค่าเริ่มต้น- ประเมินใหม่ว่าควรยกเลิกการโหลดก้อนข้อมูลที่กำลังดำเนินการอยู่เมื่อ หยุดเล่นชั่วคราวหรือไม่ (#1785)
- เพิ่มตัวเลือกใน
ClippingMediaSourceเพื่ออนุญาตให้ตัดคลิปในสื่อที่กรอไม่ได้ - แก้ไขข้อบกพร่องที่การกรอด้วยการวอร์มอัปอาจบล็อกการเปลี่ยนรายการสื่อถัดไป
- แก้ไขข้อบกพร่องที่ทำให้
ExoPlayer.isLoading()ยังคงเป็นtrueในขณะที่เปลี่ยนเป็นSTATE_IDLEหรือSTATE_ENDEDแล้ว (#2133) - เพิ่ม
lastRebufferRealtimeMsไปยังLoadControl.Parameter(#2113)
- เพิ่ม
- Transformer
- เพิ่มการรองรับการแปลงมัลติเพล็กซ์เป็นรูปแบบอื่นที่เข้ากันได้แบบย้อนหลัง
- เพิ่มการรองรับการแปลงรหัสและการแปลงมัลติเพล็กซ์รูปแบบ Dolby Vision (โปรไฟล์ 8)
- อัปเดตพารามิเตอร์ของ
VideoFrameProcessor.registerInputStreamและVideoFrameProcessor.Listener.onInputStreamRegisteredเพื่อใช้Format - สร้างข้อมูลเมตาแบบคงที่ของ HDR เมื่อใช้
DefaultEncoderFactory - เปิดใช้การรองรับการวินิจฉัยแพลตฟอร์ม Android โดยใช้
MediaMetricsManagerTransformer จะส่งต่อเหตุการณ์การแก้ไขและ ข้อมูลประสิทธิภาพไปยังแพลตฟอร์ม ซึ่งช่วยให้ข้อมูลประสิทธิภาพของระบบ และการแก้ไขข้อบกพร่องในอุปกรณ์ นอกจากนี้ Google อาจเก็บรวบรวมข้อมูลนี้ด้วย หากผู้ใช้อุปกรณ์เปิดใช้การแชร์ข้อมูลการใช้งานและการวินิจฉัย แอปสามารถเลือกไม่ให้ข้อมูลเพื่อช่วยในการวินิจฉัยแพลตฟอร์มสำหรับ Transformer ด้วยTransformer.Builder.setUsePlatformDiagnostics(false)ได้ - แยก
InAppMuxerเป็นInAppMp4MuxerและInAppFragmentedMp4Muxerคุณใช้InAppMp4Muxerเพื่อสร้างไฟล์ MP4 ที่ไม่เป็นแบบแยกส่วน ส่วนInAppFragmentedMp4Muxerใช้สร้างไฟล์ MP4 ที่เป็นแบบแยกส่วน - ย้ายอินเทอร์เฟซ
Muxerจากmedia3-muxerไปยังmedia3-transformer - เพิ่ม
MediaProjectionAssetLoaderซึ่งมีสื่อจากMediaProjectionสำหรับการบันทึกหน้าจอ และเพิ่มการรองรับการบันทึกหน้าจอลงในแอปเดโม Transformer - เพิ่ม
#getInputFormat()ลงในอินเทอร์เฟซCodec - เปลี่ยนความรับผิดชอบในการปล่อย
GlObjectsProviderให้แก่ผู้โทรในDefaultVideoFrameProcessorและDefaultVideoCompositorเมื่อเป็นไปได้
- โปรแกรมแยกข้อมูล
- AVI: แก้ไขการจัดการไฟล์ที่มีเสียงบีบอัดอัตราบิตคงที่ซึ่งส่วนหัวของสตรีมจะจัดเก็บจำนวนไบต์แทนจำนวน ก้อน
- แก้ไขการจัดการหน่วย NAL ที่มีความยาวแสดงใน 1 หรือ 2 ไบต์ (แทนที่จะเป็น 4)
- แก้ไข
ArrayIndexOutOfBoundsExceptionในรายการการแก้ไข MP4 เมื่อรายการการแก้ไข เริ่มต้นที่เฟรมที่ไม่ได้ซิงค์โดยไม่มีเฟรมที่ซิงค์ก่อนหน้า (#2062) - แก้ไขปัญหาที่สตรีม TS ค้างในอุปกรณ์บางเครื่อง (#2069)
- FLAC: เพิ่มการรองรับไฟล์ FLAC 32 บิต ก่อนหน้านี้วิดีโอเหล่านี้จะเล่นไม่ได้กับ
IllegalStateException: Playback stuck buffering and not loading(#2197)
- เสียง:
- แก้ไขให้มีการเรียกใช้
onAudioPositionAdvancingเมื่อกลับมาเล่นอีกครั้ง (ก่อนหน้านี้จะมีการเรียกใช้เมื่อหยุดเล่นชั่วคราว) - อย่าข้าม
SonicAudioProcessorเมื่อกำหนดค่าSpeedChangingAudioProcessorด้วยพารามิเตอร์เริ่มต้น - แก้ไขการไหลเข้าไม่เพียงพอใน
Sonic#getOutputSize()ซึ่งอาจทำให้DefaultAudioSinkหยุดทำงาน - แก้ไข
MediaCodecAudioRenderer.getDurationToProgressUs()และDecoderAudioRenderer.getDurationToProgressUs()เพื่อให้การค้นหาทำงานได้อย่างถูกต้อง รีเซ็ตระยะเวลาที่ระบุ - ทำเครื่องหมาย
androidx.media3.common.audio.SonicAudioProcessorว่าเสร็จสิ้น - เพิ่มการรองรับ PCM แบบลอยตัวไปยัง
ChannelMappingAudioProcessorและTrimmingAudioProcessor
- แก้ไขให้มีการเรียกใช้
- วิดีโอ
- เปลี่ยน
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceเป็น protected เพื่อให้แอปพลิเคชันสามารถลบล้างเพื่อบล็อกการใช้งาน พื้นผิวตัวยึดตำแหน่ง (#1905) - เพิ่มการแยกวิเคราะห์การขึ้นต่อกันของตัวอย่าง
ExoPlayerAV1 เวอร์ชันทดลองเพื่อเพิ่มความเร็ว ในการกรอ เปิดใช้ด้วย APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesใหม่ - เพิ่ม
ExoPlayerAPI ทดลองMediaCodecVideoRendererเพื่อทิ้งบัฟเฟอร์อินพุตของตัวถอดรหัสMediaCodecVideoRendererที่ล่าช้าซึ่งไม่ได้ขึ้นอยู่กับบัฟเฟอร์อื่น เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs - แก้ไขปัญหาที่เพลเยอร์ที่ไม่มีพื้นผิวพร้อมใช้งานทันทีและ ถอดรหัสเฟรมที่รอดำเนินการช้ามาก (#1973)
- ยกเว้นอุปกรณ์ Xiaomi และ OPPO จากโหมดพื้นผิวที่แยกออกเพื่อหลีกเลี่ยง หน้าจอกะพริบ (#2059)
- เปลี่ยน
- ข้อความ:
- เพิ่มการรองรับคำบรรยาย VobSub (#8260)
- หยุดโหลดไฟล์คำบรรยายทั้งหมดที่กำหนดค่าด้วย
MediaItem.Builder.setSubtitleConfigurationsล่วงหน้า แล้วโหลดเพียงไฟล์เดียวแทน หากมีการเลือกโดยการเลือกแทร็ก (#1721) - TTML: เพิ่มการรองรับการอ้างอิง
tts:originและtts:extentโดยใช้style(#2953) - จำกัดการประทับเวลา WebVTT และ SubRip ให้มีทศนิยม 3 ตำแหน่ง ก่อนหน้านี้เราแยกวิเคราะห์จำนวนทศนิยมอย่างไม่ถูกต้อง แต่จะถือว่าค่าเป็นมิลลิวินาทีเสมอ ซึ่งทำให้เกิดการประทับเวลาที่ไม่ถูกต้อง (#1997)
- แก้ไขการเล่นที่ค้างเมื่อเพลย์ลิสต์มีรายการที่ตัดต่อพร้อมคำบรรยายแทนเสียง CEA-608 หรือ CEA-708
- แก้ไข
IllegalStateExceptionเมื่อไฟล์ SSA มีคิวที่มีระยะเวลาเป็น 0 (เวลาเริ่มต้นและเวลาสิ้นสุดเท่ากัน) (#2052) - ระงับ (และบันทึก) ข้อผิดพลาดในการแยกวิเคราะห์คำบรรยายแทนเสียงเมื่อมีการมัลติเพล็กซ์คำบรรยายแทนเสียงลงใน คอนเทนเนอร์เดียวกับเสียงและวิดีโอ (#2052)
- แก้ไขการจัดการอักขระ UTF-8 แบบหลายไบต์ในไฟล์ WebVTT โดยใช้การสิ้นสุดบรรทัด CR (#2167)
- DRM:
- แก้ไขข้อผิดพลาด
MediaCodec$CryptoException: Operation not supported in this configurationเมื่อเล่นเนื้อหา ClearKey ในอุปกรณ์ที่ใช้ API เวอร์ชันต่ำกว่า 27 (#1732)
- แก้ไขข้อผิดพลาด
- ผลลัพธ์
- ย้ายฟังก์ชันของ
OverlaySettingsไปยังStaticOverlaySettingsOverlaySettingsสามารถสร้างคลาสย่อยเพื่ออนุญาต การตั้งค่าการซ้อนทับแบบไดนามิกได้
- ย้ายฟังก์ชันของ
- Muxers:
- ย้าย
MuxerExceptionออกจากอินเทอร์เฟซMuxerเพื่อหลีกเลี่ยงชื่อที่ยาวมาก ซึ่งมีคุณสมบัติครบถ้วน - เปลี่ยนชื่อเมธอด
setSampleCopyEnabled()เป็นsetSampleCopyingEnabled()ทั้งในMp4Muxer.BuilderและFragmentedMp4Muxer.Builder - ตอนนี้
Mp4Muxer.addTrack()และFragmentedMp4Muxer.addTrack()จะแสดง รหัสแทร็กintแทนTrackToken Mp4MuxerและFragmentedMp4Muxerไม่ได้ใช้Muxerอินเทอร์เฟซอีกต่อไป- ปิดใช้การจัดกลุ่มและการคัดลอกตัวอย่าง
Mp4Muxerโดยค่าเริ่มต้น - แก้ไขข้อบกพร่องใน
FragmentedMp4Muxerที่สร้าง Fragment จำนวนมากเมื่อ เขียนเฉพาะแทร็กเสียง
- ย้าย
- เซสชัน:
- รักษาสถานะของบริการที่ทำงานอยู่เบื้องหน้าต่อไปอีก 10 นาทีเมื่อการเล่น
หยุดชั่วคราว หยุด หรือล้มเหลว ซึ่งช่วยให้ผู้ใช้กลับมาเล่นต่อได้ภายใน
ระยะหมดเวลานี้โดยไม่ต้องเสี่ยงต่อการถูกจำกัดบริการที่ทำงานอยู่เบื้องหน้าในอุปกรณ์ต่างๆ
โปรดทราบว่าคุณไม่สามารถใช้การโทรหา
player.pause()เพื่อหยุดบริการที่ทำงานอยู่เบื้องหน้าก่อนstopSelf()เมื่อลบล้างonTaskRemovedให้ใช้MediaSessionService.pauseAllPlayersAndStopSelf()แทน - แสดงการแจ้งเตือนเมื่อการเล่นเกิดข้อผิดพลาดหรือหยุด ระบบจะนำการแจ้งเตือนออกก็ต่อเมื่อมีการล้างเพลย์ลิสต์หรือ มีการปล่อยตัวผู้เล่น
- ปรับปรุงการจัดการการดำเนินการ MediaSession ของแพลตฟอร์ม Android ACTION_PLAY และ ACTION_PAUSE เพื่อตั้งค่าเพียงรายการเดียวตามคำสั่งที่มี และยอมรับหากมีการตั้งค่าเพียงรายการเดียว
- เพิ่ม
Contextเป็นพารามิเตอร์ในMediaButtonReceiver.shouldStartForegroundService(#1887) - แก้ไขข้อบกพร่องที่การเรียกใช้เมธอด
PlayerในMediaControllerที่เชื่อมต่อ กับเซสชันเดิมจะทำให้การเปลี่ยนแปลงจากการอัปเดตที่รอดำเนินการหายไป - ทำให้
MediaSession.setSessionActivity(PendingIntent)ยอมรับค่า Null (#2109) - แก้ไขข้อบกพร่องที่ทำให้การแจ้งเตือนที่ล้าสมัยยังคงแสดงอยู่เมื่อล้างเพลย์ลิสต์ (#2211)
- รักษาสถานะของบริการที่ทำงานอยู่เบื้องหน้าต่อไปอีก 10 นาทีเมื่อการเล่น
หยุดชั่วคราว หยุด หรือล้มเหลว ซึ่งช่วยให้ผู้ใช้กลับมาเล่นต่อได้ภายใน
ระยะหมดเวลานี้โดยไม่ต้องเสี่ยงต่อการถูกจำกัดบริการที่ทำงานอยู่เบื้องหน้าในอุปกรณ์ต่างๆ
โปรดทราบว่าคุณไม่สามารถใช้การโทรหา
- UI:
- เพิ่มตัวยึดสถานะและ Composable ลงในโมดูล
media3-ui-composeสำหรับPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateและPlaybackSpeedState
- เพิ่มตัวยึดสถานะและ Composable ลงในโมดูล
- การดาวน์โหลด
- แก้ไขข้อบกพร่องใน
CacheWriterที่ทำให้แหล่งข้อมูลเปิดอยู่และพื้นที่แคช ล็อกไว้ในกรณีที่แหล่งข้อมูลส่งExceptionอื่นที่ไม่ใช่IOException(#9760)
- แก้ไขข้อบกพร่องใน
- ส่วนขยาย HLS
- เพิ่ม
HlsInterstitialsAdsLoaderเวอร์ชันแรก โปรแกรมโหลดโฆษณาจะอ่าน โฆษณาคั่นระหว่างหน้า HLS ของเพลย์ลิสต์สื่อ HLS และแมปโฆษณาเหล่านั้นกับAdPlaybackStateที่ส่งไปยังAdsMediaSourceเวอร์ชันเริ่มต้นนี้รองรับเฉพาะสตรีม VOD ของ HLS ที่มีแอตทริบิวต์X-ASSET-URI - เพิ่ม
HlsInterstitialsAdsLoader.AdsMediaSourceFactoryแอปสามารถใช้เพื่อสร้างอินสแตนซ์AdsMediaSourceที่ใช้HlsInterstitialsAdsLoaderได้อย่างสะดวกและปลอดภัย - แยกวิเคราะห์แท็ก
SUPPLEMENTAL-CODECSจากเพลย์ลิสต์ HLS เพื่อตรวจหา Dolby Vision รูปแบบ (#1785) - ผ่อนปรนเงื่อนไขสำหรับการค้นหาเพื่อซิงค์ตำแหน่งในสตรีม HLS (#2209)
- เพิ่ม
- ส่วนขยาย DASH
- เพิ่มการรองรับรูปแบบ AC-4 ระดับ 4 สำหรับ DASH (#1898)
- แก้ไขปัญหาเมื่อคำนวณช่วงเวลาการอัปเดตสำหรับการแทรกโฆษณาใน ไลฟ์สดแบบหลายช่วงเวลา (#1698)
- แยกวิเคราะห์แอตทริบิวต์
scte214:supplementalCodecsจากไฟล์ Manifest DASH เพื่อ ตรวจหาฟอแมต Dolby Vision (#1785) - ปรับปรุงการจัดการการเปลี่ยนช่วงเวลาในไลฟ์สดที่ช่วงเวลามีตัวอย่างสื่อที่อยู่นอกเหนือระยะเวลาของช่วงเวลาที่ประกาศไว้ (#1698)
- แก้ไขปัญหาที่ชุดการดัดแปลงซึ่งทำเครื่องหมายด้วย
adaptation-set-switchingแต่มีภาษาหรือค่าสถานะบทบาทที่แตกต่างกันจะผสานรวมกัน (#2222)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- เพิ่มโมดูลตัวถอดรหัส MPEG-H ซึ่งใช้ตัวถอดรหัส MPEG-H ในตัว เพื่อถอดรหัสเสียง MPEG-H (#1826)
- ส่วนขยาย MIDI
- เชื่อมต่ออินสแตนซ์
AudioSinkและAudioRendererEventListenerที่กำหนดเองเข้ากับMidiRenderer
- เชื่อมต่ออินสแตนซ์
- ส่วนขยาย Cast
- เพิ่ม
play-services-cast-frameworkการอ้างอิงเป็น 21.5.0 เพื่อแก้ไขข้อขัดข้องFLAG_MUTABLEในแอปที่กำหนดเป้าหมายเป็น API 34 ขึ้นไปในอุปกรณ์ที่ติดตั้งบริการ Google Play แต่ปิดใช้ (#2178)
- เพิ่ม
- แอปเดโม
- ขยาย
demo-composeด้วยปุ่มเพิ่มเติมและปรับปรุง การผสานรวมPlayerSurfaceด้วยการรองรับการปรับขนาดและชัตเตอร์
- ขยาย
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำเมธอด
AudioMixer.create()ที่เลิกใช้งานแล้วออก โปรดใช้DefaultAudioMixer.Factory().create()แทน - นำ
Transformer.Builderเมธอดที่เลิกใช้งานแล้วต่อไปนี้ออกsetTransformationRequest()ให้ใช้setAudioMimeType(),setVideoMimeType()และsetHdrMode()แทนsetAudioProcessors()ตั้งค่าโปรเซสเซอร์เสียงในEditedMediaItem.Builder.setEffects()แล้วส่งไปยังTransformer.start()แทนsetVideoEffects()ตั้งค่าเอฟเฟกต์วิดีโอในEditedMediaItem.Builder.setEffects()แล้วส่งไปยังTransformer.start()แทนsetRemoveAudio()ให้ใช้EditedMediaItem.Builder.setRemoveAudio()เพื่อนำเสียงออกจากEditedMediaItemที่ส่งไปยังTransformer.start()แทนsetRemoveVideo()ให้ใช้EditedMediaItem.Builder.setRemoveVideo()เพื่อนำวิดีโอออกจากEditedMediaItemที่ส่งไปยังTransformer.start()แทนsetFlattenForSlowMotion()ให้ใช้EditedMediaItem.Builder.setFlattenForSlowMotion()เพื่อทำให้EditedMediaItemที่ส่งไปยังTransformer.start()แบนราบแทนsetListener()ให้ใช้addListener(),removeListener()หรือremoveAllListeners()แทน
- นำ
Transformer.Listenerเมธอดที่เลิกใช้งานแล้วต่อไปนี้ออกonTransformationCompleted(MediaItem)โปรดใช้onCompleted(Composition, ExportResult)แทนonTransformationCompleted(MediaItem, TransformationResult)โปรดใช้onCompleted(Composition, ExportResult)แทนonTransformationError(MediaItem, Exception)โปรดใช้onError(Composition, ExportResult, ExportException)แทนonTransformationError(MediaItem, TransformationException)โปรดใช้onError(Composition, ExportResult, ExportException)แทนonTransformationError(MediaItem, TransformationResult, TransformationException)โปรดใช้onError(Composition, ExportResult, ExportException)แทนonFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)โปรดใช้onFallbackApplied(Composition, TransformationRequest, TransformationRequest)แทน
- นำคลาส
TransformationResultที่เลิกใช้งานแล้วออก โปรดใช้ExportResultแทน - นำคลาส
TransformationExceptionที่เลิกใช้งานแล้วออก โปรดใช้ExportExceptionแทน - นำ
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONที่เลิกใช้งานแล้วออก โปรดใช้Transformer.PROGRESS_STATE_NOT_STARTEDแทน - นำ
Transformer.setListener()ที่เลิกใช้งานแล้วออก โปรดใช้Transformer.addListener(),Transformer.removeListener()หรือTransformer.removeAllListeners()แทน - นำ
Transformer.startTransformation()ที่เลิกใช้งานแล้วออก โปรดใช้Transformer.start(MediaItem, String)แทน - นำ
SingleFrameGlShaderProgramที่เลิกใช้งานแล้วออก โปรดใช้BaseGlShaderProgramแทน - นำ
Transformer.flattenForSlowMotionออก โปรดใช้EditedMediaItem.flattenForSlowMotionแทน - นำ
ExoPlayer.VideoComponentExoPlayer.AudioComponentExoPlayer.TextComponentและExoPlayer.DeviceComponentออกแล้ว - นำ
androidx.media3.exoplayer.audio.SonicAudioProcessorออกแล้ว - นำเมธอด
DownloadHelperที่เลิกใช้งานแล้วต่อไปนี้ออก- Constructor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), useDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)instead. getRendererCapabilities(RenderersFactory)คุณสามารถใช้ฟังก์ชันที่เทียบเท่าได้โดยการสร้างDefaultRendererCapabilitiesListที่มีRenderersFactoryและ เรียกใช้DefaultRendererCapabilitiesList.getRendererCapabilities()
- Constructor
- นำ
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)วิธีการออกแล้ว ให้ใช้PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)และ ส่งใน(MediaSession.Token) compatToken.getToken()แทน
- นำเมธอด
1.6.0-rc02
19 มีนาคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
1.6.0-rc01
12 มีนาคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
1.6.0-beta01
26 กุมภาพันธ์ 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha03
6 กุมภาพันธ์ 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha02
30 มกราคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha01
20 ธันวาคม 2024
ใช้ เวอร์ชันเสถียร 1.6.0
รุ่น 1.5
รุ่น 1.5.1
19 ธันวาคม 2024
androidx.media3:media3-*:1.5.1 ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.5.1 มีการเปลี่ยนแปลงเหล่านี้
- ExoPlayer:
- ปิดใช้การถอดรหัสแบบอะซิงโครนัสใน MediaCodec เพื่อหลีกเลี่ยงปัญหาการหมดเวลาของตัวแปลงรหัสที่รายงานด้วย API ของแพลตฟอร์มนี้ (#1641)
- โปรแกรมแยกข้อมูล
- MP3: อย่าหยุดเล่นก่อนเวลาอันควรเมื่อสารบัญของ
VBRIเฟรม ไม่ครอบคลุมข้อมูล MP3 ทั้งหมดในไฟล์ (#1904)
- MP3: อย่าหยุดเล่นก่อนเวลาอันควรเมื่อสารบัญของ
- วิดีโอ
- การย้อนกลับของการใช้
MediaCodecAdapterค่าสัดส่วนภาพพิกเซลที่ระบุ เมื่อระบุขณะประมวลผลonOutputFormatChanged(#1371)
- การย้อนกลับของการใช้
- ข้อความ:
- แก้ไขข้อบกพร่องใน
ReplacingCuesResolver.discardCuesBeforeTimeUsซึ่งคิว ที่ใช้งานอยู่ที่timeUs(เริ่มก่อนหน้านี้แต่ยังไม่สิ้นสุด) ถูกทิ้งอย่างไม่ถูกต้อง (#1939)
- แก้ไขข้อบกพร่องใน
- ข้อมูลเมตา
- ดึงหมายเลขดิสก์/แทร็กและประเภทจากความคิดเห็น Vorbis ไปยัง
MediaMetadata(#1958)
- ดึงหมายเลขดิสก์/แทร็กและประเภทจากความคิดเห็น Vorbis ไปยัง
เวอร์ชัน 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.listenSuspending Extension Function เพื่อเรียกใช้ Coroutine เพื่อ ฟังPlayer.Eventsไปยังไลบรารีmedia3-common-ktx - นำคำอธิบายประกอบ
@DoNotInlineออกจากคลาสภายในที่ไม่ได้อยู่ในบรรทัดด้วยตนเอง ซึ่งออกแบบมาเพื่อหลีกเลี่ยงความล้มเหลวในการยืนยันคลาสรันไทม์ ตอนนี้ R8 เวอร์ชันล่าสุด จะย้ายการเรียกใช้ที่อยู่นอกบรรทัดเช่นนี้โดยอัตโนมัติเพื่อหลีกเลี่ยงข้อผิดพลาด รันไทม์ (จึงไม่จำเป็นต้องย้ายด้วยตนเองอีกต่อไป) ผู้ใช้ Gradle ทุกคนของไลบรารีต้องใช้ Android Gradle Plugin เวอร์ชันที่ใช้ 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ในโหมดอะซิงโครนัส (ลักษณะการทำงานเริ่มต้นใน API 31 ขึ้นไป) - บัตร
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ซึ่งจะส่งผลให้มีการรายงานเหตุการณ์ load start/error/cancelled/completed สำหรับคำบรรยายแทนเสียงที่โหลดจากภายนอก (คำบรรยายแทนเสียงที่เพิ่มด้วยMediaItem.LocalConfiguration.subtitleConfigurations) ซึ่งอาจปรากฏเป็นเหตุการณ์การโหลดที่ซ้ำกันซึ่งปล่อยออกมาจากAnalyticsListener - ป้องกันไม่ให้ข้อผิดพลาดของคำบรรยายแทนเสียงและข้อมูลเมตาหยุดการเล่นโดยสมบูรณ์
แต่ระบบจะปิดใช้แทร็กที่มีปัญหาและเล่นแทร็กที่เหลือต่อไป
(#1722)
- ในการจัดการคำบรรยายแทนเสียงใหม่ (ระหว่างการแยก) ระบบจะส่งข้อผิดพลาดในการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น
ข้อมูลคำบรรยายแทนเสียงไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404)
ผ่าน
onLoadErrorการเรียกกลับ - ในการจัดการคำบรรยายแทนเสียงแบบเดิม (ระหว่างการแสดงผล) ระบบจะส่งเฉพาะข้อผิดพลาดในการโหลดที่เกี่ยวข้องผ่าน
onLoadErrorCallback ขณะที่ระบบจะไม่สนใจข้อผิดพลาดในการแยกวิเคราะห์ (นี่คือลักษณะการทำงานที่มีอยู่ก่อนแล้ว)
- ในการจัดการคำบรรยายแทนเสียงใหม่ (ระหว่างการแยก) ระบบจะส่งข้อผิดพลาดในการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น
ข้อมูลคำบรรยายแทนเสียงไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404)
ผ่าน
- แก้ไขข้อบกพร่องที่รายการเพลย์ลิสต์หรือช่วงในสตรีม DASH แบบหลายช่วง ที่มีระยะเวลาไม่ตรงกับเนื้อหาจริงอาจทำให้เฟรม ค้างที่ส่วนท้ายของรายการ (#1698)
- เพิ่มตัวตั้งค่าลงใน
SntpClientเพื่อตั้งค่าเวลาที่ผ่านไปสูงสุดนับตั้งแต่การอัปเดตครั้งล่าสุด หลังจากนั้นระบบจะเริ่มต้นไคลเอ็นต์ใหม่ (#1794)
- ตอนนี้คุณสามารถเรียกใช้
- Transformer
- เพิ่ม
SurfaceAssetLoaderซึ่งรองรับการจัดคิวข้อมูลวิดีโอไปยัง Transformer ผ่านSurface ImageAssetLoaderรายงานอินพุตที่ไม่รองรับผ่านAssetLoader.onErrorแทนที่จะส่งIllegalStateException- กำหนดให้การตั้งค่าระยะเวลาของรูปภาพโดยใช้
MediaItem.Builder.setImageDurationMsเป็นข้อบังคับสำหรับการส่งออกรูปภาพ - เพิ่มการรองรับการส่งออกสำหรับช่องว่างในลำดับของ EditedMediaItem ที่เป็นเสียง
- เพิ่ม
- การเลือกแทร็ก
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) - แก้ไขการแยกวิเคราะห์ระยะเวลาของสื่อใน
mdhdbox ของไฟล์ MP4 เพื่อจัดการค่า-1(#1819) - เพิ่มการรองรับการระบุ
h263กล่องในไฟล์ MP4 สำหรับวิดีโอ H.263 (#1821) - เพิ่มการรองรับรูปแบบไฟล์สื่อพื้นฐาน ISO ระดับ 4 ของ AC-4 (#1265)
- อนุญาตให้
- DataSource:
- อัปเดต
HttpEngineDataSourceเพื่ออนุญาตให้ใช้ได้ตั้งแต่เวอร์ชัน S extension 7 แทน API ระดับ 34 (#1262) DataSourceContractTest: ยืนยันว่าDataSource.getUri()แสดงผล URI ที่แก้ไขแล้ว (ตามที่ระบุไว้ในเอกสาร) หากแตกต่างจาก URI ที่ขอ การทดสอบจะระบุได้โดยใช้DataSourceContractTest.TestResource.Builder.setResolvedUri()วิธีใหม่DataSourceContractTest: ยืนยันว่าDataSource.getUri()และgetResponseHeaders()จะแสดงค่า "open" หลังจากเรียกใช้open()ไม่สำเร็จ (เนื่องจากไม่มีทรัพยากร) และก่อนที่จะเรียกใช้close()ในภายหลัง- การลบล้าง
DataSourceContractTest.getNotFoundResources()ช่วยให้ คลาสย่อยของการทดสอบระบุทรัพยากร "ไม่พบ" หลายรายการ และระบุส่วนหัวที่คาดไว้ได้ด้วย ซึ่งช่วยให้แยกความแตกต่างระหว่าง HTTP 404 (มีส่วนหัว) กับ "ไม่พบเซิร์ฟเวอร์" (ไม่มีส่วนหัว) ได้
- การลบล้าง
- อัปเดต
- เสียง:
- กำหนดค่าข้อมูลเมตาความดัง CTA-2075 ในตัวแปลงสัญญาณโดยอัตโนมัติหากมีอยู่ในสื่อ
- ตรวจสอบว่าระดับเสียงค่อยๆ ลดลงอย่างราบรื่นเมื่อกรอ
- แก้ไขเสียงป๊อปที่อาจเกิดขึ้นระหว่างการกรอ
- แก้ไขการสะสมข้อผิดพลาดในการตัดทอนสำหรับอัลกอริทึมการยืดเวลา/การเปลี่ยนระดับเสียงของ Sonic
- แก้ไขข้อบกพร่องใน
SpeedChangingAudioProcessorที่ทำให้เฟรมเอาต์พุตหลุด
- วิดีโอ
MediaCodecVideoRendererหลีกเลี่ยงการถอดรหัสตัวอย่างที่ไม่ได้ แสดงผลหรือใช้เป็นข้อมูลอ้างอิงโดยตัวอย่างอื่นๆ- ใน API 35 ขึ้นไป
MediaCodecAdapterอาจได้รับnullSurfaceในconfigureและการเรียกใช้เมธอดใหม่detachOutputSurfaceเพื่อนำSurfaceที่ตั้งค่าไว้ก่อนหน้านี้ออก หากตัวแปลงรหัสรองรับฟีเจอร์นี้ (MediaCodecInfo.detachedSurfaceSupported) - ใช้ค่าอัตราส่วนพิกเซลที่ระบุ
MediaCodecAdapterหากมี เมื่อประมวลผลonOutputFormatChanged(#1371) - เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE ซึ่งทำให้ระบบทำเครื่องหมายสตรีม H264 ที่ปลอดภัยที่ 60fps ว่าไม่รองรับ (#1619)
- เพิ่มวิธีแก้ปัญหาสำหรับตัวแปลงรหัสที่ค้างหลังจากตัวอย่างสุดท้ายโดยไม่ ส่งสัญญาณสิ้นสุดสตรีม
- ข้อความ:
- เพิ่ม
VoiceSpanที่กำหนดเองและป้อนข้อมูลสำหรับ ช่วงเสียง WebVTT (#1632) - ตรวจสอบว่า WebVTT ใน HLS ที่มีแสตมป์เวลาของคำบรรยายขนาดใหญ่มาก (ซึ่งล้น
long64 บิตเมื่อแสดงเป็นไมโครวินาทีและคูณด้วย90,000ไทม์เบสของ MPEG) แสดงอยู่ (#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ที่อุปกรณ์ของผู้ผลิตบางรายส่งมาเมื่อตั้งค่า BroadcastReceiver สำหรับ Intent ของปุ่มสื่อ (#1730) - เพิ่มปุ่มคำสั่งสำหรับรายการสื่อ ซึ่งจะเพิ่ม Media3 API สำหรับสิ่งที่เคยเรียกว่า
Custom browse actionsพร้อมกับไลบรารีเดิมที่มีMediaBrowserCompatโปรดทราบว่าปุ่มคำสั่ง Media3 สำหรับรายการสื่อ พร้อมใช้งานสำหรับทั้งMediaBrowserและMediaControllerดูใช้การดำเนินการเรียกดูที่กำหนดเอง - แก้ไขข้อบกพร่องที่บางครั้งตัวควบคุม Media3 ไม่สามารถอนุญาตให้แอปเซสชัน
เริ่มบริการที่ทำงานอยู่เบื้องหน้าหลังจากขอ
play() - จำกัด
CommandButton.Builder.setIconUriให้ยอมรับเฉพาะ URI ของเนื้อหา - ส่งคำแนะนำในการเชื่อมต่อของเบราว์เซอร์ Media3 ไปยัง
MediaBrowserCompatเริ่มต้นเมื่อเชื่อมต่อกับMediaBrowserCompatรุ่นเดิม บริการจะรับคำแนะนำในการเชื่อมต่อที่ส่งผ่านเป็นคำแนะนำระดับรูทได้ เมื่อโทรไปยังonGetRoot()เป็นครั้งแรก - แก้ไขข้อบกพร่องที่
MediaBrowserซึ่งเชื่อมต่อกับบริการเบราว์เซอร์เดิม ไม่ได้รับข้อผิดพลาดที่บริการส่งหลังจากที่เบราว์เซอร์ สมัครใช้บริการparentid - ปรับปรุงลักษณะการทำงานร่วมกัน เพื่อให้เบราว์เซอร์ Media3 ที่เชื่อมต่อกับ
MediaBrowserServiceรุ่นเดิมไม่ขอข้อมูลขององค์ประกอบย่อยของparentId2 ครั้งเมื่อสมัครใช้บริการองค์ประกอบหลัก
- เพิ่ม
- UI:
- เลือกใช้การแก้ปัญหา
PlayerView-in-Compose-AndroidViewสำหรับวิดีโอที่ยืด/ครอบตัด เนื่องจากปัญหาเกี่ยวกับทรานซิชันที่แชร์ซึ่งอิงตาม XML แอปที่ใช้PlayerViewภายในAndroidViewต้องเรียกใช้PlayerView.setEnableComposeSurfaceSyncWorkaroundเพื่อเลือกใช้ (#1237, #1594) - เพิ่ม
setFullscreenButtonStateในPlayerViewเพื่ออนุญาตให้อัปเดตไอคอนของ ปุ่มเต็มหน้าจอตามต้องการ กล่าวคือ นอกแบนด์และไม่ใช่แบบรีแอ็กทีฟ ต่อการโต้ตอบด้วยการคลิก (#1590, #184) - แก้ไขข้อบกพร่องที่ตัวเลือก "ไม่มี" ในการเลือกข้อความไม่ทำงานหาก มีการกำหนดค่ากำหนดการเลือกแทร็กข้อความที่แอปกำหนด
- เลือกใช้การแก้ปัญหา
- ส่วนขยาย DASH
- เพิ่มการรองรับระยะเวลาที่เริ่มต้นในช่วงกลางของกลุ่ม (#1440)
- ส่วนขยาย Smooth Streaming
- แก้ไขข้อผิดพลาด
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ได้ ซึ่งจำเป็นต่อการผสานรวม Output Switcher (#1056)
- โปรแกรมทดสอบ:
DataSourceContractTestตอนนี้มีการทดสอบเพื่อยืนยันสิ่งต่อไปนี้- อัปเดตสตรีมอินพุต
read positionแล้ว - ใช้บัฟเฟอร์เอาต์พุต
offsetอย่างถูกต้อง
- อัปเดตสตรีมอินพุต
- แอปเดโม
- แก้ไขหน่วยความจำรั่วในแอปวิดีโอสั้นแบบสาธิต (#1839)
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.hasPreviousPlayer.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 มีการคอมมิตเหล่านี้
- คลังทั่วไป
- ส่งต่อการเรียกฟังก์ชัน seek ที่คาดว่าไม่มีการดำเนินการไปยังเมธอด
BasePlayer.seekTo()และSimpleBasePlayer.handleSeek()ที่ได้รับการปกป้องแทนที่จะเพิกเฉย หาก คุณใช้เมธอดเหล่านี้ในเพลเยอร์ที่กำหนดเอง คุณอาจต้อง จัดการการเรียกเพิ่มเติมเหล่านี้ด้วยmediaItemIndex == C.INDEX_UNSET - นำการขึ้นต่อกันในการคอมไพล์ออกจากการแยกส่วน Java 8 ที่ได้รับการปรับปรุง (#1312)
- ตรวจสอบว่าระบบจะไม่สนใจระยะเวลาที่ส่งไปยัง
MediaItem.Builder.setImageDurationMs()สำหรับMediaItemที่ไม่ใช่รูปภาพ (ตามที่ระบุไว้ในเอกสาร) - เพิ่ม
Format.customDataเพื่อจัดเก็บข้อมูลที่กำหนดเองเกี่ยวกับอินสแตนซ์ของFormatที่แอปให้ไว้
- ส่งต่อการเรียกฟังก์ชัน seek ที่คาดว่าไม่มีการดำเนินการไปยังเมธอด
- ExoPlayer:
- เพิ่ม
BasePreloadManagerซึ่งประสานงานการโหลดล่วงหน้าสำหรับแหล่งที่มาหลายรายการ ตามลำดับความสำคัญที่กำหนดโดยrankingDataคุณปรับแต่งได้โดยขยายคลาสนี้ เพิ่มDefaultPreloadManagerซึ่งใช้PreloadMediaSourceเพื่อโหลดตัวอย่างสื่อ ของแหล่งที่มาลงในหน่วยความจำล่วงหน้า และใช้อินสแตนซ์rankingDataที่ระบุดัชนีของรายการใน UI - เพิ่ม
PlayerIdให้กับวิธีการส่วนใหญ่ของLoadControlเพื่อเปิดใช้การติดตั้งใช้งานLoadControlให้รองรับผู้เล่นหลายคน - นำ
Buffer.isDecodeOnly()และC.BUFFER_FLAG_DECODE_ONLYออก ไม่จำเป็นต้องตั้งค่าสถานะนี้ เนื่องจากตัวแสดงผลและตัวถอดรหัสจะตัดสินใจข้ามบัฟเฟอร์ ตามการประทับเวลา การติดตั้งใช้งาน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เพื่อปรับปรุงการซิงค์ภาพและเสียง - นำฟิลด์
ExportResult.processedInputsออก หากใช้ฟิลด์นี้สำหรับรายละเอียดตัวแปลงรหัส ให้ใช้DefaultDecoderFactory.listenerแทน ใน กรณีที่ยกเว้นตัวแปลงรหัส รายละเอียดตัวแปลงรหัสจะอยู่ในExportException.codecInfo
- เพิ่ม
- โปรแกรมแยกข้อมูล
- MPEG-TS: เปลี่ยนแปลงไปข้างหน้าเพื่อให้มั่นใจว่าเฟรมสุดท้ายจะแสดงผลโดย ส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) รวมการแก้ไขเพื่อแก้ปัญหาที่เกิดขึ้นในสตรีม HLS ที่มีเฉพาะ I-frame(#1150) และสตรีม HLS ของ H.262 (#1126)
- MP3: ควรใช้ขนาดข้อมูลจากเฟรม
Infoมากกว่าขนาดที่รายงานโดย สตรีมพื้นฐาน (เช่น ขนาดไฟล์หรือส่วนหัว HTTPContent-Length) ซึ่งจะช่วยยกเว้นข้อมูลตัวอย่างที่เล่นไม่ได้ (เช่น อาร์ตเวิร์กของอัลบั้ม) จากการคำนวณการค้นหาบิตเรตคงที่ ทำให้การค้นหาแม่นยำยิ่งขึ้น (#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ควรมีค่าเป็นจริงทั้งคู่ ไม่ว่าค่าที่อยู่ในสตรีมจะเป็นอย่างไร (columnLockไม่รองรับ ดังนั้นจึงถือว่ามีค่าเป็นเท็จเสมอ)- เดิมฟีเจอร์นี้รวมอยู่ในบันทึกประจำรุ่น
1.3.0-alpha01แต่การเปลี่ยนแปลงถูกเปลี่ยนกลับโดยไม่ตั้งใจก่อนการเปิดตัว1.3.0-rc01ตอนนี้ปัญหาได้รับการแก้ไขแล้ว การเปลี่ยนแปลงจึงกลับมาปรากฏอีกครั้ง
- เดิมฟีเจอร์นี้รวมอยู่ในบันทึกประจำรุ่น
- CEA-708: หลีกเลี่ยงการเพิ่มบรรทัดใหม่ที่ซ้ำกันเนื่องจากการจัดการคำสั่ง "ตั้งค่าตำแหน่งปากกา" อย่างง่ายของ ExoPlayer (#1315)
- แก้ไข
IllegalArgumentExceptionจากLegacySubtitleUtilเมื่อตัวอย่างคำบรรยายแทนเสียง WebVTT ไม่มีคิว เช่น เป็นส่วนหนึ่งของสตรีม DASH (#1516)
- ข้อมูลเมตา
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบได้แมปแท็ก MP4 "album sort"
(
soal), "artist sort" (soar) และ "album artist sort" (soaa) อย่างไม่ถูกต้องกับแท็ก ID3TSO2,TSOAและTSOP(#1302) - แก้ไขการอ่านแท็กตัวเลข
gnre(ประเภท) และtmpo(เทมโป) ของ MP4 (/iTunes) เมื่อค่ามีความยาวมากกว่า 1 ไบต์ - ส่งต่อเฟรม ID3
TCONไปยังMediaMetadata.genre(#1305)
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบได้แมปแท็ก MP4 "album sort"
(
- รูปภาพ:
- เพิ่มการรองรับตารางภาพปก DASH ที่ไม่ใช่สี่เหลี่ยมจัตุรัส (#1300)
- เพิ่มการรองรับ AVIF สำหรับ API 34 ขึ้นไป
- อนุญาต
nullเป็นพารามิเตอร์สำหรับExoPlayer.setImageOutput()เพื่อล้างImageOutputที่ตั้งค่าไว้ก่อนหน้านี้
- DataSource:
- รองรับ
android.resource://package/idURI ของทรัพยากรดิบ ที่packageแตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน ก่อนหน้านี้ไม่ได้มีการบันทึกไว้ว่าวิธีนี้ใช้ได้ แต่เป็นวิธีที่มีประสิทธิภาพมากกว่า ในการเข้าถึงทรัพยากรในแพ็กเกจอื่นที่ไม่ใช่ชื่อ - ตรวจสอบว่า
urlไม่ใช่ค่าว่างในตัวสร้างDataSpecมีการใส่คำอธิบายประกอบพารามิเตอร์นี้แล้วว่าต้องไม่ใช่ Null - อนุญาตให้
ByteArrayDataSourceแก้ไข URI เป็นอาร์เรย์ไบต์ในระหว่างopen()แทนที่จะฮาร์ดโค้ดที่การสร้าง (#1405)
- รองรับ
- DRM:
- อนุญาตให้ตั้งค่า
LoadErrorHandlingPolicyในDefaultDrmSessionManagerProvider(#1271)
- อนุญาตให้ตั้งค่า
- ผลลัพธ์
- รองรับการเปลี่ยนความเร็วหลายครั้งภายใน
EditedMediaItemเดียวกันหรือCompositionในSpeedChangeEffect - รองรับเอาต์พุต HLG และ PQ จากอินพุตบิตแมป Ultra 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>)toImaServerSideAdInsertionMediaSource.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)
- จัดแนว Conversion ของ
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จะแมปกับสถานะข้อผิดพลาดร้ายแรงของPlaybackStateCompatSessionErrorที่ส่งไปยังตัวควบคุมการแจ้งเตือนสื่อ พร้อม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 เพื่ออนุญาตให้ใช้ Drawable ที่แตกต่างกันต่ออินสแตนซ์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แทน - โปรดนำ
DataSpecผู้สร้างบางรายออก โปรดใช้DataSpec.Builderแทน - นำวิธีการ
setContentTypePredicate(Predicate)ออกจากDefaultHttpDataSource,OkHttpDataSourceและCronetDataSourceโปรดใช้วิธีที่เทียบเท่าในแต่ละXXXDataSource.Factoryแทน - นำตัวสร้าง
OkHttpDataSourceและOkHttpDataSourceFactoryออก โปรดใช้OkHttpDataSource.Factoryแทน - นำ
PlayerMessage.setHandler(Handler)ออก โปรดใช้setLooper(Looper)แทน - นำฟิลด์
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.FormatSupportIntDef และ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)
- เพิ่มประเภทการคืนค่าที่ขาดหายไปในกฎ Proguard
-keepclasseswithmembersสำหรับDefaultVideoFrameProcessor.Factory.Builder.build()(#1187)
- แก้ไขปัญหาที่
- Transformer
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่เกิดจาก
MediaMuxerไม่รองรับ การประทับเวลาการนำเสนอที่เป็นลบก่อน API 30
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่เกิดจาก
- การเลือกแทร็ก
DefaultTrackSelector: เลือกแทร็กวิดีโอที่มีอัตราเฟรม "สมเหตุสมผล" (>=10fps) มากกว่าแทร็กที่มีอัตราเฟรมต่ำกว่าหรือไม่ได้ตั้งค่า ซึ่งจะช่วยให้ เพลเยอร์เลือกแทร็กวิดีโอ "จริง" ใน MP4 ที่ดึงมาจากภาพเคลื่อนไหว ซึ่งอาจมีแทร็ก HEVC 2 แทร็ก โดยแทร็กหนึ่งมีความละเอียดสูงกว่า แต่มีจำนวนเฟรมน้อยมาก (#1051)
- โปรแกรมแยกข้อมูล
- แก้ไขปัญหาที่ไม่ได้ข้ามการเพิ่มพื้นที่เมื่ออ่านก้อนข้อมูลที่มีขนาดคี่ จากไฟล์ WAV (#1117)
- MP3: ป้อนข้อมูล
Format.averageBitrateจากเฟรมข้อมูลเมตา เช่นXINGและVBRI - MPEG-TS: เปลี่ยนกลับการเปลี่ยนแปลงที่มีจุดประสงค์เพื่อให้มั่นใจว่าเฟรมสุดท้ายจะได้รับการแสดงผล โดยการส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) เนื่องจากการเปลี่ยนแปลงทำให้เกิดปัญหาใหม่กับสตรีม HLS ที่มีเฉพาะ I-frame (#1150) และสตรีม HLS ของ H.262 (#1126)
- เสียง:
- อนุญาตการกู้คืนโปรแกรมแสดงผลโดยการปิดใช้การส่งต่อหากแทร็กเสียงเริ่มต้นในโหมดการส่งต่อไม่สำเร็จ
- วิดีโอ
- เพิ่มวิธีแก้ปัญหาสำหรับปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ซึ่งทำให้ระบบทำเครื่องหมายสตรีม H265 ที่ 60fps ว่าไม่รองรับ
- เพิ่มวิธีแก้ปัญหาที่ช่วยให้มั่นใจได้ว่าเฟรมแรกจะได้รับการแสดงผลเสมอขณะ ทำ Tunneling แม้ว่าอุปกรณ์จะไม่ดำเนินการนี้โดยอัตโนมัติตามที่ 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-tag) ในการแยกวิเคราะห์ SDP (#1087)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ปิดใช้ส่วนขยาย MIDI เป็นการขึ้นต่อกันในเครื่องโดยค่าเริ่มต้นเนื่องจากต้องกำหนดค่าที่เก็บ Maven เพิ่มเติม ผู้ใช้ที่ต้องการ โมดูลนี้จากทรัพยากร Dependency ในเครื่อง สามารถเปิดใช้ได้อีกครั้ง
เวอร์ชัน 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คอมโพเนนต์นี้เคยขยายได้ แต่ไม่เคยมีการสร้างคลาสย่อยภายในไลบรารี การปรับแต่งทำได้โดยการห่อหุ้มอินสแตนซ์โดยใช้รูปแบบ Decorator และการใช้CompositeSequenceableLoaderFactoryที่กำหนดเอง - แก้ไขปัญหาที่การทำซ้ำเวลาเดียวกันทำให้ระบบล้างข้อมูลเมตาจากรายการนี้ (#1007)
- เปลี่ยนชื่อ
experimentalSetSubtitleParserFactorymethods onBundledChunkExtractor.FactoryและDefaultHlsExtractorFactoryเป็นsetSubtitleParserFactoryและไม่อนุญาตให้ส่งnullใช้เมธอดใหม่ของexperimentalParseSubtitlesDuringExtraction(boolean)เพื่อควบคุม ลักษณะการทำงานของการแยกวิเคราะห์ - เพิ่มการรองรับการปรับแต่ง
SubtitleParser.Factoryที่ใช้ระหว่าง การแยก ซึ่งทำได้ด้วยMediaSource.Factory.setSubtitleParserFactory() - เพิ่มคำนำหน้าแหล่งที่มาลงในช่อง
Format.idทั้งหมดที่สร้างจากMergingMediaSourceซึ่งจะช่วยระบุแหล่งที่มาของFormat(#883) - แก้ไขนิพจน์ทั่วไปที่ใช้ในการตรวจสอบชื่อคีย์ของข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ที่กำหนดเอง โดยการแก้ไขให้ตรวจสอบเฉพาะขีดกลาง (#1028)
- หยุดการเข้ารหัสพารามิเตอร์การค้นหา CMCD ซ้ำ (#1075)
- เพิ่ม
- Transformer
- เพิ่มการรองรับการรวมวิดีโอสโลว์โมชัน SEF ของ H.265/HEVC
- เพิ่มความเร็วในการแปลงมัลติเพล็กซ์ โดยเฉพาะการแก้ไขแบบ "นำวิดีโอออก"
- เพิ่ม API เพื่อให้มั่นใจว่าไฟล์เอาต์พุตจะเริ่มต้นในวิดีโอเฟรม ซึ่งจะช่วยให้เอาต์พุตของการดำเนินการตัดเข้ากันได้มากขึ้นกับการใช้งานโปรแกรมเล่นที่ไม่แสดงเฟรมวิดีโอแรกจนกว่าจะถึงการประทับเวลาการนำเสนอ (#829)
- เพิ่มการรองรับการเพิ่มประสิทธิภาพการดำเนินการตัด MP4 ของชิ้นงานเดียว
- เพิ่มการรองรับเพื่อให้แน่ใจว่าเฟรมวิดีโอมีการประทับเวลาแรกใน ไฟล์เอาต์พุต แก้ไขไฟล์เอาต์พุตที่ขึ้นต้นด้วยเฟรมสีดำในเพลเยอร์ที่ใช้ iOS (#829)
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.selectImageTrackเพื่อเปิดใช้การเลือกแทร็กรูปภาพ - เพิ่ม
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledเพื่อ ระบุว่าจะเลือกแทร็กรูปภาพหรือไม่หากมีทั้งแทร็กรูปภาพและ แทร็กวิดีโอ ค่าเริ่มต้นคือfalseซึ่งหมายความว่า ระบบจะจัดลำดับความสำคัญของการเลือกแทร็กวิดีโอ
- เพิ่ม
- โปรแกรมแยกข้อมูล
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมไปยังโปรแกรมแยก MP4 เพื่อดึงค่า
ColorInfo.colorSpace,ColorInfo.colorTransferและColorInfo.colorRange(#692) - MP3: ใช้การค้นหาบิตเรตคงที่ (CBR) สำหรับไฟล์ที่มีส่วนหัว
Info(ส่วนหัวXingที่เทียบเท่ากับ CBR) ก่อนหน้านี้เราใช้ seek table จากส่วนหัวInfoแต่การทำเช่นนี้จะทำให้การกรอวิดีโอ ไม่แม่นยำเท่ากับการไม่สนใจและถือว่าไฟล์เป็น CBR - MPEG2-TS: เพิ่มการรองรับ DTS, DTS-LBR และ DTS:X Profile2 (#275)
- ดึงข้อมูลประเภทเสียงจากตัวอธิบาย TS และแมปกับแฟล็กบทบาท เพื่อให้ผู้ใช้เลือกแทร็กเสียงได้อย่างมีข้อมูลมากขึ้น (#973)
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมไปยังโปรแกรมแยก MP4 เพื่อดึงค่า
- เสียง:
- วิดีโอ
- เปลี่ยนตัวสร้าง
MediaCodecVideoRendererที่รับอาร์กิวเมนต์VideoFrameProcessor.Factoryและแทนที่ด้วยตัวสร้างที่รับอาร์กิวเมนต์VideoSinkProviderแอปที่ต้องการแทรกVideoFrameProcessor.Factoryที่กำหนดเองCompositingVideoSinkProviderสามารถสร้างอินสแตนซ์ของ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ควรมีค่าเป็นจริงทั้งคู่ ไม่ว่าค่าที่อยู่ในสตรีมจะเป็นอย่างไร (columnLockไม่รองรับ ดังนั้นจึงถือว่ามีค่าเป็นเท็จเสมอ)
- แก้ไขการซีเรียลไลซ์คิวบิตแมปเพื่อแก้ไขข้อผิดพลาด
- รูปภาพ:
- เพิ่มการรองรับภาพขนาดย่อของ DASH ระบบจะครอบตัดรูปภาพในตารางกริดและแสดงภาพปกแต่ละรายการให้แก่
ImageOutputใกล้กับเวลาที่นำเสนอ
- เพิ่มการรองรับภาพขนาดย่อของ DASH ระบบจะครอบตัดรูปภาพในตารางกริดและแสดงภาพปกแต่ละรายการให้แก่
- DRM:
- เล่นตัวอย่างที่ไม่มีการเข้ารหัส "ส่วนนำที่ชัดเจน" ในเนื้อหา DRM ทันทีโดยค่าเริ่มต้น แม้ว่าคีย์สำหรับตัวอย่างที่เข้ารหัสในภายหลังจะยังไม่พร้อมก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อม
เมื่อตำแหน่งการเล่นไปถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้
การเล่นจะยังไม่เริ่มเลย ณ จุดนี้) คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyหรือDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
- เล่นตัวอย่างที่ไม่มีการเข้ารหัส "ส่วนนำที่ชัดเจน" ในเนื้อหา DRM ทันทีโดยค่าเริ่มต้น แม้ว่าคีย์สำหรับตัวอย่างที่เข้ารหัสในภายหลังจะยังไม่พร้อมก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อม
เมื่อตำแหน่งการเล่นไปถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้
การเล่นจะยังไม่เริ่มเลย ณ จุดนี้) คุณปิดใช้ลักษณะการทำงานนี้ได้โดยใช้
- ส่วนขยาย IMA
- แก้ไขปัญหาที่โฆษณา DASH และ HLS ที่ไม่มีนามสกุลไฟล์ที่เหมาะสม เล่นไม่ได้
- เซสชัน:
- ปิดใช้การตรวจหาการดับเบิลคลิกสำหรับแอปทีวี (#962)
- แก้ไขปัญหาที่
MediaItem.RequestMetadataที่มีเพียงส่วนเสริมที่ไม่ใช่ค่าว่าง จะไม่ส่งระหว่างตัวควบคุมสื่อและเซสชัน - เพิ่มตัวสร้างไปยัง
MediaLibrarySession.Builderที่รับเฉพาะContextแทนที่จะเป็นMediaLibraryService
- ส่วนขยาย HLS:
- ลด
HlsMediaPeriodเป็นระดับการเข้าถึงแบบแพ็กเกจส่วนตัว ไม่ควรใช้ประเภทนี้ จากภายนอกแพ็กเกจ HLS โดยตรง - Resolve จะค้นหาจุดเริ่มต้นของส่วนได้อย่างมีประสิทธิภาพมากขึ้น (#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 ที่ 60fps ว่าไม่รองรับ (#693)
- ข้อมูลเมตา
- แก้ไขข้อบกพร่องที่
MediaMetadataจะมาจากความคิดเห็น Vorbis เท่านั้น โดยมีคีย์เป็นตัวพิมพ์ใหญ่ (#876) - จับ
OutOfMemoryErrorเมื่อแยกวิเคราะห์เฟรม ID3 ขนาดใหญ่มาก ซึ่งหมายความว่า การเล่นจะดำเนินต่อไปได้โดยไม่มีข้อมูลแท็กแทนที่จะเล่นไม่สำเร็จ โดยสมบูรณ์
- แก้ไขข้อบกพร่องที่
- DRM:
- ขยายวิธีแก้ปัญหาสำหรับ URL ของใบอนุญาต ClearKey
https://default.urlที่ไม่ถูกต้องไปยัง API 33 ขึ้นไป (ก่อนหน้านี้วิธีแก้ปัญหาใช้ได้กับ API 33 เท่านั้น) (#837) - แก้ไข
ERROR_DRM_SESSION_NOT_OPENEDเมื่อเปลี่ยนจากเนื้อหาที่เข้ารหัสเป็นเนื้อหาที่ไม่ได้เข้ารหัสโดยไม่มี Surface ที่แนบมากับเพลเยอร์ ข้อผิดพลาดเกิดจาก การใช้ตัวถอดรหัสที่ปลอดภัยเพื่อเล่นเนื้อหาที่ไม่มีการเข้ารหัสอย่างไม่ถูกต้อง
- ขยายวิธีแก้ปัญหาสำหรับ URL ของใบอนุญาต ClearKey
- เซสชัน:
- ใส่คีย์และค่าที่กำหนดเองใน
MediaMetadataCompattoMediaMetadata.extrasและMediaMetadata.extrastoMediaMetadataCompat(#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)เมธอด ในอินเทอร์เฟซChunkSourceเพื่อChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) - เพิ่มฟิลด์เพิ่มเติมลงในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD): buffer
starvation (
bs), deadline (dl), playback rate (pr) และ startup (su) (#8699) - เพิ่มบิตเดปท์ของความสว่างและสีลงใน
ColorInfo(#491) - เพิ่มฟิลด์เพิ่มเติมลงในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (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 แบบคลาสสิก
ลงใน
Mp4Extractor
- เสียง:
- เพิ่มการรองรับ PCM แบบบิ๊กเอนเดียน 24/32 บิตใน MP4 และ Matroska รวมถึงแยกวิเคราะห์
การเข้ารหัส PCM สำหรับ
lpcmใน MP4 - เพิ่มการรองรับการแยกเสียง Vorbis ใน MP4
- เพิ่ม
AudioSink.getFormatOffloadSupport(Format)ที่ดึงข้อมูลระดับ การรองรับการออฟโหลดที่ Sink สามารถให้สำหรับรูปแบบผ่านDefaultAudioOffloadSupportProviderโดยจะแสดงAudioOffloadSupportใหม่ที่มีisFormatSupported,isGaplessSupportedและisSpeedChangeSupported - เพิ่ม
AudioSink.setOffloadMode()ซึ่งจะกำหนดค่าการออฟโหลด ในซิงก์เสียง ค่าเริ่มต้นคือAudioSink.OFFLOAD_MODE_DISABLED - คุณเปิดใช้การออฟโหลดได้ผ่าน
setAudioOffloadPreferenceในTrackSelectionParametersหากตั้งค่าให้เปิดใช้ อุปกรณ์รองรับการออฟโหลดสำหรับรูปแบบ และการเลือกแทร็กเป็น แทร็กเสียงเดียว ระบบจะเปิดใช้การออฟโหลดเสียง - หากตั้งค่า
audioOffloadModePreferenceเป็นAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDDefaultTrackSelectorจะเลือกแทร็กเสียงเฉพาะในกรณีที่ระบบรองรับรูปแบบของแทร็กนั้นในการออฟโหลด หากไม่รองรับแทร็กเสียง ในการออฟโหลด ระบบจะไม่เลือกแทร็กใดๆ - ปิดใช้การรองรับการเล่นแบบไม่ขาดตอนสำหรับการออฟโหลดเมื่อใช้ API ระดับต่ำกว่า 33 เนื่องจาก ปัญหาตำแหน่งการเล่นหลังจากเปลี่ยนแทร็ก
- นำพารามิเตอร์
enableOffloadออกจาก ลายเซ็นของเมธอดDefaultRenderersFactory.buildAudioSink - นำวิธีการ
DefaultAudioSink.Builder.setOffloadModeออก - Remove intdef value
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 แบบบิ๊กเอนเดียน 24/32 บิตใน MP4 และ Matroska รวมถึงแยกวิเคราะห์
การเข้ารหัส PCM สำหรับ
- วิดีโอ
- อนุญาตให้
MediaCodecVideoRendererใช้VideoFrameProcessor.Factoryที่กำหนดเอง - แก้ไขข้อบกพร่องที่ทำให้แสดงผลเฟรมแรกไม่ได้หากสตรีมเสียง เริ่มต้นด้วยการประทับเวลาที่เป็นค่าลบ (#291)
- อนุญาตให้
- ข้อความ:
- นำ
ExoplayerCuesDecoderออก ตอนนี้TextRendererจะจัดการแทร็กข้อความที่มีsampleMimeType = application/x-media3-cuesโดยตรงโดยไม่ต้องมีอินสแตนซ์SubtitleDecoder
- นำ
- ข้อมูลเมตา
MetadataDecoder.decodeจะไม่เรียกใช้สำหรับตัวอย่าง "ถอดรหัสเท่านั้น" อีกต่อไป เนื่องจากต้องมีการติดตั้งใช้งานที่แสดงผลเป็น 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
- แก้ไข Race Condition ที่อาจทำให้เกิด
IndexOutOfBoundsExceptionเมื่อ เปลี่ยนไปใช้ TCP หรือการเล่นหยุดชะงักในบางสถานการณ์ - ตรวจสอบสถานะในการตั้งค่า RTSP เมื่อแสดงสถานะการโหลดของ
RtspMediaPeriod(#577) - ไม่สนใจวิธีการคำขอ Rtsp ที่กำหนดเองในส่วนหัวสาธารณะของคำตอบ Options (#613)
- ใช้ค่าระยะหมดเวลาของคำตอบการตั้งค่า RTSP ในช่วงเวลาของการส่ง คำขอตัวเลือก RTSP แบบ Keep-Alive (#662)
- แก้ไข Race Condition ที่อาจทำให้เกิด
- ส่วนขยายตัวถอดรหัส (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
- คลังทั่วไป
- นำทรัพยากร Dependency
multidexที่เพิ่มโดยไม่ตั้งใจออกจากโมดูลทั้งหมด (#499)
- นำทรัพยากร Dependency
- ExoPlayer:
- แก้ไขปัญหาใน
PlaybackStatsListenerที่มีการสร้างPlaybackStatsที่ไม่ถูกต้อง หลังจากล้างเพลย์ลิสต์แล้ว - เพิ่มฟิลด์เพิ่มเติมในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (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
- เซสชัน:
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุ Getter เพื่อ
เข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
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)
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุ Getter เพื่อ
เข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
เวอร์ชัน 1.1.0
5 กรกฎาคม 2023
- คลังทั่วไป
- เพิ่มเหตุผลในการระงับสำหรับเส้นทางเสียงที่ไม่เหมาะสมและเล่นเมื่อพร้อม เปลี่ยนเหตุผลในการระงับว่ายาวเกินไป (#15)
- เพิ่มคำสั่งลงในเพลเยอร์
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- เพิ่มเมธอดที่โอเวอร์โหลดลงใน Player ซึ่งอนุญาตให้ผู้ใช้ระบุแฟล็กระดับเสียง
ได้ ดังนี้
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
- เพิ่ม
BuilderสำหรับDeviceInfoและเลิกใช้งานตัวสร้างที่มีอยู่ - เพิ่ม
DeviceInfo.routingControllerIdเพื่อระบุตัวควบคุมการกำหนดเส้นทาง ID สำหรับการเล่นระยะไกล - เพิ่ม
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 - เพิ่มพารามิเตอร์ลงในเมธอด
LoadControlshouldStartPlaybackและ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)ออก - แก้ไขข้อบกพร่องที่ทำให้การเปลี่ยนรูปแบบค้าง (ทำให้เกิดการหมดเวลาของ Muxer ) หากมีการส่งสัญญาณสิ้นสุดสตรีมวิดีโอในขณะที่ เฟรมอินพุตอยู่ระหว่างการประมวลผล
- ค้นหาตัวแปลงรหัสผ่าน
MediaCodecListแทนการใช้ยูทิลิตีfindDecoder/EncoderForFormatเพื่อขยายการรองรับ - นำการกำหนดค่า B-Frame ใน
DefaultEncoderFactoryออกเนื่องจาก ใช้ไม่ได้ในอุปกรณ์บางเครื่อง
- นำ
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChangeซึ่งปิดใช้โดยค่าเริ่มต้น เมื่อเปิดใช้DefaultTrackSelectorจะทริกเกอร์การเลือกแทร็กใหม่เมื่อความสามารถของโปรแกรมแสดงผล มีการเปลี่ยนแปลง
- เพิ่ม
- โปรแกรมแยกข้อมูล
- เสียง:
- แก้ไขข้อบกพร่องที่การเล่นบางรายการล้มเหลวเมื่อเปิดใช้การทำอุโมงค์และ
AudioProcessorsทำงานอยู่ เช่น สำหรับการตัดแบบไม่เว้นช่องว่าง (#10847) - แคปซูลเฟรม Opus ในแพ็กเก็ต Ogg ในการเล่นโดยตรง (การออฟโหลด)
- ประมาณตำแหน่งปัจจุบันขณะอยู่ในโหมดสลีประหว่างการกำหนดเวลาการออฟโหลด
- เพิ่ม
Renderer.release()และAudioSink.release()สำหรับการเผยแพร่ ทรัพยากรเมื่อสิ้นสุดวงจรของผู้เล่น - ฟังการเปลี่ยนแปลงความสามารถด้านเสียงใน
DefaultAudioSinkเพิ่มพารามิเตอร์ที่จำเป็นcontextในตัวสร้างของDefaultAudioSinkซึ่งDefaultAudioSinkจะลงทะเบียนเป็น Listener ของ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)
- ลดระดับการมองเห็นของเมธอดภายในเท่านั้นหลายรายการใน
- Muxer:
- เพิ่มไลบรารี Muxer ใหม่ที่ใช้สร้างไฟล์คอนเทนเนอร์ 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 - นำค่าคงที่ String ที่เลิกใช้งานแล้วสำหรับ Charsets (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEและUTF16LE_NAME) ออก แล้วใช้ Kotlin Charsets จากแพ็กเกจ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()และ setter แทน - นำ
ExoPlayer.retry()ที่เลิกใช้งานแล้วออก แล้วใช้prepare()แทน - นำตัวสร้าง
DefaultTrackSelectorที่เลิกใช้งานแล้วซึ่งไม่มีอาร์กิวเมนต์ออก แล้วใช้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มีแฟล็กC.BUFFER_FLAG_LAST_SAMPLEหรือไม่ - แก้ไขปัญหาที่เฟรมสุดท้ายอาจไม่ได้รับการแสดงผลหากมีการนำตัวอย่างสุดท้ายที่มีเฟรม ออกจากคิวโดยไม่ได้อ่านตัวอย่าง "สิ้นสุดสตรีม" (#11079)
- เพิ่ม
- โปรแกรมแยกข้อมูล
- แก้ไขการแยกวิเคราะห์ SPS ของ H.265 ในไฟล์ MPEG-TS โดยการนำตรรกะการแยกวิเคราะห์ ที่ตัวแยก RTSP และ MP4 ใช้ อยู่แล้วมาใช้ซ้ำ (#303)
- ข้อความ:
- SSA: เพิ่มการรองรับไฟล์ UTF-16 หากไฟล์เริ่มต้นด้วยเครื่องหมายลำดับไบต์ (#319)
- เซสชัน:
- แก้ไขปัญหาที่
MediaControllerไม่อัปเดตคำสั่งที่พร้อมใช้งาน เมื่อเชื่อมต่อกับMediaSessionCompatรุ่นเดิมที่อัปเดต การดำเนินการ - แก้ไขข้อบกพร่องที่ทำให้
MediaLibraryServiceแสดงผลเป็น Null สำหรับ การเรียกจาก 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 ที่ 60fps ว่า ไม่รองรับ (#10898)
- แก้ไขปัญหาด้านประสิทธิภาพการปล่อยเฟรมเมื่อเล่นสื่อที่มีอัตราเฟรมสูงกว่าอัตราการรีเฟรชหน้าจอมาก
- แมปรูปแบบ HEVC HDR10 ไปยัง
- แคสต์
- แก้ไขปัญหาชั่วคราว
STATE_IDLEเมื่อเปลี่ยนระหว่างรายการสื่อ (#245)
- แก้ไขปัญหาชั่วคราว
- RTSP:
- ดักจับ IllegalArgumentException ที่เกิดขึ้นในการแยกวิเคราะห์ข้อความตอบกลับ RTSP Describe ที่ไม่ถูกต้อง (#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ในการเล่นโดยตรง (ส่งผ่าน)
- ใช้บิตเรตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำ
สำหรับ
- ข้อความ:
- แก้ไขการส่งดัชนีที่ไม่ถูกต้อง (ค่าลบ) ไปยัง
TextRendererSubtitle.getEventTimeหากไฟล์คำบรรยายแทนเสียงไม่มีคิว - SubRip: เพิ่มการรองรับไฟล์ UTF-16 หากไฟล์เริ่มต้นด้วยเครื่องหมายลำดับไบต์
- แก้ไขการส่งดัชนีที่ไม่ถูกต้อง (ค่าลบ) ไปยัง
- ข้อมูลเมตา
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaTypeเพื่อระบุประเภทเนื้อหาหรือประเภท โฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsableแทนMediaMetadata.folderTypeเราจะเลิกใช้งานประเภทโฟลเดอร์ใน รุ่นถัดไป
- DASH:
- เพิ่มการแยกวิเคราะห์แบบเต็มสำหรับชุดการดัดแปลงรูปภาพ รวมถึงจำนวนไทล์ (#3752)
- UI:
- เซสชัน:
- เพิ่มคลาส Abstract
SimpleBasePlayerเพื่อช่วยใช้Playerอินเทอร์เฟซ สำหรับเพลเยอร์ที่กำหนดเอง - เพิ่มเมธอดตัวช่วยเพื่อแปลงโทเค็นเซสชันแพลตฟอร์มเป็น Media3
SessionToken(#171) - ใช้
onMediaMetadataChangedเพื่อทริกเกอร์การอัปเดตสื่อแพลตฟอร์ม เซสชัน (#219) - เพิ่มเซสชันสื่อเป็นอาร์กิวเมนต์ของ
getMediaButtons()ของDefaultMediaNotificationProviderและใช้รายการที่ไม่เปลี่ยนค่าเพื่อความชัดเจน (#216) - เพิ่มเครื่องมือฟังการเรียกกลับ
onSetMediaItemsเพื่อให้วิธีแก้ไข/ตั้งค่าMediaItemรายการ ดัชนีเริ่มต้น และตำแหน่งตามเซสชันก่อนตั้งค่า ในเพลเยอร์ (#156) - หลีกเลี่ยงการตรวจหาการแตะสองครั้งสำหรับเหตุการณ์ปุ่มสื่อที่ไม่ใช่บลูทูธ (#233)
- ทำให้
QueueTimelineมีความเสถียรมากขึ้นในกรณีที่สถานะเซสชันเดิมไม่น่าไว้วางใจ (#241)
- เพิ่มคลาส Abstract
- ข้อมูลเมตา
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaTypeเพื่อระบุประเภทเนื้อหาหรือประเภท โฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsableแทนMediaMetadata.folderTypeเราจะเลิกใช้งานประเภทโฟลเดอร์ใน รุ่นถัดไป
- ส่วนขยาย Cast
- อัปเกรดเวอร์ชัน Cast SDK เป็น 21.2.0
- ส่วนขยาย IMA
- นำเครื่องมือฟังเพลเยอร์ของ
ImaServerSideAdInsertionMediaSourceon the application thread ออกเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับเธรด - เพิ่มพร็อพเพอร์ตี้
focusSkipButtonWhenAvailableในImaServerSideAdInsertionMediaSource.AdsLoader.Builderเพื่อขอ โฟกัสปุ่มข้ามบนอุปกรณ์ทีวีและตั้งค่าเป็น true โดยค่าเริ่มต้น - เพิ่มเมธอด
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สามารถโหลดบิตแมปจากfile://URI (#108)- แก้ไขการยืนยันที่ทำให้
MediaControllerไม่สามารถกรอโฆษณาใน ระยะเวลาหนึ่งได้ (#122) - เมื่อการเล่นสิ้นสุดลง ระบบจะหยุด
MediaSessionServiceจาก เบื้องหน้าและแสดงการแจ้งเตือนให้เริ่มเล่นรายการสื่อที่เล่นล่าสุดอีกครั้ง (#112) - อย่าเริ่มบริการที่ทำงานอยู่เบื้องหน้าด้วย PendingIntent สำหรับการหยุดชั่วคราว (#167)
- ซ่อน "ป้าย" ที่เชื่อมโยงกับการแจ้งเตือนที่สร้างโดย
DefaultNotificationProviderใน API 26 และ API 27 ด้วยตนเอง (ระบบจะซ่อนป้ายโดยอัตโนมัติใน API 28 ขึ้นไป) (#131) - แก้ไขข้อบกพร่องที่การเชื่อมต่อ Binder ที่ 2 จาก MediaSession รุ่นเดิมไปยัง MediaController ของ Media3 ทำให้เกิด IllegalStateExceptions (#49)
- RTSP:
- IMA:
- ส่วนขยาย FFmpeg
- เพิ่มแฟล็กที่จำเป็นใหม่เพื่อลิงก์ไลบรารี FFmpeg กับ NDK 23.1.7779620 ขึ้นไป (#9933)
- ส่วนขยาย AV1
- อัปเดตเวอร์ชัน CMake เพื่อหลีกเลี่ยงปัญหาความไม่เข้ากันกับ Android Studio เวอร์ชันล่าสุด (#9933)
- ส่วนขยาย Cast
- ใช้
getDeviceInfo()เพื่อระบุCastPlayerเมื่อ ควบคุมการเล่นด้วยMediaController(#142)
- ใช้
- Transformer
- เพิ่มตัวจับเวลาการตรวจสอบ Muxer เพื่อตรวจหาเมื่อการสร้างตัวอย่างเอาต์พุตช้าเกินไป
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
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 ผ่าน
MediaMetricsManagerExoPlayer จะส่งต่อเหตุการณ์การเล่นและข้อมูลประสิทธิภาพไปยังแพลตฟอร์ม ซึ่งจะช่วยให้ข้อมูลประสิทธิภาพของระบบและการแก้ไขข้อบกพร่องในอุปกรณ์ นอกจากนี้ 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จะตรวจสอบการเปลี่ยนแปลงในพร็อพเพอร์ตี้ Spatializer และทริกเกอร์การเลือกแทร็กใหม่เมื่อมีการเปลี่ยนแปลง อุปกรณ์ที่มีtelevisionโหมด UI จะได้รับการยกเว้นจากข้อจำกัดเหล่านี้ และระบบจะเลือกใช้รูปแบบที่มีจำนวนช่องสูงสุด หากต้องการเปิดใช้ฟีเจอร์นี้ ต้องสร้างอินสแตนซ์DefaultTrackSelectorด้วยContext
- เปลี่ยน
- วิดีโอ
- เปลี่ยนชื่อ
DummySurfaceเป็นPlaceholderSurface - เพิ่มการรองรับ AV1 ลงใน
MediaCodecVideoRenderer.getCodecMaxInputSize
- เปลี่ยนชื่อ
- เสียง:
- ใช้การโฆษณาตัวถอดรหัสเสียง AC3 ของ LG ที่มีประเภท MIME ที่ไม่ใช่มาตรฐาน
- เปลี่ยนประเภทการคืนค่าของ
AudioAttributes.getAudioAttributesV21()จากandroid.media.AudioAttributesเป็นคลาส WrapperAudioAttributesV21ใหม่ เพื่อป้องกันไม่ให้การยืนยัน ART ช้าใน API < 21 - ค้นหาแพลตฟอร์ม (API 29 ขึ้นไป) หรือถือว่าจำนวนช่องการเข้ารหัสเสียง สำหรับการส่งผ่านเสียงเมื่อไม่ได้ตั้งค่าจำนวนช่องเสียงของรูปแบบ ซึ่งเกิดขึ้นกับการเตรียม HLS แบบไม่มี Chunk (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.setCompositeSequenceableLoaderFactoryHlsMediaSource.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 แบบช่องเดียวและไม่แทรกสลับ ระบบไม่รองรับเพย์โหลด RTP ของ AMR แบบผสม (#46)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ VP8 (#47)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ WAV (#56)
- แก้ไขส่วนหัวการให้สิทธิ์พื้นฐานของ RTSP (#9544)
- หยุดตรวจสอบฟิลด์ SDP ที่บังคับเนื่องจาก ExoPlayer ไม่ต้องการฟิลด์เหล่านั้น (#10049)
- ส่งข้อยกเว้นที่ตรวจสอบแล้วเมื่อแยกวิเคราะห์การกำหนดเวลา RTSP (#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.CallbackMediaLibrarySession.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 ของ Android Studio ล้มเหลว (#9933)
- อัปเดต CMake เป็นเวอร์ชัน
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)ออก โปรดใช้Player.Listener.onTracksChanged(Tracks)แทน - นำ
Player.getCurrentTrackGroupsและPlayer.getCurrentTrackSelectionsออก โปรดใช้Player.getCurrentTracksแทน นอกจากนี้ คุณยังใช้ExoPlayer.getCurrentTrackGroupsและExoPlayer.getCurrentTrackSelectionsต่อไปได้ แม้ว่าวิธีการเหล่านี้จะยังคง เลิกใช้งานแล้วก็ตาม - นำค่าคงที่
DownloadHelperDEFAULT_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)
- แก้ไขการโต้ตอบของ
- การเล่นโฆษณา
- แก้ไขการขาดหายของเสียงระหว่างช่วงโฆษณาในสตรีม HLS SSAI แบบสด
เวอร์ชัน 1.0.0-alpha02
2 มีนาคม 2022
androidx.media3:media3-*:1.0.0-alpha02 ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
ซึ่งสอดคล้องกับการเปิดตัว ExoPlayer 2.17.0
- Core Library
- เพิ่มเมธอดที่ได้รับการป้องกัน
DefaultRenderersFactory.getCodecAdapterFactory()เพื่อให้คลาสย่อยของDefaultRenderersFactoryที่ลบล้างbuildVideoRenderers()หรือbuildAudioRenderers()สามารถเข้าถึงโรงงานอะแดปเตอร์ตัวแปลงรหัส และส่งไปยังอินสแตนซ์MediaCodecRendererที่สร้างขึ้น - ส่งต่อฟิลด์ส่วนหัว ICY
nameและgenreไปยังMediaMetadata.stationและMediaMetadata.genreตามลำดับเพื่อให้ ฟิลด์ดังกล่าวไปถึงแอปผ่านPlayer.Listener.onMediaMetadataChanged()(#9677) - นำคีย์ที่เป็นค่าว่างออกจาก
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 และค่าสถานะบทบาทที่ต้องการเมื่อเลือกแทร็กวิดีโอหลายรายการเพื่อการดัดแปลง (#9519)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอและเสียงให้เลือกเฉพาะรูปแบบสำหรับการเลือกแบบปรับได้ที่มีระดับตัวถอดรหัสและการรองรับฮาร์ดแวร์ในระดับเดียวกัน (#9565)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอให้เลือกตัวแปลงรหัสที่มีประสิทธิภาพมากขึ้นหาก ตัวแปลงรหัสหลายตัวรองรับตัวถอดรหัสหลักที่เร่งการแสดงผลด้วยฮาร์ดแวร์ (#4835)
- ให้เลือกค่ากำหนดเนื้อหาเสียง (เช่น แทร็กเสียง "เริ่มต้น" หรือแทร็กที่ตรงกับภาษาของภาษาในระบบ) มากกว่าข้อจำกัดทางเทคนิคในการเลือกแทร็ก (เช่น ประเภท MIME ที่ต้องการ หรือจำนวนช่องสูงสุด)
- แก้ไขปัญหาการเลือกแทร็กที่การลบล้างกลุ่มแทร็กหนึ่งไม่ได้ ปิดใช้กลุ่มแทร็กอื่นๆ ที่มีประเภทเดียวกัน (#9675)
- แก้ไขปัญหาการเลือกแทร็กที่ระบบใช้การลบล้างแทร็กแบบผสมที่มีทั้งแทร็กที่ว่างเปล่าและไม่ว่างเปล่าไม่ถูกต้อง (#9649)
- ห้ามใช้
TrackGroupซ้ำในTrackGroupArrayTrackGroups สามารถแยกความแตกต่างได้เสมอโดยการตั้งค่าidใน เครื่องมือสร้างTrackGroupการแก้ไขนี้จะช่วยแก้ปัญหาแอปขัดข้องเมื่อกลับมาเล่นต่อ หลังจากที่แอปทำงานในเบื้องหลังโดยมีการลบล้างแทร็กที่ใช้งานอยู่ (#9718) - แก้ไขตรรกะใน
AdaptiveTrackSelectionเพื่ออนุญาตให้เพิ่มคุณภาพ ภายใต้แบนด์วิดท์เครือข่ายที่เพียงพอ แม้ว่าการเล่นจะใกล้กับ ขอบแบบสดมากก็ตาม (#9784)
- วิดีโอ
- แก้ไขตรรกะการสำรองข้อมูลของตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส H264/H265 ที่เข้ากันได้หากจำเป็น
- เสียง:
- แก้ไขตรรกะการสำรองตัวถอดรหัสสำหรับ Dolby Atmos (E-AC3-JOC) เพื่อใช้ตัวถอดรหัส E-AC3 ที่เข้ากันได้หากจำเป็น
- เปลี่ยน API ของ
AudioCapabilitiesให้กำหนดการส่งอย่างชัดแจ้งAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESแทนnull - อนุญาตให้ปรับแต่งการคำนวณขนาดบัฟเฟอร์
AudioTrackโดย แทรกAudioTrackBufferSizeProviderไปยังDefaultAudioSink(#8891) - ลองสร้างอีกครั้งหากขนาดบัฟเฟอร์ที่ขอมีขนาดมากกว่า 1 MB
AudioTrack(#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เมื่อรีลีสมัลติเพล็กเซอร์ throws - เพิ่มแอปตัวอย่างเพื่อใช้การเปลี่ยนรูปแบบ
- ส่วนขยาย MediaSession
- โดยค่าเริ่มต้น
MediaSessionConnectorจะล้างเพลย์ลิสต์เมื่อหยุดเล่น แอปที่ต้องการเก็บเพลย์ลิสต์ไว้สามารถเรียกใช้setClearMediaItemsOnStop(false)ในตัวเชื่อมต่อได้
- โดยค่าเริ่มต้น
- ส่วนขยาย Cast
- ส่วนขยาย FFmpeg
- ทำให้
build_ffmpeg.shขึ้นอยู่กับ binutils ของ LLVM แทนของ GNU (#9933)
- ทำให้
- ความเข้ากันได้กับ Android 12
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
com.google.android.gms:play-services-cast-framework:20.1.0play-services-cast-frameworkเวอร์ชันก่อนหน้าไม่สามารถใช้งานร่วมกับแอปที่กำหนดเป้าหมายเป็น Android 12 และจะขัดข้องพร้อมกับIllegalArgumentExceptionเมื่อสร้างPendingIntent(#9528)
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.EventListenerออก โปรดใช้Player.Listenerแทน - นำ
MediaSourceFactory#setDrmSessionManagerMediaSourceFactory#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 โฮสต์อยู่ในโปรเจ็กต์ ExoPlayer GitHub แยกต่างหาก ใน Media3 ชื่อแพ็กเกจคือ androidx.media3.exoplayer เราวางแผนที่จะดูแลและ
เผยแพร่โปรเจ็กต์ ExoPlayer GitHub ต่อไปอีกระยะหนึ่งเพื่อให้แอปมีเวลาในการย้ายข้อมูลไปยัง
Media3 Media3 มีโมดูลทดแทนสำหรับโมดูล ExoPlayer ทั้งหมด ยกเว้นส่วนขยาย
legacy media2 และ mediasession ซึ่งจะแทนที่ด้วยโมดูล media3-session ใหม่ ซึ่งช่วยให้ผสานรวมโดยตรงระหว่างเพลเยอร์กับ
เซสชันสื่อได้โดยไม่ต้องใช้คลาสอะแดปเตอร์/ตัวเชื่อมต่อ