Media3
| อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
|---|---|---|---|---|
| 11 พฤศจิกายน 2569 | 1.11.1 | - | 1.12.0-beta01 | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Media3 คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มทรัพยากร Dependency สำหรับอาร์ติแฟกต์ที่ต้องการในไฟล์ build.gradle สำหรับแอปหรือโมดูล ดังนี้
ดึงดูด
dependencies { def media3_version = "1.11.1" // 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 Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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.11.1" // 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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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.12.0
เวอร์ชัน 1.12.0-beta01
11 พฤศจิกายน 2569
เวอร์ชัน 1.12.0-beta01 มีคอมมิตต่อไปนี้
- ไลบรารีทั่วไป:
- ลด
C.DEFAULT_BUFFER_SEGMENT_SIZEจาก65536เป็น65520เพื่อให้การจัดสรรบัฟเฟอร์แต่ละรายการ (รวมถึงส่วนหัวของออบเจ็กต์byte[]) พอดีกับหน้า OS ทั้งหมดในพื้นที่ออบเจ็กต์ขนาดใหญ่ของ ART ซึ่งจะช่วยลดการใช้งานหน่วยความจำบัฟเฟอร์ตัวอย่างลงประมาณ 6% ในอุปกรณ์หน้า 4 KiB และประมาณ 20% ในอุปกรณ์หน้า 16 KiB - แทนที่
androidx.media3.common.util.NullableTypeด้วย JSpecifyorg.jspecify.annotations.Nullable - นำ
androidx.media3.common.util.UnknownNullออกเพื่อใช้คำอธิบายประกอบ Nullness ของ JSpecify คลาสย่อย Kotlin ของRunnableFutureTaskที่มีประเภทผลลัพธ์ที่อนุญาตค่า Null (เช่นVoid?) ต้องระบุอาร์กิวเมนต์ประเภทที่อนุญาตค่า Null (เช่นRunnableFutureTask<Void?, Exception>) - เพิ่ม
AdViewProvider.getAdVideoView()เพื่อระบุคอนเทนเนอร์วิดีโอViewที่ปรับขนาดได้ระหว่างการเล่นโฆษณา - แมปสตริงตัวแปลงรหัส RFC 6381 ของ
mlpaกับMimeTypes.AUDIO_TRUEHDในMimeTypes.getMediaMimeTypeซึ่งจะแก้ไขแทร็กเสียง Dolby TrueHD ที่มัลติเพล็กซ์ซึ่งขาดหายไประหว่างการเตรียมแบบไม่มีกลุ่มข้อมูลของ HLS (#3485) - แก้ไข
AdPlaybackState.withAdDurationsUsเพื่อคัดลอกอาร์เรย์ที่ส่งมาและAdPlaybackState.fromAdPlaybackStateเพื่อคัดลอกฟิลด์อาร์เรย์ทั้งหมดของกลุ่มโฆษณา เพื่อไม่ให้แก้ไขอินสแตนซ์ผ่านอาร์เรย์ที่เก็บไว้หรือแชร์ได้อีกต่อไป - แก้ไข
IllegalStateException("มีการเข้าถึงเพลเยอร์ในชุดข้อความที่ไม่ถูกต้อง") เมื่อPlayer.listenหรือPlayer.listenToถูกยกเลิกจากชุดข้อความอื่นที่ไม่ใช่ชุดข้อความแอปพลิเคชันของเพลเยอร์ (เช่น ระหว่างการแยกย่อยการทดสอบ UI ของ Compose) (#3005)
- ลด
- ExoPlayer:
- แก้ไขปัญหาที่โปรแกรมแสดงผลที่เปิดใช้ก่อนเวลาสำหรับช่วงสื่อที่กำลังจะมาถึงอาจเริ่มแสดงผลก่อนที่การเล่นจะเปลี่ยนไปเป็นช่วงนั้น
- คลาสย่อย Kotlin ของ
CompositeMediaSourceที่ใช้รหัสแหล่งที่มาของบุตรหลานที่อนุญาตค่า Null (เช่นVoid?) ต้องระบุอาร์กิวเมนต์ประเภทที่อนุญาตค่า Null (เช่นCompositeMediaSource<Void?>) - ตรวจสอบใน
AdsMediaSourceว่าAdPlaybackState.removedAdGroupCountไม่ลดลงในการอัปเดตAdPlaybackStateรายการ - แก้ไขปัญหาที่การเปลี่ยนระหว่างช่วงเวลาของสื่อที่ใช้โปรแกรมแสดงผลที่แตกต่างกันอาจเปิดใช้โปรแกรมแสดงผลขาเข้าก่อนเวลาอันควร ก่อนที่โปรแกรมแสดงผลขาออกจะแสดงผลเสร็จ (เช่น แสดง
IllegalStateException("เปิดใช้นาฬิกาสื่อของโปรแกรมแสดงผลหลายรายการ")) เมื่อเปิดใช้Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION - แก้ไขปัญหาที่การเปลี่ยนไปใช้โฆษณาที่ความเร็วในการเล่นที่กำหนดเองอาจทำให้การเลื่อนโปรแกรมแสดงผลทั้งหมดไปยังช่วงโฆษณาล่าช้าเมื่อเปิดใช้
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION - แก้ไขปัญหาเกี่ยวกับโปรแกรมแสดงผลที่เตรียมพร้อมล่วงหน้าระหว่างการเปลี่ยนช่วงเวลาของสื่อและการเลือกแทร็กอีกครั้ง
- เพิ่ม
MediaPeriod.supportsStreamPrerollFlags()(ค่าเริ่มต้นเป็นfalse) เพื่อให้การติดตั้งใช้งานMediaPeriodที่กำหนดเองสามารถเลือกใช้การรายงานความไม่ต่อเนื่องเริ่มต้นโดยใช้SampleStream.getFlags()และกลับไปใช้MediaPeriod.readDiscontinuity()เมื่อไม่รองรับและเปิดใช้Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION - แก้ไขปัญหาที่การข้ามโฆษณาตามด้วยโฆษณาอีกรายการในกลุ่มโฆษณาเดียวกันได้รับการรายงานด้วย
DISCONTINUITY_REASON_AUTO_TRANSITIONแทนที่จะเป็นDISCONTINUITY_REASON_SKIPหรือไม่ได้รับการรายงานเลยเมื่อAdsMediaSourceใช้การเตรียมแหล่งที่มาของเนื้อหาแบบ Lazy Loading
- Transformer:
- เพิ่ม CodecDB (
androidx.media3.transformer.codecdb) ซึ่งจะแนะนำการกำหนดค่าโปรแกรมเปลี่ยนไฟล์วิดีโอ (ตัวแปลงรหัส การตั้งค่าโปรแกรมเปลี่ยนไฟล์ และอัตราบิต) สำหรับอุปกรณ์ปัจจุบันจากข้อมูลคุณภาพของโปรแกรมเปลี่ยนไฟล์ที่วัดได้
- เพิ่ม CodecDB (
- เครื่องสกัดน้ำผลไม้
- ADTS: แก้ไข
AdtsExtractorที่รับรูปแบบเสียงจากคำที่ซิงค์ไม่ถูกต้องในเพย์โหลดของเฟรมแรกบางส่วน ซึ่งอาจทำให้การเล่นสตรีม AAC แบบสดที่เข้าร่วมกลางเฟรมล้มเหลวหรือหยุดชะงัก (#3464) - แก้ไข
ArrayIndexOutOfBoundsExceptionในFragmentedMp4Extractorเมื่อส่วนย่อยมีกล่องtrunที่ไม่มีตัวอย่าง (#3471) - ADTS: เพิ่ม
FLAG_DISABLE_ID3_METADATAลงในAdtsExtractorเพื่อหยุดไม่ให้ข้อมูล ID3 ในสตรีมแสดงผลเป็นแทร็กapplication/id3 - MP4: แก้ไขการเล่นแบบไม่มีช่องว่างของแทร็ก AAC ที่มี Muxer (เช่น FFmpeg)
ซึ่งลดรายการ
sttsสุดท้ายเพื่อยกเว้นระยะห่างจากขอบของโปรแกรมเปลี่ยนไฟล์ ซึ่ง ทำให้ระยะห่างจากขอบได้มาเป็น 0 จากรายการแก้ไขelstและ ตอนท้ายของเฟรมสุดท้ายที่จะเล่น (#3489) - แก้ไขการจัดสรรบัฟเฟอร์การดูตัวอย่างล่วงหน้าขนาดใหญ่และ
OutOfMemoryErrorเมื่อตรวจหาไฟล์ที่เสียหายหรือไม่ใช่ไฟล์สื่อที่ขึ้นต้นด้วยID3(#3502)
- ADTS: แก้ไข
- ผู้ตรวจสอบ
- แก้ไขปัญหาที่การยกเลิก Future ที่แสดงผลโดย
MetadataRetriever.retrieveDurationUs()ทำให้close()ไม่สามารถปล่อยMediaSourceที่เกี่ยวข้องได้ (#3468) - แก้ไข
MediaExtractorCompatเพื่อแสดงผลMediaFormat.KEY_FRAME_RATEเป็นจำนวนเต็มที่ตรงกับแพลตฟอร์มMediaExtractor
- แก้ไขปัญหาที่การยกเลิก Future ที่แสดงผลโดย
- เสียง:
- แก้ไขปัญหาที่ระบบรวมช่วงที่ไม่มีเสียงซึ่งข้ามไปในบัฟเฟอร์ไว้ใน
AudioSink.getCurrentPositionUs(boolean)และรายงานโดยใช้AudioSink.Listener.onSilenceSkipped()ก่อนที่การเล่นจะถึงส่วนที่ข้ามไป (#3472) - ตั้งค่าแหล่งที่มาของตัวแปลงรหัสโดยใช้
AudioTrack.Builder.setCodecProvenanceใน API 37 ขึ้นไปเมื่อเล่นเสียง PCM แบบหลายช่องทางเชิงพื้นที่ซึ่งถอดรหัสจากรูปแบบที่บีบอัด - แก้ไขการข้ามการลองเริ่มต้น
AudioTrackอีกครั้งเมื่อเสียง 1 วินาทีมีขนาดอย่างน้อยเท่ากับขนาดบัฟเฟอร์เริ่มต้น ซึ่งทำให้การส่งผ่าน DTS-HD ไม่สำเร็จในอุปกรณ์ที่มีหน่วยความจำเสียงจำกัด (#3487)
- แก้ไขปัญหาที่ระบบรวมช่วงที่ไม่มีเสียงซึ่งข้ามไปในบัฟเฟอร์ไว้ใน
- วิดีโอ
- อนุญาตให้กลับไปใช้ตัวถอดรหัส H.265/HEVC สำหรับสตรีม Dolby Vision Profile 7 ที่เข้ากันได้แบบย้อนหลัง และไม่กลับไปใช้ตัวถอดรหัส AV1 สำหรับสตรีม Profile 10 ที่เลเยอร์ฐานส่งสัญญาณแบบเต็มช่วงพร้อมลักษณะการโอนที่ไม่ได้ระบุ (#3486)
- แก้ไขการเลือกตัวถอดรหัสใน
MediaCodecUtilเพื่อหลีกเลี่ยงการเลือกตัวถอดรหัสหลักที่ไม่รองรับโปรไฟล์ของรูปแบบในเชิงฟังก์ชัน (เช่น ตัวถอดรหัส Dolby Vision สำหรับโปรไฟล์อื่น) เมื่อไม่มีตัวถอดรหัสที่รองรับรูปแบบอย่างเต็มรูปแบบ (#3486)
- ข้อความ
- ลดการใช้งานหน่วยความจำใน
DvbParserโดยแสดงผลขอบเขตคำบรรยายลงในบิตแมปขนาดขอบเขตโดยตรง แทนที่จะเก็บรักษาบิตแมปชั่วคราวแบบเต็มหน้าจอ
- ลดการใช้งานหน่วยความจำใน
- ผลกระทบ
- Muxer:
- ตรวจสอบแทร็ก
Formatเมื่อเพิ่มแทร็กลงในMp4MuxerหรือFragmentedMp4Muxerแทนที่จะดำเนินการไม่สำเร็จในภายหลังเมื่อเขียนตัวอย่างหรือปิด Muxer - ทำให้การเรียกใช้
Muxer.close()ซ้ำๆ ไม่มีการดำเนินการในการติดตั้งใช้งานไลบรารีMuxerทั้งหมด และถือว่า Muxer ปิดอยู่แม้ว่าclose()จะแสดงข้อผิดพลาดก็ตาม การเรียกใช้เมธอดอื่นๆ หลังจากclose()จะแสดงIllegalStateException
- ตรวจสอบแทร็ก
- ส่วนขยาย IMA:
- รองรับอินเทอร์เฟซ
ResizablePlayerของ IMA SDK เพื่ออนุญาตให้โฆษณาแบบอินเทอร์แอกทีฟปรับขนาดและเปลี่ยนตำแหน่งมุมมองวิดีโอเพลเยอร์ภายในคอนเทนเนอร์โฆษณา และเพิ่มImaAdsLoader.requestAds(DataSpec, Object, AdViewProvider)(เลิกใช้งานImaAdsLoader.requestAds(DataSpec, Object, ViewGroup))
- รองรับอินเทอร์เฟซ
- เซสชัน:
- ทำให้ API ค่ากำหนดปุ่มสื่อมีความเสถียร
- ลดการใช้งานหน่วยความจำโดยไม่เก็บข้อมูลอาร์ตเวิร์กที่บีบอัดไว้ใน
CacheBitmapLoaderอีกต่อไป - หลีกเลี่ยงการเรียกใช้
MediaSession.setQueue(null)ซ้ำซ้อนในการอัปเดตไทม์ไลน์เมื่อคิวเซสชันของแพลตฟอร์มnullอยู่แล้ว (เช่น เมื่อPlayer.COMMAND_GET_TIMELINEไม่พร้อมใช้งาน) - แก้ไขปัญหาที่
MediaSessionServiceไม่ให้ตัวเลือกการกู้คืนอย่างถูกต้องแก่การติดตั้งใช้งานบริการโดยไม่พยายามสร้างเซสชันใหม่ (#3490) - รายงาน
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATEแทนPlayer.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDเมื่อการอัปเดตข้อมูลเมตาMediaSessionCompatเดิมแก้ไขข้อมูลเมตาหรือระยะเวลาของรายการในคิวที่ใช้งานอยู่โดยไม่เปลี่ยนคิว - แก้ไขอาร์ตเวิร์กที่ขาดหายไปสำหรับเซสชันเดิมที่ตั้งค่า
nullMETADATA_KEY_DISPLAY_ICON(หรือ URI ของอาร์ตเวิร์ก) ควบคู่ไปกับMETADATA_KEY_ALBUM_ARTที่ถูกต้อง: ระบบจะข้ามค่าอาร์ตเวิร์กที่เป็น Null เมื่อ แปลงข้อมูลเมตาเดิม
- UI:
- เพิ่มช่อง
subtitlesComposable ลงในContentFrameและPlayerโดยมีการรองรับเริ่มต้นในmedia3-ui-compose-material3สำหรับการแสดงผลบิตแมปและคิวคำบรรยายข้อความแนวนอน - เพิ่ม
SubtitleView.setTextDirectionHeuristicเพื่ออนุญาตให้ปรับแต่งการวิเคราะห์ทิศทางข้อความที่ใช้สำหรับการตัดข้อความคำบรรยายแบบ 2 ทิศทาง (#3454) - สร้างภาพเคลื่อนไหวให้กับช่องควบคุมทั้งหมดใน
Playerในmedia3-ui-compose-material3รวมถึงช่องที่กำหนดเอง และนำพารามิเตอร์visibleออกจากPlayerDefaults.TopControls,CenterControlsและBottomControlsนี่เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ API ที่ไม่เสถียร - รองรับ
AdViewProvider.getAdVideoView()ในPlayerViewโดยรวมexo_content_frameไว้ในexo_content_frame_container - ลดการใช้งานหน่วยความจำใน
SubtitleViewโดยการปล่อยบิตแมปคำบรรยายและเลย์เอาต์ข้อความที่แคชไว้เมื่อล้างคิว และแก้ไขปัญหาที่ข้อความคำบรรยายเก่าอาจยังคงมองเห็นได้เมื่อคิวมีความกว้างไม่เพียงพอที่จะจัดวาง
- เพิ่มช่อง
- ส่วนขยาย HLS:
- แก้ไขปัญหาที่การโหลดกลุ่มสื่อ HLS ที่ล้มเหลวหรือถูกยกเลิกซ้ำอาจเก็บตัวอย่างที่บัฟเฟอร์ไว้บางส่วนโดยไม่ทิ้งหรือต่อเข้าด้วยกัน หรือรีเซ็ตตำแหน่งการโหลดเป็นตำแหน่งการกรอที่ล้าสมัย (#3362)
- แก้ไข
IllegalStateExceptionเมื่อกรอไปยังจุดเริ่มต้นของกลุ่มที่บัฟเฟอร์หลังจากเปลี่ยนแทร็กแบบปรับอัตโนมัติ - แก้ไขปัญหาการเล่นหลายรายการเมื่อเปลี่ยนเส้นทางด้วยการควบคุมเนื้อหา HLS (#3465)
- ส่วนขยาย DASH
- แก้ไขคำบรรยาย CEA-608 ที่ซ้ำกันหรืออ่านไม่ออกเมื่อสตรีมมีแทร็กคำบรรยายแทนเสียงแบบฝังหลายแทร็ก (#887)
- ส่วนขยาย Cast
- แก้ไขปัญหาที่คำขอโหลด
RemoteCastPlayerถูกยกเลิกโดยตัวรับสัญญาณ Android TV (#3462) - อัปเดตทรัพยากร Dependency ของ
com.google.android.gms:play-services-cast-frameworkเป็น23.0.0 - เพิ่ม
CastParams.Builder.setSystemOutputSwitcherEnabled(boolean)เพื่อกำหนดค่าว่าจะให้อุปกรณ์แคสต์ปรากฏในตัวสลับเอาต์พุตของระบบหรือไม่ โดยไม่ต้องประกาศMediaTransferReceiverในAndroidManifest.xmlและเปิดใช้ตัวสลับเอาต์พุตของระบบโดยค่าเริ่มต้นสำหรับแอปที่กำหนดเป้าหมายเป็น API 37 ขึ้นไปในอุปกรณ์ที่ใช้ API 37 ขึ้นไป - รองรับช่อง
MediaMetadataของ Cast ที่กำหนดไว้ล่วงหน้าในDefaultMediaItemConverterโดยการแมปช่องที่ไม่มีพร็อพเพอร์ตี้MediaItem.mediaMetadataโดยเฉพาะไปยังและจากMediaItem.mediaMetadata.extrasและเก็บข้อมูลเพิ่มเติมที่กำหนดเองไว้ในMediaInfo.customData - หยุดแสดงข้อยกเว้นใน
DefaultMediaItemConverterเมื่อไม่มี URI การเล่นหรือการแปลงไม่สำเร็จ โดยเก็บรหัสสื่อและข้อมูลเมตาไว้ในไทม์ไลน์CastPlayerสำหรับรายการในคิว Cast ที่ไม่มี URI การเล่น - เพิ่ม
SessionAvailabilityListener.onCastSessionAvailable(boolean)เพื่อระบุว่าเซสชัน Cast ที่พร้อมใช้งานเริ่มต้นโดยใช้ Intent to Join หรือไม่ และคงสถานะการเล่นระยะไกลไว้แทนที่จะเขียนทับด้วยสถานะเพลเยอร์ในเครื่องเมื่อเข้าร่วมเซสชัน Cast โดยใช้ Intent to Join ในCastPlayer - ป้อนข้อมูล
MediaInfoและระยะเวลาของไทม์ไลน์จากMediaMetadata.durationMsสำหรับรายการที่ไม่ใช่รายการสดในDefaultMediaItemConverterและRemoteCastPlayerรวมถึงคงระยะเวลาที่ตัวรับสัญญาณแก้ไขและสถานะไลฟ์สดไว้ในการกรอคิว
- แก้ไขปัญหาที่คำขอโหลด
- แอปสาธิต:
- อนุญาตให้จัดเรียงรายการเพลย์ลิสต์ใหม่โดยการลากในแอปสาธิตเซสชัน
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
androidx.media3.transformer.TextureAssetLoaderออก โปรดใช้androidx.media3.transformer.RawAssetLoaderแทน - นำเครื่องมือสร้าง
DefaultDecoderFactoryสาธารณะออก โปรดใช้DefaultDecoderFactory.Builderแทน - นำ
DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_BLACKLIST_MSออก โปรดใช้DefaultLoadErrorHandlingPolicy.DEFAULT_TRACK_EXCLUSION_MSแทน - นำออก
DefaultVideoFrameProcessor.Factory.Builder.setRequireRegisteringAllInputFrames(boolean)โปรดใช้VideoFrameProcessor.INPUT_TYPE_SURFACE_AUTOMATIC_FRAME_REGISTRATIONแทน - นำ
EditedMediaItemSequence.Builder.experimentalSetForceAudioTrack(boolean)และEditedMediaItemSequence.Builder.experimentalSetForceVideoTrack(boolean)ออก โปรดใช้EditedMediaItemSequence.Builder(Set)แทน - นำ
EditedMediaItemSequence.forceAudioTrackออก โปรดใช้trackTypes.contains(C.TRACK_TYPE_AUDIO)แทน - นำ
EditedMediaItemSequence.forceVideoTrackออก โปรดใช้trackTypes.contains(C.TRACK_TYPE_VIDEO)แทน - นำ
ExportResult.durationMsและExportResult.Builder.setDurationMsออก โปรดใช้ExportResult.approximateDurationMsและExportResult.Builder.setApproximateDurationMsแทน - นำ
SilenceSkippingAudioProcessor.DEFAULT_PADDING_SILENCE_USออก ระบุลักษณะการทำงานของการปิดเสียงโดยใช้silenceRetentionRatioแทน - นำ
Timeline.getPeriodPosition(Window, Period, int, long, long)ออก โปรดใช้Timeline.getPeriodPositionUs(Window, Period, int, long, long)แทน
- นำ
เวอร์ชัน 1.12.0-alpha02
26 ตุลาคม 2026
เวอร์ชัน 1.12.0-alpha02 มีคอมมิตต่อไปนี้
- บริการ Google Play สำหรับเอฟเฟกต์:
- เปิดตัวโมดูล
media3-effect-play-servicesใหม่ที่ให้บริการเอฟเฟกต์สื่อของบริการ Google Play ซึ่งรวมถึงEnhancementSessionDecoratorสำหรับการเพิ่มประสิทธิภาพวิดีโอและStudioSoundAudioProcessorสำหรับการแยกแหล่งที่มาของเสียง
- เปิดตัวโมดูล
เวอร์ชัน 1.12.0-alpha01
21 ตุลาคม 2569
เวอร์ชัน 1.12.0-alpha01 มีคอมมิตต่อไปนี้
- ไลบรารีทั่วไป:
- เพิ่ม
C.COLOR_SPACE_DISPLAY_P3และรองรับขอบเขตสี Display P3 ในการแมปสี ISOMediaFormatUtilและColorInfo - เพิ่มรีจิสทรี
Flagsส่วนกลางเพื่อจัดการแฟล็กฟีเจอร์ทดลองและการเปิดตัวแบบทีละขั้น (Flags.setCanaryModeEnabled) ย้ายข้อมูลเมธอด@ExperimentalApiที่มีอยู่จำนวนมากเพื่อใช้ API แฟล็กใหม่ - เพิ่ม
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesและMediaMetadata.Builder.setCategories(List<String>) - แทนที่
androidx.media3.common.util.NonNullApiด้วย JSpecifyorg.jspecify.annotations.NullMarked
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาที่การเล่นแบบหลายช่วงเวลาของ DASH ค้างเมื่อกลุ่มแรกของช่วงเวลาถัดไปโหลดไม่สำเร็จ (#3396)
- รายงาน
wasCanceled = trueในAnalyticsListener.onLoadErrorและMediaSourceEventListener.onLoadErrorเมื่อลองโหลดซ้ำจนครบจำนวนครั้งแล้ว - รองรับการลงทะเบียนอินสแตนซ์
VideoFrameMetadataListenerหลายรายการโดยใช้ExoPlayer.addVideoFrameMetadataListenerและExoPlayer.removeVideoFrameMetadataListenerโดยเลิกใช้งานExoPlayer.setVideoFrameMetadataListenerและExoPlayer.clearVideoFrameMetadataListener - เพิ่มการรองรับโฆษณาในเนื้อหาแบบหลายช่วงเวลา (เช่น DASH) โดยการแยกและชดเชย
AdPlaybackStateสำหรับแต่ละช่วงเวลา - แก้ไขภาวะแข่งขันใน
PreCacheHelperซึ่งการยกเลิกคำขอเตรียมการที่ดำเนินอยู่ยังคงเริ่มการดาวน์โหลดในเบื้องหลังได้ - จำกัด
setLoadOnlySelectedTracks(true)ในProgressiveMediaSourceและDefaultMediaSourceFactoryให้กรองเฉพาะแทร็กวิดีโอและรูปภาพที่ไม่ได้เลือกออก ระบบจะโหลดแทร็กเสียงและข้อความเสมอเพื่อให้สลับแทร็กได้อย่างราบรื่นโดยไม่ต้องบัฟเฟอร์ซ้ำ - เปิดใช้
setLoadOnlySelectedTracks(true)โดยค่าเริ่มต้นในProgressiveMediaSourceและDefaultMediaSourceFactoryซึ่งจะช่วยประหยัดหน่วยความจำและช่วยให้การคำนวณการจัดสรรบัฟเฟอร์DefaultLoadControlทำงานได้แม่นยำยิ่งขึ้นเมื่อไม่ได้เลือกแทร็กทั้งหมด โปรดทราบว่าการดำเนินการนี้อาจทำให้เกิดการบัฟเฟอร์เพิ่มเติมหากมีการเปิดใช้แทร็กวิดีโอหรือรูปภาพที่ไม่ได้เลือกใหม่ระหว่างการเล่น - แก้ไขปัญหาที่
Player.getCurrentPosition()อาจแสดงผลค่าที่ล้าสมัย (อัปเดตเพียงไม่กี่ครั้งต่อวินาที) เมื่อเปิดใช้การกำหนดเวลาแบบไดนามิก (#3286) - แก้ไขปัญหาที่การลดลงหรือการรีเซ็ตตำแหน่งส่วนหัวของการเล่น
AudioTrackที่ไม่คาดคิดอาจได้รับการจัดการอย่างไม่ถูกต้องเป็นจำนวนเต็มที่มากเกินไป ซึ่งทำให้การเล่นหยุดชะงักในระหว่างการบัฟเฟอร์ (#3407) - นำ
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)เวอร์ชันทดลองออก - หลีกเลี่ยงการเปิดใช้โปรแกรมแสดงผลอีกครั้งโดยไม่จำเป็นและข้อบกพร่องเมื่อกลับจากโฆษณาคั่นระหว่างหน้าหรือโฆษณาไปยังเนื้อหาที่ถูกตัดที่ส่วนท้าย (#3371)
- แก้ไขปัญหาที่ข้อผิดพลาดของโปรแกรมแสดงผลในรายการเพลย์ลิสต์ที่กำลังจะเล่นขัดจังหวะการเล่นปัจจุบันก่อนเวลาอันควรเมื่อเปิดใช้
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION - แก้ไข
NullPointerExceptionที่อาจเกิดขึ้นหากExoPlayerเปลี่ยนตัวแสดงผลเป็นระยะเวลาสื่อที่ไม่ได้เตรียมไว้เมื่อเปิดใช้Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION - แก้ไขปัญหาที่เฟรมวิดีโออาจถูกข้ามหรือหลุดโดยไม่คาดคิดระหว่างการกำหนดเวลาแบบไดนามิกเมื่อเปิดใช้
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS - แก้ไข
ArrayIndexOutOfBoundsExceptionใน Listener ของ Analytics เมื่อหยุดเล่นระหว่างโฆษณาในไลฟ์สด (#3423) - แก้ไขปัญหาที่
PreloadMediaSourceอาจโพสต์เหตุการณ์โหลดล่วงหน้าโดยไม่คาดคิดเมื่อไม่มีการเรียกใช้preload()(#3408) - แก้ไขปัญหาที่ระบบละเว้น
Format.subsampleOffsetUsสำหรับแทร็กข้อมูลเมตา ซึ่งทำให้การประทับเวลาการเล่นไม่ถูกต้องในคำสั่งเชื่อมต่อ SCTE-35 ที่ถอดรหัสแล้ว (#3413) - แก้ไขหน่วยความจำรั่วไหลใน
PreloadMediaSourceและDefaultPreloadManagerเมื่อมีการเรียกpreload()หลายครั้งในแหล่งที่มาเดียวกัน (#3445) - แก้ไข
NullPointerExceptionเมื่อปล่อยAdsMediaSourceขณะที่การรีเฟรชไทม์ไลน์เนื้อหารอดำเนินการ (#3442) - แก้ไขปัญหาที่การเล่นสื่อแบบโปรเกรสซีฟอาจข้ามไปยังตำแหน่งที่ไม่ถูกต้องเมื่อการโหลดหลังจากกรอ (หรือเมื่อเริ่มเล่นที่ตำแหน่งที่ไม่ใช่ศูนย์) ล้มเหลวและมีการลองใหม่ (#3440)
- เพิ่มวิธีแก้ปัญหาสำหรับตัวถอดรหัส H.264 ของ Xiaomi TV Stick 4K (MiTV-AYFR0) ที่ค้างเมื่อเปลี่ยนความละเอียดแบบราบรื่น (#3457)
- แก้ไข
NullPointerExceptionในSteeringManifestTrackerเมื่อเครื่องมือติดตามหยุดทำงานก่อนที่จะมีการเรียกใช้ Callback การโหลดเสร็จสมบูรณ์หรือข้อผิดพลาดที่โพสต์ (#3443) - รองรับการเล่นข้อมูลเมตาแบบกำหนดเวลาของ HAGC (ST 2094-50) จากแทร็กข้อมูลเมตาที่จัดรูปแบบเป็นกล่อง
mebxในไฟล์ MP4 - แก้ไขปัญหาที่ระบบอาจข้ามช่วงเวลาของสื่อที่เตรียมช้าในเพลย์ลิสต์
- CompositionPlayer:
- รองรับการกำหนดค่าอัตราเฟรมของการรวมเฟรมวิดีโอโดยใช้
Composition.Builder.setVideoFrameAggregationParametersสำหรับเวิร์กโฟลว์การเล่น - แก้ไขเฟรมที่หายไปในองค์ประกอบแบบหลายลำดับที่เกิดจากการควอนไทเซชันของการประทับเวลาหรือการปัดเศษที่ไม่ตรงกัน โดยเลือกเฟรมที่มีการประทับเวลาที่ใกล้เคียงที่สุดในระหว่างการรวมเฟรม ซึ่งจะเปิดใช้จาก API 29 เท่านั้น เนื่องจากต้องเก็บเฟรมเพิ่มเติม 1 เฟรมในระหว่างการประมวลผลต่อลำดับวิดีโอ
- รองรับการกำหนดค่าอัตราเฟรมของการรวมเฟรมวิดีโอโดยใช้
- Transformer:
- รองรับการกำหนดค่าอัตราเฟรมของการรวมเฟรมวิดีโอโดยใช้
Composition.Builder.setVideoFrameAggregationParametersสำหรับเวิร์กโฟลว์การส่งออก - แก้ไขเฟรมที่หายไปในองค์ประกอบแบบหลายลำดับที่เกิดจากการควอนไทเซชันของการประทับเวลาหรือการปัดเศษที่ไม่ตรงกัน โดยเลือกเฟรมที่มีการประทับเวลาที่ใกล้เคียงที่สุดในระหว่างการรวมเฟรม ซึ่งจะเปิดใช้จาก API 29 เท่านั้น เนื่องจากต้องเก็บเฟรมเพิ่มเติม 1 เฟรมในระหว่างการประมวลผลต่อลำดับวิดีโอ
- เคารพ
Transformer#setAudioMimeType(AUDIO_RAW)เมื่อใช้AudioProcessorsก่อนการแก้ไขนี้ การขอMimeTypes.AUDIO_RAWและการใช้AudioProcessorส่งผลให้เอาต์พุตถูกบีบอัด
- รองรับการกำหนดค่าอัตราเฟรมของการรวมเฟรมวิดีโอโดยใช้
- การเลือกแทร็ก
- แก้ไขปัญหาที่ระบบเลือกแทร็ก SDR แทนแทร็ก Dolby Vision ที่รองรับอย่างไม่ถูกต้องในอุปกรณ์บางรุ่น (#3135)
- เครื่องสกัดน้ำผลไม้
- Mp4Extractor: แก้ไขการแยกวิเคราะห์กล่อง
dOpsสำหรับ Opus ใน MP4 โดยที่PreSkip,InputSampleRateและOutputGainไม่ได้แปลงจาก Big-Endian เป็น Little-Endian ซึ่งทำให้เสียง ~299 มิลลิวินาทีแรกหายไปเมื่อไม่มีรายการแก้ไข (#3431) - นำ
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESและFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265ออกเนื่องจากระบบจะเปิดใช้การแยกวิเคราะห์การขึ้นต่อกันของตัวอย่างภายใน GOP สำหรับ H.264 และ H.265 โดยค่าเริ่มต้น - Mp4Extractor: แก้ไขการแยกวิเคราะห์ข้อมูลเมตาตำแหน่งจากกล่อง
xyzที่มีพิกัดระดับความสูงเพื่อป้อนข้อมูลMp4LocationData - เพิ่ม
ExtractorUtil.getFramesPerEncodedSampleเพื่อคำนวณจำนวนเฟรมเสียงต่อตัวอย่างสำหรับรูปแบบเสียงที่เข้ารหัส (#3367) - เพิ่ม
FLAG_READ_XMP_METADATAลงในMp4Extractorเพื่อดึงข้อมูลเมตา XMP จากกล่อง UUID ระดับบนสุด - แก้ไขเสียง AC-3, DTS และ LPCM ที่เสียหายเมื่อเล่นเนื้อหา MPEG-PS แบบ DVD โดยการตัดส่วนหัวของสตรีมย่อย
private_stream_1ออกจากแพ็กเก็ต PES แต่ละรายการในPsExtractorก่อนที่จะส่งเพย์โหลดไปยังโปรแกรมอ่านเสียง (#3327) - แก้ไขข้อผิดพลาดใน
FragmentedMp4Extractorเมื่อกล่องtfdtเวอร์ชัน 1 เข้ารหัสbaseMediaDecodeTimeเชิงลบ (#3412) - MPEG-TS: รองรับการแยกวิเคราะห์ข้อความ SEI ของการจัดเรียงการแพ็กเฟรม H.264 และ H.265 เพื่อป้อนข้อมูล
Format.stereoMode(#3419) - แยกวิเคราะห์ข้อมูลการกำหนดค่า Dolby Vision Profile 20 และปฏิเสธโปรไฟล์ Dolby Vision ที่ไม่รองรับแทนที่จะเล่นเป็น HEVC มาตรฐานที่มีสีไม่ถูกต้อง (#3427)
- MP3: เปลี่ยนกลับการปรับแต่งข้อมูลเมตาการหน่วงเวลาและการเติมของโปรแกรมเปลี่ยนไฟล์ LAME/Xing เนื่องจากใช้ร่วมกับโปรแกรมถอดรหัส MP3 ของ
MediaCodecไม่ได้ (#3425) - Matroska: แก้ไข
NullPointerExceptionเมื่อแยกวิเคราะห์องค์ประกอบChapterAtomที่ฝัง (#3438) - Ogg: แก้ไขข้อบกพร่องที่แพ็กเก็ตซึ่งมีขนาดเป็นจำนวนเท่าของ 255 ไบต์และสิ้นสุดที่ขอบเขตหน้าเว็บถูกผสานรวมกับแพ็กเก็ตต่อไปนี้
- MP4: แยกวิเคราะห์แทร็กข้อมูลเมตาที่กำหนดเวลาแบบ Boxed
mebxในMp4ExtractorและFragmentedMp4Extractorแทร็กที่มีคีย์it35จะแสดงเป็นMimeTypes.APPLICATION_ITUT_T35(เปิดใช้การเล่น HAGC) ระบบจะไม่สนใจแทร็กmebxอื่นๆ เว้นแต่จะตั้งค่าFLAG_EMIT_RAW_MEBX_DATAไว้ ซึ่งในกรณีนี้ ระบบจะส่งแทร็กmebxทั้งหมดเป็นMimeTypes.APPLICATION_MEBXดิบ - Ogg: รองรับการแยก Opus end-padding สำหรับการเล่นแบบไม่มีช่องว่าง (#2576) และแก้ไขการประทับเวลาตัวอย่างหลังจากกรอไปยังหน้าเว็บที่เริ่มต้นด้วยแพ็กเก็ตต่อเนื่อง
- Ogg: แก้ไขข้อผิดพลาดในการถอดรหัสและการข้ามการประทับเวลาประมาณ 1 วินาทีในสตรีม Ogg Opus แบบเชนโดยละเว้นแพ็กเก็ตส่วนหัวของความคิดเห็นและรหัส Opus กลางสตรีม
- Mp4Extractor: แก้ไขการแยกวิเคราะห์กล่อง
- ผู้ตรวจสอบ
- รองรับการดึงข้อมูลเมตา XMP จากไฟล์ MP4 โดยใช้
MetadataRetriever - รองรับการแยกแทร็กข้อมูลเมตาที่กำหนดเวลาแบบ Boxed
mebxในMediaExtractorCompatเป็นMimeTypes.APPLICATION_MEBX
- รองรับการดึงข้อมูลเมตา XMP จากไฟล์ MP4 โดยใช้
- เฟรมเครื่องมือตรวจสอบ
- แก้ไขการคลิปสี BT.2020 ที่มีขอบเขตกว้างในรูปภาพฐาน SDR เมื่อดึงเฟรม Ultra HDR ด้วย
FrameExtractorตอนนี้สีที่อยู่นอกขอบเขตจะถูกบีบอัดให้เข้ากับขอบเขต sRGB อย่างนุ่มนวลแทนที่จะถูกจำกัด
- แก้ไขการคลิปสี BT.2020 ที่มีขอบเขตกว้างในรูปภาพฐาน SDR เมื่อดึงเฟรม Ultra HDR ด้วย
- เสียง:
- เพิ่มวิธีแก้ปัญหาสำหรับอุปกรณ์ที่เรียกใช้
android.media.AudioDeviceCallbackในชุดข้อความที่ไม่ถูกต้อง (#3386) - แก้ไขปัญหาการเล่นที่อาจค้างหลังจากเปลี่ยนแทร็กด้วยการลดภาระการบีบอัด
- แก้ปัญหาเกี่ยวกับ Amazon Fire TV Stick ที่เสียง AC-3 อาจหยุดทำงานระหว่างการเปลี่ยนช่วงเวลา (#3448)
- รองรับการตัดส่วนเสริมของโปรแกรมเปลี่ยนไฟล์ที่ส่วนท้ายของสตรีมสำหรับการเล่นแบบไม่มีช่องว่างของ Ogg และ WebM/Matroska Opus (#2576)
- แก้ไขการอัปเดตการหน่วงเวลาและการเติมแบบไม่มีช่องว่างในการลดภาระงานแบบไดนามิกระหว่างการเปลี่ยนแทร็ก เพื่อให้มีผลกับแทร็กที่กำลังจะเล่นแทนแทร็กที่กำลังเล่นอยู่
- ตัดการเติมส่วนท้ายของโปรแกรมเปลี่ยนไฟล์ในสตรีมเดียวและสตรีมสุดท้ายในเพลย์ลิสต์ นอกเหนือจากการเปลี่ยนแบบไม่มีช่องว่างระหว่างเพลย์ลิสต์ (#2576)
- หลีกเลี่ยงการคัดลอกบัฟเฟอร์เสียงที่ไม่จำเป็นใน
TrimmingAudioProcessorหลังจากที่การตัดแต่งความล่าช้าของโปรแกรมเปลี่ยนไฟล์ที่จุดเริ่มต้นของสตรีมเสร็จสมบูรณ์แล้ว และไม่จำเป็นต้องตัดแต่งระยะห่างจากขอบที่จุดสิ้นสุดของสตรีม
- เพิ่มวิธีแก้ปัญหาสำหรับอุปกรณ์ที่เรียกใช้
- วิดีโอ
- แก้ไขการรายงานเฟรมวิดีโอที่ล่าช้าซึ่งมีการประทับเวลาการเผยแพร่ที่เหมือนกัน เพื่อให้ระบบรายงานว่าเฟรมเหล่านั้นถูกข้ามแทนที่จะถูกข้าม
- ข้อความ
- เพิ่ม
MediaItem.SubtitleConfiguration.timeOffsetUsเพื่อเลื่อนการประทับเวลาของคำบรรยายที่ไซด์โหลดซึ่งสัมพันธ์กับสื่อ คุณเปลี่ยนออฟเซ็ตระหว่างการเล่นด้วยPlayer.replaceMediaItem(int, MediaItem)ได้โดยไม่รบกวนการเล่น (#1976) - SubRip: เพิ่มการรองรับการแทรก
CharsetDetectorลงในDefaultSubtitleParserFactoryเพื่อตรวจหาการเข้ารหัสอักขระของคำบรรยาย SubRip แบบสแตนด์อโลนที่ไม่มีเครื่องหมายลำดับไบต์ (#2247)
- เพิ่ม
- ผลกระทบ
- ใช้
SoundSeparationAudioProcessorสำหรับการแยกแหล่งที่มาของเสียงโดยใช้โมดูล StudioSound GMSCore
- ใช้
- Muxer:
- แก้ไขการเขียนกล่อง
dOpsสำหรับ Opus ในMp4MuxerและFragmentedMp4Muxerซึ่งมีการเขียนPreSkip,InputSampleRateและOutputGainในรูปแบบ Little-Endian แทน Big-Endian (#3431) - รองรับการเขียนระดับความสูง GPS ใน
Mp4LocationDataโดยใช้Mp4Muxer - เพิ่ม
Muxer.Factory.create(ParcelFileDescriptor)เพื่ออนุญาตให้มัลติเพล็กซ์ไปยังParcelFileDescriptorโดยตรง - เขียนกล่อง
tfdt(Track Fragment Base Media Decode Time) โดยค่าเริ่มต้นในกล่องtrafของไฟล์ MP4 ที่แยกส่วนเพื่อระบุการประทับเวลาการถอดรหัสสื่อ - รองรับการเขียนกล่องคอนเทนเนอร์ E-AC-3 และ E-AC-3 JOC (Dolby Atmos)
dec3ในMp4Muxer - เพิ่มการรองรับรูปแบบ WebM ไปยัง
MediaMuxerCompat - เขียนกล่อง
mfra(Movie Fragment Random Access) ที่ส่วนท้ายของไฟล์ MP4 ที่แยกส่วนเพื่ออนุญาตให้กรอในFragmentedMp4Extractorโดยใช้FLAG_READ_MFRA_FOR_SEEK_MAP - แก้ไขข้อขัดข้องใน
Mp4WriterและFragmentedMp4Writerเมื่อเขียนตัวอย่าง EOS ก่อนที่จะเขียนตัวอย่างอื่นๆ - แก้ไขการปฏิบัติตามข้อกำหนดของคอนเทนเนอร์เมื่อมัลติเพล็กซ์เนื้อหา Dolby เป็นไฟล์ MP4 หรือ Fragmented MP4 โดยโฆษณาแบรนด์ที่เข้ากันได้กับ
dby1ในส่วนหัวของคอนเทนเนอร์ (#3369) - รองรับแทร็กเสียง PCM แบบ 32 บิตโฟลตใน
Mp4MuxerและFragmentedMp4Muxer(#3389) - ปฏิเสธโปรไฟล์ Dolby Vision ที่ไม่รองรับใน
Mp4MuxerและFragmentedMp4Muxerเมื่อเพิ่มแทร็ก - รองรับแทร็กเสียง PCM จำนวนเต็ม 24 บิตและ 32 บิตใน
Mp4MuxerและFragmentedMp4Muxer
- แก้ไขการเขียนกล่อง
- ส่วนขยาย IMA:
- ส่งต่อเหตุการณ์การหยุดชั่วคราวและการเล่นต่อของโปรแกรมเล่นไปยัง IMA SDK ใน
ImaServerSideAdInsertionMediaSource
- ส่งต่อเหตุการณ์การหยุดชั่วคราวและการเล่นต่อของโปรแกรมเล่นไปยัง IMA SDK ใน
- เซสชัน:
- เพิ่ม
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIและMediaConstants.EXTRAS_KEY_CATEGORIESเพื่อป้อนข้อมูลเมตาของเพลย์ลิสต์และรายการจากข้อมูลเมตาและคำอธิบายเดิม รวมถึงMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEและMediaConstants.EXTRAS_KEY_TTL_SECONDSสำหรับLibraryParams.extrasคำแนะนำ - แก้ไขข้อขัดข้องของ
SecurityExceptionเมื่อสร้างหรือปล่อยMediaSessionในอุปกรณ์ที่บังคับใช้ขีดจำกัดPendingIntentที่เข้มงวด - แก้ไขปัญหาที่
MediaSession.getControllerForCurrentRequest()แสดงผลnullระหว่างคำขอเล่นใน Android 12 (API 31 และ 32) เมื่อMediaSessionServiceยังไม่ได้อยู่ในเบื้องหน้า - แก้ไขข้อขัดข้องของ
IllegalArgumentExceptionเมื่อMediaControllerเชื่อมต่อกับเซสชันเดิมที่รายงานระดับเสียงสูงสุดเป็นค่าลบ - แก้ไขปัญหาที่การเรียก
MediaController.setMediaItemหรือsetMediaItemsตามด้วยplay()ในMediaSessionCompatเวอร์ชันเดิมที่หยุดชั่วคราวอาจส่ง CallbackonPrepareFrom*ที่ไม่รองรับแทนonPlayFrom*หรือส่งonPlay()โดยไม่เริ่มต้นรายการสื่อที่ขออีกครั้ง - แก้ไข
NullPointerExceptionในMediaBrowserเดิมเมื่อได้รับการตอบกลับคำสั่งที่กำหนดเอง (#3432) - แก้ไขข้อขัดข้องของ
IllegalArgumentExceptionเมื่อได้รับข้อมูลเมตาเดิมที่มีคีย์ซ้ำกันในBundleที่เกี่ยวข้อง - รวมการเรียก
MediaControllerCompat.TransportControlsขาออกที่เกิดขึ้นภายในรอบLooperเดียวกันเมื่อควบคุมMediaSessionCompatเดิม (เช่น การเรียกsetMediaItem,prepareและplayพร้อมกันจะส่ง CallbackonPlayFrom*รายการเดียว)
- เพิ่ม
- UI:
- แก้ไขตำแหน่งเครื่องหมายวรรคตอนของคำบรรยายแบบ RTL และการคงช่วงสแปนเมื่อเปิดใช้การตัดข้อความแบบ 2 ทิศทาง (#3454, #3455)
- เพิ่มคลาส
TrackSelectionStateและTrackSelectionParametersStateและฟังก์ชัน Remember สถานะ Composable ที่เกี่ยวข้องลงในโมดูลmedia3-ui-compose - เปิดตัว
PresentationState.videoAspectRatioและทำให้Modifier.resizeWithContentScaleใช้aspectRatio: Float?แทนsourceSizeDp: Size? - เพิ่มคลาส
CuesStateและ ComposablerememberCuesStateลงในโมดูลmedia3-ui-composeเพื่อฟังคิวปัจจุบันของเพลเยอร์ - เพิ่มการรองรับโหมดการสครับไปยัง
ProgressSliderหากอิงตามExoPlayerหรือCompositionPlayer - เพิ่มการรองรับ
showArtworkไปยังPresentationStateและใช้เพื่อจับเวลาการแสดงผลของ Composableartworkที่ไม่บังคับซึ่งระบุไว้ในContentFrameและPlayerเพิ่ม ComposableArtworkเพื่อใช้เป็นค่าเริ่มต้นสำหรับช่องartwork - เพิ่มช่องใหม่ลงใน
PlayPauseButtonState(showBuffering,showRetry,showReplay) และใช้ช่องเหล่านั้นในPlayPauseButtonเพื่อแสดงผลไอคอนเพิ่มเติมและสัญญาณบอกสถานะการบัฟเฟอร์ - เพิ่มคลาส
PlaybackStateเพื่ออนุญาตให้สังเกตสถานะการเล่นที่กำหนดเอง และเปิดตัวBufferingIndicatorเป็นคอมโพเนนต์ที่ไม่ขึ้นอยู่กับปุ่ม - แก้ไขปัญหาที่
PlayerViewและPlayerControlViewแสดงตัวทำเครื่องหมายโฆษณาที่ขอบเขตของช่วงเวลาสำหรับตัวยึดตำแหน่งโฆษณาตอนท้ายแบบสดในไลฟ์สดแบบหลายช่วงเวลา - ช่อง Composable ของ
Player,ContentFrame,PlayerDefaultsและMiniControllerจะไม่ได้รับระดับการเข้าถึงเพลเยอร์หรือตัวควบคุมเป็นพารามิเตอร์อีกต่อไป ให้บันทึกจากขอบเขตการเรียกแทน (เช่นtopControlsเป็น@Composable BoxScope.() -> Unit) การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบใน API ที่ไม่เสถียร - เพิ่มพารามิเตอร์
alignmentลงในContentFrame,PlayerและModifier.resizeWithContentScaleเพื่อจัดตำแหน่งเนื้อหาที่ปรับขนาดภายในคอนเทนเนอร์ และตัดเนื้อหาของContentFrameให้อยู่ภายในขอบเขต เพื่อให้วิดีโอที่ปรับขนาดด้วยContentScale.Cropไม่แสดงผลนอกขอบเขตอีกต่อไป - เพิ่มการรองรับ UI ของไลฟ์สดไปยัง
ProgressSlider,ProgressStateWithTickCountและProgressStateWithTickIntervalโดย แสดงisLiveและliveOffsetMsเพิ่มLiveButtonComposable ลงในmedia3-ui-compose-material3(#2213)
- ส่วนขยาย Ktor:
- แก้ไขปัญหาที่
KtorDataSourceอาจถือว่าการเชื่อมต่อที่ล้มเหลวระหว่างสตรีมเป็นจุดสิ้นสุดของอินพุตแทนที่จะแสดงHttpDataSourceException(#3460)
- แก้ไขปัญหาที่
- ส่วนขยาย HLS:
- แยกวิเคราะห์
VIDEO-RANGE(PQและHLG) ในEXT-X-STREAM-INFและEXT-X-I-FRAME-STREAM-INFเป็นFormat.colorInfo(#3441) - แก้ไข
NullPointerExceptionเมื่อแยกวิเคราะห์กลุ่มการเริ่มต้นEXT-X-MAPของ MPEG-TS ที่มีตัวอย่างสื่อ PES (#3456) - แก้ไขการถดถอยที่
Format.idและFormat.metadataเป็นnullสำหรับแทร็ก HLS ที่เปิดเผย (#3402) - ตัดโฆษณาในรายการชิ้นงานให้เหลือ
X-PLAYOUT-LIMITและข้ามโฆษณาที่เกินขีดจำกัดทั้งหมด และตั้งค่าออฟเซ็ตการกลับมาเล่นเนื้อหาต่อเป็น 0 โดยค่าเริ่มต้นเมื่อโฆษณาคั่นระหว่างหน้าละเว้นX-RESUME-OFFSETและไม่ทราบระยะเวลาของโฆษณา แม้ว่าจะตั้งค่าX-PLAYOUT-LIMITไว้ก็ตาม - แก้ไขปัญหาที่การแก้ไขโฆษณาคั่นระหว่างหน้า
X-ASSET-LISTเขียนทับการมีส่วนร่วมของออฟเซ็ตการกลับมาเล่นเนื้อหาต่อของโฆษณาคั่นระหว่างหน้าอื่นๆ ในกลุ่มโฆษณาเดียวกัน
- แยกวิเคราะห์
- ส่วนขยาย DASH
- รองรับการแยกวิเคราะห์เหตุการณ์การแทรก MPD ทางเลือก (
urn:mpeg:dash:event:alternativeMPD:insert:2025) และการแทนที่ (urn:mpeg:dash:event:alternativeMPD:replace:2025) ในDashManifestParserและแสดงเป็นอินสแตนซ์AlternativeMpdEventในPeriod.alternativeMpdEventsการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบสำหรับแอปที่เป็นคลาสย่อยของDashManifestParser: ตอนนี้DashManifestParser.buildPeriodจะใช้พารามิเตอร์List<AlternativeMpdEvent>เพิ่มเติม และระบบได้นำโอเวอร์โหลดก่อนหน้านี้ออกแล้ว แอปที่ลบล้างDashManifestParser.parseEventStream(XmlPullParser)ต้องลบล้างDashManifestParser.parseEventStream(XmlPullParser, String)แทน เนื่องจากเมธอดแรกเลิกใช้งานแล้วและจะทำให้เป็นแบบส่วนตัวในรุ่นต่อๆ ไป - แยกวิเคราะห์ข้อมูลสี CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientsและVideoFullRangeFlag) จากข้อบ่งชี้EssentialPropertyและSupplementalPropertyเป็นFormat.colorInfo(#3426) - รองรับรายการค่า
@idที่คั่นด้วยช่องว่างในแอตทริบิวต์@valueของข้อบ่งชี้ (http://dashif.org/guidelines/trickmode) โหมดทริก (#3315) - รองรับการแยกวิเคราะห์
<ProducerReferenceTime>ในDashManifestParser, แสดงในAdaptationSet.producerReferenceTimesและใช้เพื่อสร้างTimeline.Window.presentationStartTimeMsและTimeline.Window.windowStartTimeMsสำหรับสตรีม VOD - เพิ่มการรองรับการควบคุมเนื้อหา DASH (#1689)
- แก้ไข
NullPointerExceptionที่อาจเกิดขึ้นเมื่อแยกวิเคราะห์ไฟล์ Manifest ของ DASH ที่มีแอตทริบิวต์ขาดหายไปในองค์ประกอบ<UTCTiming>(#3436)
- รองรับการแยกวิเคราะห์เหตุการณ์การแทรก MPD ทางเลือก (
- ส่วนขยาย RTSP:
- แก้ไขข้อขัดข้องของ
IllegalStateExceptionที่เกิดขึ้นเมื่อประมวลผลการตอบสนองของเครือข่ายที่ล่าช้าหลังจากปิดไคลเอ็นต์ RTSP - แก้ไขปัญหาที่การลากแถบเวลาอย่างรวดเร็วอาจทริกเกอร์กลไกการใช้โปรโตคอล TCP สำรองอย่างไม่ถูกต้อง
- แก้ไขข้อขัดข้องของ
IllegalStateExceptionที่อาจเกิดขึ้นเมื่อประมวลผลการตอบกลับเครือข่ายที่ล่าช้าหลังจากไคลเอ็นต์ RTSP รีเซ็ตสถานะระหว่างการเลือกแทร็กใหม่ การปิดเซสชัน หรือการเปลี่ยนเส้นทาง URI - แก้ไขปัญหาที่การกรอวิดีโออีกครั้งก่อนที่การเล่นจะเริ่มใหม่ทำให้
IllegalStateExceptionขัดข้อง - แก้ไขปัญหาที่การกรอกลับขณะที่การกรอวิดีโอยังรอดำเนินการอยู่ทำให้เสียงขาดหายและวิดีโอหยุดเล่นชั่วคราว
- แก้ไขปัญหาที่หน่วยการเข้าถึงคีย์เฟรม H.264 และ H.265 ที่ลงท้ายด้วยแพ็กเก็ตการรวมหรือแพ็กเก็ตที่ไม่ใช่ IDR ไม่ได้รับการแจ้งว่าเป็นคีย์เฟรม ซึ่งทำให้การเล่นค้างอยู่ที่การบัฟเฟอร์ (#3434)
- แก้ไขข้อขัดข้องของ
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ):
- ส่วนขยาย Opus: แก้ไขข้อขัดข้องของ JNI เมื่อถอดรหัสข้อมูล Opus ที่ไม่ถูกต้อง
- ส่วนขยาย Opus: แก้ไขการละเว้นระยะห่างจากขอบที่ถูกทิ้งเมื่อการข้ามล่วงหน้าและระยะห่างจากขอบที่ถูกทิ้งอยู่ในแพ็กเก็ตเดียวกัน (#2576)
- ส่วนขยาย Cast
- แนะนำ
SessionAvailabilityListener.SessionUnavailableReasonเพื่อแสดงเหตุผลที่เซสชันไม่พร้อมใช้งาน และระบุเมธอดที่โอเวอร์โหลดสำหรับSessionAvailabilityListener.onCastSessionUnavailableเพื่อแสดงเหตุผลดังกล่าว - แก้ไขปัญหาที่การเล่นกลับมาทำงานในเครื่องโดยไม่คาดคิดหลังจากหยุดเซสชันการแคสต์
- บันทึกข้อผิดพลาดเมื่อการดำเนินการ
RemoteMediaClient(เช่น เล่น หยุดชั่วคราว เปลี่ยนความเร็ว โหมดเล่นซ้ำ ระดับเสียง ปิดเสียง หรือเลือกแทร็ก) ไม่สำเร็จในRemoteCastPlayer(#3373) - แก้ไข
ArrayIndexOutOfBoundsExceptionในRemoteCastPlayerเมื่อคิวตัวรับสัญญาณ Cast เปลี่ยนแปลงหรือลดลงขณะที่การดำเนินการกรอวิดีโอรอดำเนินการอยู่ (#3372) - แก้ไขปัญหาเกี่ยวกับตัวรับ Cast เริ่มต้นที่ไทม์ไลน์แสดงเฉพาะรายการสื่อที่อยู่ติดกับรายการที่ใช้งานอยู่เท่านั้น แทนที่จะแสดงทั้งเพลย์ลิสต์ (#3129)
- อัปเดตไทม์ไลน์และตำแหน่งการเล่นทันทีเมื่อแก้ไขเพลย์ลิสต์ (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) หรือกรอในRemoteCastPlayerและจัดคิวการดำเนินการเพลย์ลิสต์ที่ต่อเนื่องกันเพื่อให้ทำงานตามลำดับได้อย่างน่าเชื่อถือ (#2639, #3272) - แก้ไขปัญหาที่การเรียก
addMediaItemsในคิวว่างในRemoteCastPlayerโหลดรายการสื่อในตัวรับสัญญาณ Cast ไม่สำเร็จ (#2402) - แก้ไขปัญหาใน
RemoteCastPlayerที่เมื่อถึงจุดสิ้นสุดของคิวตัวรับสัญญาณ Cast ระบบจะล้างไทม์ไลน์แทนที่จะเก็บเพลย์ลิสต์ไว้ - แก้ไขปัญหาที่ไม่มีการโอนหรือใช้
playWhenReady,repeatModeและplaybackParametersเมื่อตั้งค่าในRemoteCastPlayerก่อนโหลดรายการสื่อ (เช่น ระหว่างการโอนการเล่นจากอุปกรณ์ในเครื่องไปยังอุปกรณ์ระยะไกลในCastPlayer) (#889)
- แนะนำ
- แอปสาธิต:
- เพิ่มการรองรับรายการสื่อที่ได้รับการคุ้มครองด้วย DRM และสตรีมตัวอย่าง HLS เพิ่มเติมลงในแคตตาล็อกแอปเดโมเซสชัน
- กำหนดค่า
RemoteCastPlayerด้วยCastTrackSelectorในแอปเดโมเซสชันเพื่อเปิดใช้การเลือกคำบรรยายและแทร็กเสียงขณะแคสต์
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
DashUtil.buildDataSpec(Representation, RangedUri, int)และDashUtil.buildDataSpec(Representation, String, RangedUri, int)ออก โปรดใช้DashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>)แทน
- นำ
- สร้าง
- เพิ่ม Gradle
minSdkเป็น 24
- เพิ่ม Gradle
เวอร์ชัน 1.11.0
1.11.1
10 กันยายน 2569
- ExoPlayer:
- ย้ายแฟล็กเพื่อเปิด/ปิดใช้ข้อมูลเมตา HAGC สำหรับสื่อแบบโปรเกรสซีฟจาก
MediaSource.Factoryเป็นExtractorsFactoryระบบจะนำวิธีการsetExperimentalEnableHagcPlaybackก่อนหน้าออกและแทนที่ด้วยExtractorsFactory.setParseHagcMetadataนอกจากนี้ยังช่วยแก้ปัญหาที่การปิดใช้ไม่ทำงานสำหรับคอนเทนเนอร์ Matroska/WebM ด้วย - แก้ไขปัญหาการหยุดเล่นชั่วคราวที่เกิดขึ้นเมื่อเตรียมการแสดงผลรองที่ไม่ใช่การเปลี่ยนผ่านล่วงหน้า
- แก้ไขปัญหาการอุ่นเครื่องล่วงหน้าซึ่งควรส่งคืน
Surfaceไปยังโปรแกรมแสดงผลหลักเมื่อการกรอรีเซ็ตและปิดใช้โปรแกรมแสดงผลทั้ง 2 รายการ - แก้ไข
ArrayIndexOutOfBoundsExceptionเมื่อการรีเฟรชไทม์ไลน์แบบสดเลื่อนตำแหน่งเริ่มต้นผ่านโฆษณาที่แทรกฝั่งเซิร์ฟเวอร์ซึ่งกำลังเล่นอยู่ (#3348) - แก้ไขปัญหาโหมดการสครับที่เฟรมวิดีโอเก่าอาจแสดงขึ้นมาสั้นๆ เมื่อกรอวิดีโอโดยเปิดใช้
ScrubbingModeParameters.allowSkippingMediaCodecFlush
- ย้ายแฟล็กเพื่อเปิด/ปิดใช้ข้อมูลเมตา HAGC สำหรับสื่อแบบโปรเกรสซีฟจาก
- เครื่องสกัดน้ำผลไม้
- Matroska: แก้ไขปัญหาที่แทร็กซึ่งวางไว้หลังคลัสเตอร์ไม่ส่งผลให้เกิดไทม์ไลน์ที่ค้นหาได้ (#3377)
- เสียง:
- แก้ไขการคำนวณขนาดบัฟเฟอร์ใน
SilenceSkippingAudioProcessorเพื่อไม่ให้ขนาดเฟรมลดระยะเวลาที่ไม่มีเสียงขั้นต่ำลงอย่างไม่ถูกต้อง (#3271) - แก้ไขการจัดการ PCM แบบ 8 บิตใน
PcmAudioUtilเพื่อจัดการตัวอย่างเป็นแบบไม่มีเครื่องหมายตามที่ Android กำหนด (#3271) - แก้ไขปัญหาการออฟโหลดที่การเล่นอาจหยุดชะงักระหว่างช่วงก่อนแสดงโฆษณาหรือการเปลี่ยนแบบไม่มีช่องว่างเนื่องจากขนาดบัฟเฟอร์ฮาร์ดแวร์ที่จำกัด
- แก้ไขข้อบกพร่องใน
DefaultAudioSinkที่จำนวนการเผยแพร่ไม่ลดลงเมื่อเทรดการเล่นไม่ทำงานอีกต่อไป (#3338)
- แก้ไขการคำนวณขนาดบัฟเฟอร์ใน
- เซสชัน:
- ส่วนขยาย HLS:
- ส่วนขยาย DASH
- แก้ไขการคำนวณการประทับเวลาตัวอย่างที่ไม่ถูกต้องสำหรับแทร็กรูปภาพที่มี
presentationTimeOffset(#3334)
- แก้ไขการคำนวณการประทับเวลาตัวอย่างที่ไม่ถูกต้องสำหรับแทร็กรูปภาพที่มี
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ):
- Opus: แก้ไขความเสียหายของหน่วยความจำเมื่อมีการเริ่มต้นอินสแตนซ์
OpusDecoderหลายรายการพร้อมกัน - MPEG-H: แก้ไขหน่วยความจำรั่วไหล การตัดอักขระที่ไม่ใช่ ASCII และการขัดข้องของระบบที่อาจเกิดขึ้นในสภาวะหน่วยความจำเหลือน้อยเมื่อส่งคำสั่งไปยัง
MpeghUiManager(#3365)
- Opus: แก้ไขความเสียหายของหน่วยความจำเมื่อมีการเริ่มต้นอินสแตนซ์
เวอร์ชัน 1.11.0
5 สิงหาคม 2026
- คลังทั่วไป:
- เพิ่ม
Format.channelMaskเพื่อแสดงมาสก์ช่องเสียงอย่างชัดเจน และเพิ่มโอเวอร์โหลดUtil.getAudioTrackChannelConfig(Format)ใหม่เพื่อแก้ไขอย่างปลอดภัย - อัปเกรด Kotlin จาก 2.0.20 เป็น 2.2.0
- เพิ่ม
- ExoPlayer:
- แก้ไขข้อบกพร่องที่เกิดขึ้นพร้อมกันซึ่งขึ้นอยู่กับเวลา ซึ่งอาจทำให้เกิด
IllegalStateExceptionหรือIndexOutOfBoundsExceptionใน ExoPlayer - ผ่อนคลายการตรวจสอบจำนวนกลุ่มโฆษณาใน
AdsMediaSourceเพื่ออนุญาตให้จำนวนกลุ่มโฆษณาลดลงเมื่อประมวลผลกลุ่มโฆษณาเสร็จสมบูรณ์ (hasUnplayedAds()คือfalse) ซึ่งรองรับการปรับขนาดกลุ่มโฆษณาแบบไดนามิกระหว่างเวิร์กโฟลว์การรีเซ็ต - เพิ่ม
getFlags()และFLAG_STRICT_DURATIONลงในSampleStreamเพื่ออนุญาตให้สตรีมรายงานแฟล็ก และอัปเดตโปรแกรมแสดงผลเพื่อตรวจสอบแฟล็กเหล่านี้แบบไดนามิก - ใช้เครื่องมือประมาณอัตราเฟรมใน
MediaCodecVideoRendererและใช้รูปแบบเอาต์พุตของตัวแปลงรหัสในMediaCodecAudioRendererเพื่อคำนวณอัตราการทำงานของตัวแปลงรหัสเมื่อรูปแบบสตรีมไม่มีค่าที่ถูกต้อง และหลีกเลี่ยงการรีเซ็ตตัวแปลงรหัสโดยไม่จำเป็น - นำการตัดเนื้อหาสำหรับโฆษณาที่แทรกฝั่งไคลเอ็นต์ในเพลเยอร์หลักออก แต่
AdsMediaSourceจะดูแลตรรกะการตัดคลิปแทน แหล่งที่มาของโฆษณาที่แทรกฝั่งไคลเอ็นต์ที่กำหนดเองต้องได้รับการอัปเดตเพื่อใช้การตัดคลิปเนื้อหาภายใน - ทำเครื่องหมายแทร็กที่มีโปรไฟล์หรือระดับตัวแปลงรหัสที่ถูกต้องแต่ไม่รู้จักเป็น
supported=NO_EXCEEDS_CAPABILITIESแทนsupported=YES(ซึ่งเป็นวิธีทำเครื่องหมายแทร็กที่ไม่มีข้อมูลโปรไฟล์หรือระดับ หรือมีข้อมูลที่ไม่ถูกต้อง) ซึ่งจะช่วยให้มั่นใจได้ว่าแทร็กเหล่านี้ (ซึ่งอุปกรณ์ไม่น่าจะรองรับ) จะไม่ถูกเลือกเมื่อมีทางเลือกอื่นที่รองรับได้ดีกว่า - เพิ่ม
DefaultPreloadManager.SimpleRankingDataComparatorซึ่งเป็นRankingDataComparatorที่เปรียบเทียบอันดับของรายการสื่อตามระยะห่างจากดัชนีของรายการสื่อที่กำลังเล่นอยู่ แอปสามารถลบล้างเมธอดcompare(Integer, Integer)ได้หากต้องการตรรกะการเปรียบเทียบที่ปรับแต่งอย่างละเอียดยิ่งขึ้น คุณสามารถแทรกSimpleRankingDataComparatorที่กำหนดเองผ่านตัวสร้างใหม่ของDefaultPreloadManager.Builderได้ - ลดความเสี่ยงของ OOM ใน
DefaultLoadControl.prioritizeTimeOverSizeThresholdsโดยเปลี่ยนกลับไปใช้ขีดจำกัดขนาดไบต์ของบัฟเฟอร์หากหน่วยความจำฮีปที่ใช้ได้ดูเหมือนจะเหลือน้อย - ปรับการจัดการภาพนิ่งเมื่อไม่ได้ตั้งค่า
MediaItem.imageDurationUs: ตอนนี้ภาพนิ่ง JPEG และ HEIC จะ "เล่น" โดยมีระยะเวลาเริ่มต้นที่สั้นมาก (เช่นเดียวกับลักษณะการทำงานของ PNG และรูปภาพอื่นๆ ก่อนหน้านี้) - เพิ่ม
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)เพื่อให้BandwidthMeterตั้งฉากกับMediaSourceอย่างไรก็ตาม ระบบจะยังคงเรียกใช้เมธอดที่เลิกใช้งานแล้วซึ่งมีการติดตั้งใช้งานที่กำหนดเองโดยค่าเริ่มต้น เราขอแนะนำให้ติดตั้งใช้งานเมธอดใหม่และใช้BandwidthMeter.getTransferListener()เพื่อให้มีความเท่าเทียมกับเมธอดเดิม - ใน
DefaultBandwidthMeterให้เพิ่มการรองรับInitialBitrateSupplierที่กำหนดเอง ซึ่งจะช่วยให้แอปสามารถระบุตรรกะของตนเองในการกำหนดค่าประมาณอัตราบิตเริ่มต้น ซึ่งจะใช้ในการสร้างDefaultBandwidthMeterและการเปลี่ยนแปลงประเภทเครือข่าย คุณตั้งค่าซัพพลายเออร์ได้ผ่านDefaultBandwidthMeter.Builder.setInitialBitrateSupplier() - เปิดใช้การจัดกำหนดการแบบไดนามิกโดยค่าเริ่มต้น ลูปการทำงานของการเล่น
ExoPlayerจะทำงานแบบไดนามิก ไม่ใช่ตามช่วงเวลาคงที่ - นำการรีเซ็ตที่ไม่จำเป็นออก ซึ่งอาจเกิดขึ้นเมื่อรวมแทร็กที่มีตัวอย่างโฆษณาก่อนแสดงวิดีโอเข้ากับการเล่นที่ใช้งานอยู่
- ใน
DefaultBandwidthMeterให้เพิ่มประสิทธิภาพgetInitialBitrateCountryGroupAssignmentเพื่อแสดงผลการกำหนดกลุ่มประเทศที่รวมไว้ในจำนวนเต็ม 32 บิตแทนอาร์เรย์ ซึ่งจะช่วยลดขนาดโค้ดและหลีกเลี่ยงการจัดสรร - แก้ไขข้อผิดพลาดในการเริ่มต้น
AudioTrackในอุปกรณ์บางเครื่องโดยตรวจสอบว่าตรรกะการลองใหม่จะพยายามใช้ขนาดบัฟเฟอร์อย่างน้อย 1 วินาทีเสมอ หากการลองใหม่อื่นๆ (โดยลดขนาดบัฟเฟอร์ลงครึ่งหนึ่ง) ไม่สำเร็จ (#3207) - แก้ไขปัญหาเกี่ยวกับตัวแปลงรหัสในอุปกรณ์บางเครื่องที่ตัวแปลงรหัสกลืนตัวอย่างทั้งหมดหากมีการล้างข้อมูลก่อนหน้านี้ก่อนที่จะได้รับบัฟเฟอร์อินพุต
- เพิ่ม
ExoPlayer.Builder.enablePerStreamMediaProgression()เวอร์ชันทดลองเพื่ออนุญาตให้ประมวลผลสื่อขั้นสูงแบบสตรีมต่อสตรีม ซึ่งจะช่วยลดเวลาในการตอบสนองเมื่อเริ่มเล่นระหว่างรายการในเพลย์ลิสต์และป้องกันไม่ให้การเล่น "ค้าง" เมื่อเล่นเนื้อหาที่สั้นมาก (#3122) - แก้ไขภาวะแข่งขันที่เกี่ยวข้องกับการใช้รหัสเซสชันเสียงซึ่งจะใช้รหัสเซสชันเสียงเริ่มต้นที่สร้างโดยอัตโนมัติโดย
ExoPlayerแทนค่าที่ตั้งไว้โดยsetAudioSessionId(#3241) - เพิ่มการรองรับการเล่นข้อมูลเมตาที่กำหนดเวลาไว้ของ HAGC (ST 2094-50) เวอร์ชันทดลองสำหรับสื่อแบบโปรเกรสซีฟ (เช่น MP4, Matroska) เพลเยอร์จะผสานแทร็กข้อมูลเมตา HAGC กับแทร็กวิดีโอที่เกี่ยวข้องโดยอัตโนมัติ และส่งข้อมูลเมตาแบบนอกย่านความถี่ไปยังตัวถอดรหัสในอุปกรณ์ API 37 ขึ้นไป คุณปิดใช้ลักษณะการทำงานนี้ได้ผ่าน
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false) - เพิ่ม
Format.selectionPriorityที่แสดงถึงค่ากำหนดที่เกี่ยวข้องของFormatในการเลือกแทร็ก (#3236) - แก้ไขปัญหาที่อาจเกิดขึ้นในโหมดสครับ ซึ่งการสครับอาจหยุดชะงักเมื่อกรอไปยัง "จุดสิ้นสุดของสตรีม"
- แก้ไขข้อบกพร่องที่เกิดขึ้นพร้อมกันซึ่งขึ้นอยู่กับเวลา ซึ่งอาจทำให้เกิด
- CompositionPlayer:
- แก้ไขปัญหาที่ไม่มีการเผยแพร่อินสแตนซ์
TrackSelector
- แก้ไขปัญหาที่ไม่มีการเผยแพร่อินสแตนซ์
- Transformer:
- แก้ไขปัญหาที่อาจมีการรายงาน
ExportResult.fileSizeBytesมากเกินไป
- แก้ไขปัญหาที่อาจมีการรายงาน
- การเลือกแทร็ก
- แสดง
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORและเพิ่มAdaptiveTrackSelection.Factory.setTrackFormatComparatorเพื่ออนุญาตการจัดลำดับรูปแบบที่กำหนดเองและลำดับความสำคัญในการเลือก ABR นอกเหนือจากการจัดลำดับตามอัตราบิตเท่านั้น - แก้ไขปัญหาการเกิดขึ้นพร้อมกันที่ขึ้นอยู่กับเวลา ซึ่งการอัปเดตพารามิเตอร์การเลือกแทร็กตามลำดับอย่างรวดเร็วอาจส่งผลให้การอัปเดตบางรายการสูญหายหรือถูกเขียนทับ
- แสดง
- เครื่องสกัดน้ำผลไม้
- MP4, MP3 และ FLAC: เพิ่ม
FLAG_DISABLE_ARTWORK_METADATAเพื่ออนุญาตให้ทิ้งรูปภาพที่แนบมาและข้อมูลเมตาของภาพหน้าปกในระหว่างการแยกวิเคราะห์คอนเทนเนอร์เพื่อลดการใช้หน่วยความจำรันไทม์ (#2077) นอกจากนี้ คุณยังเปิดใช้ฟีเจอร์นี้จากส่วนกลางผ่านDefaultExtractorsFactory.setDisableArtworkMetadataได้ด้วย - MP4: เพิ่มการรองรับการแยกแทร็กข้อมูลเมตาแบบกำหนดเวลา ITU-T T.35 (
it35) - MP4: เพิ่มการรองรับการดึงข้อมูลเมตาของบท (ทั้งรูปแบบ Nero และ QuickTime) หากมีทั้ง 2 อย่าง ระบบจะเลือกใช้บทของ QuickTime ข้อมูลบทที่แยกออกมาจะแสดงเป็นรายการ
ChapterภายในMetadataของแทร็ก ซึ่งช่วยให้ไปยังส่วนต่างๆ ของบทในไฟล์ MP4, M4A และ M4B (เช่น หนังสือเสียงและพอดแคสต์) ได้โดยตรง (#2803) - WAV, Matroska และ MP4: เพิ่มการรองรับเสียง PCM แบบจุดลอยตัว 64 บิต (#3090)
- Matroska: ใช้ข้อมูลเมตาบิตสตรีมของตัวแปลงรหัสเพื่อสร้าง
ColorInfoที่ถูกต้อง - MP4: เพิ่มการรองรับการกรอในไฟล์ MP4 ที่มีการกระจาย Fragment โดยใช้กล่อง
mfraเมื่อไม่มีกล่องsidxหากต้องการเปิดใช้ ให้ระบุFLAG_READ_MFRA_FOR_SEEK_MAPไปยังFragmentedMp4Extractorซึ่งตอนนี้ดำเนินการโดยค่าเริ่มต้นในDefaultExtractorsFactory(#3088) - ละเว้นข้อมูล
av1Cที่มีเวอร์ชันที่ไม่รองรับ - MP4: เพิ่มการรองรับ PCM จุดลอยตัวแบบ Big-Endian ในกล่อง
fpcm - Matroska: แยกวิเคราะห์ข้อมูลบทเป็นรายการ
ChapterในMetadataของแทร็ก - MPEG-TS: ปรับปรุงการดึงข้อมูลสตรีม DTS-HD และ DTS Express โดยการรวมสตรีมย่อย Core และ Extension เข้าเป็นตัวอย่างเดียว ซึ่งจะช่วยแก้ไขปัญหาการเล่นที่ก่อนหน้านี้ทั้ง 2 สตรีมแสดงผลเป็นตัวอย่างแยกกัน (#3147)
- MP4: ป้องกันการวนซ้ำไม่สิ้นสุดและการอ่านนอกขอบเขตเมื่อแยกวิเคราะห์รายการแท็กข้อมูลเมตา
ilstที่ว่างเปล่า (#3191) - MPEG-TS: ตรวจสอบว่ามีการแสดงผลเฟรมสุดท้ายสำหรับสตรีมที่แพ็กเก็ต PES สุดท้ายมีความยาวที่ทราบ (#3206)
- MP3: แก้ไขการรายงานอัตราบิตสำหรับไฟล์ที่มีส่วนหัว Xing และ VBRI
- Matroska: จัดการแทร็กที่กำหนดไว้ในคลัสเตอร์สุดท้าย (#3250)
- Matroska: เพิ่มการรองรับ ALAC (#3268)
- MP4: อนุญาตให้ใช้กล่อง
sgpdที่มีความยาวแปรผันในไฟล์ MP4 ที่มีการแบ่งส่วน (#3243) - AVI: แก้ไขปัญหาที่การเล่นไฟล์ที่ไม่มีแฟล็กคีย์เฟรมในแทร็กเสียงทำให้เสียงหายไปและเกิดข้อผิดพลาด
OutOfMemoryError - MP3: ใช้ระยะเวลาที่รับรู้แบบไม่มีช่องว่างจากส่วนหัว Xing/Info (#3183)
- MP3: ปรับข้อมูลเมตาการหน่วงเวลาและการเติมของโปรแกรมเปลี่ยนไฟล์ LAME/Xing ให้ตรงกับการตัดแต่ง PCM ที่ถอดรหัสแล้ว (#3200)
- MP4, MP3 และ FLAC: เพิ่ม
- เสียง:
- เพิ่มระยะเวลาผ่อนผัน 100 มิลลิวินาทีในโปรแกรมแสดงผลเสียงของ ExoPlayer เมื่อเปลี่ยนจากสถานะพร้อมเป็นไม่พร้อม เพื่อลดการเกิดบัฟเฟอร์อันเดอร์รันชั่วคราวและหลีกเลี่ยงสถานะการบัฟเฟอร์ที่ไม่คาดคิดระหว่างการเล่นที่ใช้งานอยู่ (#3210)
- เปลี่ยนตรรกะขนาดบัฟเฟอร์ PCM เริ่มต้นใน
DefaultAudioTrackBufferSizeProviderเพื่อใช้บัฟเฟอร์ 500 มิลลิวินาทีแบบคงที่เพื่อลดการพึ่งพาอุปกรณ์ - อัปเดต
MediaCodecAudioRendererเพื่อดึงข้อมูล channelMask เชิงพื้นที่จากตัวถอดรหัสแพลตฟอร์ม ซึ่งช่วยให้DefaultAudioSinkใช้มาสก์ที่ชัดเจนนี้แทนการอนุมานจากจำนวนช่องทางได้ - แปลงพารามิเตอร์ของ
AudioSink.configureเป็นคลาสข้อมูล ต้องย้ายข้อมูลการลบล้างForwardingAudioSink.configureที่กำหนดเองไปยังซิกเนเจอร์เมธอดใหม่ - เพิ่มการรองรับการรักษาระดับเสียงเมื่อยืดเวลาสตรีมเสียงด้วย
EditedMediaItem.Builder#setSpeed(SpeedParameters) - ปรับปรุง
ToFloatPcmAudioProcessorเพื่อรองรับการแปลง PCM 8 บิต, PCM แบบ Big-Endian 16 บิต และ PCM แบบจุดลอยตัว 64 บิตเป็น PCM แบบจุดลอยตัว 32 บิต (#3090) - เปลี่ยนค่าผลตอบแทนของ
DecoderAudioRenderer.getChannelMappingเป็นImmutableIntArray - แก้ไขข้อบกพร่องที่ทำให้การเล่นค้างเมื่อเล่นเพลย์ลิสต์เสียงแบบไม่มีช่องว่างในโหมดการลดภาระการบีบอัด
- ส่งต่อ
Timelineและ UID ของระยะเวลาไปยังAudioSink.configureและAudioProcessor.StreamMetadataเพื่อให้บริบทของเพลย์ลิสต์แก่ตัวประมวลผลเสียง (#418) - ตั้งค่า
AudioProcessor.StreamMetadata.positionOffsetUsให้ถูกต้องเพื่ออนุญาตการประมวลผลเสียงตามเวลา (#418) - เพิ่มการรองรับ PCM แบบจุดลอยตัว 32 บิตและ 64 บิตแบบ Big Endian
- นำเส้นทางสำรองของ EAC3-JOC ไปยัง EAC3 สำหรับการเล่นบนอุปกรณ์ Google Pixel ออก เนื่องจากตัวถอดรหัส EAC3 มาตรฐานไม่สามารถถอดรหัสสตรีม EAC3-JOC ได้ (#3257)
- วิดีโอ
- แก้ไขตรรกะการเข้าร่วมวิดีโอเพื่อให้นับบัฟเฟอร์ที่ถูกทิ้งระหว่างการเข้าร่วมว่าข้ามไปแทนที่จะถูกทิ้ง
- แก้ไขการตัดสินใจแสดงผลทันทีเมื่อตั้งค่าแพลตฟอร์มใหม่เพื่อหลีกเลี่ยงเฟรมที่หายไปในอุปกรณ์ที่ไม่รองรับแพลตฟอร์มตัวยึดตำแหน่ง
- แก้ไขการประมาณอัตราเฟรมใน
MediaCodecVideoRendererให้แม่นยำยิ่งขึ้นโดยพิจารณาเฟรมที่ถูกข้ามหรือถูกทิ้ง - อนุญาตให้กำหนดค่าเกณฑ์ที่ใช้ในการกำหนดเวลาเฟรมล่วงหน้า ค่าเริ่มต้นคือ 50 มิลลิวินาที แต่คุณสามารถปรับแต่งค่าได้ผ่าน
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold() - แก้ไขข้อบกพร่องใน
VideoFrameReleaseHelperซึ่งการเปลี่ยนแปลงการแสดงผลอาจทริกเกอร์ CallbackChoreographerที่ซ้ำซ้อนและการปลุก CPU มากเกินไปในเทรดหลัก
- ข้อความ
- ข้อมูลเมตา:
- เพิ่มช่อง
MediaMetadata.discSubtitleและแยกวิเคราะห์จากข้อมูล ID3v2.4TSSTและ VorbisDISCSUBTITLE - แยกวิเคราะห์หมายเลขแผ่นดิสก์และจำนวนจากเฟรม ID3
TPOS
- เพิ่มช่อง
- ผลกระทบ
- ล้างสถานะการวาดใหม่ใน
FinalShaderProgramWrapperเมื่อล้างข้อมูลเพื่อป้องกันไม่ให้โปรแกรมเล่นค้างเมื่อกรอวิดีโอ
- ล้างสถานะการวาดใหม่ใน
- Muxer:
- เพิ่มการรองรับการอ้างอิงแทร็ก (กล่อง
tref) ในMp4Muxerผ่าน APIaddTrackReferenceใหม่ ซึ่งจะช่วยสร้างความสัมพันธ์ระหว่างแทร็ก เช่น การลิงก์แทร็กข้อมูลเมตากับแทร็กวิดีโอที่อธิบาย - เพิ่ม
OggMuxerเพื่ออนุญาตให้มัลติเพล็กซ์สตรีมสื่อOPUSหรือVORBISเป็นรูปแบบไฟล์ogg - เพิ่ม
WavMuxerสำหรับการสร้างไฟล์ WAV (รองรับ PCM จำนวนเต็มและจุดลอยตัว) - เพิ่ม
setAttemptStreamableOutputEnabledลงในInAppMp4Muxer.Factoryเพื่ออนุญาตให้เขียนไฟล์ขนาดเล็กที่สตรีมไม่ได้โดยไม่ต้องมีพื้นที่สำรอง - เพิ่มการรองรับเสียง IAMF ใน
Mp4MuxerและFragmentedMp4Muxer
- เพิ่มการรองรับการอ้างอิงแทร็ก (กล่อง
- ส่วนขยาย IMA:
- เพิ่ม
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotเพื่ออนุญาตให้ระบุช่องโฆษณาที่จะใช้สำหรับโฆษณาช่วงวิดีโอหยุดเล่น - แก้ไขข้อบกพร่องที่โฆษณา VAST แบบข้ามได้ที่แสดงต่อกันแสดงปุ่มข้ามทันทีในโฆษณาที่ 2 (#3165)
- เพิ่ม
- เซสชัน:
- แก้ไขปัญหาการหยุดชะงักที่อาจเกิดขึ้นและข้อขัดข้องของ
IllegalStateExceptionภายในMediaNotificationManagerเมื่อใช้เซสชันที่มี Looper ของเพลเยอร์ในเทรดเบื้องหลัง - บังคับใช้ข้อกำหนดเกี่ยวกับชุดข้อความที่เข้มงวดขึ้นสำหรับเมธอด
MediaSessionตอนนี้เมธอด Void จะโพสต์การดำเนินการไปยังเทรด Looper ของแอปพลิเคชันโดยอัตโนมัติ และตัวช่วยเข้าถึงสถานะ (Getter) จะแสดงIllegalStateExceptionอย่างชัดเจนหากเรียกจากเทรดอื่นที่ไม่ใช่ Looper ของแอปพลิเคชัน - แก้ไขข้อขัดข้องในการผสานไทม์ไลน์ที่อยู่นอกขอบเขต (
IllegalStateExceptionในMediaUtils.mergePlayerInfo) โดยการติดตามความสอดคล้องของสถานะต่อตัวควบคุมในฝั่งเซสชัน - เพิ่ม
androidx.media3.session.MediaSessionManagerเพื่อรองรับการค้นหาเซสชันสื่อที่ใช้งานอยู่และแสดงผลอินสแตนซ์SessionTokenของ Media3 - เปลี่ยนลักษณะการทำงานเริ่มต้นของ
MediaSession.Callback.onConnectหากไม่มีการลบล้างเมธอดเพื่อให้สิทธิ์อ่านแก่ตัวควบคุมที่ไม่น่าเชื่อถือเท่านั้น - เพิ่มการรองรับเพื่อลบล้างชื่อแพ็กเกจขณะสร้าง
MediaSessionผ่าน API ใหม่MediaSession.Builder#setPackageNameOverrideผู้โทรต้องมีสิทธิ์android.permission.OVERRIDE_MEDIA_SESSION_OWNERเพื่อลบล้างชื่อแพ็กเกจของเซสชัน - เพิ่ม
MediaSession.Callback.onConnectAsync()วิธีการใหม่นี้ช่วยให้สามารถประมวลผลการพยายามเชื่อมต่อของตัวควบคุมแบบอะซิงโครนัสได้ แอปสามารถแสดงผลFutureทันทีพร้อมกับFutures.immediateFuture(ConnectionResult)เพื่อให้ได้ลักษณะการทำงานก่อนหน้า เราขอแนะนำให้ย้ายข้อมูลไปยังวิธีการใหม่เนื่องจากCallback.onConnectเป็นตัวเลือกที่เลิกใช้งานแล้ว - แก้ไขปัญหาที่การเรียกดู AVRCP ของบลูทูธไม่รู้จัก
MediaLibraryServiceใน API 36 และ 37 - แก้ไขการลดขนาดอาร์ตเวิร์กซ้ำใน
MediaSessionเมื่อขนาดรูปภาพใกล้ถึงขีดจำกัดของแพลตฟอร์ม ซึ่งช่วยแก้ปัญหาภาพเบลอในการแจ้งเตือน (#3134) - แก้ไขข้อขัดข้อง
ForegroundServiceStartNotAllowedExceptionในMediaNotificationManagerเมื่อ Callback การโหลดบิตแมปอาร์ตเวิร์กแบบอะซิงโครนัสพยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าขณะที่แอปอยู่ในเบื้องหลัง (#3270) - แก้ไขปัญหาที่ออบเจ็กต์
PositionInfoที่ได้รับจากMediaControllerไม่มี UIDTimelineเดิม ตอนนี้เซสชันจะแปลและเผยแพร่ UID เหล่านี้อย่างเสถียรในระหว่างการอัปเดตสถานะ - แก้ไขข้อขัดข้องโดยการตรวจจับ
ForegroundServiceStartNotAllowedExceptionในMediaSessionService.stopSelfSafely()(#3310) - แก้ไข Callback
onMediaItemTransition()ที่ไม่คาดคิดในMediaControllerเมื่อกรอภายในรายการสื่อเดียวกัน (#3248)
- แก้ไขปัญหาการหยุดชะงักที่อาจเกิดขึ้นและข้อขัดข้องของ
- UI:
- แก้ไขเฟรมแรกที่แสดงผลในขนาดที่ไม่ถูกต้องเมื่อมีการจัดองค์ประกอบ
ContentFrameใหม่ระหว่างการเล่น (#3238) - เพิ่มคลาส
CurrentMediaItemStateและrememberCurrentMediaItemStateComposable ที่เกี่ยวข้องลงในโมดูลmedia3-ui-composeตัวเก็บสถานะนี้ใช้ในdemo-composeเพื่อแสดงข้อมูลเมตาต่างๆ เกี่ยวกับMediaItemที่กำลังเล่นอยู่ - เพิ่มคลาส
PlaylistStateและ ComposablerememberPlaylistStateที่เกี่ยวข้องลงในโมดูลmedia3-ui-composeตัวเก็บสถานะนี้ใช้ในdemo-composeเพื่อแสดงข้อมูลเมตาต่างๆ เกี่ยวกับMediaItemsที่ตั้งค่าไว้ในเพลเยอร์ - เพิ่ม API การกรอไปข้างหน้า/สโลว์โมชันลงใน
PlaybackSpeedStateใช้ฟังก์ชันนี้ในdemo-composeเพื่อแสดงการกรอไปข้างหน้าด้วยการกดค้าง - เพิ่ม
MiniControllerComposable ลงในโมดูลmedia3-ui-compose-material3โดยจะแสดงแผงควบคุมขนาดกะทัดรัดเพื่อควบคุมPlayerพร้อมแสดงชื่อ ศิลปิน อาร์ตเวิร์ก และความคืบหน้าของรายการสื่อปัจจุบัน - เพิ่มคลาส
ErrorStateและ ComposablerememberErrorStateที่เกี่ยวข้องลงในโมดูลmedia3-ui-composeเพิ่ม ComposableErrorTextลงในmedia3-ui-compose-material3และทำให้เป็นภาพซ้อนทับเริ่มต้นในPlayer - เผยแพร่ออบเจ็กต์
PlayerDefaultsที่มี Composable สำหรับTopControls,CenterControls,BottomControlsและErrorOverlay - เพิ่ม
FocusRequesterลงในPlayerComposable และช่องเนื้อหา - เผยแพร่
PlayerPool(common-ktx) และrememberPooledPlayer(ui-compose) เพื่อรองรับการโหลดMediaItemsล่วงหน้าในสภาพแวดล้อม UI ของหน้าต่างแบบเลื่อน แสดงฟังก์ชันการทำงานนี้ในdemo-composeด้วยShortFormPlayerScreenใหม่ - แก้ไขข้อบกพร่องการระงับชัตเตอร์ใน
PlayerViewและ ComposePresentationStateที่ทำให้เกิดข้อขัดข้องในไทม์ไลน์ที่ไม่รองรับ การค้นหา UID ของระยะเวลา (#3264)
- แก้ไขเฟรมแรกที่แสดงผลในขนาดที่ไม่ถูกต้องเมื่อมีการจัดองค์ประกอบ
- ดาวน์โหลด
- แก้ไขตัวแปร HLS ในเพลย์ลิสต์สื่อเมื่อดึงข้อมูลเพื่อดาวน์โหลด (#3258)
- ส่วนขยาย Ktor:
- ส่วนขยาย HLS:
- เพิ่มการรองรับการควบคุมเนื้อหา HLS และการโคลนเส้นทาง (#1689)
- เพิ่ม
setWithAssetListResetลงในHlsInterstitialsAdsLoaderเพื่ออนุญาตให้แอปรีเซ็ตโฆษณาคั่นระหว่างหน้าของรายการเนื้อหาที่ประมวลผลเสร็จสมบูรณ์แล้วกลับไปเป็นสถานะไม่พร้อมใช้งานสำหรับการแก้ไขตามคำขออีกครั้ง - แยกวิเคราะห์แอตทริบิวต์
SCOREของEXT-X-STREAM-INFและEXT-X-I-FRAME-STREAM-INFแล้วป้อนข้อมูลลงในFormat.selectionPriority(#3236) - แก้ไขข้อบกพร่องที่การรีเฟรชเพลย์ลิสต์ HLS ที่กำหนดเวลายังคงดำเนินต่อไปแม้ว่าเพลย์ลิสต์จะไม่ใช่เพลย์ลิสต์หลักหรือไม่ได้ใช้งานแล้วก็ตาม (#3254)
- แก้ไขการคำนวณออฟเซ็ตการเล่นเนื้อหาต่อเมื่อแก้ไขรายการชิ้นงานโฆษณาคั่นระหว่างหน้า (#3322)
- แก้ไขการประทับเวลาของแทร็กเสียงที่ไม่ต่อเนื่องโดยไม่คาดคิดเมื่อกลับมาเล่นไลฟ์สดที่มีเวลาในการตอบสนองต่ำอีกครั้งหลังจากคำขอเพลย์ลิสต์ไม่สำเร็จ (#3311)
- แก้ไขข้อบกพร่องใน
HlsMediaPeriod.getStreamKeys()ที่ระบบถือว่าแทร็ก ID3 ในการแสดงผลเสียงเป็นคำบรรยาย (#3333)
- ส่วนขยาย DASH
- แยกคำบรรยายแทนเสียง CEA ออกเป็น
TrackGroupต่างๆ ตามภาษา (#3113) - เพิ่มการรองรับการแยกวิเคราะห์องค์ประกอบ
Locationหลายรายการจากไฟล์ Manifest (MPD) และดำเนินการสำรองตำแหน่งในDashMediaSourceเมื่อโหลดไฟล์ Manifest ไม่สำเร็จ - แก้ไขข้อขัดข้อง (
IndexOutOfBoundsException) เมื่อเปิดไฟล์ Manifest ที่มีองค์ประกอบ<SegmentTimeline/>ว่างเปล่า (#3326)
- แยกคำบรรยายแทนเสียง CEA ออกเป็น
- ส่วนขยาย RTSP:
- แก้ไขปัญหาการหยุดชะงักหรือความล้มเหลวในการเล่นชั่วคราวระหว่างการเตรียมการเล่น RTSP ที่เกิดจากข้อผิดพลาดในการเชื่อมโยงพอร์ต UDP
- ส่วนขยาย Cast
- เพิ่มคลาส
CastParamsใหม่เพื่ออนุญาตการกำหนดค่า Cast โดยเรียกใช้Cast.initialize(CastParams) - เพิ่มตัวเลือก
CastParams.getShowSystemOutputSwitcherOnCastIconClick()ใหม่ ซึ่งจะทริกเกอร์การใช้ตัวสลับเอาต์พุต SystemUI แทนตัวเลือกอุปกรณ์แคสต์ในแอปเมื่อพร้อมใช้งาน - เพิ่ม
MediaRouteButtonStateและrememberMediaRouteButtonStateเพื่อรองรับการสังเกตสถานะระดับการมองเห็นของเครื่องมือเลือกเส้นทางสื่อ และเพิ่มพารามิเตอร์stateลงในMediaRouteButton(#3172) - แก้ไขข้อบกพร่องที่
RemoteCastPlayerอาจค้างอยู่ในสถานะการมาสก์แทร็กอย่างถาวรหลังจากเลือกแทร็ก ซึ่งทำให้ระบบละเว้นการอัปเดตแทร็กที่ตามมาจากตัวรับ Cast (#3237) - แก้ไขข้อบกพร่องที่
DefaultMediaItemConverterแสดงNullPointerExceptionเมื่อพยายามเข้าร่วมเซสชันการแคสต์ที่เริ่มจากผู้ส่งที่ไม่ใช่ Media3 - ป้องกันไม่ให้
CastPlayerโอนMediaItemsที่เล่นไม่ได้เมื่อเปลี่ยนเพลเยอร์ที่ใช้งานอยู่ (#3199) - แก้ไขข้อบกพร่องที่ไลฟ์สดที่ไม่ได้กำหนดค่า (
liveConfiguration == UNSET) อยู่ในคิวเป็นSTREAM_TYPE_BUFFERED(#3318)
- เพิ่มคลาส
- ยูทิลิตีการทดสอบ
- ขยาย
DataSourceContractTestเพื่อรวมการรองรับคำขอPOSTที่มีส่วนหัวและเนื้อหา เพิ่มทรัพยากรPOSTบางส่วนลงในHttpDataSourceTestEnvและเพิ่มการยืนยันสำหรับเมธอด HTTP, ส่วนหัว และเนื้อหาที่คาดไว้ในWebServerDispatcher - จำกัดการยืนยันสิทธิ์ใน
DataSourceContractTestสำหรับความยาวที่แสดงผลจากDataSource.open()แหล่งข้อมูลที่อาจส่งผลให้เกิดC.LENGTH_UNSETควรระบุสิ่งนี้โดยใช้TestResource.Builder.setMayResolveToUnknownLength(boolean) - เพิ่ม
setPlaybackLooperลงในTestExoPlayerBuilder
- ขยาย
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
androidx.media3.exoplayer.MetadataRetrieverออก โปรดใช้androidx.media3.inspector.MetadataRetrieverแทน - นำ
androidx.media3.exoplayer.MediaExtractorCompatออก โปรดใช้androidx.media3.inspector.MediaExtractorCompatแทน - นำ
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATAออก ใช้HeifExtractorเพื่อดึงข้อมูลเมตาของรูปภาพเคลื่อนไหวจากไฟล์ HEIC แทน - นำ
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadataออก โปรดใช้androidx.media3.extractor.metadata.MotionPhotoMetadataแทน - นำ
androidx.media3.extractor.DummyTrackOutputออก โปรดใช้androidx.media3.extractor.DiscardingTrackOutputแทน - นำ
androidx.media3.extractor.DummyExtractorOutputออก โปรดใช้androidx.media3.extractor.NoOpExtractorOutputแทน - นำ
androidx.media3.common.C.generateAudioSessionIdV21ออก โปรดใช้androidx.media3.common.util.Util.generateAudioSessionIdแทน
- นำ
- สร้าง
- อัปเดตวิธีการ
README.mdสำหรับการใช้ Media3 ในเครื่องเพื่อใช้ Gradle Composite Builds (includeBuild) นำสคริปต์core_settings.gradleออกแล้ว และไม่ได้ใช้พร็อพเพอร์ตี้androidxMediaModulePrefixและandroidxMediaEnableMidiModuleอีกต่อไป
- อัปเดตวิธีการ
1.11.0-rc01
ใช้เวอร์ชันเสถียร 1.11.0
1.11.0-beta01
7 กรกฎาคม 2569
ใช้เวอร์ชันเสถียร 1.11.0
1.11.0-alpha01
24 มิถุนายน 2026
ใช้เวอร์ชันเสถียร 1.11.0
เวอร์ชัน 1.10.0
1.10.1
12 พฤษภาคม 2026
- คลังทั่วไป:
- แก้ไขการจัดการ
onAudioSessionIdChangedในSimpleBasePlayerและForwardingSimpleBasePlayer
- แก้ไขการจัดการ
- ExoPlayer:
- แก้ไขภาวะแข่งขันที่เกี่ยวข้องกับการสร้างรหัสเซสชันเสียงซึ่งอาจทำให้เกิด
IllegalStateExceptionด้วยโหมด Tunneling (#3099) - แก้ไขปัญหาแอปขัดข้องที่อาจเกิดขึ้นเมื่อกู้คืนจากข้อผิดพลาดของตัวถอดรหัสด้วยการอุ่นเครื่องโปรแกรมแสดงผล
- แก้ไขปัญหาที่อาร์ติแฟกต์วิดีโอเกิดจากการระบุข้อมูลการเริ่มต้นเมื่อใช้ตัวแปลงรหัส Dolby Vision ที่ใช้ AV1 (#3153)
- แก้ไขภาวะแข่งขันที่เกี่ยวข้องกับการสร้างรหัสเซสชันเสียงซึ่งอาจทำให้เกิด
- การเลือกแทร็ก
- ปรับตรรกะการเลือกแทร็กใน
VideoTrackInfoเพื่อแก้ไขประเภท MIME สำรอง และย้ายค่ากำหนดคะแนน HDR และตัวแปลงรหัสไปยังค่ากำหนดคุณภาพ (#3135)
- ปรับตรรกะการเลือกแทร็กใน
- เครื่องสกัดน้ำผลไม้
- MP3: ละเว้นความยาวข้อมูล Xing หากยาวกว่าความยาวสตรีมที่ทราบ (#3117)
- แก้ไข
ArrayIndexOutOfBoundsExceptionในMp4Extractorเมื่อมีการตั้งค่าFLAG_OMIT_TRACK_SAMPLE_TABLEและแทร็กไม่มีกล่องตัวอย่างการซิงค์ (stss)
- เสียง:
- แก้ไขข้อบกพร่องที่อาจทำให้เหตุการณ์เสียงได้รับการกำหนดเส้นทางอย่างไม่ถูกต้องหากมีการเพิ่มโปรแกรมแสดงผลเสียงหลายรายการลงในเพลเยอร์
- วิดีโอ
- ปรับตรรกะสำหรับการนำตัวแปลงรหัสมาใช้ซ้ำเมื่ออัตราเฟรมเปลี่ยนแปลงใน API ที่ต่ำกว่า 30 เพื่อหลีกเลี่ยงการรีเซ็ตตัวแปลงรหัสในกรณีที่ไม่มีประโยชน์ (#3120)
- ปิดใช้การแก้ปัญหาชั่วคราวสำหรับการบังคับให้ซิงค์ข้อมูลใน
queueSecureInputBufferสำหรับ API 31 ขึ้นไป การแก้ปัญหาชั่วคราวนี้เป็นคอขวดเทียมที่บังคับให้การถอดรหัสทำงานแบบต่อเนื่อง ซึ่งช่วยป้องกันไม่ให้วิดีโอผิดเพี้ยนเนื่องจากปัญหาเกี่ยวกับเฟรมเวิร์กที่มีอยู่ก่อน API 31
- รูปภาพ:
- แก้ไขปัญหาในโหมดสครับที่การอัปเดตรูปภาพจะมีผลก็ต่อเมื่อผู้ใช้ "หยุดสครับ" (#2815)
- เซสชัน:
- แก้ไขข้อบกพร่องที่
ForegroundServiceStartNotAllowedExceptionไม่ได้เผยแพร่ข้ามขอบเขตเทรดในกรณีที่เทรดแอปพลิเคชันไม่ใช่เทรดหลัก (#2499) - แก้ไขข้อบกพร่องที่
COMMAND_SEEK_TO_MEDIA_ITEMไม่พร้อมใช้งานในMediaControllerเมื่อเชื่อมต่อกับเซสชันเฉพาะแพลตฟอร์มที่รองรับการกรอไปยังรายการอื่นๆ แต่ไม่มีการแก้ไขเพลย์ลิสต์ - แก้ไขปัญหาที่
MediaControllerไม่สามารถตั้งค่ารายการสื่อในเซสชันสื่อของแพลตฟอร์มที่ไม่อนุญาตการดำเนินการPREPARE_FROM - แก้ไขข้อบกพร่องที่กระบวนการของตัวเองไม่ได้ทำเครื่องหมายด้วย
Controller.isTrusted()ใน API 27 หรือก่อนหน้านั้นเมื่อเชื่อมต่อผ่านตัวควบคุมแพลตฟอร์ม
- แก้ไขข้อบกพร่องที่
- ส่วนขยาย HLS:
- ส่วนขยาย DASH
- แก้ไขข้อขัดข้องใน
SampleQueueเมื่อกรอไปยังส่วนที่กำลังยกเลิกอยู่
- แก้ไขข้อขัดข้องใน
1.10.0
26 มีนาคม 2026
- คลังทั่วไป:
- โปรโมต
Player.mute()และPlayer.unmute()จากUnstableApiเป็นเวอร์ชันเสถียร - โปรโมต
Format.pcmEncodingและC.PcmEncodingจากUnstableApiเป็นเวอร์ชันเสถียร - เพิ่ม
Format.primaryTrackGroupIdเพื่อระบุกลุ่มหลักของอินสแตนซ์Formatที่ฝัง (#294)
- โปรโมต
- ExoPlayer:
- เพิ่มความสามารถในการตัดคลิปให้กับ
AdsMediaSource - เพิ่มการรองรับการจัดกำหนดการแบบไดนามิกใน
MediaCodecVideoRendererเพื่อให้สอดคล้องกับงานจัดกำหนดการและรอบการทำงานของ CPU ได้ดียิ่งขึ้นเมื่อสามารถประมวลผลเฟรมวิดีโอได้ คุณเปิดใช้ฟีเจอร์นี้ได้โดยใช้experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()ในDefaultRenderersFactory - อนุญาตให้ตั้งค่า
DataSource.Factoryที่กำหนดเองในDefaultPreloadManager.Builder - อนุญาตให้จำลอง
ExoPlayerโดยไม่ต้องใช้ Robolectric โดยย้ายค่าคงที่เริ่มต้นบางค่าไปยังExoPlayer.Builderโดยทั่วไปแล้ว เราไม่แนะนำให้จำลองอินเทอร์เฟซที่ซับซ้อนนี้ ยกเว้นในกรณีที่มีการใช้งานน้อย/ง่าย/เกิดขึ้นเอง (#2985)- ซึ่งจำเป็นต้องย้าย
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSจากExoPlayerไปยังExoPlayer.Builder(โดยไม่มีการเลิกใช้งาน)
- ซึ่งจำเป็นต้องย้าย
- แก้ไขข้อบกพร่องที่
ProgressiveMediaSourceเผยแพร่ข้อมูลไทม์ไลน์ที่ล้าสมัยไปยังเพลเยอร์ และระยะเวลาที่อยู่ในคิวถูกนำออกโดยไม่คาดคิด (#3016) - แก้ไขปัญหาที่ ExoPlayer ไม่ขอโฟกัสเสียงที่ล่าช้าเมื่อมีการขอให้เล่นระหว่างการโทร
- แก้ไขข้อบกพร่องที่การเปลี่ยนจากเนื้อหาแบบออนดีมานด์เป็นเนื้อหาสดอาจทำให้เกิดการบัฟเฟอร์ซ้ำที่ส่วนท้ายของเนื้อหาแบบออนดีมานด์ (#3052)
- เพิ่มการรองรับ Dolby Vision Profile 10 (#2830)
- แก้ไขข้อบกพร่องที่โฆษณาตอนต้นที่ไม่ได้เริ่มต้นสร้าง
ArrayIndexOutOfBoundsException(#3125)
- เพิ่มความสามารถในการตัดคลิปให้กับ
- CompositionPlayer:
- เพิ่มการรองรับ
EditedMediaItem.removeVideo
- เพิ่มการรองรับ
- Transformer:
- ตอนนี้
EditedMediaItem.Builder.setFrameRate()สามารถตั้งค่าอัตราเฟรมเอาต์พุตสูงสุดสำหรับวิดีโอได้แล้ว ซึ่งมีประโยชน์อย่างยิ่งเมื่อเพิ่มความเร็วของสื่อด้วยsetSpeed()
- ตอนนี้
- การเลือกแทร็ก
- เปลี่ยนลายเซ็นของ
DefaultTrackSelector.selectAllTracksเพื่อรวมอาร์เรย์เอาต์พุตเป็นพารามิเตอร์ ซึ่งป้อนข้อมูลล่วงหน้าด้วยการลบล้างแทร็ก - แก้ไขปัญหาที่มีการเลือกแทร็กข้อมูลเมตาที่ฝังไว้ไม่ว่าแทร็กหลักที่เกี่ยวข้องจะถูกเลือกหรือไม่ (#294)
- ตัวเลือกการปรับให้เสถียร
TrackSelectionParametersสำหรับpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsและselectTextByDefault
- เปลี่ยนลายเซ็นของ
- เครื่องสกัดน้ำผลไม้
- MP4: รองรับไฟล์ที่มีกล่อง
uuidขนาดใหญ่ก่อนกล่องอื่นๆ เช่นmoov(#3046) - MP4: เพิ่มการรองรับแทร็ก Versatile Video Coding (VVC) ในคอนเทนเนอร์ MP4
- MP4: รองรับไฟล์ที่มีกล่อง
- ผู้ตรวจสอบ
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: นำ
FrameExtractorออก ตอนนี้ผู้ใช้ควรใช้โมดูล:media3-inspector-frameใหม่และอัปเดตการนำเข้าเป็นandroidx.media3.inspector.frame.FrameExtractor - เปิดตัวโมดูลใหม่สำหรับการแยกและประมวลผลเฟรมวิดีโอที่ถอดรหัสแล้ว
- การเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ: นำ
- เสียง:
- เปลี่ยนไลบรารีการถอดรหัสที่สำคัญสำหรับส่วนขยายตัวถอดรหัส IAMF จาก
libiamfเป็นiamf_tools - การถอดรหัส IAMF รองรับเอาต์พุตแบบไบเนอรอลผ่านตัวถอดรหัส (เมื่อใช้ส่วนขยายตัวถอดรหัส IAMF) หรือผ่าน Android Spatializer
- นำการรองรับ
AC4Profile22และโปรไฟล์เดิมอื่นๆ ออกอย่างถูกต้องเมื่อประเมินการรองรับตัวถอดรหัส AC-4 ในสถานการณ์ที่เกี่ยวข้องกับยานยนต์ (#2609) - ปรับปรุงตรรกะการลองใหม่ของการเริ่มต้น
AudioOutputในDefaultAudioSink(#2905) - พยายามจับคู่เลย์เอาต์เอาต์พุตของลำโพง (หรือ Spatializer หากมี) เมื่อถอดรหัส IAMF ทั้งด้วยส่วนขยาย IAMF และตัวถอดรหัสตัวแปลงรหัสสื่อ ซึ่งรองรับโดยช่องและตรรกะใหม่ใน AudioCapabilities และ AudioCapabilitiesReceiver
- แก้ไขข้อบกพร่องที่ทำให้การเล่นค้างเมื่อเล่นเพลย์ลิสต์เสียงแบบไม่มีช่องว่างในโหมดการลดภาระการบีบอัด
- เปลี่ยนไลบรารีการถอดรหัสที่สำคัญสำหรับส่วนขยายตัวถอดรหัส IAMF จาก
- ข้อความ
- VobSub: ใช้คำสั่งควบคุม SPU
STARTและSTOPเพื่อรับระยะเวลาของคิวแทนที่จะใช้ค่าเริ่มต้น 5 วินาทีเสมอ (#2935)
- VobSub: ใช้คำสั่งควบคุม SPU
- ข้อมูลเมตา:
- เพิ่มจำนวนเริ่มต้นของโปรแกรมแสดงผลข้อมูลเมตาเป็น 4 เพื่อให้ครอบคลุมแทร็กข้อมูลเมตาที่เป็นไปได้ทั้งหมดที่เผยแพร่โดยตัวแปรและการแสดงผล HLS (#3043)
- ผลกระทบ
- ย้าย
LottieOverlayไปยังโมดูล:media3-effect-lottieใหม่ (ซึ่งรวมถึงการเปลี่ยนชื่อจากandroidx.media3.effect.LottieOverlayเป็นandroidx.media3.effect.lottie.LottieOverlayด้วย)
- ย้าย
- Lottie ของเอฟเฟกต์:
- เปิดตัวโมดูล
:media3-effect-lottieใหม่ซึ่งมีฟังก์ชันการทำงานสำหรับการใช้เอฟเฟกต์ Lottie กับเฟรมวิดีโอ
- เปิดตัวโมดูล
- ส่วนขยาย IMA:
- อัปเดต IMA SDK เป็นเวอร์ชัน 3.39.0 เพื่อให้เข้าถึง Ad Media Info API เวอร์ชันล่าสุดได้
- แก้ไขข้อบกพร่องที่ประเภท MIME ของโฆษณาไม่ตรงกับประเภท MIME ที่ระบุในเหตุการณ์ IMA LOADED การแก้ไขนี้จะแมปประเภท MIME ของโฆษณาโดยใช้ข้อมูลสื่อของโฆษณาที่ IMA ให้มา
- เพิ่ม
setEnableCustomTabsลงในImaAdsLoaderและImaServerSideAdInsertionMediaSourceเพื่อให้ผู้ใช้ควบคุมได้ว่าจะเปิด URL การคลิกผ่านโฆษณาโดยใช้แท็บที่กำหนดเองหรือไม่ - เพิ่ม
ImaAdTagUriBuilderซึ่งเป็นคลาสที่เสนอทางเลือกในการสร้างadTagUriซึ่งมีsetPreferredLinearOrientationAPI นี่คือ API ในการทดสอบอัลฟ่าที่จะช่วยให้คุณตั้งค่าการวางแนวที่ต้องการสำหรับโฆษณาเชิงเส้นได้ หากต้องการเข้าร่วมกลุ่มทดสอบเวอร์ชันอัลฟ่า โปรดติดต่อพาร์ทเนอร์บัญชีของคุณ
- เซสชัน:
- แก้ไขข้อบกพร่องที่อาร์เรย์ขนาดใหญ่ใน
MediaMetadata.artworkDataอาจทำให้แอปขัดข้อง - ใช้อาร์กิวเมนต์ประเภท int สำหรับ
@Player.Commandในอินเทอร์เฟซActionFactory(#2933) - ทำให้
MediaSessionServiceและMediaLibraryServiceเป็นLifecycleServiceซึ่งช่วยให้แนบการดำเนินการที่รับรู้วงจรกับวงจรของบริการได้ (#187) - หยุดรองรับคำสั่งเปลี่ยนระดับเสียงของอุปกรณ์จาก
MediaControllerและMediaBrowserสำหรับการเล่นในเครื่อง แอปไม่ควรเปลี่ยนระดับเสียงของอุปกรณ์ในเครื่อง และหากจำเป็น ให้ใช้ API ของAudioManagerเพื่อวัตถุประสงค์นี้ - ตรวจหาอินสแตนซ์
Intentที่ไม่มีการใช้งานซึ่งเริ่มบริการเป็นบริการที่ทำงานอยู่เบื้องหน้า ซึ่งจะป้องกันไม่ให้ระบบแสดงข้อผิดพลาดForegroundServiceDidNotStartInTimeExceptionการเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบบน API ที่ไม่เสถียรสำหรับแอปที่ใช้MediaNotification.Providerที่กำหนดเอง เนื่องจากมีเมธอดใหม่ที่จำเป็น - เพิ่มเครื่องมือสร้างสำหรับอินสแตนซ์
PendingIntentเพื่อใช้กับวิดเจ็ตบนหน้าจอหลัก (#2933) - เพิ่มเมธอดแบบคงที่สำหรับการสร้างอินสแตนซ์
Intentสำหรับวิดเจ็ตหน้าจอหลักที่ใช้ Compose (#2933) - แก้ไขข้อบกพร่องที่ระบบไม่รายงานการเปลี่ยนรายการสื่อไปยังตัวควบคุมเมื่อการเล่นเปลี่ยนจากดัชนีรายการสื่อหนึ่งไปยังอีกรายการหนึ่งที่มีรายการสื่อเดียวกันเนื่องจากเหตุผลด้านความไม่ต่อเนื่อง "AUTO" และ "SEEK" (#2997)
- แก้ไขปัญหาที่วิธีแก้ปัญหาชั่วคราวสำหรับการวางปุ่ม UI ของระบบส่งผลเสียต่อแพลตฟอร์ม UI อื่นๆ เช่น Android Auto หรือผู้ผลิตที่ไม่ต้องการวิธีแก้ปัญหาชั่วคราว (#3041)
- แก้ไขปัญหาที่ระบบไม่ซิงค์ข้อมูลการเข้าถึงการสมัครใช้บริการ (#3056)
- แก้ไขข้อบกพร่อง SysUI ใน API 29 ซึ่งอาร์ตเวิร์กของเซสชันสื่อที่มีขนาดหนึ่งๆ อาจทำให้ SysUI ขัดข้องและบังคับให้อุปกรณ์รีบูต (#3118)
- แก้ไขการปรับขนาดไอคอนอาร์ตเวิร์กของการแจ้งเตือนใน Android Q (#3084)
- แก้ไขข้อบกพร่องที่อาร์เรย์ขนาดใหญ่ใน
- UI:
- เพิ่ม
PlaybackSpeedControlComposable ลงในmedia3-ui-composeเพื่อแสดงและแก้ไขความเร็วในการเล่น - เพิ่ม
PlaybackSpeedToggleButtonComposable ลงในmedia3-ui-compose-material3เพื่อควบคุมความเร็วในการเล่น - เพิ่ม
ProgressSliderComposable ลงในmedia3-ui-compose-material3เพื่อแสดงความคืบหน้าของโปรแกรมเล่นและทำการกรอโดยใช้การลากและการแตะ (#2288) - หลีกเลี่ยงบัฟเฟอร์นอกหน้าจอขนาดใหญ่ใน PlayerControlView แบบเคลื่อนไหว
- เพิ่ม
PlayerComposable ลงในmedia3-ui-compose-material3ซึ่งรวมContentFrameเข้ากับตัวควบคุมที่ปรับแต่งได้ซึ่งจัดแนวไว้ที่ด้านบน ตรงกลาง และด้านล่าง - ซ่อนตำแหน่งการเล่นจากบริการการช่วยเหลือพิเศษเพื่อป้องกันการอัปเดตการประกาศอย่างต่อเนื่องเมื่อมองเห็น
PlayerControlView
- เพิ่ม
- ส่วนขยาย HLS:
- รองรับ X-PLAYOUT-LIMIT ที่มีโฆษณาคั่นระหว่างหน้า HLS (#2484)
- รองรับแอตทริบิวต์
QUERYPARAMด้วย#EXT-X-DEFINE(#1854) - เพิ่มประสิทธิภาพการแยกวิเคราะห์เพลย์ลิสต์ HLS โดยการแคชตัวจับคู่นิพจน์ทั่วไป (#3008)
- แสดงแทร็กข้อมูลเมตา ID3 (EMSG) ในการแสดงผลเสียง (#3043)
- อนุญาตให้ใช้ตำแหน่งสำรองเมื่อพบข้อผิดพลาดในการโหลด หากมีสตรีมที่ซ้ำซ้อนจากตำแหน่งอื่น (#1988)
- แก้ไขลักษณะการทำงานของ X-SNAP สำหรับโฆษณาคั่นระหว่างหน้า HLS เพื่อคำนวณตำแหน่งเริ่มต้นและตำแหน่งที่เล่นต่ออย่างถูกต้อง (#3013)
- ส่วนขยาย DASH
- ส่วนขยาย RTSP:
- แก้ไขการถดถอยในการสตรีม H.264 และ H.265 ที่จะแยกวิเคราะห์ตัวอย่างของหน่วยการเข้าถึงเดียวกันซึ่งครอบคลุมแพ็กเก็ต RTP หลายรายการอย่างไม่ถูกต้อง ซึ่งส่งผลให้เกิดข้อบกพร่องด้านภาพและความเสียหายในวิดีโอ (#3121)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ):
- เพิ่มการรองรับตัวจัดการ UI ของ MPEG-H ลงในส่วนขยายตัวถอดรหัส MPEG-H (#3066)
- ส่วนขยาย Cast
- เพิ่มเมธอด
RemoteCastPlayer.Builder#setTrackSelectorที่ช่วยให้สามารถใช้การเลือกแทร็กสำหรับการเล่น Cast
- เพิ่มเมธอด
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
ExperimentalFrameExtractorออก โปรดใช้androidx.media3.inspector.frame.FrameExtractorแทน - นำ
ChannelMixingMatrix.create()ออก โปรดใช้ChannelMixingMatrix.createForConstantGain()แทน - นำ
androidx.media3.extractor.metadata.flac.VorbisCommentออก โปรดใช้androidx.media3.extractor.metadata.vorbis.VorbisCommentแทน - นำ
MediaSource.prepareSource(MediaSourceCaller, TransferListener)ออก โปรดใช้MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)แทน
- นำ
1.10.0-rc03
25 มีนาคม 2026
ใช้เวอร์ชันเสถียร 1.10.0
1.10.0-rc02
16 มีนาคม 2026
ใช้เวอร์ชันเสถียร 1.10.0
1.10.0-rc01
10 มีนาคม 2026
ใช้เวอร์ชันเสถียร 1.10.0
1.10.0-beta01
25 กุมภาพันธ์ 2026
ใช้เวอร์ชันเสถียร 1.10.0
1.10.0-alpha01
6 กุมภาพันธ์ 2026
ใช้เวอร์ชันเสถียร 1.10.0
เวอร์ชัน 1.9.0
1.9.4
16 พฤษภาคม 2026
เวอร์ชัน 1.9.4 มี Commit ต่อไปนี้
- ผลกระทบ
- ตั้งค่า
GL_DRAW_BUFFERและGL_READ_BUFFERอย่างชัดเจนเมื่อเปลี่ยนจากบริบทที่ไม่มีแพลตฟอร์ม
- ตั้งค่า
1.9.3
16 มีนาคม 2026
เวอร์ชัน 1.9.3 มี Commit ต่อไปนี้
- เสียง:
- แก้ไขข้อบกพร่องที่ทำให้การเล่นค้างเมื่อเล่นเพลย์ลิสต์เสียงแบบไม่มีช่องว่างในโหมดการลดภาระการบีบอัด
1.9.2
6 กุมภาพันธ์ 2026
เวอร์ชัน 1.9.2 มีคอมมิตต่อไปนี้
- ExoPlayer:
- แก้ไขข้อบกพร่องที่
ProgressiveMediaSourceเผยแพร่ข้อมูลไทม์ไลน์ที่ล้าสมัยไปยังเพลเยอร์และระยะเวลาที่อยู่ในคิวถูกนำออกโดยไม่คาดคิด (#3016)
- แก้ไขข้อบกพร่องที่
- เซสชัน:
- แก้ไขปัญหาที่วิธีแก้ปัญหาชั่วคราวสำหรับการวางปุ่ม UI ของระบบส่งผลเสียต่อแพลตฟอร์ม UI อื่นๆ เช่น Android Auto หรือผู้ผลิตที่ไม่ต้องการวิธีแก้ปัญหาชั่วคราว (#3041)
- ส่วนขยาย Cast
- แก้ไขข้อบกพร่องที่ทำให้การโอนจากการแคสต์ไปยังการเล่นในเครื่องใช้งานไม่ได้
1.9.1
26 มกราคม 2026
เวอร์ชัน 1.9.1 มี คอมมิตเหล่านี้
- ไลบรารีทั่วไป:
- รองรับสตริงวันที่และเวลาที่มีเฉพาะชั่วโมงในการชดเชยเขตเวลา (#2929)
- ExoPlayer:
- อนุญาตให้การจัดกำหนดการแบบไดนามิกชะลอช่วงเวลา
doSomeWorkหลังจากที่เสียงเริ่มรองรับการซิงค์เสียง/วิดีโอที่ราบรื่นยิ่งขึ้นเมื่อเริ่มเล่นเท่านั้น - แก้ไขข้อบกพร่องใน
DefaultLoadErrorHandlingPolicyซึ่งมีการลองใหม่FileNotFoundExceptionและประเภทข้อยกเว้นที่คล้ายกันหลายครั้ง - แก้ไขข้อบกพร่องเกี่ยวกับการกำหนดเวลาแบบไดนามิกซึ่งเวลาที่คำนวณสำหรับ
doSomeWorkถัดไปลดลงอย่างไม่ถูกต้องตามเวลาที่ผ่านไปของการทำซ้ำdoSomeWorkปัจจุบัน การแก้ไขปัญหานี้จะช่วยยืดเวลาที่ CPU ไม่ทำงานและประหยัดพลังงานได้ - แก้ไขปัญหาที่การเล่นไฟล์ Dolby Vision บางไฟล์ล้มเหลวเมื่อพยายามใช้ตัวแปลงรหัส AVC หรือ HEVC สำรอง
- แก้ไขข้อบกพร่องที่การโหลดดำเนินต่อไปหลังจากที่การเล่นสิ้นสุดลงเมื่อนำรายการที่กำลังเล่นออกจากเพลย์ลิสต์ (#2873)
- หลีกเลี่ยงการรั่วไหลของอินสแตนซ์
MediaItemเมื่อใช้ExoPlayer.replaceMediaItemซ้ำๆ กับรายการเดียวกัน (#2993) - ป้องกัน ANR ที่อาจเกิดขึ้นจากการปล่อย Wake Lock ฉุกเฉิน (#2979)
- อนุญาตให้การจัดกำหนดการแบบไดนามิกชะลอช่วงเวลา
- เครื่องสกัดน้ำผลไม้
- MP3: แยกวิเคราะห์ข้อมูล LAME ReplayGain (#2840)
- เสียง:
- นำการรองรับ
AC4Profile22และโปรไฟล์เดิมอื่นๆ ออกอย่างถูกต้องเมื่อประเมินการรองรับตัวถอดรหัส AC-4 ในสถานการณ์ที่เกี่ยวข้องกับยานยนต์ (#2609)
- นำการรองรับ
- วิดีโอ
- ทิ้งตัวแปลงรหัสวิดีโอในอุปกรณ์ที่ต่ำกว่า API 30 เมื่ออัตราเฟรมของเนื้อหาเปลี่ยนแปลงเพื่อหลีกเลี่ยงการเล่นที่กระตุก (#2941)
- ข้อความ
- VobSub: แก้ไขคำบรรยายที่ขาดหายไปบางส่วนด้วยการจัดการ SPU อย่างถูกต้อง ซึ่งมีเฉพาะลำดับการควบคุมเดียวหรือมีข้อมูลสำคัญที่แยกออกเป็นลำดับการควบคุมหลายรายการ (#2935)
- ส่วนขยาย IMA:
- แก้ไขข้อบกพร่อง: แก้ไขปัญหาที่ประเภท MIME ของโฆษณาไม่ตรงกับประเภท MIME ที่ระบุในเหตุการณ์ IMA LOADED ตอนนี้การแก้ไขจะแมปประเภท MIME ของโฆษณาโดยใช้ดัชนีพ็อดโฆษณาและอันดับโฆษณา
- เพิ่มการตรวจสอบค่า Null ก่อนเข้าถึงผลลัพธ์ของ
getAdsManager()และAdEvent.getAd()
- เซสชัน:
- แก้ไขข้อบกพร่องที่การหยุด
MediaControllerที่เชื่อมต่อกับเซสชันแพลตฟอร์มทำให้แอปขัดข้องหากการหยุดเกิดขึ้นระหว่างการเล่นโฆษณา (#2948) - เพิ่มการยืนยันเพิ่มเติมในอินสแตนซ์
extrasBundleในคลาสต่างๆ เพื่อป้องกันอินสแตนซ์Bundleที่มีรูปแบบไม่ถูกต้องซึ่งส่งมาจากกระบวนการอื่นๆ - แก้ไขปัญหาที่คำสั่งที่ขาดหายไปสำหรับ
COMMAND_SEEK_NEXTหรือCOMMAND_SEEK_BACKอาจทำให้เกิดช่องว่างในการแจ้งเตือนสื่อของระบบ (#2976) - ย้ายการปรับขนาดบิตแมปสำหรับไอคอนการแจ้งเตือนออกจากเทรดหลัก (#2829)
- แก้ไขข้อบกพร่องที่ไม่ได้ใช้ผู้แต่ง ผู้เขียน และนักแต่งเพลงเป็นทางเลือกสำรองเมื่อแปลงจาก
MediaMetadataCompatและMediaDescriptionCompatเดิม (#3018)
- แก้ไขข้อบกพร่องที่การหยุด
- ดาวน์โหลด
- แก้ไขลูปที่อาจไม่มีที่สิ้นสุดเมื่อ
PriorityTooLowExceptionได้รับการจัดการโดยSegmentDownloader(สำหรับ DASH, HLS และ SmoothStreaming) การลบล้างSegmentDownloaderที่กำหนดเองโดยใช้เมธอดexecuteที่ได้รับการปกป้องจะต้องระบุงานที่รวมอยู่ในSupplierเพื่อให้สามารถสร้างใหม่ได้ (#2931)
- แก้ไขลูปที่อาจไม่มีที่สิ้นสุดเมื่อ
- ส่วนขยาย HLS:
- ส่งเอกสาร JSON ของรายการชิ้นงานดิบไปยัง Callback
Listener.onAssetListLoadCompletedการเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบใน API ที่ไม่เสถียร ซึ่งกำหนดให้แอปที่ใช้ Callback นี้ต้องเพิ่มอาร์กิวเมนต์เพิ่มเติมประเภทJSONObject(#2950)
- ส่งเอกสาร JSON ของรายการชิ้นงานดิบไปยัง Callback
- ส่วนขยาย RTSP:
- จัดการแพ็กเก็ต RTP ที่มีการประทับเวลาแบบ Wrap Around อย่างถูกต้อง (#2930)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ):
- แก้ไข
NullPointerExceptionที่อาจเกิดขึ้นเมื่อกรอก่อนประมวลผลเฟรมวิดีโอแรก (#2965)
- แก้ไข
- ส่วนขยาย Cast
- แก้ไขข้อบกพร่องที่ทำให้ไทม์ไลน์
RemoteCastPlayerไม่อัปเดตอย่างถูกต้องเมื่อแทนที่เพลย์ลิสต์
- แก้ไขข้อบกพร่องที่ทำให้ไทม์ไลน์
1.9.0
17 ธันวาคม 2025
- ไลบรารีทั่วไป:
- อัปเดต
minSdkเป็น23ให้สอดคล้องกับไลบรารี AndroidX อื่นๆ - เพิ่ม
PlayerTransferStateซึ่งช่วยให้โอนสถานะการเล่นข้ามอินสแตนซ์Playerได้ - เพิ่มเมธอด
void mute()และvoid unmute()ลงใน Player ซึ่งจะคงระดับเสียงของ Player ไว้และคืนค่าระดับเสียงของ Player ก่อนและหลังการตั้งค่าเป็น 0 - เผยแพร่คลาสยูทิลิตี
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManagerและStuckPlayerDetectorที่ExoPlayerเคยใช้ภายในก่อนหน้านี้เพื่อให้ผู้เล่นรายอื่นนำกลับมาใช้ซ้ำได้ (#1893) - แก้ไขการจัดการ Listener ของ
ForwardingPlayerเมื่อเพลเยอร์ที่ได้รับมอบสิทธิ์ที่เกี่ยวข้องใช้ความเท่ากันของการอ้างอิงเพื่อเปรียบเทียบอินสแตนซ์ Listener (#2675) - เพิ่มฟังก์ชันส่วนขยาย
Player.listenToที่ระงับไว้ในไลบรารีmedia3-common-ktxซึ่งระบุPlayer.Eventsที่ควรดำเนินการ - แก้ไขข้อขัดข้องใน
BasePlayer.getBufferedPercentageที่เกิดจากจำนวนเต็มล้นเมื่อตำแหน่งที่บัฟเฟอร์ที่รายงานมีขนาดใหญ่กว่าระยะเวลาที่รายงานอย่างไม่น่าเชื่อ (#2750) - แก้ไขการตรวจหาประเภทแทร็ก
TrackGroupโดยอัตโนมัติโดยไม่ละเว้นประเภท MIME ตัวอย่างที่กำหนดเอง และกลับไปใช้ประเภทแทร็กที่อาจไม่ถูกต้องจากประเภท MIME ของคอนเทนเนอร์ (#2860)
- อัปเดต
- ExoPlayer:
- เพิ่มการตรวจจับโปรแกรมเล่นที่ค้างซึ่งจะทริกเกอร์ข้อผิดพลาดของโปรแกรมเล่น
StuckPlayerExceptionหากโปรแกรมเล่นดูเหมือนจะค้าง ซึ่งจะเกิดขึ้นในกรณีต่อไปนี้ โดยคุณสามารถกำหนดค่าระยะหมดเวลาเริ่มต้นแต่ละรายการได้ในExoPlayer.Builderหากจำเป็น- หลังจาก
STATE_BUFFERINGเป็นเวลา 10 นาทีขณะพยายามเล่นและไม่มีความคืบหน้าในการบัฟเฟอร์ - หลังจาก
STATE_READYเป็นเวลา 10 วินาทีขณะพยายามเล่นและไม่มีความคืบหน้าในการเล่น - หลังจาก
STATE_READYเกินระยะเวลาที่ประกาศไว้ 1 นาทีโดยไม่ถึงจุดสิ้นสุดของรายการ - หลังจากผ่านไป 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) - เพิ่ม
cloneAndSet(int, int)ลงในShuffleOrderด้วยการติดตั้งใช้งานเริ่มต้น (#2834) - เพิ่มออฟเซ็ตการเล่นเนื้อหาต่อเมื่อข้ามการเล่นโฆษณาหลังจากการปรับการกรอหรือการเปลี่ยนอัตโนมัติ (#2484)
- เพิ่ม API เพื่อตั้งค่าและสังเกตพารามิเตอร์ตัวแปลงรหัสสำหรับแทร็กเสียงและวิดีโอ
ฟีเจอร์นี้ใช้กับโปรแกรมแสดงผลที่ใช้
MediaCodecและต้องใช้ API 29 ขึ้นไป- ใช้
ExoPlayer.setAudioCodecParameters()และExoPlayer.setVideoCodecParameters()เพื่อใช้พารามิเตอร์ - ใช้
ExoPlayer.addAudioCodecParametersChangeListener()และExoPlayer.addVideoCodecParametersChangeListener()เพื่อฟังการเปลี่ยนแปลง การสังเกตคีย์เฉพาะของผู้ให้บริการต้องใช้ API 31 ขึ้นไป
- ใช้
- แก้ไข
IllegalStateExceptionที่เกิดจากการตั้งค่าแหล่งที่มาของสื่อที่ว่างเปล่าหลังจากกรอไปยังตำแหน่งที่ไม่ใช่ 0 แล้วเตรียมเพลเยอร์ด้วยแหล่งที่มาของสื่อที่ไม่ว่างเปล่า - แก้ไขข้อบกพร่องที่การกรอไปยังรายการสื่ออื่นๆ ขณะอยู่ในโหมดสครับอาจทำให้เกิด
IllegalStateException - แก้ไข
NullPointerExceptionที่อาจเกิดขึ้นในDefaultPlaybackSessionManager(#2885) - เปิดใช้การปรับปรุงประสิทธิภาพการกรอวิดีโอสำหรับวิดีโอที่มีสิทธิ์
- เปิดใช้การถอดรหัสแบบไม่พร้อมกันใน MediaCodec อีกครั้งใน API 36 ขึ้นไป ซึ่งปัญหาการหมดเวลาเกี่ยวกับ API ของแพลตฟอร์มนี้ได้รับการแก้ไขแล้ว (#1641)
- เปลี่ยนค่าเริ่มต้นของ
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUsเป็น 15 มิลลิวินาที และเปิดใช้การทิ้งเฟรมวิดีโอที่มีประสิทธิภาพมากขึ้นก่อน ถอดรหัสวิดีโอที่มีสิทธิ์ - เพิ่มขีดจำกัดหน่วยความจำสูงสุดในการคำนวณหน่วยความจำอัตโนมัติใน
DefaultLoadControlซึ่งควรมีผลก็ต่อเมื่อมีการเลือกแทร็กมากเกินไปเท่านั้น (#2860) - แก้ไขข้อบกพร่องที่หากเล่นในเพลย์ลิสต์หรือโหมดเล่นซ้ำ การกรอในโหมดกรอใกล้กับตอนจบอาจทำให้กรอไปยังรายการสื่อถัดไป
- เพิ่มการตรวจจับโปรแกรมเล่นที่ค้างซึ่งจะทริกเกอร์ข้อผิดพลาดของโปรแกรมเล่น
- CompositionPlayer:
- เผยแพร่
CompositionPlayerภายใต้คำอธิบายประกอบ@ExperimentalApiใหม่เพื่อระบุว่าพร้อมให้ทดลองใช้ แต่ยังอยู่ระหว่างการพัฒนา API บางรายการอาจมีการเปลี่ยนแปลงอย่างมากในรุ่นต่อๆ ไป และมีปัญหาและข้อจำกัดที่ทราบเกี่ยวกับ Use Case บางอย่าง (บางรายการไม่มีเอกสารประกอบ) - เพิ่มการรองรับ
COMMAND_SET_AUDIO_ATTRIBUTESและการจัดการโฟกัสเสียงในCompositionPlayer - เพิ่มการรองรับการเปลี่ยนความเร็วในลำดับรองใน
CompositionPlayer - เพิ่มการรองรับ
EditedMediaItem.removeVideo
- เผยแพร่
- Transformer:
- ใช้
InAppMp4Muxerเป็น Muxer เริ่มต้น - เพิ่ม
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)
- MP3: เพิ่มขีดจำกัดการตรวจหาเป็น 128 kB เพื่อให้ตรงกับขีดจำกัดการค้นหาที่มีอยู่สำหรับไบต์การซิงค์ (#2713)
- MP3: เปลี่ยน
FLAG_ENABLE_INDEX_SEEKINGให้เลือกค้นหาข้อมูลจากส่วนหัวของข้อมูลเมตา (เช่น Xing และ VBRI) หากมี โดยจะเปลี่ยนกลับไปใช้การค้นหาตามดัชนีหากไม่มีข้อมูลการค้นหาอื่นๆ ซึ่งจะช่วยปรับปรุงประสิทธิภาพสำหรับไฟล์ที่มีข้อมูลเมตาการกรอ (#2839) - MP3: เปลี่ยน
Mp3Extractorเป็นค่าเริ่มต้นเป็นสมมติฐานอัตราบิตคงที่ (CBR) เมื่อไม่พบข้อมูลเมตาการค้นหา (เช่น Xing, VBRI) แม้ว่าจะตั้งค่าFLAG_ENABLE_INDEX_SEEKINGไว้ก็ตาม ซึ่งอิงตามประวัติข้อกำหนดของ MP3 โดยที่ CBR เป็นมาตรฐานและ VBR ต้องใช้ส่วนหัวที่ชัดเจน ซึ่งจะช่วยปรับปรุงความสามารถในการค้นหาไฟล์ที่ไม่มีข้อมูลเมตาได้ทันที โดยแลกกับความแม่นยำที่อาจเกิดขึ้นสำหรับไฟล์ VBR ที่ไม่มีส่วนหัว ตอนนี้ระบบจะใช้การค้นหาดัชนีเป็นทางเลือกสำรองหากสมมติฐาน CBR ไม่สามารถค้นหาได้ (เช่น สำหรับสตรีมที่มีความยาวไม่ทราบแน่ชัด) (#2848) - MP4: แก้ไขความกำกวมระหว่างประเภท MIME
audio/mpeg(MP3),audio/mpeg-L1และaudio/mpeg-L2โดยดูค่าเลเยอร์ของตัวอย่างแรกก่อนที่จะปล่อยรูปแบบแทร็กจากเครื่องมือแยก (#2683) - MP4: ปรับปรุงประสิทธิภาพการดมกลิ่นของไฟล์ขนาดใหญ่มากโดยสมมติว่ากล่อง
stblที่มีขนาดใหญ่กว่า 1 MB หมายความว่าไฟล์ต้องไม่กระจัดกระจาย (#2650) - MP4: เพิ่มการรองรับข้อมูลเมตา
©mvn(ชื่อการเคลื่อนไหว) และ©mvi(ดัชนีการเคลื่อนไหว) ซึ่งตอนนี้จะแสดงเป็นออบเจ็กต์TextInformationFrameในFormat.metadataโดยมีรหัสเป็นMVNMและMVINตามลำดับ (#2754) - MP4: ละเว้นแทร็กที่ไม่มีกล่อง
stsd(แทนที่จะแยกวิเคราะห์ทั้งไฟล์ไม่สำเร็จ) - Matroska: เพิ่มการรองรับการตรวจหา DTS-HD (#6225)
- แก้ไขปัญหาใน
MatroskaExtractorที่การกรออาจไม่แม่นยำสำหรับไฟล์ที่มีหลายแทร็ก ตอนนี้จุดเริ่มโฆษณาจะเชื่อมโยงกับแทร็กที่เกี่ยวข้องอย่างถูกต้องแล้ว ซึ่งจะช่วยให้การกรอวิดีโออย่างละเอียดมีความแม่นยำมากขึ้น - MPEG-TS: แก้ไข
IllegalArgumentExceptionจากReorderingBufferQueueที่เกิดจากแพ็กเก็ต PES ที่ไม่มีการประทับเวลา (#2764) - เพิ่มการรองรับการแยกรูปภาพเคลื่อนไหว HEIC ตอนนี้
HeifExtractorสามารถแยกวิเคราะห์ไฟล์ HEIC ที่มีแทร็กวิดีโอและเสียงแบบฝังได้แล้ว
- ผู้ตรวจสอบ
- เปิดตัวโมดูล
:media3-inspectorใหม่เพื่อทำหน้าที่เป็นศูนย์กลางเฉพาะสำหรับยูทิลิตีการตรวจสอบสื่อ ตอนนี้โมดูลนี้มีandroidx.media3.inspector.MetadataRetrieverใหม่ ซึ่งจะให้ API แบบรวมสำหรับทั้งข้อมูลเมตาและการดึงเฟรมandroidx.media3.exoplayer.MetadataRetrieverที่มีอยู่จะเลิกใช้งานแล้วเพื่อเปลี่ยนไปใช้เวอร์ชันใหม่นี้ - เปิดตัว
androidx.media3.inspector.FrameExtractorซึ่งเป็น API สาธารณะใหม่สำหรับการดึงข้อมูลเฟรม คลาสAutoCloseableนี้มีวิธีดึงเฟรมที่รองรับวิดีโอ HDR, เอฟเฟกต์วิดีโอ และการเลือกตัวถอดรหัสที่กำหนดเอง คุณควรสร้างผ่านBuilderสำหรับMediaItemที่เฉพาะเจาะจง - FrameExtractor: เพิ่ม
getThumbnail()เพื่อดึงเฟรมภาพปกที่เป็นตัวแทนจากไฟล์สื่อโดยไม่ต้องระบุการประทับเวลาที่เจาะจง - เพิ่ม
androidx.media3.inspector.MediaExtractorCompatซึ่งเป็นตัวแทนแบบดรอปอินสำหรับandroid.media.MediaExtractorของแพลตฟอร์มที่ให้วิธีแยกตัวอย่างสื่อที่เข้ารหัสแบบข้อมูลดิบจากไฟล์สื่อandroidx.media3.exoplayer.MediaExtractorCompatที่มีอยู่จะเลิกใช้งานแล้วเพื่อเปลี่ยนมาใช้คลาสใหม่นี้
- เปิดตัวโมดูล
- เสียง:
- ทำให้
AudioProcessorอินสแตนซ์รับรู้การกรอวิดีโอ - อนุญาตให้แทรกอินเทอร์เฟซ
AudioOutputProviderใหม่ลงในDefaultAudioSink.Builderเพื่อรองรับเส้นทางเอาต์พุตเสียงที่กำหนดเอง ค่าเริ่มต้นคือAudioTrackAudioOutputProvider - จัดการการกรอใน
GainProcessor - ใช้ความสามารถของโปรไฟล์และระดับตัวถอดรหัส AC-4 ในการประเมินการรองรับรูปแบบแทร็ก (#2580)
- หลีกเลี่ยงความล่าช้าที่อาจเกิดขึ้นจากการจัดการ Callback การเปลี่ยนแปลงการกำหนดเส้นทางที่จุดเริ่มต้นของการเล่น (#2646)
- อนุญาตให้ใช้ตัวแปลงสัญญาณซ้ำสำหรับรูปแบบ EAC3, EAC3-JOC และ AC-4 (#1346)
- เพิ่มการรองรับตัวอย่าง PCM แบบ Float ใน
Sonic - เพิ่มการรองรับตัวอย่าง PCM แบบ 16 บิตใน
ToFloatPcmAudioProcessor
- ทำให้
- วิดีโอ
- ปิดใช้การนำตัวแปลงรหัสมาใช้ซ้ำสำหรับเนื้อหา Dolby-Vision ที่มีโปรไฟล์ต่างกัน
- เปิดใช้การแก้ปัญหาอีกครั้งสำหรับคะแนนประสิทธิภาพที่รายงานไม่ถูกต้องสำหรับตัวแปลงรหัสที่ปลอดภัย (#2856)
- ข้อความ
- แก้ไขการแยกวิเคราะห์คำบรรยาย CEA-6/708 ในเนื้อหา Dolby Vision (#2775)
- รูปภาพ:
- แก้ไขปัญหา ScrubbingMode ที่โปรแกรมเล่นค้างขณะสครับแทร็กภาพขนาดย่อ DASH (#2815)
- DRM:
- เปลี่ยนประเภทการแสดงผลของเมธอด
MediaDrmCallbackจากbyte[]เป็นประเภทMediaDrmCallback.Responseใหม่ เพื่ออนุญาตให้แสดงผลข้อมูลเสริมที่ไม่บังคับ การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบของแหล่งที่มา แต่สามารถแก้ไขความเสียหายได้ง่ายๆ โดยการรวมค่าที่แสดงผลbyte[]ก่อนหน้าด้วยnew Responseก่อนแสดงผล - เพิ่มข้อมูลคำขอที่สำคัญ เช่น URL และเวลาในการตอบสนองไปยัง
AnalyticsListener.onDrmKeysLoaded(#1001) - ย้ายข้อมูลคำขอการจัดสรรจากพารามิเตอร์ของ URL ไปยังเนื้อหา POST
- เปลี่ยนประเภทการแสดงผลของเมธอด
- ผลกระทบ
- เพิ่ม
Presentation.copyWithUnsetSideRoundedToเพื่อปัดเศษด้านเอาต์พุตที่ไม่ได้ตั้งค่าเมื่อสร้างPresentationด้วยความยาวด้านเดียว
- เพิ่ม
- Muxer:
- เพิ่ม
MediaMuxerCompatซึ่งเป็นตัวแทนแบบดรอปอินสำหรับเฟรมเวิร์กMediaMuxer - เพิ่ม
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()เพื่ออนุญาตให้สร้างรูปภาพเคลื่อนไหว - เพิ่ม
WebmMuxerเพื่ออนุญาตให้รวมสตรีมสื่อOPUS,VORBIS,VP8และVP9เป็นรูปแบบไฟล์webm
- เพิ่ม
- ส่วนขยาย IMA:
- นำกฎ ProGuard ที่กำหนดเองออก เพื่อให้แอปใช้กฎที่เผยแพร่ในไฟล์เก็บถาวร IMA Android แทนได้
- เพิ่ม
ImaServerSideAdInsertionUriBuilder.setNetworkCodeซึ่งเป็น API ใหม่สำหรับตั้งค่ารหัสเครือข่าย Ad Manager ของ Google สำหรับ IMA SDK เพื่อจัดการตัวระบุโฆษณาตามที่ระบุไว้ในการตั้งค่า Ad Manager ของ Google รหัสเครือข่ายเป็นข้อมูลที่ไม่บังคับ แต่แนะนำให้ระบุสำหรับคำขอสตรีมแบบบริการเต็มรูปแบบ หากต้องการค้นหารหัสเครือข่าย โปรดดูบทความนี้ - อัปเกรดทรัพยากร Dependency ของ IMA เป็น 3.37.0 ซึ่งต้องเปิดใช้กระบวนการ Desugaring ของไลบรารีหลัก นอกจากนี้ แอปที่เกี่ยวข้องต้องเปิดใช้ฟีเจอร์นี้ด้วย ดูหมายเหตุการกำหนดค่าของ IMA * รองรับตัวเลือก UI ที่กำหนดเองของ IMA DAI ในเครื่องมือสร้าง URI ของ SSAI ตัวเลือก UI ที่กำหนดเองสำหรับการแทรกโฆษณาฝั่งเซิร์ฟเวอร์ ได้แก่ การรองรับการแสดงผล "ข้ามได้" และ "เกี่ยวกับโฆษณานี้" ปัจจุบันฟีเจอร์นี้พร้อมให้บริการแก่ผู้เผยแพร่โฆษณาบางรายที่อยู่ในรายการที่อนุญาต การเปลี่ยนแปลงนี้ยังอัปเกรดเวอร์ชัน IMA SDK เป็น 3.38.0 (บันทึกประจำรุ่น) เพื่อเข้าถึง API ตัวเลือก UI ที่กำหนดเองด้วย
- แก้ไขปัญหาที่ข้อผิดพลาดในการเตรียมเนื้อหาสำหรับเนื้อหาหลังโฆษณาจะได้รับการรายงานอย่างไม่ถูกต้องว่าเป็นข้อผิดพลาดในการเล่นโฆษณา (#2656)
- เซสชัน:
- เพิ่มพารามิเตอร์ใหม่ลงใน
MediaSession.Callback.onPlaybackResumptionเพื่อระบุว่าการเรียกใช้เกิดขึ้นเพื่อรวบรวมข้อมูลเท่านั้นหรือเพื่อเริ่มการเล่น (#1764) - อัปเดต
MediaSession.ControllerInfo.isTrustedเพื่อประกาศตัวควบคุมจากแอปของตัวเองว่าเชื่อถือได้ด้วย (#2542) - เพิ่ม
MediaSessionService.triggerNotificationUpdateเพื่อทริกเกอร์การอัปเดตการแจ้งเตือนด้วยตนเอง (#1833) - เพิ่ม
ProgressListenerไปยังเมธอดคำสั่งที่กำหนดเอง - เปลี่ยนค่าเริ่มต้นของ
MediaLibrarySession.Builder.setLibraryErrorReplicationModeเป็นไม่ร้ายแรง - เพิ่มพารามิเตอร์
ContextลงในMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625) - อ่านรหัสการควบคุมระดับเสียงจากแพลตฟอร์ม
PlaybackInfoแทนการดึงข้อมูลผ่าน Binder ซึ่งจะช่วยให้มั่นใจได้ว่าระบบจะอ่านประเภทการเล่นและรหัสการควบคุมระดับเสียงแบบอะตอมและตรงกัน - แก้ไขข้อบกพร่องที่เหตุการณ์สำคัญ
ACTION_UPถูกกรองออกก่อนที่จะส่งไปยัง Callback เพื่อการจัดการที่กำหนดเอง ซึ่งจะทำให้มีความเท่าเทียมกับสิ่งที่ 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) - เพิ่ม
CommandButton.executeActionเพื่อให้ตัวควบคุมเรียกใช้การดำเนินการที่ต้องการได้ง่ายขึ้น นอกจากนี้ยังอนุญาตให้ระบุพารามิเตอร์สำหรับคำสั่งบางอย่างของเพลเยอร์และเซสชันเพื่อกำหนดการดำเนินการที่จะทริกเกอร์ - เพิ่มความเข้ากันได้แบบย้อนหลังสำหรับอินสแตนซ์
CommandButtonโดยใช้Player.CommandหรือSessionCommandที่ไม่ใช่แบบกำหนดเองเพื่อกำหนดการดำเนินการ ตอนนี้เซสชันสื่อของแพลตฟอร์มจะแสดงข้อมูลเหล่านี้อย่างถูกต้อง เช่น สำหรับ UI ของระบบหรือ Android Auto - แก้ไขปัญหาที่
Bitmapเดียวกันถูกบีบอัดหลายครั้งเมื่อเชื่อมต่อMediaControllerกับเซสชันสื่อของแพลตฟอร์ม
- เพิ่มพารามิเตอร์ใหม่ลงใน
- UI:
- เพิ่มคลาส
ProgressStateWithTickIntervalและ ComposablerememberProgressStateWithTickIntervalที่เกี่ยวข้องลงในโมดูลmedia3-ui-composeตัวเก็บสถานะนี้ใช้ในdemo-composeเพื่อแสดงตำแหน่งและระยะเวลาปัจจุบันในรูปแบบข้อความ - เพิ่ม
MuteButtonStateลงในui-composeซึ่งจะจัดการการปิดเสียงของระดับเสียงPlayerตัวเก็บสถานะนี้ใช้ในdemo-composeเพื่อแสดงปุ่มเปิด/ปิดเสียง - เพิ่มคลาส
ProgressStateWithTickCountและrememberProgressStateWithTickCountComposable ที่เกี่ยวข้องลงในโมดูลmedia3-ui-composeตัวเก็บสถานะนี้ใช้ในdemo-composeเพื่อแสดงความคืบหน้าเป็นแถบความคืบหน้าแนวนอนแบบอ่านอย่างเดียว - เพิ่ม
ContentFrameComposable ลงในmedia3-ui-composeซึ่งรวมการจัดการPlayerSurfaceเข้ากับการปรับขนาดสัดส่วนภาพและการปิดด้วยชัตเตอร์ - แก้ไขข้อบกพร่องที่ทราบของแพลตฟอร์ม API 34 ซึ่งทำให้วิดีโอถูกยืด/ครอบตัดเมื่อใช้
SurfaceViewภายใน ComposeAndroidViewจึงส่งผลต่อ ComposableContentFrameและPlayerSurfaceที่มีSURFACE_TYPE_SURFACE_VIEW(#1237, #2811) - สร้างโมดูล
media3-ui-compose-material3ใหม่และเพิ่ม Composable ที่มีธีม Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton) ลงในโมดูล - เพิ่ม Composable
TimeTextลงในmedia3-ui-compose-material3เพื่อแสดงความคืบหน้าของโปรแกรมเล่นในรูปแบบข้อความ โดยสามารถกำหนดค่าให้แสดงตำแหน่งปัจจุบัน ระยะเวลา หรือเวลาที่เหลือได้ - เพิ่มการรองรับการวางปุ่มเส้นทางสื่อใน
PlayerView - ใช้
BidiFormatterเพื่อแสดงเครื่องหมายวรรคตอนอย่างถูกต้องในคำบรรยายที่เป็นข้อความแบบอ่านจากขวาไปซ้าย (#11214)
- เพิ่มคลาส
- ส่วนขยาย HLS:
- แยกวิเคราะห์แอตทริบิวต์การข้ามโฆษณาคั่นระหว่างหน้าของ HLS
- แมปแอตทริบิวต์การควบคุมการข้ามจากเพลย์ลิสต์ HLS และเอกสารรายการเนื้อหาลงใน
AdPlaybackStateสำหรับการเข้าถึงแบบสาธารณะ - แก้ไขข้อบกพร่องที่เวลาเริ่มต้นของเพลย์ลิสต์หายไปเมื่อนำแท็ก EXT-X-PROGRAM-START-DATE ที่กำหนดเวลาเริ่มต้นออกจากเพลย์ลิสต์ (#2760)
- ใช้การค้นหาแบบไบนารีเพื่อค้นหาดัชนีกลุ่มของตำแหน่งที่ระบุในเพลย์ลิสต์ (#2826)
- เพิ่ม
HlsInterstitialsAdsLoader.skipCurrentAd()และskipCurrentAdGroup()และเมธอดที่เกี่ยวข้องเพื่อข้ามโฆษณาและกลุ่มโฆษณาตามดัชนี - เพิ่ม
HlsInterstitialsAdsLoader.Listener.onAdStartedเพื่อรายงานการเริ่มต้นของระยะเวลาโฆษณา (#2859) - ยอมรับการเว้นวรรคเป็นตัวคั่นวันที่/เวลาในสตริงวันที่และเวลา ISO 8601
- จัดการการดึงข้อมูลกลุ่มถัดไปสำหรับ
HlsMediaPlaylistที่ไม่มีกลุ่มอย่างเหมาะสม (#2821) - ใช้ตำแหน่งเริ่มต้นตามค่าเริ่มต้นสำหรับโฆษณาตอนต้นที่มีไลฟ์สด
- ส่วนขยาย 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ก่อนหน้านี้เพื่อเพิ่มความเร็วในการถอดรหัส - ส่วนขยาย FFmpeg: แก้ไขปัญหาที่ทำให้ไฟล์ FLAC บางไฟล์เล่นไม่ได้โดยตรวจสอบว่าบล็อก
STREAMINFOได้รับการแยกวิเคราะห์อย่างถูกต้องและส่งไปยังตัวถอดรหัส (#2887)
- ส่วนขยาย AV1: ตอนนี้ตัวถอดรหัสซอฟต์แวร์ AV1 ใช้ไลบรารี
- ส่วนขยาย Cast
- เพิ่ม
CastPlayer.Builderซึ่งช่วยให้CastPlayerเล่นได้ทั้งในเครื่องและผ่าน Cast หากต้องการคงลักษณะการทำงานแบบเก่าของ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แทน - นำ
BitmapFactoryImageDecoder.BitmapDecoderออก โปรดใช้ExternallyLoadedImageDecoderแทน - นำ
ShadowMediaCodecConfig.forAllSupportedMimeTypes()ที่เลิกใช้งานแล้วออก โปรดใช้ShadowMediaCodecConfig.withAllDefaultSupportedCodecs()แทน - นำ
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()ที่เลิกใช้งานแล้วออก โปรดใช้ShadowMediaCodecConfig.withNoDefaultSupportedCodecs()แทน
- นำคอนสตรักเตอร์
1.9.0-rc01
1 ธันวาคม 2025
ใช้เวอร์ชันเสถียร 1.9.0
1.9.0-beta01
20 พฤศจิกายน 2025
ใช้เวอร์ชันเสถียร 1.9.0
1.9.0-alpha01
22 ตุลาคม 2025
ใช้เวอร์ชันเสถียร 1.9.0
เวอร์ชัน 1.8.0
1.8.1
21 พฤษภาคม 2026
เวอร์ชัน 1.8.1 มีคอมมิตต่อไปนี้
- ผลกระทบ
- ตั้งค่า
GL_DRAW_BUFFERและGL_READ_BUFFERอย่างชัดเจนเมื่อเปลี่ยนจากบริบทที่ไม่มีแพลตฟอร์ม
- ตั้งค่า
เวอร์ชัน 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) - เพิ่มขนาดบัฟเฟอร์รูปภาพเริ่มต้นจาก 128kB (ข้อผิดพลาดในการคัดลอกและวางจากแทร็กข้อความ) เป็น 26MB ซึ่งใหญ่พอสำหรับรูปภาพ Ultra HDR ขนาด 50 ล้านพิกเซล (#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 ให้ใช้ 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)
- แก้ไขข้อบกพร่องที่ไม่มีการเรียกใช้
- วิดีโอ
- ขยายวิธีแก้ปัญหาชั่วคราวสำหรับแพลตฟอร์มที่แยกออกจากกันไปยังอุปกรณ์ "lenovo" และ "motorola" (#2059)
- ปรับปรุงการแสดงเฟรมวิดีโอที่ราบรื่นเมื่อเริ่มต้นเมื่อตัวอย่างเสียงไม่เริ่มที่ตำแหน่งที่ขออย่างถูกต้อง
- ขยายวิธีแก้ปัญหาชั่วคราวสำหรับแพลตฟอร์มที่แยกออกไปยังอุปกรณ์ "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-frame (#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เมื่อพยายามแสดงรูปภาพขนาดใหญ่มาก (เช่น 50 ล้านพิกเซล) - เปลี่ยนลายเซ็นของ
DefaultRenderersFactory.getImageDecoderFactory()เพื่อรับพารามิเตอร์Context - ปรับขนาดเอาต์พุตบิตแมปสูงสุดที่ใช้ใน
CompositionPlayerให้สอดคล้องกับขนาดที่ใช้ในTransformerอยู่แล้ว (หมายความว่าCompositionPlayerจะไม่พิจารณาขนาดการแสดงผลเมื่อถอดรหัสบิตแมป ซึ่งต่างจากExoPlayer)
- จำกัดบิตแมปที่ถอดรหัสแล้วให้มีขนาดเท่ากับขนาดที่แสดงใน
- DRM:
- เพิ่มโอเวอร์โหลดใหม่ของ
OfflineLicenseHelper.newWidevineInstanceที่ยอมรับMediaItem.DrmConfigurationเพื่อให้ใช้ส่วนหัวของคำขอ HTTP ได้อย่างถูกต้อง (#2169)
- เพิ่มโอเวอร์โหลดใหม่ของ
- ผลกระทบ
- เพิ่ม
Presentation.createForShortSide(int)ที่สร้างPresentationซึ่งช่วยให้มั่นใจว่าด้านที่สั้นที่สุดจะตรงกับค่าที่ระบุเสมอ ไม่ว่าการวางแนวอินพุตจะเป็นอย่างไร
- เพิ่ม
- Muxer:
- แก้ไขข้อบกพร่องที่ไม่ได้ตั้งค่าแฟล็กตัวอย่างที่ถูกต้องสำหรับตัวอย่างเสียงใน MP4 ที่แยกส่วน
- ตอนนี้ API
writeSampleData()ใช้คลาสBufferInfoที่เจาะจงสำหรับ Muxer แทนMediaCodec.BufferInfo - เพิ่ม
Muxer.Factory#supportsWritingNegativeTimestampsInEditListซึ่งมีค่าเริ่มต้นเป็น "เท็จ"
- ส่วนขยาย 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พยายามกรอภายในบัฟเฟอร์เมื่อไม่มีกลุ่มข้อมูลที่พร้อมใช้งานในบัฟเฟอร์ #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เพื่อกำหนดค่าโปรแกรมเปลี่ยนไฟล์และโปรแกรมถอดรหัส Shadow แทน - แทนที่คำนำหน้า "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 มี Commit เหล่านี้
- ไลบรารีทั่วไป:
- เพิ่มเมธอด
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)
- เซสชัน:
- ลดระยะหมดเวลาการรวมสำหรับ Callback ของแพลตฟอร์ม
MediaSessionจาก 500 เป็น 100 มิลลิวินาที และเพิ่ม Setter ทดลองเพื่อให้แอปกำหนดค่านี้ได้ - แก้ไขปัญหาที่การแจ้งเตือนปรากฏขึ้นอีกครั้งหลังจากที่ผู้ใช้ปิดไปแล้ว (#2302)
- แก้ไขข้อบกพร่องที่เซสชันแสดงไทม์ไลน์รายการเดียวเมื่อเพลเยอร์ที่รวมไว้ว่างเปล่าจริงๆ กรณีนี้เกิดขึ้นเมื่อเพลเยอร์ที่รวมไว้ไม่มี
COMMAND_GET_TIMELINEพร้อมใช้งานขณะที่COMMAND_GET_CURRENT_MEDIA_ITEMพร้อมใช้งานและเพลเยอร์ที่รวมไว้ว่างเปล่า (#2320) - แก้ไขข้อบกพร่องที่การเรียกใช้
MediaSessionService.setMediaNotificationProviderถูกละเว้นโดยไม่มีการแจ้งเตือนหลังจากมีการโต้ตอบอื่นๆ กับบริการ เช่นsetForegroundServiceTimeoutMs(#2305)
- ลดระยะหมดเวลาการรวมสำหรับ Callback ของแพลตฟอร์ม
- 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 ที่ไม่กระจาย Fragment ส่วนInAppFragmentedMp4Muxerใช้สำหรับสร้างไฟล์ MP4 ที่กระจาย Fragment - ย้ายอินเทอร์เฟซ
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 แบบ Float ไปยัง
ChannelMappingAudioProcessorและTrimmingAudioProcessor
- แก้ไข
- วิดีโอ
- เปลี่ยน
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceเป็น Protected เพื่อให้แอปพลิเคชันสามารถลบล้างเพื่อบล็อกการใช้พื้นผิวตัวยึดตำแหน่ง (#1905) - เพิ่มการแยกวิเคราะห์ทรัพยากร Dependency ของตัวอย่าง AV1
ExoPlayerเวอร์ชันทดลองเพื่อเร่งความเร็วในการกรอวิดีโอ เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI ใหม่ - เพิ่ม API
ExoPlayerเวอร์ชันทดลองเพื่อทิ้งบัฟเฟอร์อินพุตของตัวถอดรหัสMediaCodecVideoRendererที่ล่าช้าซึ่งไม่ได้ใช้ เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs* แก้ไขปัญหาที่เพลเยอร์ที่ไม่มี Surface พร้อมใช้งานทันทีและถอดรหัสเฟรมที่รอดำเนินการช้ามาก (#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สามารถเป็นคลาสย่อยเพื่ออนุญาตการตั้งค่าการวางซ้อนแบบไดนามิก
- ย้ายฟังก์ชันการทำงานของ
- Muxer:
- ย้าย
MuxerExceptionออกจากอินเทอร์เฟซMuxerเพื่อหลีกเลี่ยงชื่อที่สมบูรณ์และยาวมาก - เปลี่ยนชื่อเมธอด
setSampleCopyEnabled()เป็นsetSampleCopyingEnabled()ทั้งในMp4Muxer.BuilderและFragmentedMp4Muxer.Builder - ตอนนี้
Mp4Muxer.addTrack()และFragmentedMp4Muxer.addTrack()จะแสดงผลรหัสติดตามintแทนTrackToken Mp4MuxerและFragmentedMp4Muxerไม่ใช้อินเทอร์เฟซMuxerอีกต่อไป- ปิดใช้การจัดกลุ่มและการคัดลอกตัวอย่าง
Mp4Muxerโดยค่าเริ่มต้น - แก้ไขข้อบกพร่องใน
FragmentedMp4Muxerที่สร้างส่วนย่อยจำนวนมากเมื่อเขียนเฉพาะแทร็กเสียง
- ย้าย
- เซสชัน:
- คงสถานะบริการที่ทำงานอยู่เบื้องหน้าไว้อีก 10 นาทีเมื่อการเล่นหยุดชั่วคราว หยุด หรือไม่สำเร็จ ซึ่งช่วยให้ผู้ใช้เล่นต่อได้ภายในระยะหมดเวลานี้โดยไม่ต้องเสี่ยงกับการจำกัดบริการที่ทำงานอยู่เบื้องหน้าในอุปกรณ์ต่างๆ โปรดทราบว่าการเรียกใช้
player.pause()เพียงอย่างเดียวจะไม่สามารถใช้เพื่อหยุดบริการที่ทำงานอยู่เบื้องหน้าก่อนstopSelf()ได้อีกต่อไป เมื่อลบล้างonTaskRemovedให้ใช้MediaSessionService.pauseAllPlayersAndStopSelf()แทน - แสดงการแจ้งเตือนเมื่อการเล่นเกิดข้อผิดพลาดหรือหยุดลง ระบบจะนำการแจ้งเตือนออกก็ต่อเมื่อมีการล้างเพลย์ลิสต์หรือปล่อยเพลเยอร์เท่านั้น
- ปรับปรุงการจัดการการดำเนินการ ACTION_PLAY และ ACTION_PAUSE ของ MediaSession ในแพลตฟอร์ม Android ให้ตั้งค่าเพียงรายการเดียวตามคำสั่งที่ใช้ได้ และยอมรับด้วยหากมีการตั้งค่าเพียงรายการเดียว
- เพิ่ม
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
- เพิ่มทรัพยากร Dependency
play-services-cast-frameworkเป็น 21.5.0 เพื่อแก้ไขข้อขัดข้องFLAG_MUTABLEในแอปที่กำหนดเป้าหมายเป็น API 34 ขึ้นไปในอุปกรณ์ที่ติดตั้งบริการ Google Play แต่ปิดใช้ (#2178)
- เพิ่มทรัพยากร Dependency
- แอปสาธิต:
- ขยาย
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.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentและExoPlayer.DeviceComponentออกแล้ว - นำ
androidx.media3.exoplayer.audio.SonicAudioProcessorออกแล้ว - นำเมธอด
DownloadHelperที่เลิกใช้งานแล้วต่อไปนี้ออก- ตัวสร้าง
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])ให้ใช้DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)แทน getRendererCapabilities(RenderersFactory)คุณสามารถใช้ฟังก์ชันการทำงานที่เทียบเท่าได้โดยการสร้างDefaultRendererCapabilitiesListด้วยRenderersFactoryและเรียกใช้DefaultRendererCapabilitiesList.getRendererCapabilities()- นำวิธีการชำระเงิน
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 มี Commit เหล่านี้
- ไลบรารีทั่วไป:
- เพิ่ม
ForwardingSimpleBasePlayerที่อนุญาตให้ส่งต่อไปยังเพลเยอร์อื่นโดยมีการปรับเปลี่ยนเล็กน้อย พร้อมทั้งรับประกันความสอดคล้องอย่างสมบูรณ์และการจัดการ Listener (#1183) - แทนที่
SimpleBasePlayer.State.playlistด้วยเมธอดgetPlaylist() - เพิ่มการลบล้างสำหรับ
SimpleBasePlayer.State.Builder.setPlaylist()เพื่อระบุTimelineและTracksและMetadataปัจจุบันโดยตรงแทนการสร้างโครงสร้างเพลย์ลิสต์ - เพิ่ม
minSdkเป็น 21 (Android Lollipop) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด - เพิ่มอาร์ติแฟกต์
androidx.media3:media3-common-ktxซึ่งมีฟังก์ชันการทำงานเฉพาะ Kotlin ที่สร้างขึ้นบนไลบรารี Common - เพิ่มฟังก์ชันส่วนขยาย
Player.listenที่ระงับเพื่อหมุน Coroutine เพื่อฟังPlayer.Eventsไปยังไลบรารีmedia3-common-ktx - นำคำอธิบายประกอบ
@DoNotInlineออกจากคลาสภายในที่อยู่นอกบรรทัดด้วยตนเองซึ่งออกแบบมาเพื่อหลีกเลี่ยงความล้มเหลวในการยืนยันคลาสรันไทม์ R8 เวอร์ชันล่าสุดจะทำการเรียกใช้แบบ Out-of-line โดยอัตโนมัติเพื่อหลีกเลี่ยงความล้มเหลวของรันไทม์ (ดังนั้นจึงไม่จำเป็นต้องทำการเรียกใช้แบบ Out-of-line ด้วยตนเองอีกต่อไป) ผู้ใช้ Gradle ทั้งหมดของไลบรารีต้องใช้ปลั๊กอิน Android Gradle เวอร์ชันที่ใช้ R8 เวอร์ชันที่ดำเนินการนี้อยู่แล้ว เนื่องจากcompileSdk = 35ผู้ใช้ไลบรารีที่มีระบบบิลด์ที่ไม่ใช่ Gradle จะต้องตรวจสอบว่าขั้นตอนการย่อ/สร้างความสับสนที่เทียบเท่า R8 ทำกระบวนการ Out-of-lining อัตโนมัติที่คล้ายกันเพื่อหลีกเลี่ยงความล้มเหลวในการยืนยันคลาสรันไทม์ การเปลี่ยนแปลงนี้ได้ดำเนินการไปแล้วในไลบรารี 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[])และทำเครื่องหมายเมธอดเป็น final เพื่อป้องกันการลบล้าง ควรใช้DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])ใหม่แทน - รายงานเหตุการณ์
MediaSourceEventListenerจากแหล่งที่มาสำรองในMergingMediaSourceซึ่งจะส่งผลให้มีการรายงานเหตุการณ์การเริ่ม/ข้อผิดพลาด/ยกเลิก/เสร็จสมบูรณ์ของการโหลดสำหรับคำบรรยายที่ไซด์โหลด (คำบรรยายที่เพิ่มด้วยMediaItem.LocalConfiguration.subtitleConfigurations) ซึ่งอาจปรากฏเป็นเหตุการณ์การโหลดที่ซ้ำกันซึ่งส่งมาจากAnalyticsListener - ป้องกันไม่ให้ข้อผิดพลาดเกี่ยวกับคำบรรยายและข้อมูลเมตาทำให้การเล่นหยุดลงโดยสมบูรณ์
แต่ระบบจะปิดใช้แทร็กที่มีปัญหาและเล่นแทร็กที่เหลือต่อไป (#1722)
- ในการจัดการคำบรรยายใหม่ (ระหว่างการดึงข้อมูล) ระบบจะแสดงข้อผิดพลาดในการแยกวิเคราะห์ (เช่น ข้อมูลคำบรรยายไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404) ที่เกี่ยวข้องผ่าน Callback ของ
onLoadError - ในการจัดการคำบรรยายแบบเดิม (ระหว่างการแสดงผล) ระบบจะส่งเฉพาะข้อผิดพลาดในการโหลดที่เกี่ยวข้องผ่าน Callback
onLoadErrorขณะที่ข้อผิดพลาดในการแยกวิเคราะห์จะถูกละเว้นโดยไม่มีการแจ้งเตือน (ซึ่งเป็นลักษณะการทำงานที่มีอยู่แล้ว)
- ในการจัดการคำบรรยายใหม่ (ระหว่างการดึงข้อมูล) ระบบจะแสดงข้อผิดพลาดในการแยกวิเคราะห์ (เช่น ข้อมูลคำบรรยายไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404) ที่เกี่ยวข้องผ่าน Callback ของ
- แก้ไขข้อบกพร่องที่รายการเพลย์ลิสต์หรือระยะเวลาในสตรีม DASH แบบหลายระยะเวลาซึ่งมีระยะเวลาไม่ตรงกับเนื้อหาจริงอาจทำให้เฟรมค้างที่ส่วนท้ายของรายการ (#1698)
- เพิ่ม Setter ลงใน
SntpClientเพื่อตั้งค่าเวลาสูงสุดที่ผ่านไปนับตั้งแต่การอัปเดตครั้งล่าสุด หลังจากนั้นไคลเอ็นต์จะเริ่มต้นใหม่ (#1794)
- ตอนนี้คุณสามารถเรียกใช้
- Transformer:
- เพิ่ม
SurfaceAssetLoaderซึ่งรองรับการจัดคิวข้อมูลวิดีโอไปยัง Transformer ผ่านSurface ImageAssetLoaderรายงานอินพุตที่ไม่รองรับผ่านAssetLoader.onErrorแทนที่จะแสดงIllegalStateException- กำหนดให้ต้องตั้งค่าระยะเวลาของรูปภาพโดยใช้
MediaItem.Builder.setImageDurationMsสำหรับการส่งออกรูปภาพ - เพิ่มการรองรับการส่งออกสำหรับช่องว่างในลำดับของ EditedMediaItems เสียง
- เพิ่ม
- การเลือกแทร็ก
DefaultTrackSelector: เลือกใช้เสียงแบบออบเจ็กต์มากกว่าเสียงแบบช่องเมื่อปัจจัยอื่นๆ เท่ากัน
- เครื่องสกัดน้ำผลไม้
- อนุญาตให้
Mp4ExtractorและFragmentedMp4Extractorระบุตัวอย่าง H264 ที่ตัวอย่างต่อมาไม่ได้ใช้เป็นข้อมูลอ้างอิง - เพิ่มตัวเลือกเพื่อเปิดใช้การค้นหาตามดัชนีใน
AmrExtractor - ถือว่าไฟล์ MP3 ที่มีข้อมูลมากกว่า 128 KB ระหว่างเฟรมที่ถูกต้องถูกตัดให้สั้นลง (แทนที่จะไม่ถูกต้อง) ซึ่งหมายความว่าไฟล์ที่มีข้อมูลที่ไม่ใช่ MP3 อยู่ท้ายไฟล์และไม่มีข้อมูลเมตาอื่นๆ ที่ระบุความยาวของไบต์ MP3 จะหยุดเล่นเมื่อสิ้นสุดข้อมูล MP3 แทนที่จะหยุดทำงานพร้อมข้อผิดพลาด
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563) - แก้ไขการจัดการตัวอย่างโฆษณาตอนต้นสำหรับตำแหน่งเริ่มต้นของสื่อที่ไม่ใช่คีย์เฟรมเมื่อประมวลผลรายการแก้ไขในไฟล์ MP4 (#1659)
- ปรับปรุงการคำนวณอัตราเฟรมโดยใช้ระยะเวลาของสื่อจากกล่อง
mdhdในMp4ExtractorและFragmentedMp4Extractor(#1531) - แก้ไขการปรับขนาด
media_timeที่ไม่ถูกต้องในรายการแก้ไข MP4 แม้ว่าsegment_durationจะปรับขนาดอย่างถูกต้องแล้วโดยใช้สเกลเวลาของภาพยนตร์ แต่ตอนนี้media_timeได้รับการปรับขนาดอย่างเหมาะสมโดยใช้สเกลเวลาของแทร็กตามที่มาตรฐานรูปแบบ MP4 กำหนด (#1792) - จัดการเฟรมที่ไม่อยู่ในลำดับในการคำนวณ
endIndicesสำหรับ MP4 ที่มีรายการแก้ไข (#1797) - แก้ไขการแยกวิเคราะห์ระยะเวลาของสื่อในกล่อง
mdhdของไฟล์ MP4 เพื่อจัดการค่า-1(#1819) - เพิ่มการรองรับการระบุกล่อง
h263ในไฟล์ MP4 สำหรับวิดีโอ H.263 (#1821) - เพิ่มการรองรับรูปแบบไฟล์สื่อพื้นฐาน ISO AC-4 ระดับ 4 (#1265)
- อนุญาตให้
- DataSource:
- อัปเดต
HttpEngineDataSourceเพื่ออนุญาตให้ใช้ตั้งแต่เวอร์ชัน S ส่วนขยาย 7 แทนระดับ API 34 (#1262) DataSourceContractTest: ยืนยันว่าDataSource.getUri()แสดงผล URI ที่ได้รับการแก้ไข (ตามที่ระบุไว้ในเอกสาร) ในกรณีที่ URI นี้แตกต่างจาก URI คำขอ การทดสอบจะระบุได้โดยใช้เมธอดDataSourceContractTest.TestResource.Builder.setResolvedUri()ใหม่DataSourceContractTest: ยืนยันว่าDataSource.getUri()และgetResponseHeaders()แสดงผลค่า "เปิด" หลังจากเรียกใช้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 ที่ปลอดภัย 60 FPS ถูกทำเครื่องหมายว่าไม่รองรับ (#1619)
- เพิ่มวิธีแก้ปัญหาสำหรับตัวแปลงรหัสที่ค้างหลังจากตัวอย่างสุดท้ายโดยไม่แสดงสัญญาณสิ้นสุดสตรีม
- ข้อความ
- เพิ่ม
VoiceSpanที่กำหนดเองและป้อนข้อมูลสำหรับช่วงเสียง WebVTT (#1632) - ตรวจสอบว่า WebVTT ใน HLS ที่มีการประทับเวลาคำบรรยายขนาดใหญ่มาก (ซึ่งเกิน
long64 บิตเมื่อแสดงเป็นไมโครวินาทีและคูณด้วยฐานเวลา MPEG90,000) แสดงขึ้น (#1763) - รองรับคำบรรยาย CEA-608 ในเนื้อหา Dolby Vision (#1820)
- แก้ไขปัญหาการเล่นค้างในสตรีมแบบหลายช่วงเวลาของ DASH เมื่อเปิดใช้คำบรรยาย CEA-608 (#1863)
- เพิ่ม
- ข้อมูลเมตา:
- กำหนดประเภท
C.TRACK_TYPE_METADATAให้กับแทร็กที่มีเนื้อหา icy หรือ vnd.dvb.ait
- กำหนดประเภท
- รูปภาพ:
- เพิ่ม
ExternallyLoadedImageDecoderเพื่อให้ผสานรวมกับไลบรารีการโหลดรูปภาพภายนอก เช่น Glide หรือ Coil ได้ง่ายขึ้น
- เพิ่ม
- DataSource:
- เพิ่ม
FileDescriptorDataSourceซึ่งเป็นDataSourceใหม่ที่ใช้เพื่ออ่านจากFileDescriptorได้ (#3757)
- เพิ่ม
- ผลกระทบ
- เพิ่มวิธีแก้ปัญหาชั่วคราวของ
DefaultVideoFrameProcessorสำหรับการปรับขนาดSurfaceTextureเล็กน้อยSurfaceTextureอาจรวมถึงการปรับขนาดเล็กน้อยที่ตัดขอบ 1 เท็กเซลรอบขอบของบัฟเฟอร์ที่ครอบตัด ตอนนี้เราได้จัดการปัญหานี้แล้ว เพื่อให้เอาต์พุตใกล้เคียงกับที่คาดไว้มากขึ้น - เร่งความเร็ว
DefaultVideoFrameProcessor.queueInputBitmap()ด้วยเหตุนี้ การสร้างวิดีโอจากภาพด้วยTransformerจึงรวดเร็วยิ่งขึ้น
- เพิ่มวิธีแก้ปัญหาชั่วคราวของ
- ส่วนขยาย IMA:
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
ArrayIndexOutOfBoundsExceptionในImaServerSideAdInsertionMediaSource - แก้ไขข้อบกพร่องที่สตรีม DAI ที่แทรกฝั่งเซิร์ฟเวอร์โดยไม่มีโฆษณาตอนต้นอาจส่งผลให้เกิด
ArrayIndexOutOfBoundsExceptionเมื่อเล่นผ่านโฆษณาตอนกลางรายการสุดท้าย (#1741)
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
- เซสชัน:
- เพิ่ม
MediaButtonReceiver.shouldStartForegroundService(Intent)เพื่ออนุญาตให้แอปยับยั้งคำสั่งเล่นที่เข้ามาเพื่อกลับมาเล่นต่อโดยการลบล้างเมธอดนี้ โดยค่าเริ่มต้น บริการจะเริ่มทำงานเสมอและไม่สามารถระงับการเล่นได้โดยที่ระบบไม่ทำให้บริการขัดข้องด้วยForegroundServiceDidNotStartInTimeException(#1528) - แก้ไขข้อบกพร่องที่ทำให้ระบบส่งคำสั่งที่กำหนดเองจาก
MediaBrowserไปยังMediaSessionCompat.Callbackแทนที่จะเป็นตัวแปรMediaBrowserServiceCompatของเมธอดเมื่อเชื่อมต่อกับบริการเดิม ซึ่งทำให้MediaBrowserไม่ได้รับค่าที่แสดงผลจริงที่ส่งกลับมาจากบริการเดิม (#1474) - จัดการ
IllegalArgumentExceptionที่เกิดจากอุปกรณ์ของผู้ผลิตบางรายเมื่อตั้งค่า Broadcast Receiver สำหรับ 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 พร้อมการสร้างเสียงรอบทิศทาง รวมถึงการติดตามการเคลื่อนไหวของศีรษะ (ไม่บังคับ) แต่ปัจจุบันยังไม่รองรับการเล่นแบบสองหู
- เพิ่มการรองรับหน้าขนาด 16 KB สำหรับส่วนขยายตัวถอดรหัสใน Android 15 (#1685)
- เพิ่มโมดูลตัวถอดรหัส IAMF ซึ่งรองรับการเล่นไฟล์ MP4 ที่มีแทร็ก IAMF โดยใช้ไลบรารีแบบเนทีฟ libiamf เพื่อสังเคราะห์เสียง
- ส่วนขยาย Cast
- หยุดล้างไทม์ไลน์หลังจาก CastSession ยกเลิกการเชื่อมต่อ ซึ่งจะช่วยให้แอปผู้ส่งกลับมาเล่นในเครื่องได้อีกครั้งหลังจากยกเลิกการเชื่อมต่อ
- ป้อน
DeviceInfoของ CastPlayer เมื่อระบุContextซึ่งจะช่วยให้ลิงก์MediaSessionกับRoutingSessionได้ ซึ่งจำเป็นสำหรับการผสานรวมตัวสลับเอาต์พุต (#1056)
- ยูทิลิตีการทดสอบ
- ตอนนี้
DataSourceContractTestมีการทดสอบเพื่อยืนยันสิ่งต่อไปนี้- อัปเดตสตรีมอินพุต
read positionแล้ว - ใช้บัฟเฟอร์เอาต์พุต
offsetอย่างถูกต้องแล้ว
- อัปเดตสตรีมอินพุต
- ตอนนี้
- แอปเดโม
- แก้ไขปัญหาหน่วยความจำรั่วไหลในแอปสาธิตแบบสั้น (#1839)
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.hasPrevious,Player.hasPreviousWindow()ที่เลิกใช้งานแล้วออก โปรดใช้Player.hasPreviousMediaItem()แทน - นำเมธอด
Player.previous()ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToPreviousMediaItem()แทน - นำเมธอด
DrmSessionEventListener.onDrmSessionAcquiredที่เลิกใช้งานแล้วออก - นำคอนสตรัคเตอร์
DefaultEncoderFactoryที่เลิกใช้งานแล้วออก โปรดใช้DefaultEncoderFactory.Builderแทน
- นำ
เวอร์ชัน 1.5.0-rc02
19 พฤศจิกายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-rc01
13 พฤศจิกายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-beta01
30 ตุลาคม 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-alpha01
10 กันยายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.4.0
เวอร์ชัน 1.4.1
27 สิงหาคม 2024
androidx.media3:media3-*:1.4.1 เผยแพร่แล้ว เวอร์ชัน 1.4.1 มี คอมมิตเหล่านี้
- ExoPlayer:
- เครื่องสกัดน้ำผลไม้
- MP3: แก้ไขข้อผิดพลาด
Searched too many bytesโดยละเว้นข้อมูลที่ไม่ใช่ MP3 ต่อท้ายอย่างถูกต้องตามช่องความยาวในเฟรมInfo(#1480)
- MP3: แก้ไขข้อผิดพลาด
- ข้อความ
- TTML: แก้ไขการจัดการค่า
tts:fontSizeของเปอร์เซ็นต์เพื่อให้แน่ใจว่าค่าดังกล่าวรับค่ามาจากโหนดหลักที่มีค่าtts:fontSizeของเปอร์เซ็นต์อย่างถูกต้อง - แก้ไข
IndexOutOfBoundsExceptionในLegacySubtitleUtilเนื่องจากจัดการกรณีที่เวลาเริ่มต้นของเอาต์พุตที่ขอมากกว่าหรือเท่ากับเวลาของเหตุการณ์สุดท้ายในSubtitleไม่ถูกต้อง (#1516)
- TTML: แก้ไขการจัดการค่า
- DRM:
- แก้ไขข้อผิดพลาด
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEในอุปกรณ์ API 31 ขึ้นไปที่เล่นเนื้อหา L1 Widevine ข้อผิดพลาดนี้เกิดจากการติดตั้งใช้งานเมธอดMediaDrm.requiresSecureDecoderของเฟรมเวิร์กที่ไม่สมบูรณ์ (#1603)
- แก้ไขข้อผิดพลาด
- ผลกระทบ
- เพิ่มวิธีการ
release()ไปยังGlObjectsProvider
- เพิ่มวิธีการ
- เซสชัน:
- ส่วนขยาย RTSP:
- ข้ามคำอธิบายสื่อที่ไม่ถูกต้องในการแยกวิเคราะห์ SDP (#1087)
เวอร์ชัน 1.4.0
25 กรกฎาคม 2024
androidx.media3:media3-*:1.4.0 เผยแพร่แล้ว เวอร์ชัน 1.4.0 มีคอมมิตเหล่านี้
- ไลบรารีทั่วไป:
- ส่งต่อการเรียกใช้การกรอที่คาดว่าไม่มีการดำเนินการไปยังเมธอด
BasePlayer.seekTo()และSimpleBasePlayer.handleSeek()ที่ได้รับการป้องกันแทนที่จะละเว้นการเรียกใช้ดังกล่าว หากคุณใช้เมธอดเหล่านี้ในเพลเยอร์ที่กำหนดเอง คุณอาจต้องจัดการการเรียกเพิ่มเติมเหล่านี้ด้วยmediaItemIndex == C.INDEX_UNSET - นำทรัพยากร Dependency ของการคอมไพล์ในกระบวนการ Desugaring ของ Java 8 ที่ปรับปรุงแล้วออก (#1312)
- ตรวจสอบว่าระบบละเว้นระยะเวลาที่ส่งไปยัง
MediaItem.Builder.setImageDurationMs()สำหรับMediaItemที่ไม่ใช่รูปภาพ (ตามที่ระบุไว้ในเอกสารประกอบ) - เพิ่ม
Format.customDataเพื่อจัดเก็บข้อมูลที่กำหนดเองซึ่งแอปให้มาเกี่ยวกับอินสแตนซ์Format
- ส่งต่อการเรียกใช้การกรอที่คาดว่าไม่มีการดำเนินการไปยังเมธอด
- ExoPlayer:
- เพิ่ม
BasePreloadManagerซึ่งจะประสานงานการโหลดล่วงหน้าสำหรับแหล่งที่มาหลายแห่งตามลำดับความสำคัญที่กำหนดโดยrankingDataคุณปรับแต่งได้โดยการขยายคลาสนี้ เพิ่มDefaultPreloadManagerซึ่งใช้PreloadMediaSourceเพื่อโหลดตัวอย่างสื่อของแหล่งที่มาล่วงหน้าลงในหน่วยความจำ และใช้จำนวนเต็มrankingDataที่ระบุดัชนีของรายการใน UI - เพิ่ม
PlayerIdลงในเมธอดส่วนใหญ่ของLoadControlเพื่อเปิดใช้การติดตั้งใช้งานLoadControlเพื่อรองรับผู้เล่นหลายคน - นำ
Buffer.isDecodeOnly()และC.BUFFER_FLAG_DECODE_ONLYออก ไม่จำเป็นต้องตั้งค่าแฟล็กนี้เนื่องจากโปรแกรมแสดงผลและโปรแกรมถอดรหัสจะตัดสินใจข้ามบัฟเฟอร์ตามการประทับเวลา การติดตั้งใช้งาน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จะเรียกใช้เมธอดนี้เมื่อคำนวณเวลาเพื่อกำหนดเวลา Work Tasks - เพิ่ม
MediaCodecAdapter#OnBufferAvailableListenerเพื่อแจ้งเตือนเมื่อบัฟเฟอร์อินพุตและเอาต์พุตพร้อมใช้งานโดยMediaCodecRendererMediaCodecRendererจะส่งสัญญาณไปยังExoPlayerเมื่อได้รับ Callback เหล่านี้ และหากตั้งค่า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 Profile 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: หลีกเลี่ยงการเพิ่มบรรทัดใหม่ที่ซ้ำกันโดยการจัดการคำสั่ง "set pen location" แบบง่ายๆ ของ ExoPlayer (#1315)
- แก้ไข
IllegalArgumentExceptionจากLegacySubtitleUtilเมื่อตัวอย่างคำบรรยาย WebVTT ไม่มีคิว เช่น เป็นส่วนหนึ่งของสตรีม DASH (#1516)
- ข้อมูลเมตา:
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ แท็ก MP4 "การจัดเรียงอัลบั้ม" (
soal), "การจัดเรียงศิลปิน" (soar) และ "การจัดเรียงศิลปินของอัลบั้ม" (soaa) ได้รับการแมปกับแท็ก ID3TSO2,TSOAและTSOPอย่างไม่ถูกต้อง (#1302) - แก้ไขการอ่านแท็ก
gnre(แนวเพลง) และtmpo(จังหวะ) ที่เป็นตัวเลขของ MP4 (/iTunes) เมื่อค่ามีความยาวมากกว่า 1 ไบต์ - ส่งเฟรม ID3
TCONไปยังMediaMetadata.genre(#1305)
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ แท็ก MP4 "การจัดเรียงอัลบั้ม" (
- รูปภาพ:
- เพิ่มการรองรับตารางกริดภาพปก DASH ที่ไม่ใช่สี่เหลี่ยมจัตุรัส (#1300)
- เพิ่มการรองรับ AVIF สำหรับ API 34 ขึ้นไป
- อนุญาตให้ใช้
nullเป็นพารามิเตอร์สำหรับExoPlayer.setImageOutput()เพื่อล้างImageOutputที่ตั้งค่าไว้ก่อนหน้านี้
- DataSource:
- ใช้การรองรับ URI ทรัพยากรดิบ
android.resource://package/idโดยที่packageแตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน ก่อนหน้านี้ไม่มีการบันทึกว่าวิธีนี้ใช้ได้ แต่เป็นวิธีที่มีประสิทธิภาพมากกว่าในการเข้าถึงทรัพยากรในแพ็กเกจอื่นนอกเหนือจากชื่อ - ตรวจสอบอย่างกระตือรือร้นว่า
urlไม่ใช่ค่า Null ในตัวสร้างDataSpecพารามิเตอร์นี้มีคำอธิบายประกอบอยู่แล้วว่าไม่ใช่ค่า Null - อนุญาตให้
ByteArrayDataSourceแปลง URI เป็นอาร์เรย์ไบต์ระหว่างopen()แทนที่จะฮาร์ดโค้ดไว้ที่การสร้าง (#1405)
- ใช้การรองรับ URI ทรัพยากรดิบ
- 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 เริ่มต้นจากสีเชิงเส้นเป็นวิดีโอ BT 709 SDR แบบไฟฟ้า นอกจากนี้ยังมีตัวเลือกที่ 3 เพื่อคงขอบเขตสีเดิมไว้
- อนุญาตให้กำหนดลำดับ Z ที่ไม่แน่นอนของ EditedMediaItemSequences (#1055)
- รักษาช่วงความสว่างให้สอดคล้องกันในเนื้อหา HDR ต่างๆ (ใช้ช่วง HLG)
- เพิ่มการรองรับการวางซ้อน Ultra HDR (บิตแมป) ในเนื้อหา HDR
- อนุญาตให้ใช้เอฟเฟกต์
SeparableConvolutionก่อน API 26 - นำ
OverlaySettings.useHdrที่ไม่ได้ใช้ออกเนื่องจากช่วงไดนามิกของการวางซ้อนและเฟรมต้องตรงกัน - เพิ่มการรองรับ HDR สำหรับ
TextOverlayคุณปรับความสว่างของข้อความวางซ้อนได้ด้วยOverlaySettings.Builder.setHdrLuminanceMultiplier()
- รองรับการเปลี่ยนความเร็วหลายครั้งภายใน
- ส่วนขยาย IMA:
- โปรโมต API ที่จำเป็นสำหรับแอปในการเล่นสตรีมโฆษณา DAI เป็นเวอร์ชันเสถียร
- เพิ่ม
replaceAdTagParameters(Map <String, String>)ลงในImaServerSideAdInsertionMediaSource.AdLoaderซึ่งช่วยให้แทนที่พารามิเตอร์แท็กโฆษณาได้ที่รันไทม์ - แก้ไขข้อบกพร่องที่ไม่มีการเรียกใช้
VideoAdPlayer.VideoAdPlayerCallback.onError()เมื่อเกิดข้อผิดพลาดของเพลเยอร์ระหว่างการเล่นโฆษณา (#1334) - อัปเกรดเวอร์ชัน IMA SDK เป็น 3.33.0 เพื่อแก้ไข
NullPointerExceptionเมื่อใช้ URI แท็กโฆษณาdata://(#700)
- เซสชัน:
- เปลี่ยนค่าเริ่มต้นของ
CommandButton.enabledเป็นtrueและตรวจสอบว่าค่าสามารถเป็นเท็จสำหรับตัวควบคุมได้ แม้ว่าคำสั่งที่เกี่ยวข้องจะพร้อมใช้งานก็ตาม - เพิ่มค่าคงที่ของไอคอนสำหรับ
CommandButtonที่ควรใช้แทนทรัพยากรไอคอนที่กำหนดเอง - เพิ่ม
MediaSessionService.isPlaybackOngoing()เพื่อให้แอปค้นหาได้ว่า ต้องหยุดบริการในonTaskRemoved()หรือไม่ (#1219) - เพิ่ม
MediaSessionService.pauseAllPlayersAndStopSelf()ที่ช่วยให้หยุดเล่นเซสชันทั้งหมดชั่วคราวได้อย่างสะดวก และเรียกใช้stopSelf()เพื่อสิ้นสุดวงจรของMediaSessionService - ลบล้าง
MediaSessionService.onTaskRemoved(Intent)เพื่อให้การใช้งานเริ่มต้นที่ปลอดภัยซึ่งจะทำให้บริการทำงานอยู่เบื้องหน้าหากการเล่นดำเนินอยู่ หรือหยุดบริการหากไม่ได้เล่น - ซ่อนแถบค้นหาในการแจ้งเตือนสื่อสำหรับไลฟ์สดโดยไม่ตั้งค่าระยะเวลาในข้อมูลเมตาของเซสชันแพลตฟอร์ม (#1256)
- ปรับการแปลง
MediaMetadataเป็นMediaDescriptionCompatเพื่อใช้ลำดับและตรรกะที่ต้องการเดียวกันเมื่อเลือกพร็อพเพอร์ตี้ข้อมูลเมตาเหมือนใน media1 - เพิ่ม
MediaSession.sendError()ที่อนุญาตให้ส่งข้อผิดพลาดที่ไม่ร้ายแรงไปยังตัวควบคุม Media3 เมื่อใช้ตัวควบคุมการแจ้งเตือน (ดูMediaSession.getMediaNotificationControllerInfo()) ระบบจะใช้ข้อผิดพลาดที่กำหนดเองเพื่ออัปเดตPlaybackStateของเซสชันแพลตฟอร์มเป็นสถานะข้อผิดพลาดพร้อมข้อมูลข้อผิดพลาดที่ระบุ (#543) - เพิ่ม
MediaSession.Callback.onPlayerInteractionFinished()เพื่อแจ้งเซสชันเมื่อชุดการโต้ตอบของผู้เล่นจากคอนโทรลเลอร์ที่เฉพาะเจาะจงสิ้นสุดลง - เพิ่ม
SessionErrorและใช้ในSessionResultและLibraryResultแทนรหัสข้อผิดพลาดเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดและวิธีแก้ไขข้อผิดพลาด หากเป็นไปได้ - เผยแพร่โค้ดสำหรับแอปทดสอบตัวควบคุม media3 ที่ใช้ทดสอบการโต้ตอบกับแอปที่เผยแพร่เซสชันสื่อได้
- ส่งต่อข้อมูลเพิ่มเติมที่ส่งไปยัง
MediaSession[Builder].setSessionExtras()ของ media3 ไปยังPlaybackStateCompat.getExtras()ของตัวควบคุม media1 - แมปข้อผิดพลาดร้ายแรงและไม่ร้ายแรงกับเซสชันแพลตฟอร์ม
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ภายในAndroidViewของ Compose ใน API 34 (#1237)
- เพิ่มการรองรับการแสดงรูปภาพใน
- ดาวน์โหลด
- ตรวจสอบว่า
DownloadHelperไม่ทำให้เกิดการรั่วไหลของอินสแตนซ์Rendererที่ยังไม่ได้เผยแพร่ ซึ่งอาจส่งผลให้แอปขัดข้องด้วยIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224)
- ตรวจสอบว่า
- ส่วนขยาย Cronet:
- แก้ไข
SocketTimeoutExceptionในCronetDataSourceใน Cronet บางเวอร์ชัน คำขอที่ได้จาก Callback อาจไม่เหมือนกันเสมอไป ซึ่งส่งผลให้การเรียกกลับไม่เสร็จสมบูรณ์และคำขอหมดเวลา (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)
- เพิ่มประเภทการแสดงผลที่ขาดหายไปลงในกฎ
-keepclasseswithmembersของ ProGuard สำหรับ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 60 FPS ว่าไม่รองรับ
- เพิ่มวิธีแก้ปัญหาที่ช่วยให้มั่นใจว่าเฟรมแรกจะแสดงผลเสมอขณะทำการทันเนล แม้ว่าอุปกรณ์จะไม่ดำเนินการนี้โดยอัตโนมัติตามที่ API กำหนด (#1169) (#966)
- แก้ไขปัญหาที่การจัดการข้อมูลสี HDR ทำให้ตัวแปลงรหัสทำงานผิดพลาดและป้องกันไม่ให้มีการเปลี่ยนรูปแบบที่ปรับเปลี่ยนได้สำหรับแทร็กวิดีโอ SDR (#1158)
- ข้อความ
- WebVTT: ป้องกันไม่ให้คิวที่ต่อเนื่องกันโดยตรงสร้างอินสแตนซ์
CuesWithTimingเพิ่มเติมที่ผิดพลาดจากWebvttParser.parse(#1177)
- WebVTT: ป้องกันไม่ให้คิวที่ต่อเนื่องกันโดยตรงสร้างอินสแตนซ์
- DRM:
- แก้ไขปัญหา
NoSuchMethodErrorซึ่งเฟรมเวิร์กMediaDrmอาจแสดงขึ้นมาแทนResourceBusyExceptionหรือNotProvisionedExceptionในอุปกรณ์ Android 14 บางรุ่น (#1145)
- แก้ไขปัญหา
- ผลกระทบ
- ปรับปรุงการแมปโทนสี PQ เป็น SDR โดยการแปลงขอบเขตสี
- เซสชัน:
- UI:
- ใช้ชื่อภาษาของแทร็กเสียงเป็นชื่อสำรองหาก
Localeไม่สามารถระบุชื่อที่แสดงได้ (#988)
- ใช้ชื่อภาษาของแทร็กเสียงเป็นชื่อสำรองหาก
- ส่วนขยาย DASH
- ป้อนข้อมูลองค์ประกอบ
Labelทั้งหมดจากไฟล์ Manifest ลงในFormat.labels(#1054)
- ป้อนข้อมูลองค์ประกอบ
- ส่วนขยาย RTSP:
- ข้ามค่าข้อมูลเซสชันที่ว่างเปล่า (i-tag) ในการแยกวิเคราะห์ SDP (#1087)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ):
- ปิดใช้ส่วนขยาย MIDI เป็นทรัพยากร Dependency ในเครื่องโดยค่าเริ่มต้น เนื่องจากต้องกำหนดค่าที่เก็บ Maven เพิ่มเติม ผู้ใช้ที่ต้องการโมดูลนี้จากการขึ้นต่อกันในเครื่องสามารถเปิดใช้ใหม่ได้
เวอร์ชัน 1.3.0
6 มีนาคม 2024
androidx.media3:media3-*:1.3.0 เผยแพร่แล้ว เวอร์ชัน 1.3.0 มี คอมมิตเหล่านี้
- ไลบรารีทั่วไป:
- ใช้การรองรับ URI ทรัพยากรดิบ
android.resource://package/[type/]nameโดยที่packageแตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน ซึ่งมีการบันทึกไว้เสมอว่าใช้งานได้ แต่ไม่ได้นำไปใช้อย่างถูกต้องจนถึงตอนนี้ - ปรับประเภท MIME ที่ตั้งค่าโดยโค้ดแอปหรืออ่านจากสื่อให้เป็นตัวพิมพ์เล็กทั้งหมด
- กำหนดโฆษณาด้วย
MediaItemแบบเต็มแทนที่จะเป็นUriรายการเดียวในAdPlaybackState - เพิ่ม
minSdkเป็น 19 (Android KitKat) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด และเราจำเป็นต้องอัปเกรดทรัพยากร Dependency ของ 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ที่เป็นค่า Null - ส่งเหตุการณ์
Player.Listener.onPositionDiscontinuityเมื่อข้ามช่วงที่ไม่มีเสียง (#765) - เพิ่มการรองรับเวอร์ชันทดลองสำหรับการแยกวิเคราะห์คำบรรยายระหว่างการแยกข้อมูล คุณเปิดใช้ฟีเจอร์นี้ได้โดยใช้
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() - รองรับแหล่งที่มาของสื่อแบบปรับอัตโนมัติด้วย
PreloadMediaSource - ใช้
HttpEngineDataSourceซึ่งเป็นHttpDataSourceโดยใช้ API HttpEngine - ป้องกันการสร้างคลาสย่อย
CompositeSequenceableLoaderคอมโพเนนต์นี้เคยทำให้ขยายได้ แต่ไม่เคยมีการสร้างคลาสย่อยภายในไลบรารี คุณปรับแต่งได้โดยการรวมอินสแตนซ์โดยใช้รูปแบบเดคอเรเตอร์และใช้CompositeSequenceableLoaderFactoryที่กำหนดเอง - แก้ไขปัญหาที่การทำซ้ำเวลาเดียวกันทำให้ข้อมูลเมตาจากรายการนี้ถูกล้าง (#1007)
- เปลี่ยนชื่อเมธอด
experimentalSetSubtitleParserFactoryในBundledChunkExtractor.FactoryและDefaultHlsExtractorFactoryเป็นsetSubtitleParserFactoryและไม่อนุญาตให้ส่งnullใช้เมธอดexperimentalParseSubtitlesDuringExtraction(boolean)ใหม่เพื่อควบคุมลักษณะการทำงานของการแยกวิเคราะห์ - เพิ่มการรองรับการปรับแต่ง
SubtitleParser.Factoryที่ใช้ระหว่างการดึงข้อมูล ซึ่งทำได้ด้วยMediaSource.Factory.setSubtitleParserFactory() - เพิ่มคำนำหน้าแหล่งที่มาลงในช่อง
Format.idทั้งหมดที่สร้างจากMergingMediaSourceซึ่งจะช่วยระบุแหล่งที่มาที่สร้างFormat(#883) - แก้ไขนิพจน์ทั่วไปที่ใช้ในการตรวจสอบชื่อคีย์ Common Media Client Data (CMCD) ที่กำหนดเองโดยแก้ไขให้ตรวจสอบเฉพาะขีดกลาง (#1028)
- หยุดการเข้ารหัสพารามิเตอร์การค้นหา CMCD ซ้ำ (#1075)
- เพิ่ม
- Transformer:
- เพิ่มการรองรับการปรับวิดีโอสโลว์โมชัน 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(CBR ที่เทียบเท่ากับส่วนหัวXing) ก่อนหน้านี้เราใช้ตารางการกรอวิดีโอจากส่วนหัวInfoแต่ส่งผลให้การกรอวิดีโออย่างละเอียดมีความแม่นยำน้อยกว่าการละเว้นและถือว่าไฟล์เป็น CBR - MPEG2-TS: เพิ่มการรองรับ DTS, DTS-LBR และ DTS:X Profile2 (#275)
- ดึงข้อมูลประเภทเสียงจากตัวบ่งชี้ TS และแมปกับแฟล็กบทบาท ซึ่งช่วยให้ผู้ใช้เลือกแทร็กเสียงได้ดีขึ้น (#973)
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมลงในเครื่องมือแยก MP4 เพื่อดึงค่า
- เสียง:
- วิดีโอ
- เปลี่ยนเครื่องมือสร้าง
MediaCodecVideoRendererที่รับอาร์กิวเมนต์VideoFrameProcessor.Factoryและแทนที่ด้วยเครื่องมือสร้างที่รับอาร์กิวเมนต์VideoSinkProviderแอปที่ต้องการแทรกVideoFrameProcessor.Factoryที่กำหนดเองสามารถสร้างอินสแตนซ์CompositingVideoSinkProviderที่ใช้VideoFrameProcessor.Factoryที่กำหนดเองและส่งผู้ให้บริการซิงก์วิดีโอไปยังMediaCodecVideoRendererได้
- เปลี่ยนเครื่องมือสร้าง
- ข้อความ
- แก้ไขการเรียงลำดับคิวบิตแมปเพื่อแก้ไขข้อผิดพลาด
Tried to marshall a Parcel that contained Binder objectsเมื่อใช้DefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836) - CEA-708: ละเว้นค่า
rowLockข้อกำหนด CEA-708-E S-2023 ระบุว่าควรสันนิษฐานว่าทั้งrowLockและcolumnLockเป็นจริง ไม่ว่าค่าที่แสดงในสตรีมจะเป็นอย่างไร (ระบบไม่ได้ใช้การรองรับcolumnLockจึงถือว่าค่าเป็นเท็จเสมอ)
- แก้ไขการเรียงลำดับคิวบิตแมปเพื่อแก้ไขข้อผิดพลาด
- รูปภาพ:
- เพิ่มการรองรับภาพปก DASH ระบบจะครอบตัดรูปภาพตารางกริดและส่งภาพขนาดย่อแต่ละภาพให้
ImageOutputใกล้กับเวลาที่นำเสนอ
- เพิ่มการรองรับภาพปก DASH ระบบจะครอบตัดรูปภาพตารางกริดและส่งภาพขนาดย่อแต่ละภาพให้
- DRM:
- เล่นตัวอย่างที่ไม่ได้เข้ารหัส "Clear Lead" ในเนื้อหา DRM ทันทีโดยค่าเริ่มต้น แม้ว่าคีย์สำหรับตัวอย่างที่เข้ารหัสในภายหลังจะยังไม่พร้อมก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อมเมื่อตำแหน่งการเล่นถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้การเล่นจะไม่เริ่มเลยเมื่อถึงจุดนี้) คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyหรือDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys- ส่วนขยาย IMA:
- แก้ไขปัญหาที่โฆษณา DASH และ HLS ที่ไม่มีนามสกุลไฟล์ที่เหมาะสมไม่สามารถเล่นได้
- เล่นตัวอย่างที่ไม่ได้เข้ารหัส "Clear Lead" ในเนื้อหา DRM ทันทีโดยค่าเริ่มต้น แม้ว่าคีย์สำหรับตัวอย่างที่เข้ารหัสในภายหลังจะยังไม่พร้อมก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อมเมื่อตำแหน่งการเล่นถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้การเล่นจะไม่เริ่มเลยเมื่อถึงจุดนี้) คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย
- เซสชัน:
- ปิดใช้การตรวจจับการดับเบิลคลิกสำหรับแอป TV (#962)
- แก้ไขปัญหาที่
MediaItem.RequestMetadataที่มีเฉพาะข้อมูลเพิ่มเติมที่ไม่ใช่ค่า Null ไม่ได้รับการส่งระหว่างตัวควบคุมสื่อและเซสชัน - เพิ่มคอนสตรัคเตอร์ลงใน
MediaLibrarySession.Builderที่ใช้เฉพาะContextแทนMediaLibraryService
- ส่วนขยาย HLS
- ลดระดับการเข้าถึง
HlsMediaPeriodเป็นแบบส่วนตัวในแพ็กเกจ ไม่ควรใช้ประเภทนี้โดยตรงจากภายนอกแพ็กเกจ HLS - แก้ไขปัญหาการกรอไปยังจุดเริ่มต้นของส่วนได้อย่างมีประสิทธิภาพมากขึ้น (#1031)
- ลดระดับการเข้าถึง
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ):
- ตัวถอดรหัส MIDI: ละเว้นข้อความเหตุการณ์ SysEx (#710)
- ยูทิลิตีการทดสอบ
- อย่าหยุดเล่นชั่วคราวใน
TestPlayerRunHelper.playUntilPositionการทดสอบจะทำให้การเล่นอยู่ในสถานะกำลังเล่น แต่จะระงับความคืบหน้าไว้จนกว่าการทดสอบจะเพิ่มการยืนยันและการดำเนินการเพิ่มเติมได้
- อย่าหยุดเล่นชั่วคราวใน
- แอปสาธิต:
- เพิ่มโมดูลสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
PreloadMediaSourceด้วยกรณีการใช้งานเนื้อหาแบบสั้น
- เพิ่มโมดูลสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
เวอร์ชัน 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)
- แก้ไขปัญหาที่การเลือกแทร็กหลังจากกรอไปที่ศูนย์ในไลฟ์สดทำให้ไลฟ์เริ่มที่ตำแหน่งเริ่มต้นอย่างไม่ถูกต้อง (#9347)
- แก้ไขปัญหาที่อินสแตนซ์ใหม่ของ
CmcdData.Factoryได้รับค่าลบสำหรับbufferedDurationUsจากแหล่งที่มาของกลุ่มข้อมูล ซึ่งส่งผลให้เกิดIllegalArgumentException(#888)
- แก้ไขปัญหาที่การกรอวิดีโอด้วยตนเองนอกช่วง
- Transformer:
- แก้ปัญหาที่โปรแกรมเปลี่ยนไฟล์จะแสดงข้อผิดพลาดในเวลาที่กำหนดค่าเนื่องจากการตั้งค่าอัตราการทำงานสูง
- เครื่องสกัดน้ำผลไม้
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในรูปภาพเคลื่อนไหว JPEG เป็น
ROLE_FLAG_ALTERNATEเพื่อป้องกันไม่ให้ระบบเลือกแทร็กดังกล่าวสำหรับการเล่นโดยอัตโนมัติเนื่องจากมีความละเอียดสูงกว่า - แก้ไขการตรวจพบคีย์เฟรมที่ไม่ถูกต้องสำหรับสตรีม TS H264 (#864)
- แก้ไขการประมาณระยะเวลาของสตรีม TS ที่ยาวกว่า 47,721 วินาที (#855)
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในรูปภาพเคลื่อนไหว JPEG เป็น
- เสียง:
- แก้ไขการจัดการ EOS สำหรับ
SilenceSkippingAudioProcessorเมื่อเรียกใช้หลายครั้ง (#712)
- แก้ไขการจัดการ EOS สำหรับ
- วิดีโอ
- เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ที่ทำให้ระบบทำเครื่องหมายสตรีม AVC 60 FPS ว่าไม่รองรับ (#693)
- ข้อมูลเมตา:
- แก้ไขข้อบกพร่องที่
MediaMetadataมีข้อมูลจากความคิดเห็น Vorbis ที่มีคีย์ตัวพิมพ์ใหญ่เท่านั้น (#876) - ตรวจจับ
OutOfMemoryErrorเมื่อแยกวิเคราะห์เฟรม ID3 ขนาดใหญ่มาก ซึ่งหมายความว่าการเล่นจะดำเนินต่อไปได้โดยไม่มีข้อมูลแท็ก แทนที่จะเล่นไม่สำเร็จโดยสิ้นเชิง
- แก้ไขข้อบกพร่องที่
- DRM:
- ขยายวิธีแก้ปัญหาสำหรับ URL ใบอนุญาต ClearKey
https://default.urlปลอมไปยัง API 33 ขึ้นไป (ก่อนหน้านี้วิธีแก้ปัญหาใช้ได้กับ API 33 เท่านั้น) (#837) - แก้ไข
ERROR_DRM_SESSION_NOT_OPENEDเมื่อเปลี่ยนจากเนื้อหาที่เข้ารหัสเป็นเนื้อหาที่ชัดเจนโดยไม่มีพื้นผิวแนบมากับเพลเยอร์ ข้อผิดพลาดเกิดจากการใช้ตัวถอดรหัสที่ปลอดภัยอย่างไม่ถูกต้องเพื่อเล่นเนื้อหาที่ไม่มีการเข้ารหัส
- ขยายวิธีแก้ปัญหาสำหรับ URL ใบอนุญาต ClearKey
- เซสชัน:
- ใส่คีย์และค่าที่กำหนดเองใน
MediaMetadataCompatถึงMediaMetadata.extrasและMediaMetadata.extrasถึงMediaMetadataCompat(#756, #802) - แก้ไขการกระจายสัญญาณ
notifyChildrenChangedสำหรับตัวควบคุมเดิม (#644) - แก้ไขข้อบกพร่องที่การตั้งค่าเวลาติดลบสำหรับตัวจับเวลา
setWhenที่ปิดใช้ของการแจ้งเตือนทำให้เกิดข้อขัดข้องในอุปกรณ์บางเครื่อง (#903) - แก้ไข
IllegalStateExceptionเมื่อตัวควบคุมการแจ้งเตือนสื่อยังเชื่อมต่อไม่เสร็จสมบูรณ์เมื่อมีการขออัปเดตการแจ้งเตือนครั้งแรก (#917)
- ใส่คีย์และค่าที่กำหนดเองใน
- UI:
- ส่วนขยาย DASH
- แยกวิเคราะห์ "f800" เป็นจำนวนช่อง 5 สำหรับ Dolby ในไฟล์ Manifest ของ DASH (#688)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ):
- ส่วนขยาย Cast
- ล้างการสร้าง
Timelineเพื่อไม่ให้แอปขัดข้องเมื่อโหลดสื่อไม่สำเร็จในอุปกรณ์แคสต์ (#708)
- ล้างการสร้าง
เวอร์ชัน 1.2.0
15 พฤศจิกายน 2023
- ไลบรารีทั่วไป:
- เพิ่มพารามิเตอร์
@Nullable Throwableลงในเมธอดในอินเทอร์เฟซLog.Loggerพารามิเตอร์messageสำหรับเมธอดเหล่านี้จะไม่มีข้อมูลเกี่ยวกับThrowableที่ส่งไปยังเมธอดLog.{d,i,w,e}()อีกต่อไป ดังนั้นการติดตั้งใช้งานจะต้องเพิ่มข้อมูลนี้ด้วยตนเองหากต้องการ (อาจใช้Logger.appendThrowableString(String, Throwable)) - แก้ไขปัญหาความเข้ากันได้ของ Kotlin ที่ระบบตรวจไม่พบพารามิเตอร์ประเภททั่วไปที่อนุญาตค่า Null และประเภทองค์ประกอบอาร์เรย์ที่อนุญาตค่า Null ว่าอนุญาตค่า Null ตัวอย่างเช่น พารามิเตอร์เมธอด
TrackSelectorResultและSimpleDecoder(#6792) - เปลี่ยน UI เริ่มต้นและลักษณะการทำงานของการแจ้งเตือนใน
Util.shouldShowPlayButtonเพื่อแสดงปุ่ม "เล่น" ขณะที่การเล่นถูกระงับชั่วคราว (เช่น เนื่องจากสูญเสียโฟกัสเสียงชั่วคราว) คุณสามารถคงลักษณะการทำงานเดิมไว้ได้โดยใช้PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)หรือMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213) - อัปเกรด
androidx.annotation:annotation-experimentalเป็น1.3.1เพื่อแก้ไข https://issuetracker.google.com/251172715 - ย้าย
ExoPlayer.setAudioAttributesไปยังอินเทอร์เฟซPlayer
- เพิ่มพารามิเตอร์
- ExoPlayer:
- แก้ไขปัญหาการกรอในสตรีม AC4 ที่เกิดจากการระบุตัวอย่างที่ถอดรหัสเท่านั้นไม่ถูกต้อง (#11000)
- เพิ่มการระงับการเล่นในอุปกรณ์เอาต์พุตเสียงที่ไม่เหมาะสม (เช่น ลำโพงในตัวของอุปกรณ์ Wear OS) เมื่อเปิดใช้ฟีเจอร์นี้ผ่าน
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutputเหตุผลในการระงับการเล่นจะได้รับการอัปเดตเป็นPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTหากพยายามเล่นเมื่อไม่มีเอาต์พุตเสียงที่เหมาะสม หรือหากเอาต์พุตที่เหมาะสมทั้งหมดถูกตัดการเชื่อมต่อระหว่างการเล่น เหตุผลในการระงับจะถูกนำออกเมื่อเชื่อมต่อเอาต์พุตที่เหมาะสม - เพิ่ม
MediaSource.canUpdateMediaItemและMediaSource.updateMediaItemเพื่อยอมรับการอัปเดตMediaItemหลังจากสร้างผ่านPlayer.replaceMediaItem(s) - อนุญาตการอัปเดต
MediaItemสำหรับคลาสMediaSourceทั้งหมดที่ไลบรารีมีให้ผ่านPlayer.replaceMediaItem(s)(#33, #9978) - เปลี่ยนชื่อ
MimeTypes.TEXT_EXOPLAYER_CUESเป็นMimeTypes.APPLICATION_MEDIA3_CUES - เพิ่ม
PngExtractorที่ส่งและอ่านไฟล์ PNG ทั้งไฟล์ลงในTrackOutputเป็นตัวอย่างเดียว - ปรับปรุงเมธอด
SequenceableLoader.continueLoading(long)ในอินเทอร์เฟซSequenceableLoaderเป็นSequenceableLoader.continueLoading(LoadingInfo loadingInfo)LoadingInfoมีพารามิเตอร์เพิ่มเติม ซึ่งรวมถึงplaybackSpeedและlastRebufferRealtimeMsนอกเหนือจากplaybackPositionUsที่มีอยู่ - ปรับปรุงเมธอด
ChunkSource.getNextChunk(long, long, List, ChunkHolder)ในอินเทอร์เฟซChunkSourceเป็นChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) - เพิ่มช่องเพิ่มเติมในการบันทึก Common Media Client Data (CMCD) ได้แก่ บัฟเฟอร์ไม่เพียงพอ (
bs) กำหนดเวลา (dl) อัตราการเล่น (pr) และการเริ่มต้น (su) (#8699) - เพิ่มความลึกของบิต Luma และ Chroma ลงใน
ColorInfo(#491) - เพิ่มช่องเพิ่มเติมในการบันทึกข้อมูล Common Media Client Data (CMCD) ได้แก่ คำขอออบเจ็กต์ถัดไป (
nor) และคำขอช่วงถัดไป (nrr) (#8699) - เพิ่มฟังก์ชันการทำงานเพื่อส่งข้อมูล Common Media Client Data (CMCD) โดยใช้พารามิเตอร์การค้นหา (#553)
- แก้ไข
ConcurrentModificationExceptionในExperimentalBandwidthMeter(#612) - เพิ่มพารามิเตอร์
MediaPeriodIdลงในCompositeMediaSource.getMediaTimeForChildMediaTime - รองรับ
ClippingMediaSource(และแหล่งที่มาอื่นๆ ที่มีออฟเซ็ตเวลาของระยะเวลา/กรอบเวลา) ในConcatenatingMediaSource2(#11226) - เปลี่ยน
BaseRenderer.onStreamChanged()เพื่อรับอาร์กิวเมนต์MediaPeriodIdด้วย
- Transformer:
- แยกวิเคราะห์ข้อมูลการหมุน EXIF สำหรับอินพุตรูปภาพ
- นำประเภทคำอธิบายประกอบ
TransformationRequest.HdrModeและค่าคงที่ที่เกี่ยวข้องออก โปรดใช้Composition.HdrModeและค่าคงที่ที่เกี่ยวข้องแทน - ลดความซับซ้อนของ
OverlaySettingsเพื่อแก้ไขปัญหาการหมุน - เปลี่ยนพารามิเตอร์
frameRateและdurationUsของSampleConsumer.queueInputBitmapเป็นTimestampIteratorแล้ว
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenessเพื่ออนุญาตหรือไม่อนุญาตการปรับเปลี่ยนแบบไม่ราบรื่นอย่างชัดแจ้ง ค่าเริ่มต้นจะยังคงเป็นลักษณะการทำงานปัจจุบันของtrue
- เพิ่ม
- เครื่องสกัดน้ำผลไม้
- MPEG-TS: ตรวจสอบว่าเฟรมสุดท้ายแสดงผลโดยการส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909)
- แก้ไขคำที่สะกดผิดเมื่อระบุ
rotationDegreesเปลี่ยนprojectionPosePitchเป็นprojectionPoseRoll(#461) - นำสมมติฐานที่ว่าอินสแตนซ์
Extractorสามารถตรวจสอบได้โดยตรงด้วยinstanceofออก หากต้องการสิทธิ์เข้าถึงรันไทม์สำหรับรายละเอียดการติดตั้งใช้งานของExtractorคุณต้องเรียกใช้Extractor.getUnderlyingInstanceก่อน - เพิ่ม
BmpExtractor - เพิ่ม
WebpExtractor - เพิ่ม
HeifExtractor - เพิ่มการรองรับ QuickTime classic ไปยัง
Mp4Extractor
- เสียง:
- เพิ่มการรองรับ PCM แบบ Big-Endian 24/32 บิตใน MP4 และ Matroska และแยกวิเคราะห์การเข้ารหัส PCM สำหรับ
lpcmใน MP4 - เพิ่มการรองรับการแยกเสียง Vorbis ใน MP4
- เพิ่ม
AudioSink.getFormatOffloadSupport(Format)ที่ดึงข้อมูลระดับการรองรับการออฟโหลดที่ซิงก์สามารถให้สำหรับรูปแบบผ่านDefaultAudioOffloadSupportProviderซึ่งจะแสดงผลAudioOffloadSupportใหม่ที่มีisFormatSupported,isGaplessSupportedและisSpeedChangeSupported - เพิ่ม
AudioSink.setOffloadMode()ซึ่งใช้กำหนดค่าการถ่ายข้อมูลในซิงก์เสียง ค่าเริ่มต้นคือAudioSink.OFFLOAD_MODE_DISABLED - คุณเปิดใช้การนำออกได้ผ่าน
setAudioOffloadPreferenceในTrackSelectionParametersหากค่ากำหนดที่ตั้งไว้คือเปิดใช้ อุปกรณ์จะรองรับการลดภาระสำหรับรูปแบบ และการเลือกแทร็กเป็นแทร็กเสียงเดียว ระบบจะเปิดใช้การลดภาระเสียง - หากตั้งค่า
audioOffloadModePreferenceเป็นAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIREDแล้วDefaultTrackSelectorจะเลือกเฉพาะแทร็กเสียงและเฉพาะในกรณีที่รูปแบบของแทร็กนั้นรองรับการออฟโหลด หากไม่มีแทร็กเสียงที่รองรับในการออฟโหลด ระบบจะไม่เลือกแทร็กใดเลย - ปิดใช้การรองรับการเล่นแบบไม่มีช่องว่างสำหรับการออฟโหลดเมื่อใช้ระดับ API ต่ำกว่า 33 เนื่องจากปัญหาเกี่ยวกับตำแหน่งการเล่นหลังจากการเปลี่ยนแทร็ก
- นำพารามิเตอร์
enableOffloadออกจากซิกเนเจอร์ของเมธอดDefaultRenderersFactory.buildAudioSink - นำวิธีการ
DefaultAudioSink.Builder.setOffloadModeออก - นำค่า intdef ออก
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED - เพิ่มการรองรับข้อมูลเมตาแบบไม่มีช่องว่างของ Opus ระหว่างการเล่นแบบออฟโหลด
- อนุญาตให้กู้คืนโปรแกรมแสดงผลโดยปิดใช้การลดภาระงานหากเขียนครั้งแรกไม่สำเร็จ (#627)
- เปิดใช้การกำหนดเวลาการส่งต่อโดยค่าเริ่มต้นสำหรับการเล่นแบบส่งต่อเฉพาะเสียงเท่านั้น
- ลบ
ExoPlayer.experimentalSetOffloadSchedulingEnabledและAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged - เปลี่ยนชื่อ
onExperimentalSleepingForOffloadChangedเป็นonSleepingForOffloadChangedและonExperimentalOffloadedPlaybackเป็นonOffloadedPlaybackแล้ว - ย้ายอินเทอร์เฟซและคำจำกัดความของ
TrackSelectionParametersที่เกี่ยวข้องกับโหมดการลดภาระงานเสียงไปยังคลาสAudioOffloadPreferencesภายใน - เพิ่ม Callback
onAudioTrackInitializedและonAudioTrackReleasedไปยังAnalyticsListener,AudioRendererEventListenerและAudioSink.Listener - แก้ไขปัญหาบัฟเฟอร์เสียง DTS Express ไม่เพียงพอ (#650)
- แก้ไขข้อบกพร่องที่การตรวจสอบความสามารถสำหรับ E-AC3-JOC แสดงข้อผิดพลาด
IllegalArgumentException(#677)
- เพิ่มการรองรับ PCM แบบ Big-Endian 24/32 บิตใน MP4 และ Matroska และแยกวิเคราะห์การเข้ารหัส PCM สำหรับ
- วิดีโอ
- อนุญาตให้
MediaCodecVideoRendererใช้VideoFrameProcessor.Factoryที่กำหนดเอง - แก้ไขข้อบกพร่องที่ทำให้แสดงผลเฟรมแรกไม่ได้หากสตรีมเสียงเริ่มต้นด้วยการประทับเวลาติดลบ (#291)
- อนุญาตให้
- ข้อความ
- นำ
ExoplayerCuesDecoderออก ตอนนี้แทร็กข้อความที่มีsampleMimeType = application/x-media3-cuesจะได้รับการจัดการโดยตรงจากTextRendererโดยไม่จำเป็นต้องมีอินสแตนซ์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โดยเปิดกล่องโต้ตอบของระบบเพื่อให้ผู้ใช้เชื่อมต่อเอาต์พุตเสียงที่เหมาะสม (เช่น หูฟังบลูทูธ) Listener จะกลับมาเล่นต่อโดยอัตโนมัติหากมีการเชื่อมต่ออุปกรณ์ที่เหมาะสมภายในระยะหมดเวลาที่กำหนดค่าได้ (ค่าเริ่มต้นคือ 5 นาที)
- เพิ่มการติดตั้งใช้งาน
- ดาวน์โหลด
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าเป็น "การซิงค์ข้อมูล" สำหรับ
DownloadServiceเพื่อให้เข้ากันได้กับ Android 14 เมื่อใช้บริการนี้ แอปยังต้องเพิ่มdataSyncเป็นforegroundServiceTypeในไฟล์ Manifest และเพิ่มสิทธิ์FOREGROUND_SERVICE_DATA_SYNC(#11239) ด้วย
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าเป็น "การซิงค์ข้อมูล" สำหรับ
- ส่วนขยาย HLS
- รีเฟรชเพลย์ลิสต์ไลฟ์สด HLS ด้วยช่วงเวลาที่คำนวณจากเวลาเริ่มต้นโหลดครั้งล่าสุดแทนที่จะเป็นเวลาที่โหลดเสร็จครั้งล่าสุด (#663)
- ส่วนขยาย DASH
- อนุญาตให้ใช้ตัวระบุ DASH เดียวกันหลายรายการใน URL เทมเพลตกลุ่ม
- เพิ่มการรองรับเวอร์ชันทดลองสำหรับการแยกวิเคราะห์คำบรรยายระหว่างการแยกข้อมูล ซึ่งรองรับการรวมคำบรรยายที่ทับซ้อนกันได้ดีขึ้น รวมถึงการแก้ปัญหาการกะพริบเมื่อเปลี่ยนระหว่างส่วนของคำบรรยาย คุณเปิดใช้ฟีเจอร์นี้ได้โดยใช้
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288)
- ส่วนขยาย RTSP:
- แก้ไขภาวะแข่งขันที่อาจทำให้เกิด
IndexOutOfBoundsExceptionเมื่อเปลี่ยนกลับไปใช้ TCP หรือการเล่นค้างในบางสถานการณ์ - ตรวจสอบสถานะในการตั้งค่า RTSP เมื่อแสดงสถานะการโหลดของ
RtspMediaPeriod(#577) - ละเว้นเมธอดคำขอ RTSP ที่กำหนดเองในส่วนหัวสาธารณะของการตอบกลับ Options (#613)
- ใช้ค่าระยะหมดเวลาของการตอบกลับการตั้งค่า RTSP ในช่วงเวลาของการส่งคำขอตัวเลือก RTSP แบบ Keep-Alive (#662)
- แก้ไขภาวะแข่งขันที่อาจทำให้เกิด
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ):
- เปิดตัวโมดูลตัวถอดรหัส MIDI ซึ่งรองรับการเล่นไฟล์ MIDI มาตรฐานโดยใช้ไลบรารี Jsyn เพื่อสังเคราะห์เสียง
- เพิ่ม
DecoderOutputBuffer.shouldBeSkippedเพื่อทำเครื่องหมายบัฟเฟอร์เอาต์พุตที่ไม่จำเป็นต้องแสดงโดยตรง เราขอแนะนำให้ใช้เมธอดนี้แทนC.BUFFER_FLAG_DECODE_ONLYที่จะเลิกใช้งาน - เพิ่ม
Decoder.setOutputStartTimeUsและSimpleDecoder.isAtLeastOutputStartTimeUsเพื่ออนุญาตให้ตัวถอดรหัสทิ้งตัวอย่างที่ถอดรหัสเท่านั้นก่อนเวลาเริ่มต้น เราขอแนะนำให้ใช้เมธอดนี้แทนBuffer.isDecodeOnlyที่จะเลิกใช้งาน - แก้ไขข้อบกพร่องในการเผยแพร่อาร์ติแฟกต์ตัวถอดรหัส MIDI ไปยังที่เก็บ Maven อาร์ติแฟกต์เปลี่ยนชื่อเป็น
media3-exoplayer-midi(#734)
- ส่วนขยาย Leanback:
- แก้ไขข้อบกพร่องที่การปิดใช้ Surface อาจทำให้เกิด
ArithmeticExceptionในโค้ด Leanback (#617)
- แก้ไขข้อบกพร่องที่การปิดใช้ Surface อาจทำให้เกิด
- ยูทิลิตีการทดสอบ
- ทำให้
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ปลอมขึ้นหลังจากล้างเพลย์ลิสต์ - เพิ่มช่องเพิ่มเติมในการบันทึก Common Media Client Data (CMCD) ได้แก่ รูปแบบสตรีมมิง (sf), ประเภทสตรีม (st), เวอร์ชัน (v), บิตเรตสูงสุด (tb), ระยะเวลาของออบเจ็กต์ (d), อัตราการส่งผ่านข้อมูลที่วัดได้ (mtp) และประเภทออบเจ็กต์ (ot) (#8699)
- แก้ไขปัญหาใน
- เสียง:
- แก้ไขข้อบกพร่องที่
Player.getState()ไม่เคยเปลี่ยนเป็นSTATE_ENDEDเมื่อเล่นไฟล์ที่สั้นมาก (#538)
- แก้ไขข้อบกพร่องที่
- การลดภาระการประมวลผลเสียง
- เพิ่มหน้าส่วนหัวของรหัส Ogg และหน้าส่วนหัวของความคิดเห็นไว้ข้างหน้าบิตสตรีมสำหรับการเล่น Opus ที่ออฟโหลดตาม RFC 7845
- วิดีโอ
- H.265/HEVC: แก้ไขการแยกวิเคราะห์ข้อมูลภาพอ้างอิงระยะสั้นและระยะยาวของ SPS
- ข้อความ
- CEA-608: เปลี่ยนตรรกะการตัดคิวเพื่อพิจารณาเฉพาะข้อความที่มองเห็นได้ ก่อนหน้านี้ ระบบจะรวมการเยื้องและการชดเชยแท็บเมื่อจำกัดความยาวของคิวไว้ที่ 32 อักขระ (ซึ่งถูกต้องตามข้อกำหนดทางเทคนิค) (#11019)
- ส่วนขยาย IMA:
- อัปเกรดเวอร์ชัน IMA SDK เป็น 3.30.3
- เซสชัน:
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุ 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)
- เพิ่มคำสั่งลงใน Player โดยทำดังนี้
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เพื่อระบุรหัสตัวควบคุมการกำหนดเส้นทางสำหรับการเล่นจากระยะไกล - เพิ่ม
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 - เพิ่มการรองรับการรวม Common Media Client Data (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 - นำค่าคงที่สตริงที่เลิกใช้งานแล้วสำหรับชุดอักขระ (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEและUTF16LE_NAME) ออก แล้วใช้ชุดอักขระ Kotlin จากแพ็กเกจkotlin.text,java.nio.charset.StandardCharsetsหรือcom.google.common.base.Charsetsแทน - นำคอนสตรัคเตอร์
WorkManagerSchedulerที่เลิกใช้งานแล้วออก ให้ใช้คอนสตรัคเตอร์ที่ไม่ได้เลิกใช้งานซึ่งมีตัวเลือกในการระบุพารามิเตอร์Contextแทน - นำเมธอดที่เลิกใช้งานแล้วออก ซึ่งได้แก่
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatและcreateSampleFormatซึ่งใช้เพื่อสร้างอินสแตนซ์คลาสFormatแต่ให้ใช้Format.Builderเพื่อสร้างอินสแตนซ์ของFormatแทน - นำเมธอดที่เลิกใช้งานแล้วออก ได้แก่
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateและcopyWithVideoSizeโดยใช้Format.buildUpon()และเมธอด 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)
- เพิ่ม
- เครื่องสกัดน้ำผลไม้
- แก้ไขการแยกวิเคราะห์ H.265 SPS ในไฟล์ 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 60 FPS ได้รับการทำเครื่องหมายว่าไม่รองรับ (#10898)
- แก้ไขปัญหาด้านประสิทธิภาพการแสดงเฟรมเมื่อเล่นสื่อที่มีอัตราเฟรมสูงกว่าอัตราการรีเฟรชหน้าจอมาก
- แมปรูปแบบ HEVC HDR10 กับ
- แคสต์
- แก้ไขปัญหา
STATE_IDLEชั่วคราวเมื่อเปลี่ยนระหว่างรายการสื่อ (#245)
- แก้ไขปัญหา
- RTSP:
- ตรวจจับ IllegalArgumentException ที่เกิดขึ้นในการแยกวิเคราะห์ข้อความอธิบายการตอบกลับ RTSP ที่ไม่ถูกต้อง (#10971)
- เซสชัน:
- แก้ไขข้อบกพร่องที่ปุ่มเล่น/หยุดชั่วคราวของการแจ้งเตือนไม่อัปเดตตามสถานะของเพลเยอร์ (#192)
- ส่วนขยาย IMA:
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาไม่เริ่มทำงานเนื่องจากไม่ได้รับเหตุการณ์
LOADEDแรก (และในกรณีที่ไม่มีโฆษณาจะเป็นเหตุการณ์เดียว)
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาไม่เริ่มทำงานเนื่องจากไม่ได้รับเหตุการณ์
เวอร์ชัน 1.0.0-rc01
16 กุมภาพันธ์ 2023
androidx.media3:media3-*:1.0.0-rc01 เผยแพร่แล้ว เวอร์ชัน 1.0.0-rc01 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.3
- ไลบรารีหลัก
- ปรับแต่งตรรกะการจัดลำดับตัวถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากำหนดของ
MediaCodecSelectorแม้ว่าตัวถอดรหัสจะรายงานว่าอาจไม่สามารถเล่นสื่อได้อย่างมีประสิทธิภาพก็ตาม ตัวอย่างเช่น เมื่อใช้ตัวเลือกเริ่มต้น ระบบจะเลือกใช้ตัวถอดรหัสฮาร์ดแวร์ที่มีเฉพาะการรองรับฟังก์ชันการทำงานมากกว่าตัวถอดรหัสซอฟต์แวร์ที่รองรับรูปแบบอย่างเต็มรูปแบบ (#10604) - เพิ่ม
ExoPlayer.Builder.setPlaybackLooperที่ตั้งค่าชุดข้อความการเล่นที่มีอยู่แล้วสำหรับอินสแตนซ์ ExoPlayer ใหม่ - อนุญาตให้ล้างตัวช่วย Download Manager (#10776)
- เพิ่มพารามิเตอร์ลงใน
BasePlayer.seekToเพื่อระบุคำสั่งที่ใช้สำหรับการกรอด้วย - ใช้ธีมเมื่อโหลดทรัพยากรที่ถอดออกได้ใน API 21 ขึ้นไป (#220)
- เพิ่ม
ConcatenatingMediaSource2ที่ช่วยให้รวมรายการสื่อหลายรายการไว้ในหน้าต่างเดียวได้ (#247)
- ปรับแต่งตรรกะการจัดลำดับตัวถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากำหนดของ
- เครื่องสกัดน้ำผลไม้
- แสดง
ParserExceptionแทนNullPointerExceptionหากตารางตัวอย่าง (stbl) ไม่มีคำอธิบายตัวอย่าง (stsd) ที่จำเป็นเมื่อแยกวิเคราะห์อะตอม trak - ข้ามตัวอย่างอย่างถูกต้องเมื่อกรอไปยังเฟรมการซิงค์ใน fMP4 โดยตรง (#10941)
- แสดง
- เสียง:
- ใช้อัตราบิตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำสำหรับ
AudioTrackในการเล่นโดยตรง (พาสทรู)
- ใช้อัตราบิตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำสำหรับ
- ข้อความ
- แก้ไข
TextRendererที่ส่งดัชนีที่ไม่ถูกต้อง (ค่าลบ) ไปยังSubtitle.getEventTimeหากไฟล์คำบรรยายไม่มีคิว - SubRip: เพิ่มการรองรับไฟล์ UTF-16 หากไฟล์เริ่มต้นด้วยเครื่องหมายลำดับไบต์
- แก้ไข
- ข้อมูลเมตา:
- แยกวิเคราะห์ค่าที่คั่นด้วยค่าว่างหลายค่าจากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaTypeเพื่อระบุประเภทเนื้อหาหรือประเภทโฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsableเพื่อแทนที่MediaMetadata.folderTypeชนิดโฟลเดอร์จะเลิกใช้งานในรุ่นถัดไป
- DASH:
- เพิ่มการแยกวิเคราะห์แบบเต็มสำหรับชุดการปรับรูปภาพ รวมถึงจำนวนไทล์ (#3752)
- UI:
- เซสชัน:
- เพิ่ม
SimpleBasePlayerนามธรรมเพื่อช่วยใช้อินเทอร์เฟซPlayerสำหรับเพลเยอร์ที่กำหนดเอง - เพิ่มเมธอดตัวช่วยเพื่อแปลงโทเค็นของเซสชันแพลตฟอร์มเป็น Media3
SessionToken(#171) - ใช้
onMediaMetadataChangedเพื่อทริกเกอร์การอัปเดตเซสชันสื่อของแพลตฟอร์ม (#219) - เพิ่มเซสชันสื่อเป็นอาร์กิวเมนต์ของ
getMediaButtons()ของDefaultMediaNotificationProviderและใช้รายการที่เปลี่ยนแปลงไม่ได้เพื่อความชัดเจน (#216) - เพิ่ม Listener Callback
onSetMediaItemsเพื่อให้สามารถแก้ไข/ตั้งค่ารายการMediaItemดัชนีเริ่มต้น และตำแหน่งตามเซสชันก่อนตั้งค่าลงในเพลเยอร์ (#156) - หลีกเลี่ยงการตรวจจับการแตะสองครั้งสำหรับเหตุการณ์ปุ่มสื่อที่ไม่ใช่บลูทูธ (#233)
- ทำให้
QueueTimelineมีประสิทธิภาพมากขึ้นในกรณีที่สถานะเซสชันเดิมไม่น่าเชื่อถือ (#241)
- เพิ่ม
- ข้อมูลเมตา:
- แยกวิเคราะห์ค่าที่คั่นด้วยค่าว่างหลายค่าจากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaTypeเพื่อระบุประเภทเนื้อหาหรือประเภทโฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsableเพื่อแทนที่MediaMetadata.folderTypeชนิดโฟลเดอร์จะเลิกใช้งานในรุ่นถัดไป
- ส่วนขยาย Cast
- อัปเกรดเวอร์ชัน Cast SDK เป็น 21.2.0
- ส่วนขยาย IMA:
- นำ Listener ของเพลเยอร์ของ
ImaServerSideAdInsertionMediaSourceออกในเทรดแอปพลิเคชันเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับเทรดดิ้ง - เพิ่มพร็อพเพอร์ตี้
focusSkipButtonWhenAvailableลงในImaServerSideAdInsertionMediaSource.AdsLoader.Builderเพื่อขอให้โฟกัสที่ปุ่มข้ามบนอุปกรณ์ทีวี และตั้งค่าเป็น "จริง" โดยค่าเริ่มต้น - เพิ่มเมธอด
focusSkipButton()ลงในImaServerSideAdInsertionMediaSource.AdsLoaderเพื่อส่งคำขอแบบเป็นโปรแกรมให้โฟกัสที่ปุ่มข้าม - อัปเกรด IMA SDK เป็นเวอร์ชัน 3.29.0
- นำ Listener ของเพลเยอร์ของ
- แอปสาธิต:
- ขอสิทธิ์การแจ้งเตือนสำหรับการแจ้งเตือนการดาวน์โหลดที่รันไทม์ (#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) - ส่ง Callback
onMediaItemTransitionที่ขาดหายไปเมื่อเรียกใช้seekToNextหรือseekToPreviousในเพลย์ลิสต์ที่มีรายการเดียว (#10667) - เพิ่ม
Player.getSurfaceSizeที่แสดงขนาดของแพลตฟอร์มที่แสดงผลวิดีโอ - แก้ไขข้อบกพร่องที่การนำ Listener ออกระหว่างการเผยแพร่เพลเยอร์อาจทำให้เกิด
IllegalStateException(#10758)
- เพิ่ม
- สร้าง
- บังคับใช้
compileSdkVersionขั้นต่ำเพื่อหลีกเลี่ยงข้อผิดพลาดในการคอมไพล์ (#10684) - หลีกเลี่ยงการเผยแพร่บล็อกเมื่อรวมอยู่ในบิลด์ Gradle อื่น
- บังคับใช้
- การเลือกแทร็ก
- เลือกแทร็กอื่นแทน Dolby Vision หากจอแสดงผลไม่รองรับ (#8944)
- ดาวน์โหลด
- วิดีโอ
- ลองใช้ตัวถอดรหัสอื่นสำหรับ Dolby Vision หากจอแสดงผลไม่รองรับ (#9794)
- เสียง:
- ใช้
SingleThreadExecutorสำหรับการปล่อยอินสแตนซ์AudioTrackเพื่อหลีกเลี่ยงข้อผิดพลาด OutOfMemory เมื่อปล่อยเพลเยอร์หลายรายการพร้อมกัน (#10057) - เพิ่ม
AudioOffloadListener.onExperimentalOffloadedPlaybackสำหรับสถานะการออฟโหลด AudioTrack (#134) - ทำให้
AudioTrackBufferSizeProviderเป็นอินเทอร์เฟซสาธารณะ - เพิ่ม
ExoPlayer.setPreferredAudioDeviceเพื่อตั้งค่าอุปกรณ์เอาต์พุตเสียงที่ต้องการ (#135) - เปลี่ยนชื่อ
androidx.media3.exoplayer.audio.AudioProcessorเป็นandroidx.media3.common.audio.AudioProcessor - แมปเสียง 8 ช่องและ 12 ช่องกับมาสก์ช่อง 7.1 และ 7.1.4 ตามลำดับใน Android ทุกเวอร์ชัน (#10701)
- ใช้
- ข้อมูลเมตา:
- ตอนนี้คุณสามารถกำหนดค่า
MetadataRendererให้แสดงผลข้อมูลเมตาทันทีที่พร้อมใช้งานได้แล้ว สร้างอินสแตนซ์ด้วยMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)เพื่อระบุว่าโปรแกรมแสดงผลจะแสดงผลข้อมูลเมตาก่อนหรือซิงค์กับตำแหน่งของเพลเยอร์
- ตอนนี้คุณสามารถกำหนดค่า
- DRM:
- แก้ปัญหาข้อบกพร่องในการติดตั้งใช้งาน ClearKey ของ Android 13 ที่แสดงผล URL ใบอนุญาตที่ไม่ว่างเปล่าแต่ไม่ถูกต้อง
- แก้ไขข้อผิดพลาด
setMediaDrmSession failed: session not openedเมื่อสลับระหว่างรูปแบบ DRM ในเพลย์ลิสต์ (เช่น Widevine เป็น ClearKey)
- ข้อความ
- CEA-608: ตรวจสอบว่าคำสั่งสวิตช์บริการในฟิลด์ 2 ได้รับการจัดการอย่างถูกต้อง (#10666)
- DASH:
- แยกวิเคราะห์
EventStream.presentationTimeOffsetจากไฟล์ Manifest (#10460)
- แยกวิเคราะห์
- UI:
- ใช้การลบล้างปัจจุบันของเพลเยอร์ตามที่กำหนดไว้ล่วงหน้าใน
TrackSelectionDialogBuilder(#10429)
- ใช้การลบล้างปัจจุบันของเพลเยอร์ตามที่กำหนดไว้ล่วงหน้าใน
- เซสชัน:
- ตรวจสอบว่าคำสั่งจะทำงานตามลำดับที่ถูกต้องเสมอ แม้ว่าบางคำสั่งจะต้องมีการแก้ไขแบบอะซิงโครนัส (#85)
- เพิ่ม
DefaultMediaNotificationProvider.Builderเพื่อสร้างอินสแตนซ์DefaultMediaNotificationProviderเครื่องมือสร้างสามารถกำหนดค่ารหัสการแจ้งเตือน รหัสช่องทางการแจ้งเตือน และชื่อช่องทางการแจ้งเตือนที่ผู้ให้บริการใช้ นอกจากนี้ ให้เพิ่มเมธอดDefaultMediaNotificationProvider.setSmallIcon(int)เพื่อตั้งค่าไอคอนขนาดเล็กของการแจ้งเตือน (#104) - ตรวจสอบว่าคำสั่งที่ส่งก่อน
MediaController.release()ไม่ถูกยกเลิก (#99) SimpleBitmapLoaderสามารถโหลดบิตแมปจาก URI ของfile://ได้ (#108)- แก้ไขการยืนยันที่ป้องกันไม่ให้
MediaControllerค้นหาโฆษณาในระยะเวลาหนึ่ง (#122) - เมื่อการเล่นสิ้นสุดลง
MediaSessionServiceจะหยุดทำงานจากเบื้องหน้า และการแจ้งเตือนจะแสดงขึ้นเพื่อเริ่มเล่นรายการสื่อที่เล่นล่าสุดอีกครั้ง (#112) - อย่าเริ่มบริการที่ทำงานอยู่เบื้องหน้าด้วย Intent รอดำเนินการสำหรับการหยุดชั่วคราว (#167)
- ซ่อน "ป้าย" ที่เชื่อมโยงกับการแจ้งเตือนที่สร้างโดย
DefaultNotificationProviderใน API 26 และ API 27 ด้วยตนเอง (ป้ายจะซ่อนโดยอัตโนมัติใน API 28 ขึ้นไป) (#131) - แก้ไขข้อบกพร่องที่การเชื่อมต่อ Binder ครั้งที่ 2 จาก MediaSession เดิมไปยัง MediaController ของ Media3 ทำให้เกิด IllegalStateExceptions (#49)
- RTSP:
- IMA:
- ส่วนขยาย FFmpeg:
- เพิ่มแฟล็กที่จำเป็นใหม่เพื่อลิงก์ไลบรารี FFmpeg กับ NDK 23.1.7779620 ขึ้นไป (#9933)
- ส่วนขยาย AV1
- อัปเดตเวอร์ชัน CMake เพื่อหลีกเลี่ยงความไม่เข้ากันกับ Android Studio รุ่นล่าสุด (#9933)
- ส่วนขยาย Cast
- ใช้
getDeviceInfo()เพื่อให้สามารถระบุCastPlayerเมื่อควบคุมการเล่นด้วยMediaController(#142)
- ใช้
- Transformer:
- เพิ่มตัวจับเวลา Watchdog ของ Muxer เพื่อตรวจจับเมื่อการสร้างตัวอย่างเอาต์พุตช้าเกินไป
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Transformer.Builder.setOutputMimeType(String)ออก เรานำฟีเจอร์นี้ออกแล้ว ประเภท MIME จะเป็น MP4 เสมอเมื่อใช้ Muxer เริ่มต้น
- นำ
เวอร์ชัน 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) - สำหรับสื่อแบบโปรเกรสซีฟ ให้รวมเฉพาะแทร็กที่เลือกไว้ในตำแหน่งที่บัฟเฟอร์ (#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 และทริกเกอร์การเลือกแทร็กใหม่ตามพร็อพเพอร์ตี้เหล่านี้ อุปกรณ์ที่มีโหมด UItelevisionจะได้รับการยกเว้นจากข้อจำกัดเหล่านี้ และระบบจะเลือกใช้รูปแบบที่มีจำนวนช่องสัญญาณสูงสุด หากต้องการเปิดใช้ฟีเจอร์นี้ อินสแตนซ์DefaultTrackSelectorต้องสร้างขึ้นด้วยContext
- รวมคลาส
- วิดีโอ
- เปลี่ยนชื่อ
DummySurfaceเป็นPlaceholderSurface - เพิ่มการรองรับ AV1 ไปยัง
MediaCodecVideoRenderer.getCodecMaxInputSize
- เปลี่ยนชื่อ
- เสียง:
- ใช้ตัวถอดรหัสเสียง LG AC3 ที่โฆษณาประเภท MIME ที่ไม่ใช่มาตรฐาน
- เปลี่ยนประเภทการแสดงผลของ
AudioAttributes.getAudioAttributesV21()จากandroid.media.AudioAttributesเป็นคลาส WrapperAudioAttributesV21ใหม่ เพื่อป้องกันการยืนยัน ART ที่ช้าใน API < 21 - ค้นหาแพลตฟอร์ม (API 29 ขึ้นไป) หรือสมมติจำนวนช่องการเข้ารหัสเสียงสำหรับการส่งผ่านเสียงเมื่อไม่ได้ตั้งค่าจำนวนช่องเสียงของรูปแบบ ซึ่งเกิดขึ้นกับการเตรียมแบบไม่มีกลุ่มข้อมูลของ HLS (10204)
- กำหนดค่า
AudioTrackด้วยมาสก์ช่องสัญญาณAudioFormat.CHANNEL_OUT_7POINT1POINT4หากตัวถอดรหัสส่งออกเสียง PCM แบบ 12 ช่องสัญญาณ (#10322
- DRM
- ตรวจสอบว่าเซสชัน DRM ได้รับการอัปเดตอย่างถูกต้องเสมอเมื่อกรอวิดีโอทันทีหลังจากเปลี่ยนรูปแบบ (10274)
- ข้อความ
- เปลี่ยน
Player.getCurrentCues()เพื่อแสดงผลCueGroupแทนList<Cue> - SSA: รองรับการตั้งค่าสไตล์
OutlineColourเมื่อBorderStyle == 3(เช่นOutlineColourตั้งค่าพื้นหลังของคิว) (#8435) - CEA-708: แยกวิเคราะห์ข้อมูลเป็นบล็อกบริการหลายบล็อก และละเว้นบล็อกที่ไม่เชื่อมโยงกับหมายเลขบริการที่เลือกไว้ในปัจจุบัน
- นำ
RawCcExtractorออก ซึ่งใช้เพื่อจัดการรูปแบบคำบรรยายภายในของ Google เท่านั้น
- เปลี่ยน
- เครื่องสกัดน้ำผลไม้
- UI:
- แก้ไขการส่งเหตุการณ์ไปยัง
OnClickListenerที่ตั้งค่าไว้ในPlayerViewในกรณีที่useController=false(#9605) นอกจากนี้ ให้แก้ไขการส่งเหตุการณ์ไปยังOnLongClickListenerสำหรับการกำหนดค่ามุมมองทั้งหมดด้วย - แก้ไขการจัดการลำดับการโต้ตอบแบบสัมผัสที่ออกนอกขอบเขตของ
PlayerViewก่อนACTION_UPเป็นการคลิกอย่างไม่ถูกต้อง (#9861) - แก้ไขปัญหาการช่วยเหลือพิเศษของ
PlayerViewที่การแตะอาจสลับการเล่นแทนที่จะซ่อนตัวควบคุม (#8627) - เขียน
TrackSelectionViewและTrackSelectionDialogBuilderใหม่เพื่อให้ทำงานกับอินเทอร์เฟซPlayerแทนExoPlayerซึ่งจะช่วยให้สามารถใช้มุมมองกับการติดตั้งใช้งานPlayerอื่นๆ ได้ และนำการขึ้นต่อกันจากโมดูล UI ไปยังโมดูล ExoPlayer ออก การเปลี่ยนแปลงนี้เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ - ไม่แสดงแทร็กข้อความที่บังคับในตัวเลือกแทร็ก
PlayerViewและเลือกแทร็กข้อความที่บังคับที่เหมาะสมไว้หากเลือก "ไม่มี" (#9432)
- แก้ไขการส่งเหตุการณ์ไปยัง
- DASH:
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
AudioChannelConfigurationการดำเนินการนี้จะเปิดใช้การส่งผ่านเสียงสำหรับสตรีม DTS อีกครั้ง (#10159) - ไม่อนุญาตให้ส่ง
nullไปยังDashMediaSource.Factory.setCompositeSequenceableLoaderFactoryคุณสามารถส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactoryได้อย่างชัดเจนหากจำเป็น
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
- HLS:
- เปลี่ยนไปใช้การเตรียมแบบ Chunkful หากแอตทริบิวต์ CODECS ของเพลย์ลิสต์ไม่มีตัวแปลงรหัสเสียง (#10065)
- ไม่อนุญาตให้ส่ง
nullไปยังHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory,HlsMediaSource.Factory.setPlaylistParserFactoryและHlsMediaSource.Factory.setPlaylistTrackerFactoryคุณสามารถส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory,DefaultHlsPlaylistParserFactoryหรือการอ้างอิงถึงDefaultHlsPlaylistTracker.FACTORYได้อย่างชัดเจนหากจำเป็น
- Smooth Streaming:
- ไม่อนุญาตให้ส่ง
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.Callback,MediaLibrarySession.MediaLibrarySessionCallbackเป็นMediaLibrarySession.CallbackและMediaSession.Builder.setSessionCallbackเป็นsetCallback - แก้ไข NPE ใน
MediaControllerImplLegacy(#59) - อัปเดตข้อมูลตำแหน่งเซสชันในการเปลี่ยนแปลงไทม์ไลน์ (#51)
- แก้ไข NPE ใน
MediaControllerImplBaseหลังจากปล่อยตัวควบคุม (#74)
- แทนที่
- การเล่นโฆษณา / IMA:
- ลดอัตราการโพลโฆษณาจากทุกๆ 100 มิลลิวินาทีเป็นทุกๆ 200 มิลลิวินาที เพื่อให้สอดคล้องกับคำแนะนำของ Media Rating Council (MRC)
- ส่วนขยาย FFmpeg:
- อัปเดตเวอร์ชัน CMake เป็น
3.21.0+เพื่อหลีกเลี่ยงข้อบกพร่องของ CMake ที่ทำให้การซิงค์ Gradle ของ AndroidStudio ไม่สำเร็จ (#9933)
- อัปเดตเวอร์ชัน CMake เป็น
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)ออก โปรดใช้Player.Listener.onTracksChanged(Tracks)แทน - นำ
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)
- แก้ไขการโต้ตอบของ
- การเล่นโฆษณา
- แก้ไขปัญหาบัฟเฟอร์เสียงไม่เพียงพอระหว่างช่วงโฆษณาในสตรีม SSAI แบบ HLS แบบสด
เวอร์ชัน 1.0.0-alpha02
2 มีนาคม 2022
androidx.media3:media3-*:1.0.0-alpha02 เผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha02 มีคอมมิตเหล่านี้
ซึ่งสอดคล้องกับรุ่น ExoPlayer 2.17.0
- ไลบรารีหลัก:
- เพิ่มเมธอดที่มีการป้องกัน
DefaultRenderersFactory.getCodecAdapterFactory()เพื่อให้คลาสย่อยของDefaultRenderersFactoryที่ลบล้างbuildVideoRenderers()หรือbuildAudioRenderers()สามารถเข้าถึงโรงงานอะแดปเตอร์ตัวแปลงรหัสและส่งไปยังอินสแตนซ์MediaCodecRendererที่สร้างขึ้นได้ - ส่งต่อช่องส่วนหัว ICY
nameและgenreไปยังMediaMetadata.stationและMediaMetadata.genreตามลำดับ เพื่อให้ช่องดังกล่าวเข้าถึงแอปผ่านPlayer.Listener.onMediaMetadataChanged()(#9677) - นำคีย์ Null ออกจาก
DefaultHttpDataSource#getResponseHeaders - หยุดชั่วคราวและลองอีกครั้งเมื่อสร้างอินสแตนซ์
MediaCodecไม่สำเร็จ วิธีนี้จะช่วยแก้ปัญหาที่เกิดขึ้นในอุปกรณ์บางเครื่องเมื่อเปลี่ยน Surface จากตัวแปลงรหัสที่ปลอดภัยเป็นตัวแปลงรหัสอื่น (#8696) - เพิ่ม
MediaCodecAdapter.getMetrics()เพื่ออนุญาตให้ผู้ใช้รับข้อมูลเมตริกจากMediaCodec(#9766) - แก้ไขการแก้ไขทรัพยากร Dependency ของ 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ซ้ำในTrackGroupArrayTrackGroupสามารถทำให้แตกต่างได้เสมอโดยการตั้งค่าidในตัวสร้างTrackGroupการดำเนินการนี้จะแก้ไขข้อขัดข้องเมื่อกลับมาเล่นอีกครั้งหลังจากที่แอปทำงานอยู่เบื้องหลังโดยมีการลบล้างแทร็กที่ใช้งานอยู่ (#9718) - แก้ไขตรรกะใน
AdaptiveTrackSelectionเพื่ออนุญาตให้เพิ่มคุณภาพภายใต้แบนด์วิดท์เครือข่ายที่เพียงพอ แม้ว่าการเล่นจะใกล้เคียงกับขอบสดมากก็ตาม (#9784)
- วิดีโอ
- แก้ไขตรรกะสำรองของตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส H264/H265 ที่เข้ากันได้หากจำเป็น
- เสียง:
- แก้ไขตรรกะการสำรองข้อมูลตัวถอดรหัสสำหรับ Dolby Atmos (E-AC3-JOC) เพื่อใช้ตัวถอดรหัส E-AC3 ที่เข้ากันได้หากจำเป็น
- เปลี่ยน
AudioCapabilitiesAPI ให้ต้องส่งAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESอย่างชัดเจนแทนnull - อนุญาตให้ปรับแต่งการคำนวณขนาดบัฟเฟอร์
AudioTrackโดยแทรกAudioTrackBufferSizeProviderลงในDefaultAudioSink(#8891) - ลองสร้าง
AudioTrackอีกครั้งหากขนาดบัฟเฟอร์ที่ขอมากกว่า 1 MB (#9712)
- เครื่องสกัดน้ำผลไม้
- ข้อความ
- DRM:
- นำ
playbackLooperออกจากDrmSessionManager.(pre)acquireSessionเมื่อแอปใช้DrmSessionManagerในMediaSourceที่กำหนดเอง จะต้องส่งplaybackLooperไปยังDrmSessionManager.setPlayerแทน
- นำ
- การเล่นโฆษณา / IMA:
- เพิ่มการรองรับการแทรกโฆษณาแบบไดนามิก (DAI) ของ IMA (#8213)
- เพิ่มเมธอดลงใน
AdPlaybackStateเพื่ออนุญาตให้รีเซ็ตกลุ่มโฆษณาเพื่อให้เล่นอีกครั้งได้ (#9615) - บังคับใช้ความเร็วในการเล่น 1.0 ระหว่างการเล่นโฆษณา (#9018)
- แก้ไขปัญหาที่กลุ่มโฆษณาซึ่งโหลดไม่สําเร็จทําให้เกิดการรีเซ็ตการเล่นทันที (#9929)
- UI:
- DASH:
- เพิ่มพร็อพเพอร์ตี้ที่จำเป็นและเสริมที่แยกวิเคราะห์แล้วลงใน
Representation(#9579) - รองรับบทบาทแทร็ก
forced-subtitle(#9727) - หยุดตีความบทบาทแทร็ก
mainเป็นC.SELECTION_FLAG_DEFAULT - แก้ไขตรรกะการยกเว้น URL ฐานสำหรับไฟล์ Manifest ที่ไม่ได้ประกาศเนมสเปซ DVB (#9856)
- รองรับ URL
MPD.Locationแบบสัมพัทธ์ (#9939)
- เพิ่มพร็อพเพอร์ตี้ที่จำเป็นและเสริมที่แยกวิเคราะห์แล้วลงใน
- HLS:
- ป้อน
Format.labelอย่างถูกต้องสำหรับสตรีม HLS แบบเสียงเท่านั้น (#9608) - ใช้การเตรียมการแบบไม่แบ่งกลุ่มโดยค่าเริ่มต้นเพื่อปรับปรุงเวลาเริ่มต้น หากการแสดงผลมีแทร็กคำบรรยายแทนเสียงแบบมัลติเพล็กซ์ที่ไม่ได้ประกาศในเพลย์ลิสต์หลัก คุณควรเพิ่มแทร็กดังกล่าวลงในเพลย์ลิสต์หลักเพื่อให้เล่นได้ หรือปิดการเตรียมแบบไม่มีกลุ่มข้อมูลด้วย
HlsMediaSource.Factory.setAllowChunklessPreparation(false) - รองรับการกรอวิดีโอที่แม่นยำระดับคีย์เฟรมใน HLS (#2882)
- ป้อน
- RTSP:
- Transformer:
- เพิ่มเวอร์ชัน API ขั้นต่ำที่จำเป็นเป็น 21
- ตอนนี้เราใช้
TransformationExceptionเพื่ออธิบายข้อผิดพลาดที่เกิดขึ้นระหว่างการเปลี่ยนรูปแบบ - เพิ่ม
TransformationRequestเพื่อระบุตัวเลือกการเปลี่ยนรูปแบบ - อนุญาตให้ลงทะเบียน Listener หลายรายการ
- แก้ไขปัญหา Transformer ค้างเมื่ออ่านเอาต์พุตตัวแปลงรหัสได้บางส่วน
- แก้ไข NPE ที่อาจเกิดขึ้นใน
Transformer.getProgressเมื่อการปล่อย Muxer แสดงข้อผิดพลาด - เพิ่มแอปสาธิตเพื่อใช้การเปลี่ยนรูปแบบ
- ส่วนขยาย MediaSession:
- โดยค่าเริ่มต้น ตอนนี้
MediaSessionConnectorจะล้างเพลย์ลิสต์เมื่อหยุดเล่น แอปที่ต้องการเก็บเพลย์ลิสต์ไว้สามารถเรียกใช้setClearMediaItemsOnStop(false)ในเครื่องมือเชื่อมต่อได้
- โดยค่าเริ่มต้น ตอนนี้
- ส่วนขยาย Cast
- ส่วนขยาย FFmpeg:
- ทำให้
build_ffmpeg.shขึ้นอยู่กับ bin utils ของ 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#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryและMediaSourceFactory#setDrmUserAgentออก โปรดใช้MediaSourceFactory#setDrmSessionManagerProviderแทน - นำ
MediaSourceFactory#setStreamKeysออก โปรดใช้MediaItem.Builder#setStreamKeysแทน - นำ
MediaSourceFactory#createMediaSource(Uri)ออก โปรดใช้MediaSourceFactory#createMediaSource(MediaItem)แทน - นำ
setTagออกจากDashMediaSource,HlsMediaSourceและSsMediaSourceโปรดใช้MediaItem.Builder#setTagแทน - นำ
DashMediaSource#setLivePresentationDelayMs(long, boolean)ออก ใช้MediaItem.Builder#setLiveConfigurationและMediaItem.LiveConfiguration.Builder#setTargetOffsetMsเพื่อลบล้างไฟล์ Manifest หรือใช้DashMediaSource#setFallbackTargetLiveOffsetMsเพื่อระบุค่าสำรอง - นำ
(Simple)ExoPlayer.setThrowsWhenUsingWrongThreadออก คุณไม่สามารถเลือกไม่ใช้การบังคับใช้ชุดข้อความได้อีกต่อไป - นำ
ActionFileและActionFileUpgradeUtilออก ใช้ ExoPlayer 2.16.1 หรือเวอร์ชันก่อนหน้าเพื่อใช้ActionFileUpgradeUtilในการผสานไฟล์การดำเนินการเดิมเข้ากับDefaultDownloadIndex - นำ
ProgressiveMediaSource#setExtractorsFactoryออก ให้ใช้ตัวสร้างProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)แทน - นำ
ProgressiveMediaSource.Factory#setTagและProgressiveMediaSource.Factory#setCustomCacheKeyออก โปรดใช้MediaItem.Builder#setTagและMediaItem.Builder#setCustomCacheKeyแทน - นำตัวสร้าง
DefaultRenderersFactory(Context, @ExtensionRendererMode int)และDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)ออก ให้ใช้คอนสตรัคเตอร์DefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeและDefaultRenderersFactory#setAllowedVideoJoiningTimeMsแทน - นำคอนสตรัคเตอร์
CronetDataSourceสาธารณะทั้งหมดออก โปรดใช้CronetDataSource.Factoryแทน
- นำ
- เปลี่ยน
IntDefsต่อไปนี้เป็น@Target(TYPE_USE)เท่านั้น ซึ่งอาจทำให้การคอมไพล์การใช้งานใน Kotlin เสียหาย แต่สามารถแก้ไขได้โดยย้ายคำอธิบายประกอบเพื่อกำกับประเภท (Int)@AacAudioObjectType@Ac3Util.SyncFrameInfo.StreamType@AdLoadException.Type@AdtsExtractor.Flags@AmrExtractor.Flags@AspectRatioFrameLayout.ResizeMode@AudioFocusManager.PlayerCommand@AudioSink.SinkFormatSupport@BinarySearchSeeker.TimestampSearchResult.Type@BufferReplacementMode@C.BufferFlags@C.ColorRange@C.ColorSpace@C.ColorTransfer@C.CryptoMode@C.Encoding@C.PcmEncoding@C.Projection@C.SelectionReason@C.StereoMode@C.VideoOutputMode@CacheDataSource.Flags@CaptionStyleCompat.EdgeType@DataSpec.Flags@DataSpec.HttpMethods@DecoderDiscardReasons@DecoderReuseResult@DefaultAudioSink.OutputMode@DefaultDrmSessionManager.Mode@DefaultTrackSelector.SelectionEligibility@DefaultTsPayloadReaderFactory.Flags@EGLSurfaceTexture.SecureMode@EbmlProcessor.ElementType@ExoMediaDrm.KeyRequest.RequestType@ExtensionRendererMode@Extractor.ReadResult@FileTypes.Type@FlacExtractor.Flags(ในแพ็กเกจcom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(ในแพ็กเกจcom.google.android.exoplayer2.extractor.flac)@FragmentedMp4Extractor.Flags@HlsMediaPlaylist.PlaylistType@HttpDataSourceException.Type@IllegalClippingException.Reason@IllegalMergeException.Reason@LoadErrorHandlingPolicy.FallbackType@MatroskaExtractor.Flags@Mp3Extractor.Flags@Mp4Extractor.Flags@NotificationUtil.Importance@PlaybackException.FieldNumber@PlayerNotificationManager.Priority@PlayerNotificationManager.Visibility@PlayerView.ShowBuffering@Renderer.State@RendererCapabilities.AdaptiveSupport@RendererCapabilities.Capabilities@RendererCapabilities.DecoderSupport@RendererCapabilities.FormatSupport@RendererCapabilities.HardwareAccelerationSupport@RendererCapabilities.TunnelingSupport@SampleStream.ReadDataResult@SampleStream.ReadFlags@StyledPlayerView.ShowBuffering@SubtitleView.ViewType@TextAnnotation.Position@TextEmphasisSpan.MarkFill@TextEmphasisSpan.MarkShape@Track.Transformation@TrackOutput.SampleDataPart@Transformer.ProgressState@TsExtractor.Mode@TsPayloadReader.Flags@WebvttCssStyle.FontSizeUnit
เวอร์ชัน 1.0.0-alpha01
27 ตุลาคม 2021
androidx.media3:media3-*:1.0.0-alpha01 เผยแพร่แล้ว เวอร์ชัน 1.0.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
Media3 เป็นบ้านหลังใหม่สำหรับไลบรารีการสนับสนุนสื่อ ซึ่งรวมถึง ExoPlayer เวอร์ชันอัลฟารุ่นแรกประกอบด้วยการใช้งานไลบรารีที่ใช้งานได้ในช่วงแรกสำหรับการใช้งาน Use Case ของสื่อ ซึ่งรวมถึงรายการต่อไปนี้
- ExoPlayer ซึ่งเป็นมีเดียเพลเยอร์ระดับแอปพลิเคชันสำหรับ Android ที่ปรับแต่งและขยายได้ง่าย
- ฟังก์ชันการทำงานของเซสชันสื่อสำหรับการแสดงและการควบคุมการเล่น โมดูลเซสชันใหม่นี้ใช้อินเทอร์เฟซ
Playerเดียวกันกับ ExoPlayer - คอมโพเนนต์ UI สำหรับสร้างอินเทอร์เฟซผู้ใช้ของการเล่นสื่อ
- โมดูลที่รวมฟังก์ชันการทำงานในไลบรารีอื่นๆ เพื่อใช้กับ ExoPlayer เช่น การแทรกโฆษณาผ่าน IMA SDK
ดูข้อมูลเพิ่มเติมได้ที่โปรเจ็กต์ Media3 GitHub
ก่อนหน้านี้ ExoPlayer โฮสต์อยู่ในโปรเจ็กต์ ExoPlayer GitHub แยกต่างหาก ใน Media3 ชื่อแพ็กเกจคือ androidx.media3.exoplayer เราวางแผนที่จะดูแลรักษาและเผยแพร่โปรเจ็กต์ ExoPlayer GitHub ต่อไปอีกระยะหนึ่งเพื่อให้แอปมีเวลาในการย้ายข้อมูลไปยัง Media3
Media3 มีรายการทดแทนสำหรับโมดูล ExoPlayer ทั้งหมด ยกเว้นส่วนขยาย media2 และ mediasession เดิม ซึ่งจะแทนที่ด้วยโมดูล media3-session ใหม่ ซึ่งจะช่วยให้ผสานรวมระหว่างเพลเยอร์และเซสชันสื่อได้โดยตรงโดยไม่ต้องใช้คลาสอะแดปเตอร์/เครื่องมือเชื่อมต่อ