Media3
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
2 กรกฎาคม 2025 | 1.7.1 | - | 1.8.0-beta01 | 1.8.0-alpha01 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มการอ้างอิงใน Media3 คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
เพิ่มการอ้างอิงสำหรับอาร์ติแฟกต์ที่คุณต้องการในไฟล์ build.gradle
สำหรับแอปหรือโมดูลของคุณ
Groovy
dependencies { def media3_version = "1.6.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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.6.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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการพึ่งพาได้ที่เพิ่มการพึ่งพาบิลด์
ความคิดเห็น
ความคิดเห็นของคุณจะช่วยให้ Jetpack ทำงานได้ดียิ่งขึ้น คุณสามารถใช้ เครื่องมือติดตามปัญหาของ Media3 เพื่อค้นหาคำตอบ สำหรับคำถาม ปัญหาที่ทราบ และคำขอฟีเจอร์ รวมถึงยื่นเรื่องปัญหาใหม่
เวอร์ชัน 1.8.0
เวอร์ชัน 1.8.0-เบต้า01
2 กรกฎาคม 2025
androidx.media3:media3-*:1.8.0-beta01
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.8.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่มการรองรับการแทนที่เพลเยอร์ใน
ForwardingSimpleBasePlayer
- เพิ่มการรองรับการแทนที่เพลเยอร์ใน
- ExoPlayer:
- เพิ่มการรองรับการใช้รหัสอุปกรณ์เสมือนจาก
Context
ที่ส่งไปยังExoPlayer.Builder
- เปิดใช้การจัดเวลาแบบไดนามิกโดยค่าเริ่มต้นในโหมดขัด
- หลีกเลี่ยงการโหลดแหล่งที่มาซ้ำโดยไม่จำเป็นเมื่อกรอรายการไปจนถึงตอนท้าย
- ใช้
MediaCodec.BUFFER_FLAG_DECODE_ONLY
โดยค่าเริ่มต้นในโหมดการลาก - ส่ง
IllegalStateException
เมื่อPreloadMediaSource
เล่นโดยExoPlayer
ที่มีเธรดการเล่นต่างจากเธรดการโหลดล่วงหน้า (#2495) - เพิ่ม
cloneAndMove
ลงในShuffleMode
ด้วยการติดตั้งใช้งานเริ่มต้น (#2226) - เปลี่ยนลักษณะการทำงานเริ่มต้นของ
Renderer.getMinDurationToProgressUs
เพื่อ แสดงค่าที่ใหญ่ขึ้นหากไม่จำเป็นต้องเรียกใช้render
- แก้ไขข้อบกพร่องที่การจัดกำหนดการภายในทำให้เฟรมสุดท้ายล่าช้าเมื่อกรอไปยัง
จุดสิ้นสุดขณะหยุดชั่วคราว ตอนนี้การแก้ไขข้อบกพร่องจะมีผลก็ต่อเมื่อเปิดใช้
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled
- เพิ่มการรองรับการใช้รหัสอุปกรณ์เสมือนจาก
- Transformer
- เพิ่ม
CodecDbLite
ที่ช่วยให้การเพิ่มประสิทธิภาพเฉพาะชิปเซ็ตของการตั้งค่าการเข้ารหัสวิดีโอ - เพิ่มแฟล็ก
setEnableCodecDbLite
ลงในDefaultEncoderFactory
เพื่อเปิดใช้ การเพิ่มประสิทธิภาพการตั้งค่า CodecDB Lite โดยค่าเริ่มต้น ระบบจะตั้งค่าสถานะนี้เป็น false
- เพิ่ม
- โปรแกรมแยกข้อมูล
- เพิ่มการรองรับการกรอใน 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)
- เพิ่มการรองรับการกรอใน MP4 แบบแยกส่วนที่มี
- เสียง:
- เพิ่มการรองรับรูปแบบตัวอย่าง PCM เชิงเส้นทั้งหมดใน
ChannelMappingAudioProcessor
และTrimmingAudioProcessor
- เพิ่มการรองรับช่องว่างของเสียงใน
CompositionPlayer
- นำการโทรที่น่าสงสัยไปยัง
BaseAudioProcessor#flush()
ออกจากBaseAudioProcessor#reset()
- เพิ่มการรองรับรูปแบบตัวอย่าง PCM เชิงเส้นทั้งหมดใน
- วิดีโอ
- ปรับปรุงการปล่อยเฟรมวิดีโออย่างราบรื่นเมื่อเริ่มต้นทำงานในกรณีที่ตัวอย่างเสียงไม่ได้ เริ่มที่ตำแหน่งที่ขออย่างแม่นยำ
- ขยายการแก้ปัญหาชั่วคราวสำหรับ Surface ที่ถอดออกไปยังอุปกรณ์ "realme" (#2059)
- ข้อความ:
- แก้ไขการหยุดเล่นชั่วคราวเมื่อโหลดส่วนคำบรรยายแทนเสียงไม่สำเร็จในตอนแรกและ โหลดสำเร็จในภายหลัง ตามด้วยส่วนคำบรรยายแทนเสียงที่ว่างเปล่าหลายส่วน (#2517)
- ข้อมูลเมตา
- เพิ่มการรองรับการดึงข้อมูลระยะเวลาของสื่อและ
Timeline
ไปยังMetadataRetriever
และย้ายข้อมูลไปยัง APIAutoCloseable
ที่อิงตามอินสแตนซ์ ใช้Builder
ใหม่เพื่อสร้างอินสแตนซ์สำหรับMediaItem
จากนั้นเรียกใช้retrieveTrackGroups()
,retrieveTimeline()
และretrieveDurationUs()
เพื่อรับListenableFuture
สำหรับข้อมูลเมตา ตอนนี้เราเลิกใช้งานเมธอดแบบคงที่ก่อนหน้าแล้ว (#2462)
- เพิ่มการรองรับการดึงข้อมูลระยะเวลาของสื่อและ
- รูปภาพ:
- จำกัดบิตแมปที่ถอดรหัสแล้วให้มีขนาดเท่ากับขนาดการแสดงผลใน
BitmapFactoryImageDecoder
เพื่อหลีกเลี่ยงไม่ให้แอปขัดข้องเนื่องจากCanvas: trying to draw too large bitmap.
จากPlayerView
เมื่อพยายาม แสดงรูปภาพขนาดใหญ่มาก (เช่น 50MP) - เปลี่ยนลายเซ็นของ
DefaultRenderersFactory.getImageDecoderFactory()
เพื่อใช้Context
พารามิเตอร์ - ปรับขนาดเอาต์พุตบิตแมปสูงสุดที่ใช้ใน
CompositionPlayer
ให้ตรงกับขนาดที่ใช้ในTransformer
อยู่แล้ว (หมายความว่าCompositionPlayer
จะไม่พิจารณาขนาดการแสดงผลเมื่อถอดรหัสบิตแมป ซึ่งต่างจากExoPlayer
)
- จำกัดบิตแมปที่ถอดรหัสแล้วให้มีขนาดเท่ากับขนาดการแสดงผลใน
- Muxers:
- แก้ไขข้อบกพร่องที่ไม่ได้ตั้งค่าแฟล็กตัวอย่างที่ถูกต้องสำหรับตัวอย่างเสียงใน MP4 ที่แยกส่วน
- เซสชัน:
- แก้ไขข้อบกพร่องที่การเรียกใช้
setSessionExtras
จากเทรดหลักเมื่อ เรียกใช้เพลเยอร์จากเทรดแอปพลิเคชันอื่นที่ไม่ใช่เทรดหลัก ทำให้เกิดIllegalStateException
(#2265) - ไม่แสดงการแจ้งเตือนโดยอัตโนมัติหากตั้งค่าเพลเยอร์ด้วยรายการสื่อ
โดยไม่ได้เตรียมหรือเล่น
(#2423https://github.com/androidx/media/issues/2423) ลักษณะการทำงานนี้
กำหนดค่าได้ผ่าน
MediaSessionService.setShowNotificationForIdlePlayer
- เพิ่ม
PlaybackException
ที่กำหนดเองสำหรับคอนโทรลเลอร์ทั้งหมดหรือบางตัว - แก้ไขข้อบกพร่องที่การกรอในไลฟ์สดบน
MediaController
อาจทำให้เกิดIllegalArgumentException
- สำหรับไลฟ์สด ให้หยุดเผยแพร่ตำแหน่งการเล่นและความสามารถในการ กรอรายการปัจจุบันสำหรับตัวควบคุมสื่อของแพลตฟอร์ม เพื่อหลีกเลี่ยง อาร์ติแฟกต์ตำแหน่งใน UI ของ Android Auto (และตัวควบคุมอื่นๆ ที่ใช้ ข้อมูลนี้จากเซสชันสื่อของแพลตฟอร์ม) (#1758)
- แก้ไขข้อบกพร่องที่การเรียกใช้
- ส่วนขยาย Cronet
- เพิ่มการจัดการคุกกี้อัตโนมัติ (#5975)
- ส่วนขยาย HLS
- แก้ไขการแยกวิเคราะห์เพลย์ลิสต์เพื่อยอมรับ
\f
(ฟีดแบบฟอร์ม) ในค่าแอตทริบิวต์สตริงที่ยกมา (#2420) - รองรับการอัปเดตโฆษณาคั่นที่มีรหัสเดียวกัน (#2427)
- แก้ไขข้อบกพร่องที่บางครั้งข้อผิดพลาดในการโหลดเพลย์ลิสต์จะไม่แพร่กระจายเมื่อ ไลฟ์สดไม่มีกลุ่มให้โหลด (#2401https://github.com/androidx/media/issues/2401)
- จัดกลุ่มการแสดงผลคำบรรยายแทนเสียงตามแท็ก NAME ในลักษณะเดียวกับที่จัดกลุ่มการแสดงผลเสียงอยู่แล้ว (#1666)
- แก้ไขการแยกวิเคราะห์เพลย์ลิสต์เพื่อยอมรับ
- ส่วนขยาย DASH
- ส่วนขยาย RTSP
- แก้ไข
RtspClient
เพื่อใช้ URI ของตำแหน่งตามที่ระบุเมื่อประมวลผลการตอบกลับ HTTP 302 (#2398)
- แก้ไข
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- แก้ไขข้อบกพร่องที่
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange
ไม่มีผลกับส่วนขยายตัวถอดรหัสเสียง (#2258)
- แก้ไขข้อบกพร่องที่
- ส่วนขยาย Cast
- เพิ่มการรองรับ
setVolume()
และgetVolume()
(#2279) - ป้องกันไม่ให้ CastPlayer เข้าสู่ STATE_BUFFERING ขณะที่ไทม์ไลน์ว่างเปล่า
- เพิ่มการรองรับ
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- เพิ่ม
advance(player).untilPositionAtLeast
และuntilMediaItemIndex
ไปยังTestPlayerRunHelper
เพื่อให้ผู้เล่นเลื่อนไปจนกว่าจะถึงตำแหน่งที่ระบุ ในกรณีส่วนใหญ่ วิธีการเหล่านี้เชื่อถือได้มากกว่าวิธีการuntilPosition
และuntilStartOfMediaItem
ที่มีอยู่ - ย้าย
FakeDownloader
ไปยังโมดูลtest-utils-robolectric
เพื่อนำไปใช้ซ้ำในการทดสอบอื่นๆ
- เพิ่ม
เวอร์ชัน 1.8.0-alpha01
19 พฤษภาคม 2025
androidx.media3:media3-*:1.8.0-alpha01
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.8.0-alpha01 มี
การคอมมิตเหล่านี้
- ExoPlayer:
- เพิ่ม
ExoPlayer.setScrubbingModeEnabled(boolean)
วิธีการ ซึ่งจะเพิ่มประสิทธิภาพ เพลเยอร์สำหรับการกรอหลายครั้ง (เช่น จากผู้ใช้ที่ลากแถบ ตัวเลื่อนไปมา) คุณปรับแต่งลักษณะการทำงานของโหมดการกวาดได้ ด้วยsetScrubbingModeParameters(..)
ในExoPlayer
และExoPlayer.Builder
- อนุญาตให้ปรับแต่งความคลาดเคลื่อนในการกรอแบบเศษส่วนในโหมดการถู
- เพิ่มอัตราการทำงานของตัวแปลงรหัสในโหมดการกวาด
- แก้ไขข้อบกพร่องที่อาจทำให้ไม่มีการรายงานข้อผิดพลาดในการเตรียมเนื้อหาของ
AdsMediaSource
(#2337) - แก้ไขปัญหาหน่วยความจำรั่วใน
MergingMediaSource
เช่น เมื่อใช้ การโหลดคำบรรยายแทนเสียงจากภายนอก (#2338) - อนุญาตให้
CmcdConfiguration.Factory
ส่งคืนnull
เพื่อปิดใช้การบันทึก CMCD สำหรับรายการสื่อที่เฉพาะเจาะจง (#2386) - เพิ่มขนาดบัฟเฟอร์รูปภาพเริ่มต้นจาก 128 KB (ข้อผิดพลาดจากการคัดลอกและวางจากแทร็กข้อความ) เป็น 26 MB ซึ่งมีขนาดใหญ่พอสำหรับรูปภาพ Ultra HDR ขนาด 50 MP (#2417)
- เพิ่ม
PreCacheHelper
ที่อนุญาตให้แอปแคชล่วงหน้าสื่อรายการเดียวที่มี ตำแหน่งเริ่มต้นและระยะเวลาที่ระบุ
- เพิ่ม
- Transformer
- การเติมช่องว่างเริ่มต้น (เพิ่มผ่าน
addGap()
) ด้วยเสียงเงียบในตอนนี้ ต้องตั้งค่าexperimentalSetForceAudioTrack(true)
อย่างชัดเจนในEditedMediaItemSequence.Builder
หากช่องว่างอยู่ตรงกลาง ลำดับ ก็ไม่จำเป็นต้องใช้แฟล็กนี้ - ย้ายอินเทอร์เฟซ
Muxer
จากmedia3-transformer
ไปยังmedia3-muxer
- กำหนดให้ต้องตั้งค่า
MediaItem.Builder().setImageDuration(long)
เพื่อ นำเข้ารายการสื่อเป็นรูปภาพ - เพิ่ม
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)
ซึ่งรวมถึงรายการแก้ไข MP4 เมื่อตัดเพื่อสั่งให้เพลเยอร์ ไม่สนใจตัวอย่างระหว่างคีย์เฟรมก่อนจุดเริ่มต้นของการตัด และ จุดเริ่มต้นของการตัด - อัปเดตแอป Composition Demo ให้ใช้ Kotlin และ Jetpack Compose แล้วเพิ่ม
VideoCompositorSettings
ที่กำหนดเองเพื่อจัดเรียงลำดับเป็นเลย์เอาต์ 2x2 หรือ PIP
- การเติมช่องว่างเริ่มต้น (เพิ่มผ่าน
- โปรแกรมแยกข้อมูล
- MP3: ใช้ระยะเวลาและขนาดข้อมูลจากข้อมูลเมตาอัตราบิตแปรผัน Xing, VBRI และที่คล้ายกันซึ่งค้นหาไม่ได้
เมื่อเปลี่ยนกลับไปใช้การค้นหาอัตราบิตคงที่
เนื่องจาก
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)
(#2194)
- MP3: ใช้ระยะเวลาและขนาดข้อมูลจากข้อมูลเมตาอัตราบิตแปรผัน Xing, VBRI และที่คล้ายกันซึ่งค้นหาไม่ได้
เมื่อเปลี่ยนกลับไปใช้การค้นหาอัตราบิตคงที่
เนื่องจาก
- เสียง:
- อนุญาตการอัปมิกซ์/ดาวน์มิกซ์เสียงแบบคงที่ใน DefaultAudioMixer
- ตั้งค่า
ChannelMappingAudioProcessor
,TrimmingAudioProcessor
และToFloatPcmAudioProcessor
เป็นสาธารณะ (#2339) - ใช้
AudioTrack#getUnderrunCount()
ในAudioTrackPositionTracker
เพื่อ ตรวจหาการทำงานไม่ต่อเนื่องในDefaultAudioSink
แทนการประมาณค่า แบบสุดความสามารถ - ปรับปรุงการปรับค่าการประทับเวลาของเสียงให้ราบรื่นขึ้นในกรณีที่ตำแหน่งของ อุปกรณ์เอาต์พุตเสียงมีการเปลี่ยนแปลงที่ไม่คาดคิด
- แก้ไขข้อบกพร่องที่ทำให้การซิงค์ภาพและเสียงไม่ทำงานในช่วง 10 วินาทีแรกหลังจากกลับมาเล่นต่อ จากหยุดชั่วคราวเมื่อเชื่อมต่อกับอุปกรณ์บลูทูธ
- แก้ไขข้อบกพร่องที่ทำให้
AnalyticsListener.onAudioPositionAdvancing
ไม่ได้ รายงานเวลาที่เสียงเริ่มเลื่อน แต่รายงานเวลาของการวัดครั้งแรก
- วิดีโอ
- เพิ่ม
ExoPlayer
API เวอร์ชันทดลองเพื่อรวมแฟล็กMediaCodec.BUFFER_FLAG_DECODE_ONLY
เมื่อจัดคิวบัฟเฟอร์อินพุตแบบถอดรหัสเท่านั้น โดยแฟล็กนี้จะส่งสัญญาณให้ตัวถอดรหัสข้ามบัฟเฟอร์ที่ถอดรหัสได้อย่างเดียว จึงทำให้การค้นหาเร็วขึ้น เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag
- ปรับปรุงการตรวจสอบประสิทธิภาพตัวแปลงรหัสสำหรับตัวแปลงรหัสวิดีโอซอฟต์แวร์ ซึ่งอาจส่งผลให้มีการทำเครื่องหมายแทร็กเพิ่มเติมบางรายการเป็น
EXCEEDS_CAPABILITIES
- แก้ไขข้อผิดพลาดในการเล่น VP9 Widevine ในอุปกรณ์บางรุ่น (#2408)
- เพิ่ม
- ข้อความ:
- แก้ไข 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)
- ผลลัพธ์
- เพิ่ม
Presentation.createForShortSide(int)
ที่สร้างPresentation
ซึ่งช่วยให้ด้านที่สั้นที่สุดตรงกับค่าที่ระบุเสมอ โดยไม่คำนึงถึงการวางแนวของอินพุต
- เพิ่ม
- Muxers:
writeSampleData()
ตอนนี้ API ใช้คลาสBufferInfo
เฉพาะของ Muxer แทนMediaCodec.BufferInfo
แล้ว- เพิ่ม
Muxer.Factory#supportsWritingNegativeTimestampsInEditList
ซึ่ง ค่าเริ่มต้นเป็น false
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่ข้อผิดพลาดในการโหลดในโฆษณาหนึ่งอาจทำให้กลุ่มโฆษณาอื่นไม่ถูกต้องโดยไม่ตั้งใจ
- แก้ไขข้อบกพร่องที่กลุ่มโฆษณาหลังจากสิ้นสุดช่วงเวลา VOD ทำให้การเล่นหยุดชะงัก
ระบบจะไม่จัดคิวกลุ่มโฆษณาที่มีเวลาเริ่มต้นหลังจากช่วงเวลาที่กำหนดไว้ใน
MediaPeriodQueue
อีกต่อไป (#2215)
- เซสชัน:
- แก้ไขข้อบกพร่องที่การส่งค่า Null ไปยัง
getLibraryRoot
ของMediaBrowser
ที่เชื่อมต่อกับMediaBrowserServiceCompat
รุ่นเดิมทำให้เกิดNullPointerException
- แก้ไขข้อบกพร่องที่ทำให้การส่งการดำเนินการที่กำหนดเอง ผลการค้นหา หรือคำขอ getItem ทำให้แอปเซสชันเดิมขัดข้องพร้อมข้อความ
ClassNotFoundException
- แก้ไขข้อบกพร่องที่ทำให้มีการแชร์
MediaItem.LocalConfiguration.uri
ไปยังMediaMetadata
ของเซสชันแพลตฟอร์ม หากต้องการแชร์ URI โดยเจตนาเพื่อ อนุญาตให้ตัวควบคุมส่งคำขอสื่ออีกครั้ง ให้ตั้งค่าMediaItem.RequestMetadata.mediaUri
แทน
- แก้ไขข้อบกพร่องที่การส่งค่า Null ไปยัง
- UI:
- แก้ไขข้อบกพร่องของ 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
ที่เฉพาะเจาะจงและดาวน์โหลดเนื้อหาที่เกี่ยวข้องได้
- เพิ่มการรองรับการดาวน์โหลดบางส่วนสำหรับสตรีมแบบต่อเนื่อง แอปสามารถเตรียมสตรีมแบบ
โปรเกรสซีฟด้วย
- ส่วนขยาย HLS
- รองรับ X-ASSET-LIST และสตรีมแบบสดด้วย
HlsInterstitialsAdsLoader
- รองรับ X-ASSET-LIST และสตรีมแบบสดด้วย
- ส่วนขยาย RTSP
- เพิ่มการรองรับการแยกวิเคราะห์สำหรับ SessionDescription ที่มีบรรทัดที่มี อักขระช่องว่างต่อท้าย (#2357)
- ส่วนขยาย Cast
- เพิ่มการรองรับ
getDeviceVolume()
,setDeviceVolume()
,getDeviceMuted()
และsetDeviceMuted()
(#2089)
- เพิ่มการรองรับ
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- นำ
transformer.TestUtil.addAudioDecoders(String...)
transformer.TestUtil.addAudioEncoders(String...)
และtransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)
ออกแล้ว ใช้ShadowMediaCodecConfig
เพื่อกำหนดค่าตัวเข้ารหัส และตัวถอดรหัสเงาแทน - แทนที่คำนำหน้า "exotest" ด้วย "media3" ในชื่อตัวแปลงรหัสที่รายงานโดย
ShadowMediaCodecConfig
- นำ
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำตัวสร้าง
SegmentDownloader
ที่เลิกใช้งานแล้วSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)
และตัวสร้างที่เกี่ยวข้องในคลาสย่อยDashDownloader
,HlsDownloader
และSsDownloader
ออกแล้ว - นำ
Player.hasNext()
Player.hasNextWindow()
ที่เลิกใช้งานแล้วออก โปรดใช้Player.hasNextMediaItem()
แทน - นำ
Player.next()
ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToNextMediaItem()
แทน - นำ
Player.seekToPreviousWindow()
ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToPreviousMediaItem()
แทน - นำ
Player.seekToNextWindow()
ที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToNextMediaItem()
แทน - นำ
BaseAudioProcessor
ที่เลิกใช้งานแล้วออกในโมดูลexoplayer
ใช้BaseAudioProcessor
ในโมดูลcommon
- นำตัวสร้าง
MediaCodecVideoRenderer
ที่เลิกใช้งานแล้วออกMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)
- นำตัวสร้าง
เวอร์ชัน 1.7.0
เวอร์ชัน 1.7.1
16 พฤษภาคม 2025
รุ่นนี้มีโค้ดเหมือนกับ 1.6.1 และเราเผยแพร่รุ่นนี้เพื่อให้มั่นใจว่ารุ่นนี้จะปรากฏเป็นรุ่นที่ "ใหม่กว่า" 1.7.0 ซึ่งเป็นรุ่นอัลฟ่าที่ติดแท็กเป็นรุ่นเสถียรโดยไม่ตั้งใจ (ดูด้านล่าง)
เวอร์ชัน 1.7.0
16 พฤษภาคม 2025
รุ่นนี้ควรเป็น 1.7.0-alpha01
แต่มีการติดแท็กเป็น
1.7.0
(เช่น เสถียร) โดยไม่ตั้งใจใน maven.google.com โปรดอย่าใช้ ใช้เวอร์ชัน 1.6.1 ต่อไปหรืออัปเกรดเป็น 1.7.1 (ซึ่งมีโค้ดเดียวกับ 1.6.1)
เวอร์ชัน 1.6.0
1.6.1
14 เมษายน 2025
androidx.media3:media3-*:1.6.1
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.6.1 มี
การเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่ม
PlaybackParameters.withPitch(float)
วิธีคัดลอกPlaybackParameters
อย่างง่ายดายด้วยpitch
ค่าใหม่ (#2257)
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาที่การเปลี่ยนรายการสื่อไม่สำเร็จเนื่องจากข้อผิดพลาดของโปรแกรมแสดงผลที่กู้คืนได้ ระหว่างการเริ่มต้นรายการสื่อถัดไป (#2229)
- แก้ไขปัญหาที่
ProgressiveMediaPeriod
แสดงIllegalStateException
เมื่อPreloadMediaSource
พยายามเรียกใช้getBufferedDurationUs()
ก่อนที่จะเตรียมใช้งาน (#2315) - แก้ไขการส่ง
CmcdData
ในคำขอไฟล์ Manifest สำหรับ DASH, HLS และ SmoothStreaming (#2253) - ตรวจสอบว่าใช้
AdPlaybackState.withAdDurationsUs(long[][])
ได้หลังจาก นำกลุ่มโฆษณาออกแล้ว ผู้ใช้ยังคงต้องส่งอาร์เรย์ของ ระยะเวลาสำหรับกลุ่มโฆษณาที่นำออก ซึ่งอาจเป็นค่าว่างหรือ Null (#2267)
- โปรแกรมแยกข้อมูล
- MP4: แยกวิเคราะห์
alternate_group
จากกล่องtkhd
และแสดงเป็นรายการMp4AlternateGroupData
ในFormat.metadata
ของแต่ละแทร็ก (#2242)
- MP4: แยกวิเคราะห์
- เสียง:
- แก้ไขปัญหาการออฟโหลดที่ตำแหน่งอาจค้างเมื่อเล่น เพลย์ลิสต์เนื้อหาสั้น (#1920)
- เซสชัน:
- ลดระยะหมดเวลาการรวบรวมข้อมูลสำหรับการเรียกกลับของแพลตฟอร์ม
MediaSession
จาก 500 เป็น 100 มิลลิวินาที และเพิ่มตัวตั้งค่าเวอร์ชันทดลองเพื่อให้แอปกำหนดค่านี้ได้ - แก้ไขปัญหาที่การแจ้งเตือนปรากฏขึ้นอีกครั้งหลังจากที่ผู้ใช้ปิดไปแล้ว (#2302)
- แก้ไขข้อบกพร่องที่เซสชันแสดงไทม์ไลน์แบบรายการเดียวเมื่อ
โปรแกรมเล่นสรุปนั้นว่างเปล่า กรณีนี้เกิดขึ้นเมื่อเพลเยอร์ที่ห่อหุ้มไม่มี
COMMAND_GET_TIMELINE
ขณะที่COMMAND_GET_CURRENT_MEDIA_ITEM
พร้อมใช้งานและเพลเยอร์ที่ห่อหุ้มว่างเปล่า (#2320) - แก้ไขข้อบกพร่องที่ทำให้ระบบไม่สนใจการเรียกใช้
MediaSessionService.setMediaNotificationProvider
หลังจากมีการโต้ตอบอื่นๆ กับบริการ เช่นsetForegroundServiceTimeoutMs
(#2305)
- ลดระยะหมดเวลาการรวบรวมข้อมูลสำหรับการเรียกกลับของแพลตฟอร์ม
- UI:
- เปิดใช้
PlayerSurface
เพื่อทำงานร่วมกับExoPlayer.setVideoEffects
และCompositionPlayer
- แก้ไขข้อบกพร่องที่
PlayerSurface
ไม่สามารถเรียบเรียงใหม่ด้วยPlayer
ใหม่
- เปิดใช้
- ส่วนขยาย HLS
- แก้ไขปัญหาที่ไม่ได้ตั้งค่าระยะเวลาของก้อนข้อมูลใน
CmcdData
สำหรับสื่อ HLS ซึ่งทำให้การยืนยันไม่สำเร็จเมื่อประมวลผลกลุ่มสื่อที่เข้ารหัส (#2312)
- แก้ไขปัญหาที่ไม่ได้ตั้งค่าระยะเวลาของก้อนข้อมูลใน
- ส่วนขยาย RTSP
- เพิ่มการรองรับ URI ที่มีรูปแบบ RTSPT เป็นวิธีในการกำหนดค่าเซสชัน RTSP ให้ใช้ TCP (#1484)
- ส่วนขยาย Cast
- เพิ่มการรองรับข้อมูลเมตาของเพลย์ลิสต์ (#2235)
1.6.0
26 มีนาคม 2025
androidx.media3:media3-*:1.6.0
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.6.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป
- เพิ่ม
AudioManagerCompat
และAudioFocusRequestCompat
เพื่อแทนที่ ชั้นเรียนที่เทียบเท่าในandroidx.media
- อัปเกรด Kotlin จาก 1.9.20 เป็น 2.0.20 และใช้ปลั๊กอิน Compose Compiler Gradle อัปเกรดไลบรารี KotlinX Coroutines จาก 1.8.1 เป็น 1.9.0
- นำวิธีการ
Format.toBundle(boolean excludeMetadata)
ออก แล้วใช้Format.toBundle()
แทน - แก้ไขข้อบกพร่องใน
SimpleBasePlayer
ซึ่งการตั้งค่าใหม่currentMediaItemIndex
ในState
หลังจากsetPlaylist
ด้วยnull
MediaMetadata
จะไม่ประเมินข้อมูลเมตาอีกครั้ง (#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
เพิ่มอินสแตนซ์MetadataRenderer
2 รายการเพื่อ เปิดใช้แอปให้รับรูปแบบข้อมูลเมตาที่แตกต่างกัน 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 โดยใช้
MediaMetricsManager
Transformer จะส่งต่อเหตุการณ์การแก้ไขและ ข้อมูลประสิทธิภาพไปยังแพลตฟอร์ม ซึ่งจะช่วยให้ข้อมูลประสิทธิภาพของระบบ และข้อมูลการแก้ไขข้อบกพร่องในอุปกรณ์ นอกจากนี้ Google อาจเก็บรวบรวมข้อมูลนี้ด้วย หากผู้ใช้อุปกรณ์เปิดใช้การแชร์ข้อมูลการใช้งานและการวินิจฉัย แอปสามารถเลือกไม่ให้ข้อมูลเพื่อช่วยในการวินิจฉัยแพลตฟอร์ม สำหรับ Transformer ด้วยTransformer.Builder.setUsePlatformDiagnostics(false)
- แยก
InAppMuxer
เป็นInAppMp4Muxer
และInAppFragmentedMp4Muxer
คุณใช้InAppMp4Muxer
เพื่อสร้างไฟล์ MP4 ที่ไม่แยกส่วน ส่วนInAppFragmentedMp4Muxer
ใช้สร้างไฟล์ MP4 ที่แยกส่วน - ย้ายอินเทอร์เฟซ
Muxer
จากmedia3-muxer
ไปยังmedia3-transformer
- เพิ่ม
MediaProjectionAssetLoader
ซึ่งมีสื่อจากMediaProjection
สำหรับการบันทึกหน้าจอ และเพิ่มการรองรับการบันทึกหน้าจอลงในแอปเดโม Transformer - เพิ่ม
#getInputFormat()
ลงในอินเทอร์เฟซCodec
- เปลี่ยนความรับผิดชอบในการปล่อย
GlObjectsProvider
ให้แก่ผู้โทรในDefaultVideoFrameProcessor
และDefaultVideoCompositor
เมื่อเป็นไปได้
- โปรแกรมแยกข้อมูล
- AVI: แก้ไขการจัดการไฟล์ที่มีเสียงบีบอัดแบบอัตราบิตคงที่ ซึ่งส่วนหัวของสตรีมจะจัดเก็บจำนวนไบต์แทนจำนวน ก้อน
- แก้ไขการจัดการหน่วย NAL ที่มีความยาวแสดงเป็น 1 หรือ 2 ไบต์ (แทนที่จะเป็น 4)
- แก้ไข
ArrayIndexOutOfBoundsException
ในรายการการแก้ไข MP4 เมื่อรายการการแก้ไข เริ่มต้นที่เฟรมที่ไม่ได้ซิงค์โดยไม่มีเฟรมที่ซิงค์ก่อนหน้า (#2062) - แก้ไขปัญหาที่สตรีม TS ค้างในอุปกรณ์บางเครื่อง (#2069)
- FLAC: เพิ่มการรองรับไฟล์ FLAC 32 บิต ก่อนหน้านี้วิดีโอเหล่านี้จะเล่นไม่ได้กับ
IllegalStateException: Playback stuck buffering and not loading
(#2197)
- เสียง:
- แก้ไขให้มีการเรียกใช้
onAudioPositionAdvancing
เมื่อกลับมาเล่นอีกครั้ง (ก่อนหน้านี้จะมีการเรียกใช้เมื่อหยุดเล่นชั่วคราว) - อย่าข้าม
SonicAudioProcessor
เมื่อกำหนดค่าSpeedChangingAudioProcessor
ด้วยพารามิเตอร์เริ่มต้น - แก้ไขการไหลเข้าไม่เพียงพอใน
Sonic#getOutputSize()
ซึ่งอาจทำให้DefaultAudioSink
หยุดทำงาน - แก้ไข
MediaCodecAudioRenderer.getDurationToProgressUs()
และDecoderAudioRenderer.getDurationToProgressUs()
เพื่อให้การค้นหาทำงานได้อย่างถูกต้อง รีเซ็ตระยะเวลาที่ระบุ - ทำเครื่องหมาย
androidx.media3.common.audio.SonicAudioProcessor
ว่าเสร็จสิ้น - เพิ่มการรองรับ PCM แบบลอยไปยัง
ChannelMappingAudioProcessor
และTrimmingAudioProcessor
- แก้ไขให้มีการเรียกใช้
- วิดีโอ
- เปลี่ยน
MediaCodecVideoRenderer.shouldUsePlaceholderSurface
เป็น protected เพื่อให้แอปพลิเคชันสามารถลบล้างเพื่อบล็อกการใช้งาน พื้นผิวตัวยึดตำแหน่ง (#1905) - เพิ่มการแยกวิเคราะห์การขึ้นต่อกันของตัวอย่าง
ExoPlayer
AV1 ที่เป็นเวอร์ชันทดลองเพื่อเพิ่มความเร็ว ในการกรอ เปิดใช้ด้วย API ใหม่DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies
- เพิ่ม
ExoPlayer
API แบบทดลองMediaCodecVideoRenderer
เพื่อทิ้งบัฟเฟอร์อินพุตของตัวถอดรหัสMediaCodecVideoRenderer
ที่ล่าช้าซึ่งไม่ได้ขึ้นอยู่กับบัฟเฟอร์อื่น เปิดใช้ด้วยDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs
- แก้ไขปัญหาที่เพลเยอร์ที่ไม่มีพื้นผิวพร้อมใช้งานทันทีและ ถอดรหัสเฟรมที่รอดำเนินการช้ามาก (#1973)
- ยกเว้นอุปกรณ์ Xiaomi และ OPPO จากโหมดพื้นผิวที่แยกออกเพื่อหลีกเลี่ยง หน้าจอกระพริบ (#2059)
- เปลี่ยน
- ข้อความ:
- เพิ่มการรองรับคำบรรยาย VobSub (#8260)
- หยุดโหลดไฟล์คำบรรยายทั้งหมดที่กำหนดค่าด้วย
MediaItem.Builder.setSubtitleConfigurations
ล่วงหน้า และโหลดเพียงไฟล์เดียวแทน หากมีการเลือกโดยการเลือกแทร็ก (#1721) - TTML: เพิ่มการรองรับการอ้างอิง
tts:origin
และtts:extent
โดยใช้style
(#2953) - จำกัดการประทับเวลา WebVTT และ SubRip ให้มีทศนิยม 3 ตำแหน่งเท่านั้น ก่อนหน้านี้เราแยกวิเคราะห์จำนวนทศนิยมอย่างไม่ถูกต้อง แต่จะถือว่าค่าเป็นมิลลิวินาทีเสมอ ซึ่งทำให้เกิดการประทับเวลาที่ไม่ถูกต้อง (#1997)
- แก้ไขการเล่นที่หยุดชะงักเมื่อเพลย์ลิสต์มีรายการที่ตัดต่อพร้อมคำบรรยายแทนเสียง CEA-608 หรือ CEA-708
- แก้ไข
IllegalStateException
เมื่อไฟล์ SSA มีคิวที่มีระยะเวลาเป็น 0 (เวลาเริ่มต้นและเวลาสิ้นสุดเท่ากัน) (#2052) - ระงับ (และบันทึก) ข้อผิดพลาดในการแยกวิเคราะห์คำบรรยายแทนเสียงเมื่อมีการมัลติเพล็กซ์คำบรรยายแทนเสียงลงใน คอนเทนเนอร์เดียวกับเสียงและวิดีโอ (#2052)
- แก้ไขการจัดการอักขระ UTF-8 แบบหลายไบต์ในไฟล์ WebVTT โดยใช้การสิ้นสุดบรรทัด CR (#2167)
- DRM:
- แก้ไขข้อผิดพลาด
MediaCodec$CryptoException: Operation not supported in this configuration
เมื่อเล่นเนื้อหา ClearKey ในอุปกรณ์ที่ใช้ API เวอร์ชันต่ำกว่า 27 (#1732)
- แก้ไขข้อผิดพลาด
- ผลลัพธ์
- ย้ายฟังก์ชันของ
OverlaySettings
ไปยังStaticOverlaySettings
OverlaySettings
สามารถสร้างคลาสย่อยเพื่ออนุญาต การตั้งค่าการซ้อนทับแบบไดนามิกได้
- ย้ายฟังก์ชันของ
- Muxers:
- ย้าย
MuxerException
ออกจากอินเทอร์เฟซMuxer
เพื่อหลีกเลี่ยงชื่อที่ยาวมาก แบบเต็ม - เปลี่ยนชื่อเมธอด
setSampleCopyEnabled()
เป็นsetSampleCopyingEnabled()
ทั้งในMp4Muxer.Builder
และFragmentedMp4Muxer.Builder
- ตอนนี้
Mp4Muxer.addTrack()
และFragmentedMp4Muxer.addTrack()
จะแสดง รหัสแทร็กint
แทนTrackToken
Mp4Muxer
และFragmentedMp4Muxer
ไม่ได้ใช้Muxer
อินเทอร์เฟซอีกต่อไป- ปิดใช้การจัดกลุ่มและการคัดลอกตัวอย่าง
Mp4Muxer
โดยค่าเริ่มต้น - แก้ไขข้อบกพร่องใน
FragmentedMp4Muxer
ที่สร้าง Fragment จำนวนมากเมื่อ เขียนเฉพาะแทร็กเสียง
- ย้าย
- เซสชัน:
- รักษาสถานะของบริการที่ทำงานอยู่เบื้องหน้าต่อไปอีก 10 นาทีเมื่อการเล่น
หยุดชั่วคราว หยุด หรือล้มเหลว ซึ่งช่วยให้ผู้ใช้เล่นต่อได้ภายใน
ระยะหมดเวลานี้โดยไม่ต้องเสี่ยงต่อการถูกจำกัดบริการที่ทำงานอยู่เบื้องหน้าในอุปกรณ์ต่างๆ
โปรดทราบว่าคุณไม่สามารถใช้การโทรหา
player.pause()
เพื่อหยุดบริการที่ทำงานอยู่เบื้องหน้าก่อนstopSelf()
เมื่อลบล้างonTaskRemoved
ให้ใช้MediaSessionService.pauseAllPlayersAndStopSelf()
แทน - แสดงการแจ้งเตือนเมื่อการเล่นเกิดข้อผิดพลาดหรือหยุด ระบบจะนำการแจ้งเตือนออกก็ต่อเมื่อมีการล้างเพลย์ลิสต์หรือ มีการปล่อยตัวผู้เล่น
- ปรับปรุงการจัดการการดำเนินการ MediaSession ของแพลตฟอร์ม Android ACTION_PLAY และ ACTION_PAUSE เพื่อตั้งค่าเพียงรายการเดียวตามคำสั่งที่มี และยอมรับหากมีการตั้งค่าเพียงรายการเดียว
- เพิ่ม
Context
เป็นพารามิเตอร์ในMediaButtonReceiver.shouldStartForegroundService
(#1887) - แก้ไขข้อบกพร่องที่การเรียกใช้เมธอด
Player
ในMediaController
ที่เชื่อมต่อ กับเซสชันเดิมจะทำให้การเปลี่ยนแปลงจากการอัปเดตที่รอดำเนินการหายไป - ทำให้
MediaSession.setSessionActivity(PendingIntent)
accept null (#2109) - แก้ไขข้อบกพร่องที่ทำให้การแจ้งเตือนที่ล้าสมัยยังคงแสดงอยู่เมื่อล้างเพลย์ลิสต์ (#2211)
- รักษาสถานะของบริการที่ทำงานอยู่เบื้องหน้าต่อไปอีก 10 นาทีเมื่อการเล่น
หยุดชั่วคราว หยุด หรือล้มเหลว ซึ่งช่วยให้ผู้ใช้เล่นต่อได้ภายใน
ระยะหมดเวลานี้โดยไม่ต้องเสี่ยงต่อการถูกจำกัดบริการที่ทำงานอยู่เบื้องหน้าในอุปกรณ์ต่างๆ
โปรดทราบว่าคุณไม่สามารถใช้การโทรหา
- UI:
- เพิ่มตัวยึดสถานะและ Composable ลงในโมดูล
media3-ui-compose
สำหรับPlayerSurface
,PresentationState
,PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
,ShuffleButtonState
และPlaybackSpeedState
- เพิ่มตัวยึดสถานะและ Composable ลงในโมดูล
- การดาวน์โหลด
- แก้ไขข้อบกพร่องใน
CacheWriter
ที่ทำให้แหล่งข้อมูลเปิดอยู่และพื้นที่แคช ล็อกไว้ในกรณีที่แหล่งข้อมูลส่งException
อื่นที่ไม่ใช่IOException
(#9760)
- แก้ไขข้อบกพร่องใน
- ส่วนขยาย HLS
- เพิ่ม
HlsInterstitialsAdsLoader
เวอร์ชันแรก AdLoader จะอ่านโฆษณาคั่นระหว่างหน้า HLS ของเพลย์ลิสต์สื่อ HLS และแมปโฆษณาเหล่านั้นกับAdPlaybackState
ที่ส่งไปยังAdsMediaSource
เวอร์ชันเริ่มต้นนี้รองรับเฉพาะสตรีม VOD ของ HLS ที่มีแอตทริบิวต์X-ASSET-URI
- เพิ่ม
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
แอปสามารถใช้เพื่อสร้างอินสแตนซ์AdsMediaSource
ที่ใช้HlsInterstitialsAdsLoader
ได้อย่างสะดวกและปลอดภัย - แยกวิเคราะห์แท็ก
SUPPLEMENTAL-CODECS
จากเพลย์ลิสต์ HLS เพื่อตรวจหา Dolby Vision รูปแบบ (#1785) - ผ่อนปรนเงื่อนไขสำหรับการค้นหาเพื่อซิงค์ตำแหน่งในสตรีม HLS (#2209)
- เพิ่ม
- ส่วนขยาย DASH
- เพิ่มการรองรับรูปแบบ AC-4 ระดับ 4 สำหรับ DASH (#1898)
- แก้ไขปัญหาเมื่อคำนวณช่วงเวลาการอัปเดตสำหรับการแทรกโฆษณาใน ไลฟ์สดแบบหลายช่วงเวลา (#1698)
- แยกวิเคราะห์แอตทริบิวต์
scte214:supplementalCodecs
จากไฟล์ Manifest DASH เพื่อ ตรวจหาฟอแมต Dolby Vision (#1785) - ปรับปรุงการจัดการการเปลี่ยนช่วงเวลาในไลฟ์สดที่ช่วงเวลามีตัวอย่างสื่อที่อยู่นอกเหนือระยะเวลาของช่วงเวลาที่ประกาศไว้ (#1698)
- แก้ไขปัญหาที่ชุดการดัดแปลงซึ่งทำเครื่องหมายด้วย
adaptation-set-switching
แต่มีการผสานภาษาหรือค่าสถานะบทบาทที่แตกต่างกันเข้าด้วยกัน (#2222)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ)
- เพิ่มโมดูลตัวถอดรหัส MPEG-H ซึ่งใช้ตัวถอดรหัส MPEG-H ในตัว เพื่อถอดรหัสเสียง MPEG-H (#1826)
- ส่วนขยาย MIDI
- เชื่อมต่ออินสแตนซ์
AudioSink
และAudioRendererEventListener
ที่กำหนดเองเข้ากับMidiRenderer
- เชื่อมต่ออินสแตนซ์
- ส่วนขยาย Cast
- อัปเดต
play-services-cast-framework
การอ้างอิงเป็น 21.5.0 เพื่อแก้ไขข้อผิดพลาดที่ทำให้แอปFLAG_MUTABLE
ขัดข้องในแอปที่กำหนดเป้าหมายเป็น API 34 ขึ้นไปในอุปกรณ์ที่ติดตั้งแต่ปิดใช้บริการ Google Play (#2178)
- อัปเดต
- แอปเดโม
- ขยาย
demo-compose
ด้วยปุ่มเพิ่มเติมและปรับปรุง การผสานรวมPlayerSurface
ด้วยการรองรับการปรับขนาดและชัตเตอร์
- ขยาย
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำเมธอด
AudioMixer.create()
ที่เลิกใช้งานแล้วออก โปรดใช้DefaultAudioMixer.Factory().create()
แทน - นำ
Transformer.Builder
เมธอดที่เลิกใช้งานแล้วต่อไปนี้ออกsetTransformationRequest()
ให้ใช้setAudioMimeType()
,setVideoMimeType()
และsetHdrMode()
แทนsetAudioProcessors()
ตั้งค่าโปรเซสเซอร์เสียงในEditedMediaItem.Builder.setEffects()
แล้วส่งไปยังTransformer.start()
แทนsetVideoEffects()
ตั้งค่าเอฟเฟกต์วิดีโอในEditedMediaItem.Builder.setEffects()
แล้วส่งไปยังTransformer.start()
แทนsetRemoveAudio()
ให้ใช้EditedMediaItem.Builder.setRemoveAudio()
เพื่อนำเสียงออกจากEditedMediaItem
ที่ส่งไปยังTransformer.start()
แทนsetRemoveVideo()
ให้ใช้EditedMediaItem.Builder.setRemoveVideo()
เพื่อนำวิดีโอออกจากEditedMediaItem
ที่ส่งไปยังTransformer.start()
แทนsetFlattenForSlowMotion()
ให้ใช้EditedMediaItem.Builder.setFlattenForSlowMotion()
เพื่อทำให้EditedMediaItem
ที่ส่งไปยังTransformer.start()
แบนราบแทนsetListener()
ให้ใช้addListener()
,removeListener()
หรือremoveAllListeners()
แทน
- นำ
Transformer.Listener
เมธอดที่เลิกใช้งานแล้วต่อไปนี้ออกonTransformationCompleted(MediaItem)
โปรดใช้onCompleted(Composition, ExportResult)
แทนonTransformationCompleted(MediaItem, TransformationResult)
โปรดใช้onCompleted(Composition, ExportResult)
แทนonTransformationError(MediaItem, Exception)
โปรดใช้onError(Composition, ExportResult, ExportException)
แทนonTransformationError(MediaItem, TransformationException)
โปรดใช้onError(Composition, ExportResult, ExportException)
แทนonTransformationError(MediaItem, TransformationResult, TransformationException)
โปรดใช้onError(Composition, ExportResult, ExportException)
แทนonFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
โปรดใช้onFallbackApplied(Composition, TransformationRequest, TransformationRequest)
แทน
- นำคลาส
TransformationResult
ที่เลิกใช้งานแล้วออก โปรดใช้ExportResult
แทน - นำคลาส
TransformationException
ที่เลิกใช้งานแล้วออก โปรดใช้ExportException
แทน - นำ
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
ที่เลิกใช้งานแล้วออก โปรดใช้Transformer.PROGRESS_STATE_NOT_STARTED
แทน - นำ
Transformer.setListener()
ที่เลิกใช้งานแล้วออก โปรดใช้Transformer.addListener()
,Transformer.removeListener()
หรือTransformer.removeAllListeners()
แทน - นำ
Transformer.startTransformation()
ที่เลิกใช้งานแล้วออก โปรดใช้Transformer.start(MediaItem, String)
แทน - นำ
SingleFrameGlShaderProgram
ที่เลิกใช้งานแล้วออก โปรดใช้BaseGlShaderProgram
แทน - นำ
Transformer.flattenForSlowMotion
ออก โปรดใช้EditedMediaItem.flattenForSlowMotion
แทน - นำ
ExoPlayer.VideoComponent
,ExoPlayer.AudioComponent
,ExoPlayer.TextComponent
และExoPlayer.DeviceComponent
ออกแล้ว - นำ
androidx.media3.exoplayer.audio.SonicAudioProcessor
ออกแล้ว - นำเมธอด
DownloadHelper
ที่เลิกใช้งานแล้วต่อไปนี้ออก- Constructor
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])
, useDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
instead. getRendererCapabilities(RenderersFactory)
คุณสามารถใช้ฟังก์ชันการทำงานที่เทียบเท่าได้โดยการสร้างDefaultRendererCapabilitiesList
ที่มีRenderersFactory
และ เรียกใช้DefaultRendererCapabilitiesList.getRendererCapabilities()
- Constructor
- นำ
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)
เมธอดออกแล้ว ให้ใช้PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)
และ ส่งใน(MediaSession.Token) compatToken.getToken()
แทน
- นำเมธอด
1.6.0-rc02
19 มีนาคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
1.6.0-rc01
12 มีนาคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
1.6.0-beta01
26 กุมภาพันธ์ 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha03
6 กุมภาพันธ์ 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha02
30 มกราคม 2025
ใช้ เวอร์ชันเสถียร 1.6.0
เวอร์ชัน 1.6.0-alpha01
20 ธันวาคม 2024
ใช้ เวอร์ชันเสถียร 1.6.0
รุ่น 1.5
รุ่น 1.5.1
19 ธันวาคม 2024
androidx.media3:media3-*:1.5.1
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.5.1 มีการเปลี่ยนแปลงเหล่านี้
- ExoPlayer:
- ปิดใช้การถอดรหัสแบบอะซิงโครนัสใน MediaCodec เพื่อหลีกเลี่ยงปัญหาการหมดเวลาของตัวแปลงรหัสที่รายงานด้วย API ของแพลตฟอร์มนี้ (#1641)
- โปรแกรมแยกข้อมูล
- MP3: อย่าหยุดเล่นก่อนเวลาอันควรเมื่อสารบัญของ
VBRI
เฟรม ไม่ครอบคลุมข้อมูล MP3 ทั้งหมดในไฟล์ (#1904)
- MP3: อย่าหยุดเล่นก่อนเวลาอันควรเมื่อสารบัญของ
- วิดีโอ
- การย้อนกลับการใช้
MediaCodecAdapter
ค่าสัดส่วนภาพพิกเซลที่ระบุ เมื่อระบุขณะประมวลผลonOutputFormatChanged
(#1371)
- การย้อนกลับการใช้
- ข้อความ:
- แก้ไขข้อบกพร่องใน
ReplacingCuesResolver.discardCuesBeforeTimeUs
ที่คิว ที่ใช้งานอยู่ที่timeUs
(เริ่มก่อนหน้านี้แต่ยังไม่สิ้นสุด) ถูกทิ้งอย่างไม่ถูกต้อง (#1939)
- แก้ไขข้อบกพร่องใน
- ข้อมูลเมตา
- ดึงหมายเลขดิสก์/แทร็กและประเภทจากความคิดเห็น Vorbis ไปยัง
MediaMetadata
(#1958)
- ดึงหมายเลขดิสก์/แทร็กและประเภทจากความคิดเห็น Vorbis ไปยัง
เวอร์ชัน 1.5.0
27 พฤศจิกายน 2024
androidx.media3:media3-*:1.5.0
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.5.0 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่ม
ForwardingSimpleBasePlayer
ที่อนุญาตให้ส่งต่อไปยังเพลเยอร์อื่น โดยมีการปรับเปลี่ยนเล็กน้อย พร้อมทั้งรับประกันความสอดคล้องอย่างเต็มที่และการจัดการผู้ฟัง (#1183) - แทนที่
SimpleBasePlayer.State.playlist
ด้วยเมธอดgetPlaylist()
- เพิ่มการลบล้างสำหรับ
SimpleBasePlayer.State.Builder.setPlaylist()
เพื่อระบุTimeline
และTracks
ปัจจุบัน รวมถึงMetadata
โดยตรง แทนการสร้างโครงสร้างเพลย์ลิสต์ - เพิ่ม
minSdk
เป็น 21 (Android Lollipop) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด - เพิ่มอาร์ติแฟกต์
androidx.media3:media3-common-ktx
ซึ่งมีฟังก์ชันการทำงานเฉพาะของ Kotlin ที่สร้างขึ้นบนไลบรารีทั่วไป - เพิ่ม
Player.listen
ฟังก์ชันส่วนขยายการระงับเพื่อหมุนโครูทีนเพื่อ ฟังPlayer.Events
ไปยังไลบรารีmedia3-common-ktx
- นำคำอธิบายประกอบ
@DoNotInline
ออกจากคลาสภายในที่ไม่ได้อยู่ในบรรทัดด้วยตนเอง ซึ่งออกแบบมาเพื่อหลีกเลี่ยงความล้มเหลวในการยืนยันคลาสรันไทม์ ตอนนี้ R8 เวอร์ชันล่าสุดจะทำให้การเรียกใช้แบบอินไลน์โดยอัตโนมัติเหมือนกับตัวอย่างนี้เพื่อหลีกเลี่ยงข้อผิดพลาดรันไทม์ (จึงไม่จำเป็นต้องใช้การเรียกใช้แบบอินไลน์ด้วยตนเองอีกต่อไป) ผู้ใช้ Gradle ทั้งหมดของไลบรารีต้องใช้ Android Gradle Plugin เวอร์ชันที่ใช้ R8 เวอร์ชันที่ทำเช่นนี้อยู่แล้ว เนื่องจากcompileSdk = 35
ผู้ใช้ไลบรารีที่มีระบบบิลด์ที่ไม่ใช่ Gradle จะต้องตรวจสอบว่าขั้นตอนการลดขนาด/การปกปิดโค้ดที่เทียบเท่ากับ R8 มีกระบวนการอัตโนมัติที่คล้ายกัน เพื่อหลีกเลี่ยงข้อผิดพลาดในการยืนยันคลาสรันไทม์ การเปลี่ยนแปลงนี้ได้ดำเนินการในไลบรารี AndroidX อื่นๆ แล้ว
- เพิ่ม
- ExoPlayer:
- ตอนนี้คุณสามารถเรียกใช้
MediaCodecRenderer.onProcessedStreamChange()
สำหรับ รายการสื่อทุกรายการได้แล้ว ก่อนหน้านี้ระบบจะไม่เรียกใช้สำหรับรายการแรก ใช้MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
เพื่อเปิดใช้ - เพิ่ม
PreloadMediaSource.PreloadControl.onPreloadError
เพื่ออนุญาตให้การติดตั้งใช้งานPreloadMediaSource.PreloadControl
ดำเนินการเมื่อเกิดข้อผิดพลาด - เพิ่ม
BasePreloadManager.Listener
เพื่อเผยแพร่เหตุการณ์การโหลดล่วงหน้าไปยังแอป - อนุญาตให้เปลี่ยนระยะหมดเวลาของไคลเอ็นต์ SNTP และลองที่อยู่สำรองอีกครั้งเมื่อหมดเวลา (#1540)
- นำ
MediaCodecAdapter.Configuration.flags
ออกเนื่องจากฟิลด์นี้เป็น 0 เสมอ - อนุญาตให้ผู้ใช้เลือกใช้ลำโพงในตัวเพื่อเล่นบน Wear OS API 35 ขึ้นไป (ในกรณีที่อุปกรณ์โฆษณาว่ารองรับ)
- เลื่อนการเรียกบล็อกไปที่
Context.getSystemService(Context.AUDIO_SERVICE)
จนกว่าจะเปิดใช้การจัดการ โฟกัสเสียง เพื่อให้มั่นใจว่าจะไม่มีการเรียกบล็อกหากไม่ได้เปิดใช้การจัดการโฟกัสเสียง (#1616) - อนุญาตให้เล่นโดยไม่คำนึงถึงระยะเวลาที่บัฟเฟอร์เมื่อโหลดไม่สำเร็จ (#1571)
- เพิ่ม
AnalyticsListener.onRendererReadyChanged()
เพื่อส่งสัญญาณเมื่อ โปรแกรมแสดงผลแต่ละรายการอนุญาตให้เล่นได้ - แก้ไขปัญหาที่บางครั้งมีการรายงาน
MediaCodec.CryptoException
เป็น "ข้อผิดพลาดของรันไทม์ที่ไม่คาดคิด" เมื่อมีการดำเนินการMediaCodec
ในโหมดอะซิงโครนัส (ลักษณะการทำงานเริ่มต้นใน API 31 ขึ้นไป) - ส่ง
bufferedDurationUs
แทนbufferedPositionUs
พร้อมPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
นอกจากนี้ การเปลี่ยนDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
เป็นDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
ยังทำให้แอป ต้องส่งค่าที่แสดงถึงระยะเวลาที่เฉพาะเจาะจงจากตำแหน่งเริ่มต้น เริ่มต้น ซึ่งแหล่งที่มาของสื่อที่เกี่ยวข้องจะต้องโหลดล่วงหน้าด้วย IntDef นี้ แทนที่จะเป็นตำแหน่ง - เพิ่มการติดตั้งใช้งาน
ForwardingRenderer
ที่ส่งต่อการเรียกใช้เมธอดทั้งหมด ไปยังโปรแกรมแสดงผลอื่น (1703) - เพิ่มการโหลดเพลย์ลิสต์ล่วงหน้าสำหรับรายการถัดไปในเพลย์ลิสต์ แอปสามารถ
เปิดใช้การโหลดล่วงหน้าได้โดยการเรียกใช้
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
ตามนั้น โดยค่าเริ่มต้น ระบบจะปิดใช้การโหลดล่วงหน้า เมื่อเลือกใช้และเพื่อไม่ให้รบกวนการเล่นDefaultLoadControl
จะจำกัดการโหลดล่วงหน้าให้เริ่มและ ดำเนินการต่อเมื่อเพลเยอร์ไม่ได้โหลดเพื่อเล่นเท่านั้น แอปสามารถ เปลี่ยนลักษณะการทำงานนี้ได้โดยการใช้LoadControl.shouldContinuePreloading()
ตามนั้น (เช่น เมื่อ ลบล้างเมธอดนี้ในDefaultLoadControl
) การใช้งานเริ่มต้นของLoadControl
จะปิดใช้การโหลดล่วงหน้าในกรณีที่แอปใช้การใช้งานLoadControl
ที่กำหนดเอง - เพิ่มเมธอด
MediaSourceEventListener.EventDispatcher.dispatchEvent()
เพื่อ อนุญาตให้เรียกใช้เหตุการณ์ของ Listener ของคลาสย่อย (1736) - เพิ่ม
DefaultPreloadManager.Builder
ที่สร้างอินสแตนซ์DefaultPreloadManager
และExoPlayer
ด้วยการกำหนดค่าที่แชร์อย่างสม่ำเสมอ - นำพารามิเตอร์
Renderer[]
ออกจากLoadControl.onTracksSelected()
เนื่องจาก การติดตั้งใช้งานDefaultLoadControl
สามารถดึงข้อมูลประเภทสตรีมจากExoTrackSelection[]
ได้ - เลิกใช้งาน
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
และทำเครื่องหมายวิธีการเป็นขั้นสุดท้ายเพื่อป้องกันการลบล้าง โปรดใช้DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
แทน - รายงานเหตุการณ์
MediaSourceEventListener
จากแหล่งข้อมูลรองในMergingMediaSource
ซึ่งจะส่งผลให้มีการรายงานเหตุการณ์ load start/error/cancelled/completed สำหรับคำบรรยายแทนเสียงที่โหลดจากภายนอก (คำบรรยายแทนเสียงที่เพิ่มด้วยMediaItem.LocalConfiguration.subtitleConfigurations
) ซึ่งอาจปรากฏ เป็นเหตุการณ์การโหลดที่ซ้ำกันซึ่งปล่อยออกมาจากAnalyticsListener
- ป้องกันไม่ให้ข้อผิดพลาดของคำบรรยายแทนเสียงและข้อมูลเมตาหยุดการเล่นโดยสมบูรณ์
แต่ระบบจะปิดใช้แทร็กที่มีปัญหาและเล่นแทร็กที่เหลือต่อไป
(#1722)
- ในการจัดการคำบรรยายแทนเสียงใหม่ (ระหว่างการแยก) ระบบจะส่งข้อผิดพลาดในการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น
ข้อมูลคำบรรยายแทนเสียงที่ไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404)
ผ่าน
onLoadError
การเรียกกลับ - ในการจัดการคำบรรยายแทนเสียงแบบเดิม (ระหว่างการแสดงผล) ระบบจะส่งเฉพาะข้อผิดพลาดในการโหลดที่เกี่ยวข้องผ่าน
onLoadError
Callback ขณะที่ระบบจะไม่สนใจข้อผิดพลาดในการแยกวิเคราะห์ (นี่คือลักษณะการทำงานที่มีอยู่ก่อนแล้ว)
- ในการจัดการคำบรรยายแทนเสียงใหม่ (ระหว่างการแยก) ระบบจะส่งข้อผิดพลาดในการแยกวิเคราะห์ที่เกี่ยวข้อง (เช่น
ข้อมูลคำบรรยายแทนเสียงที่ไม่ถูกต้อง) และข้อผิดพลาดในการโหลด (เช่น HTTP 404)
ผ่าน
- แก้ไขข้อบกพร่องที่รายการเพลย์ลิสต์หรือช่วงในสตรีม DASH แบบหลายช่วง ที่มีระยะเวลาไม่ตรงกับเนื้อหาจริงอาจทำให้เฟรม ค้างที่ส่วนท้ายของรายการ (#1698)
- เพิ่มตัวตั้งค่าลงใน
SntpClient
เพื่อตั้งค่าเวลาที่ผ่านไปสูงสุดนับตั้งแต่การอัปเดตครั้งล่าสุด หลังจากนั้นระบบจะเริ่มต้นไคลเอ็นต์ใหม่ (#1794)
- ตอนนี้คุณสามารถเรียกใช้
- Transformer
- เพิ่ม
SurfaceAssetLoader
ซึ่งรองรับการจัดคิวข้อมูลวิดีโอไปยัง Transformer ผ่านSurface
ImageAssetLoader
รายงานอินพุตที่ไม่รองรับผ่านAssetLoader.onError
แทนที่จะส่งIllegalStateException
- กำหนดให้การตั้งค่าระยะเวลาของรูปภาพโดยใช้
MediaItem.Builder.setImageDurationMs
เป็นข้อบังคับสำหรับการส่งออกรูปภาพ - เพิ่มการรองรับการส่งออกสำหรับช่องว่างในลำดับของ EditedMediaItem ที่เป็นเสียง
- เพิ่ม
- การเลือกแทร็ก
DefaultTrackSelector
: เลือกใช้เสียงแบบออบเจ็กต์มากกว่าเสียงแบบช่องสัญญาณ เมื่อปัจจัยอื่นๆ เท่ากัน
- โปรแกรมแยกข้อมูล
- อนุญาตให้
Mp4Extractor
และFragmentedMp4Extractor
ระบุตัวอย่าง H264 ที่ตัวอย่างถัดไปไม่ได้ใช้เป็นข้อมูลอ้างอิง - เพิ่มตัวเลือกเพื่อเปิดใช้การกรอตามดัชนีใน
AmrExtractor
- ถือว่าไฟล์ MP3 ที่มีขนาดมากกว่า 128 kB ระหว่างเฟรมที่ถูกต้องเป็นไฟล์ที่ถูกตัด
(แทนที่จะถือว่าไม่ถูกต้อง) ซึ่งหมายความว่าไฟล์ที่มีข้อมูลที่ไม่ใช่ MP3 อยู่ตอนท้าย
โดยไม่มีข้อมูลเมตาอื่นๆ ที่ระบุความยาวของไบต์ MP3 จะหยุด
การเล่นที่ส่วนท้ายของข้อมูล MP3 แทนที่จะล้มเหลวด้วยข้อผิดพลาด
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
(#1563) - แก้ไขการจัดการตัวอย่างโฆษณาก่อนวิดีโอสำหรับตำแหน่งเริ่มต้นของสื่อที่ไม่ใช่คีย์เฟรมเมื่อ ประมวลผลรายการแก้ไขในไฟล์ MP4 (#1659)
- ปรับปรุงการคำนวณอัตราเฟรมโดยใช้ระยะเวลาของสื่อจาก
mdhd
box ในMp4Extractor
และFragmentedMp4Extractor
(#1531) - แก้ไขการปรับขนาดที่ไม่ถูกต้องของ
media_time
ในรายการแก้ไข MP4 แม้ว่าก่อนหน้านี้segment_duration
จะได้รับการปรับขนาดอย่างถูกต้องโดยใช้ timescale ของภาพยนตร์ แต่ตอนนี้media_time
ได้รับการปรับขนาดอย่างถูกต้องโดยใช้ timescale ของแทร็ก ตามที่ระบุไว้ในมาตรฐานรูปแบบ MP4 (#1792) - จัดการเฟรมที่ไม่อยู่ในลำดับในการคำนวณ
endIndices
สำหรับ MP4 ที่มีรายการแก้ไข (#1797) - แก้ไขการแยกวิเคราะห์ระยะเวลาของสื่อใน
mdhd
box ของไฟล์ MP4 เพื่อจัดการค่า-1
(#1819) - เพิ่มการรองรับการระบุช่อง
h263
ในไฟล์ MP4 สำหรับวิดีโอ H.263 (#1821) - เพิ่มการรองรับรูปแบบไฟล์สื่อพื้นฐาน ISO ระดับ 4 ของ AC-4 (#1265)
- อนุญาตให้
- DataSource:
- อัปเดต
HttpEngineDataSource
เพื่ออนุญาตให้ใช้ได้ตั้งแต่เวอร์ชัน S extension 7 แทน API ระดับ 34 (#1262) DataSourceContractTest
: ยืนยันว่าDataSource.getUri()
แสดงผล URI ที่แก้ไขแล้ว (ตามที่ระบุไว้ในเอกสาร) หากแตกต่างจาก URI ที่ขอ การทดสอบจะระบุได้โดยใช้DataSourceContractTest.TestResource.Builder.setResolvedUri()
วิธีใหม่DataSourceContractTest
: ยืนยันว่าDataSource.getUri()
และgetResponseHeaders()
จะแสดงค่า "open" หลังจากเรียกใช้open()
ไม่สำเร็จ (เนื่องจากทรัพยากร "ไม่พบ") และก่อนการเรียกใช้close()
ครั้งถัดไป- การลบล้าง
DataSourceContractTest.getNotFoundResources()
ช่วยให้ คลาสย่อยของการทดสอบระบุทรัพยากร "ไม่พบ" หลายรายการ และระบุส่วนหัวที่คาดไว้ได้ด้วย ซึ่งช่วยให้แยกความแตกต่างระหว่าง HTTP 404 (มีส่วนหัว) กับ "ไม่พบเซิร์ฟเวอร์" (ไม่มีส่วนหัว) ได้
- การลบล้าง
- อัปเดต
- เสียง:
- กำหนดค่าข้อมูลเมตาความดัง CTA-2075 ในตัวแปลงสัญญาณโดยอัตโนมัติหากมีอยู่ในสื่อ
- ตรวจสอบว่าระดับเสียงลดลงอย่างราบรื่นเมื่อกรอ
- แก้ไขเสียงป๊อปที่อาจเกิดขึ้นระหว่างการกรอ
- แก้ไขข้อผิดพลาดในการสะสมการตัดทอนสำหรับอัลกอริทึมการยืดเวลา/การเปลี่ยนระดับเสียงของ Sonic
- แก้ไขข้อบกพร่องใน
SpeedChangingAudioProcessor
ที่ทำให้เฟรมเอาต์พุตหลุด
- วิดีโอ
MediaCodecVideoRenderer
หลีกเลี่ยงการถอดรหัสตัวอย่างที่ไม่ได้ แสดงผลหรือใช้เป็นข้อมูลอ้างอิงโดยตัวอย่างอื่นๆ- ใน API 35 ขึ้นไป
MediaCodecAdapter
อาจได้รับnull
Surface
ในconfigure
และการเรียกใช้เมธอดใหม่detachOutputSurface
เพื่อนำSurface
ที่ตั้งค่าไว้ก่อนหน้านี้ออก หากตัวแปลงรหัสรองรับ (MediaCodecInfo.detachedSurfaceSupported
) - ใช้ค่าอัตราส่วนพิกเซลที่ระบุ
MediaCodecAdapter
หากมี เมื่อประมวลผลonOutputFormatChanged
(#1371) - เพิ่มวิธีแก้ปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE ที่ทำให้ระบบทำเครื่องหมายสตรีม H264 ที่ปลอดภัย 60fps ว่าไม่รองรับ (#1619)
- เพิ่มวิธีแก้ปัญหาสำหรับตัวแปลงรหัสที่ค้างหลังจากตัวอย่างสุดท้ายโดยไม่ ส่งสัญญาณสิ้นสุดสตรีม
- ข้อความ:
- เพิ่ม
VoiceSpan
ที่กำหนดเองและป้อนข้อมูลสำหรับ ช่วงเสียง WebVTT (#1632) - ตรวจสอบว่า WebVTT ใน HLS ที่มีแสตมป์เวลาของคำบรรยายขนาดใหญ่มาก (ซึ่งล้น
long
64 บิตเมื่อแสดงเป็นไมโครวินาทีและคูณด้วย90,000
ไทม์เบสของ MPEG) แสดงอยู่ (#1763) - รองรับคำบรรยายแทนเสียง CEA-608 ในเนื้อหา Dolby Vision (#1820)
- แก้ไขการเล่นที่หยุดชะงักในสตรีมแบบหลายช่วงของ DASH เมื่อเปิดใช้คำบรรยายแทนเสียง CEA-608 (#1863)
- เพิ่ม
- ข้อมูลเมตา
- กำหนด
C.TRACK_TYPE_METADATA
ประเภทให้กับแทร็กที่มีเนื้อหา icy หรือ vnd.dvb.ait
- กำหนด
- รูปภาพ:
- เพิ่ม
ExternallyLoadedImageDecoder
เพื่อการผสานรวมที่ง่ายขึ้นกับ ไลบรารีการโหลดรูปภาพภายนอก เช่น Glide หรือ Coil
- เพิ่ม
- DataSource:
- เพิ่ม
FileDescriptorDataSource
ซึ่งเป็นDataSource
ใหม่ที่ใช้เพื่อ อ่านจากFileDescriptor
ได้ (#3757)
- เพิ่ม
- ผลลัพธ์
- เพิ่ม
DefaultVideoFrameProcessor
วิธีแก้ปัญหาชั่วคราวสำหรับการSurfaceTexture
ปรับขนาดเล็กน้อยSurfaceTexture
อาจมีการปรับขนาดเล็กน้อยซึ่งจะตัดขอบ 1 เทกเซลรอบขอบของบัฟเฟอร์ที่ครอบตัด ตอนนี้เราได้จัดการ เพื่อให้เอาต์พุตใกล้เคียงกับที่คาดไว้มากขึ้น - เร่งความเร็ว
DefaultVideoFrameProcessor.queueInputBitmap()
ด้วยเหตุนี้ การส่งออกรูปภาพไปยังวิดีโอด้วยTransformer
จึงเร็วขึ้น
- เพิ่ม
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
ArrayIndexOutOfBoundsException
ในImaServerSideAdInsertionMediaSource
- แก้ไขข้อบกพร่องที่สตรีม DAI ที่แทรกฝั่งเซิร์ฟเวอร์ซึ่งไม่มีโฆษณาก่อนวิดีโออาจ
ส่งผลให้เกิด
ArrayIndexOutOfBoundsException
เมื่อเล่นผ่านโฆษณาตอนกลางสุดท้าย (#1741)
- แก้ไขข้อบกพร่องที่การล้างเพลย์ลิสต์อาจทำให้เกิด
- เซสชัน:
- เพิ่ม
MediaButtonReceiver.shouldStartForegroundService(Intent)
เพื่ออนุญาตให้แอประงับคำสั่งเล่นที่เข้ามาเพื่อเล่นต่อโดยการลบล้างวิธีการนี้ โดยค่าเริ่มต้น ระบบจะเริ่มบริการเสมอและ ไม่สามารถระงับการเล่นได้โดยไม่ทำให้ระบบขัดข้อง พร้อมด้วยForegroundServiceDidNotStartInTimeException
(#1528) - แก้ไขข้อบกพร่องที่ทำให้ระบบส่งคำสั่งที่กำหนดเองจาก
MediaBrowser
ไปยังMediaSessionCompat.Callback
แทนที่จะเป็นตัวแปรMediaBrowserServiceCompat
ของเมธอดเมื่อเชื่อมต่อกับบริการเดิม ซึ่งทำให้MediaBrowser
ไม่ได้รับค่าที่แท้จริง ที่บริการเดิมส่งกลับมา (#1474) - จัดการ
IllegalArgumentException
ที่อุปกรณ์ของผู้ผลิตบางรายส่งมาเมื่อตั้งค่า BroadcastReceiver สำหรับ Intent ของปุ่มสื่อ (#1730) - เพิ่มปุ่มคำสั่งสำหรับรายการสื่อ ซึ่งจะเพิ่ม Media3 API สำหรับสิ่งที่
เคยรู้จักกันในชื่อ
Custom browse actions
พร้อมกับไลบรารีเดิมที่มีMediaBrowserCompat
โปรดทราบว่าปุ่มคำสั่ง Media3 สำหรับรายการสื่อ พร้อมใช้งานสำหรับทั้งMediaBrowser
และMediaController
ดูการดำเนินการเรียกดูที่กำหนดเองของ AAOS - แก้ไขข้อบกพร่องที่บางครั้งตัวควบคุม Media3 ไม่สามารถอนุญาตให้แอปเซสชัน
เริ่มบริการที่ทำงานอยู่เบื้องหน้าหลังจากขอ
play()
- จำกัด
CommandButton.Builder.setIconUri
ให้ยอมรับเฉพาะ URI ของเนื้อหา - ส่งคำแนะนำการเชื่อมต่อของเบราว์เซอร์ Media3 ไปยัง
MediaBrowserCompat
เริ่มต้นเมื่อเชื่อมต่อกับMediaBrowserCompat
รุ่นเดิม บริการจะรับคำแนะนำในการเชื่อมต่อที่ส่งผ่านเป็นคำแนะนำระดับรูท พร้อมกับการเรียกใช้onGetRoot()
ครั้งแรกได้ - แก้ไขข้อบกพร่องที่
MediaBrowser
ซึ่งเชื่อมต่อกับบริการเบราว์เซอร์เดิม ไม่ได้รับข้อผิดพลาดที่บริการส่งหลังจากที่เบราว์เซอร์ สมัครใช้บริการparentid
- ปรับปรุงลักษณะการทำงานร่วมกัน เพื่อให้เบราว์เซอร์ Media3 ที่เชื่อมต่อกับ
MediaBrowserService
รุ่นเดิมไม่ขอข้อมูลขององค์ประกอบย่อยของparentId
2 ครั้งเมื่อสมัครใช้บริการองค์ประกอบหลัก
- เพิ่ม
- UI:
- สร้างวิดีโอที่ยืด/ครอบตัดในวิธีแก้ปัญหา
PlayerView
-in-Compose-AndroidView
เนื่องจากปัญหาเกี่ยวกับทรานซิชันที่แชร์ซึ่งอิงตาม XML แอปที่ใช้PlayerView
ภายในAndroidView
ต้องเรียกใช้PlayerView.setEnableComposeSurfaceSyncWorkaround
เพื่อเลือกใช้ (#1237, #1594) - เพิ่ม
setFullscreenButtonState
ในPlayerView
เพื่ออนุญาตให้อัปเดตไอคอนของ ปุ่มเต็มหน้าจอตามต้องการ กล่าวคือ นอกแบนด์และไม่ใช่แบบรีแอ็กทีฟ ต่อการโต้ตอบด้วยการคลิก (#1590, #184) - แก้ไขข้อบกพร่องที่ตัวเลือก "ไม่มี" ในการเลือกข้อความไม่ทำงานหาก มีการกำหนดค่ากำหนดการเลือกแทร็กข้อความที่แอปกำหนด
- สร้างวิดีโอที่ยืด/ครอบตัดในวิธีแก้ปัญหา
- ส่วนขยาย DASH
- เพิ่มการรองรับระยะเวลาที่เริ่มต้นในช่วงกลางของกลุ่ม (#1440)
- ส่วนขยาย Smooth Streaming
- แก้ไขข้อผิดพลาด
Bad magic number for Bundle
เมื่อเล่นสตรีม SmoothStreaming ที่มีแทร็กข้อความ (#1779)
- แก้ไขข้อผิดพลาด
- ส่วนขยาย RTSP
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1 ฯลฯ):
- เพิ่มโมดูลตัวถอดรหัส IAMF ซึ่งรองรับการเล่นไฟล์ MP4
ที่มีแทร็ก IAMF โดยใช้ไลบรารีเนทีฟ libiamf เพื่อ
สังเคราะห์เสียง
- ระบบจะเปิดใช้การเล่นด้วยเลย์เอาต์สเตอริโอ รวมถึง 5.1 พร้อม การปรับแต่งเสียงตามตำแหน่งร่วมกับการติดตามการเคลื่อนไหวของศีรษะที่เปิดใช้ (ไม่บังคับ) แต่ ขณะนี้ยังไม่รองรับการเล่นแบบ Binaural
- เพิ่มการรองรับหน้าขนาด 16 KB สำหรับส่วนขยายตัวถอดรหัสใน Android 15 (#1685)
- เพิ่มโมดูลตัวถอดรหัส IAMF ซึ่งรองรับการเล่นไฟล์ MP4
ที่มีแทร็ก IAMF โดยใช้ไลบรารีเนทีฟ libiamf เพื่อ
สังเคราะห์เสียง
- ส่วนขยาย Cast
- หยุดล้างไทม์ไลน์หลังจาก CastSession ยกเลิกการเชื่อมต่อ ซึ่งจะช่วยให้แอปผู้ส่งเล่นต่อในเครื่องได้หลังจากยกเลิกการเชื่อมต่อ
- ป้อนข้อมูล
DeviceInfo
ของ CastPlayer เมื่อมีการระบุContext
ซึ่งจะช่วยให้ลิงก์MediaSession
กับRoutingSession
ได้ ซึ่งจำเป็นต่อการผสานรวม Output Switcher (#1056)
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
DataSourceContractTest
ตอนนี้มีการทดสอบเพื่อยืนยันสิ่งต่อไปนี้- อัปเดตสตรีมอินพุต
read position
แล้ว - ใช้บัฟเฟอร์เอาต์พุต
offset
อย่างถูกต้อง
- อัปเดตสตรีมอินพุต
- แอปเดโม
- แก้ไขหน่วยความจำรั่วในแอปแบบสั้นเวอร์ชันเดโม (#1839)
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.hasPrevious
Player.hasPreviousWindow()
ที่เลิกใช้งานแล้วออก โปรดใช้Player.hasPreviousMediaItem()
แทน - นำ
Player.previous()
เมธอดที่เลิกใช้งานแล้วออก โปรดใช้Player.seekToPreviousMediaItem()
แทน - นำเมธอด
DrmSessionEventListener.onDrmSessionAcquired
ที่เลิกใช้งานแล้วออก - นำตัวสร้าง
DefaultEncoderFactory
ที่เลิกใช้งานแล้วออก โปรดใช้DefaultEncoderFactory.Builder
แทน
- นำ
เวอร์ชัน 1.5.0-rc02
19 พฤศจิกายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-rc01
13 พฤศจิกายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-beta01
30 ตุลาคม 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.5.0-alpha01
10 กันยายน 2024
ใช้เวอร์ชันเสถียร 1.5.0
เวอร์ชัน 1.4.0
เวอร์ชัน 1.4.1
27 สิงหาคม 2024
androidx.media3:media3-*:1.4.1
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.4.1 มีการเปลี่ยนแปลงเหล่านี้
- ExoPlayer:
- โปรแกรมแยกข้อมูล
- MP3: แก้ไขข้อผิดพลาด
Searched too many bytes
โดยการไม่สนใจข้อมูลที่ไม่ใช่ MP3 ตอนท้ายอย่างถูกต้องตามฟิลด์ความยาวในเฟรมInfo
(#1480)
- MP3: แก้ไขข้อผิดพลาด
- ข้อความ:
- TTML: แก้ไขการจัดการค่าเปอร์เซ็นต์
tts:fontSize
เพื่อให้มั่นใจว่าค่าเหล่านั้น จะรับค่ามาจากโหนดระดับบนที่มีค่าเปอร์เซ็นต์tts:fontSize
อย่างถูกต้อง - แก้ไข
IndexOutOfBoundsException
ในLegacySubtitleUtil
เนื่องจาก การจัดการกรณีที่เวลาเริ่มต้นเอาต์พุตที่ขอ มากกว่าหรือเท่ากับเวลาเหตุการณ์สุดท้ายในSubtitle
(#1516) ไม่ถูกต้อง
- TTML: แก้ไขการจัดการค่าเปอร์เซ็นต์
- DRM:
- แก้ไขข้อผิดพลาด
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
ในอุปกรณ์ API 31 ขึ้นไป ที่เล่นเนื้อหา Widevine ระดับ L1 ข้อผิดพลาดนี้เกิดจากการติดตั้งใช้งานเฟรมเวิร์กMediaDrm.requiresSecureDecoder
เมธอด (#1603) ไม่สมบูรณ์
- แก้ไขข้อผิดพลาด
- ผลลัพธ์
- เพิ่ม
release()
วิธีการไปยังGlObjectsProvider
- เพิ่ม
- เซสชัน:
- ส่วนขยาย RTSP
- ข้ามคำอธิบายสื่อที่ไม่ถูกต้องในการแยกวิเคราะห์ SDP (#1087)
เวอร์ชัน 1.4.0
25 กรกฎาคม 2024
androidx.media3:media3-*:1.4.0
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.4.0 มีการคอมมิตเหล่านี้
- คลังทั่วไป
- ส่งต่อการเรียกฟังก์ชันการค้นหาที่คาดว่าไม่มีการดำเนินการไปยังเมธอด
BasePlayer.seekTo()
และSimpleBasePlayer.handleSeek()
ที่ได้รับการปกป้องแทนที่จะเพิกเฉย หาก คุณใช้เมธอดเหล่านี้ในเพลเยอร์ที่กำหนดเอง คุณอาจต้อง จัดการการเรียกเพิ่มเติมเหล่านี้ด้วยmediaItemIndex == C.INDEX_UNSET
- นำการขึ้นต่อกันในการคอมไพล์ออกจากการแยกส่วน 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
จะเรียกใช้ เมธอดนี้เมื่อคำนวณเวลาในการกำหนดเวลางาน - เพิ่ม
MediaCodecAdapter#OnBufferAvailableListener
เพื่อแจ้งเตือนเมื่อบัฟเฟอร์อินพุต และเอาต์พุตพร้อมให้MediaCodecRenderer
ใช้MediaCodecRenderer
จะส่งสัญญาณไปยังExoPlayer
เมื่อได้รับ การเรียกกลับเหล่านี้ และหากตั้งค่าExoPlayer
ด้วยexperimentalSetDynamicSchedulingEnabled()
ExoPlayer
จะ กำหนดเวลาลูปการทำงานเนื่องจากตัวแสดงผลสามารถดำเนินการต่อได้ - ใช้คลาสข้อมูลสำหรับ
LoadControl
เมธอดแทนพารามิเตอร์แต่ละรายการ - เพิ่ม
ExoPlayer.isReleased()
เพื่อตรวจสอบว่ามีการเรียกใช้Exoplayer.release()
หรือไม่ - เพิ่ม
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
เพื่อกำหนดค่า ตำแหน่งสูงสุดที่seekToPrevious()
จะข้ามไปยังรายการก่อนหน้า (#1425) - แก้ไขความไม่สอดคล้องกันบางอย่างในการโฟกัสเสียง เช่น ไม่รายงานการสูญเสียโฟกัสแบบเต็มหรือแบบชั่วคราวขณะที่หยุดเล่นชั่วคราว (#1436)
- แก้ไขปัญหาที่อาจเกิดขึ้น
IndexOutOfBoundsException
ซึ่งเกิดจากเครื่องมือแยกรายงานแทร็กเพิ่มเติมหลังจากขั้นตอนการเตรียมข้อมูลเบื้องต้น (#1476) Effects
ในExoPlayer.setVideoEffect()
จะได้รับการประทับเวลา โดยนำออฟเซ็ตของโปรแกรมแสดงผลออก (#1098)- แก้ไข
IllegalArgumentException
ที่อาจเกิดขึ้นเมื่อจัดการข้อผิดพลาดของเพลเยอร์ที่เกิดขึ้นขณะอ่านรายการเพลย์ลิสต์อื่นล่วงหน้า (#1483)
- เพิ่ม
- Transformer
- เพิ่ม
audioConversionProcess
และvideoConversionProcess
ไปยังExportResult
เพื่อระบุวิธีสร้างแทร็กที่เกี่ยวข้องในไฟล์เอาต์พุต - ยกเลิกการตรวจสอบระดับ H.264 ของการเพิ่มประสิทธิภาพการตัด
- เพิ่มการรองรับการเปลี่ยนระหว่างสื่ออินพุต SDR และ HDR ในลำดับ
- เพิ่มการรองรับเอฟเฟกต์เสียงระดับองค์ประกอบ
- เพิ่มการรองรับการแปลงรหัสรูปภาพ Ultra HDR เป็นวิดีโอ HDR
- แก้ไขปัญหาที่
DefaultAudioMixer
ไม่แสดงจำนวนไบต์ที่ถูกต้อง หลังจากรีเซ็ตและนำกลับมาใช้ใหม่ - หลีกเลี่ยงข้อบกพร่องของตัวถอดรหัสที่จำกัดจำนวนช่องเสียง ไว้ที่สเตอริโอเมื่อจัดการอินพุต PCM
- เมื่อเลือกแทร็กใน
ExoPlayerAssetLoader
ให้ละเว้นข้อจำกัดของจำนวนช่องเสียง เนื่องจากข้อจำกัดดังกล่าวใช้กับการเล่นเท่านั้น - แทนที่อินเทอร์เฟซ
androidx.media3.transformer.Muxer
ด้วยandroidx.media3.muxer.Muxer
และนำandroidx.media3.transformer.Muxer
ออก - แก้ไขการโหลดรูปภาพ HEIC จากรูปแบบ URI ของเนื้อหา (#1373)
- ปรับระยะเวลาของแทร็กเสียงใน
AudioGraphInput
เพื่อปรับปรุงการซิงค์ภาพและเสียง - นำฟิลด์
ExportResult.processedInputs
ออก หากใช้ฟิลด์นี้สำหรับรายละเอียดตัวแปลงรหัส ให้ใช้DefaultDecoderFactory.listener
แทน ใน กรณีที่ยกเว้นตัวแปลงรหัส รายละเอียดตัวแปลงรหัสจะอยู่ในExportException.codecInfo
- เพิ่ม
- โปรแกรมแยกข้อมูล
- MPEG-TS: เปลี่ยนแปลงไปข้างหน้าเพื่อให้มั่นใจว่าเฟรมสุดท้ายจะแสดงผลโดย ส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) รวมการแก้ไขเพื่อแก้ปัญหาที่เกิดขึ้นในสตรีม HLS ที่มีเฉพาะ I-frame(#1150) และสตรีม HLS ของ H.262 (#1126)
- MP3: ควรใช้ขนาดข้อมูลจากเฟรม
Info
มากกว่าขนาดที่รายงานโดย สตรีมพื้นฐาน (เช่น ขนาดไฟล์หรือส่วนหัว HTTPContent-Length
) ซึ่งจะช่วยยกเว้นข้อมูลตัวอย่างที่เล่นไม่ได้ (เช่น อาร์ตเวิร์กของอัลบั้ม) จากการคำนวณการค้นหาบิตเรตคงที่ ทำให้การค้นหาแม่นยำยิ่งขึ้น (#1376) - MP3: ใช้จำนวนเฟรมและข้อมูลอื่นๆ ในเฟรม
Info
(หากมี) เพื่อคำนวณอัตราบิตเฉลี่ยสำหรับการค้นหาอัตราบิตคงที่ แทนที่จะ ประมาณค่าจากอัตราบิตของเฟรมหลังจากเฟรมInfo
ซึ่งอาจมีขนาดเล็กเกินจริง เช่น เฟรมPCUT
(#1376) - แก้ไขการแยกรูปแบบเสียง PCM ในคอนเทนเนอร์ AVI
- เสียง:
- แก้ไขแอตทริบิวต์การเข้ารหัส DTS:X โปรไฟล์ 2 สำหรับการเล่นแบบส่งผ่าน (#1299)
- สำหรับการเล่นที่ออฟโหลด ให้รีเซ็ตฟิลด์การติดตามสำหรับการดูสตรีมจนจบ
ใน
DefaultAudioSink
ก่อนเรียกใช้AudioTrack.stop()
เพื่อให้AudioTrack.StreamEventCallback#onPresentationEnded
ระบุได้อย่างถูกต้อง เมื่อมีการเล่นข้อมูลที่รอดำเนินการทั้งหมด - แก้ไขข้อบกพร่องใน
SilenceSkippingAudioProcessor
ซึ่งการเปลี่ยนระหว่าง รูปแบบเสียงต่างๆ (เช่น สเตอริโอเป็นโมโน) อาจทำให้ โปรเซสเซอร์ส่งข้อยกเว้น (#1352) - ใช้
MediaCodecAudioRenderer.getDurationToProgressUs()
เพื่อให้ ExoPlayer กำหนดเวลาลูปการทำงานหลักแบบไดนามิกเมื่อ MediaCodecAudioRenderer สามารถดำเนินการต่อได้
- วิดีโอ
- แก้ไขปัญหาที่
Listener.onRenderedFirstFrame()
มาเร็วเกินไปเมื่อ เปลี่ยนพื้นผิวระหว่างการเล่น - แก้ไขตรรกะการสำรองข้อมูลตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส AV1 ที่เข้ากันได้หากจำเป็น (#1389)
- แก้ไขข้อยกเว้นของตัวแปลงรหัสที่อาจเกิดจากการเปิดใช้ตัวแสดงวิดีโอ ระหว่างการเล่น
- แก้ไขปัญหาที่
- ข้อความ:
- แก้ไขปัญหาที่ระบบข้ามคำบรรยายแทนเสียงที่เริ่มก่อนตำแหน่งการค้นหา ปัญหานี้เกิดขึ้นใน Media3 1.4.0-alpha01 เท่านั้น
- เปลี่ยนลักษณะการทำงานเริ่มต้นของการแยกวิเคราะห์คำบรรยายแทนเสียงให้เกิดขึ้นระหว่างการแยก
แทนที่จะเกิดขึ้นระหว่างการแสดงผล (ดูความแตกต่างระหว่างการแยกและการแสดงผลได้ที่แผนภาพสถาปัตยกรรมของ ExoPlayer
)
- คุณลบล้างการเปลี่ยนแปลงนี้ได้โดยเรียกใช้ทั้ง
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
และTextRenderer.experimentalSetLegacyDecodingEnabled(true)
ดูเอกสารเกี่ยวกับการปรับแต่งเพื่อดูวิธีเชื่อมต่อคอมโพเนนต์เหล่านี้เข้ากับอินสแตนซ์ExoPlayer
เราจะนำเมธอดเหล่านี้ (และการรองรับการถอดรหัสคำบรรยายแทนเสียงรุ่นเดิมทั้งหมด) ออกในรุ่นต่อๆ ไป - แอปที่มีการติดตั้งใช้งาน
SubtitleDecoder
ที่กำหนดเองต้องอัปเดต เพื่อติดตั้งใช้งานSubtitleParser
แทน (และSubtitleParser.Factory
แทนSubtitleDecoderFactory
)
- คุณลบล้างการเปลี่ยนแปลงนี้ได้โดยเรียกใช้ทั้ง
- PGS: แก้ไขการถอดรหัสแบบรันเลนส์เพื่อแก้ปัญหา
0
เป็นดัชนีสีแทน ค่าสีตามตัวอักษร (#1367) - CEA-708: ละเว้นค่า
rowLock
ข้อกำหนด CEA-708-E S-2023 ระบุว่าrowLock
และcolumnLock
ควรมีค่าเป็นจริงทั้งคู่ ไม่ว่าค่าที่อยู่ในสตรีมจะเป็นอย่างไร (columnLock
ไม่รองรับ ดังนั้นจึงถือว่ามีค่าเป็นเท็จเสมอ)- เดิมการเปลี่ยนแปลงนี้รวมอยู่ในบันทึกประจำรุ่น
1.3.0-alpha01
แต่การเปลี่ยนแปลงถูกเปลี่ยนกลับโดยไม่ตั้งใจก่อนการเปิดตัว1.3.0-rc01
ตอนนี้ปัญหาได้รับการแก้ไขแล้ว การเปลี่ยนแปลงจึงกลับมาปรากฏอีกครั้ง
- เดิมการเปลี่ยนแปลงนี้รวมอยู่ในบันทึกประจำรุ่น
- CEA-708: หลีกเลี่ยงการเพิ่มบรรทัดใหม่ที่ซ้ำกันซึ่งเกิดจากการจัดการคำสั่ง "ตั้งค่าตำแหน่งปากกา" อย่างง่ายของ ExoPlayer (#1315)
- แก้ไข
IllegalArgumentException
จากLegacySubtitleUtil
เมื่อตัวอย่างคำบรรยายแทนเสียง WebVTT ไม่มีคิว เช่น เป็นส่วนหนึ่งของสตรีม DASH (#1516)
- ข้อมูลเมตา
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบได้แมปแท็ก MP4 "album sort"
(
soal
), "artist sort" (soar
) และ "album artist sort" (soaa
) อย่างไม่ถูกต้องกับแท็ก ID3TSO2
,TSOA
และTSOP
(#1302) - แก้ไขการอ่านแท็กตัวเลข MP4 (/iTunes)
gnre
(ประเภท) และtmpo
(เทมโป) เมื่อค่ามีความยาวมากกว่า 1 ไบต์ - ส่งต่อเฟรม ID3
TCON
ไปยังMediaMetadata.genre
(#1305)
- แก้ไขการแมป MP4 กับแท็กการจัดเรียง ID3 ก่อนหน้านี้ ระบบได้แมปแท็ก MP4 "album sort"
(
- รูปภาพ:
- เพิ่มการรองรับตารางภาพปก DASH ที่ไม่ใช่สี่เหลี่ยมจัตุรัส (#1300)
- เพิ่มการรองรับ AVIF สำหรับ API 34 ขึ้นไป
- อนุญาต
null
เป็นพารามิเตอร์สำหรับExoPlayer.setImageOutput()
เพื่อล้างImageOutput
ที่ตั้งค่าไว้ก่อนหน้านี้
- DataSource:
- รองรับ
android.resource://package/id
URI ของทรัพยากรดิบ ที่package
แตกต่างจากแพ็กเกจของแอปพลิเคชันปัจจุบัน ก่อนหน้านี้ไม่ได้มีการบันทึกไว้ว่าวิธีนี้ใช้ได้ แต่เป็นวิธีที่มีประสิทธิภาพมากกว่า ในการเข้าถึงทรัพยากรในแพ็กเกจอื่นที่ไม่ใช่ชื่อ - ตรวจสอบว่า
url
ไม่ใช่ค่า Null ในตัวสร้างDataSpec
มีการใส่คำอธิบายประกอบพารามิเตอร์นี้แล้วว่าต้องไม่ใช่ Null - อนุญาตให้
ByteArrayDataSource
แก้ไข URI เป็นอาร์เรย์ไบต์ในระหว่างopen()
แทนที่จะฮาร์ดโค้ดที่การสร้าง (#1405)
- รองรับ
- DRM:
- อนุญาตให้ตั้งค่า
LoadErrorHandlingPolicy
ในDefaultDrmSessionManagerProvider
(#1271)
- อนุญาตให้ตั้งค่า
- ผลลัพธ์
- รองรับการเปลี่ยนแปลงความเร็วหลายครั้งภายใน
EditedMediaItem
เดียวกันหรือComposition
ในSpeedChangeEffect
- รองรับเอาต์พุต HLG และ PQ จากอินพุตบิตแมป Ultra HDR
- เพิ่มการรองรับ EGL_GL_COLORSPACE_BT2020_HLG_EXT ซึ่งช่วยปรับปรุงเอาต์พุตพื้นผิว HLG ใน ExoPlayer.setVideoEffect และ Debug SurfaceView ของ Transformer
- อัปเดตการติดตั้งใช้งานเมทริกซ์ภาพซ้อนทับเพื่อให้สอดคล้องกับ
เอกสารประกอบโดยการสลับค่า x และ y ที่ใช้ใน
setOverlayFrameAnchor()
หากใช้OverlaySettings.Builder.setOverlayFrameAnchor()
ให้สลับค่า x และ y โดยคูณด้วย-1
- แก้ไขข้อบกพร่องที่ทำให้
TimestampWrapper
ขัดข้องเมื่อใช้กับExoPlayer#setVideoEffects
(#821) - เปลี่ยนพื้นที่ทำงานสี SDR เริ่มต้นจากสีเชิงเส้นเป็นวิดีโอ SDR BT 709 ที่เป็นไฟฟ้า นอกจากนี้ ให้ระบุตัวเลือกที่ 3 เพื่อคงพื้นที่สีเดิมไว้
- อนุญาตให้กำหนดลำดับ Z ที่ไม่แน่นอนของ EditedMediaItemSequences (#1055)
- รักษาระดับความสว่างที่สอดคล้องกันในเนื้อหา HDR ต่างๆ (ใช้ช่วง HLG)
- เพิ่มการรองรับภาพซ้อนทับ Ultra HDR (บิตแมป) ในเนื้อหา HDR
- อนุญาตให้ใช้เอฟเฟกต์
SeparableConvolution
ก่อน API 26 - นำ
OverlaySettings.useHdr
ที่ไม่ได้ใช้ออกเนื่องจากช่วงไดนามิกของภาพซ้อนทับ และเฟรมต้องตรงกัน - เพิ่มการรองรับ HDR สำหรับ
TextOverlay
คุณปรับความสว่างของข้อความวางซ้อนได้ด้วยOverlaySettings.Builder.setHdrLuminanceMultiplier()
- รองรับการเปลี่ยนแปลงความเร็วหลายครั้งภายใน
- ส่วนขยาย IMA
- เลื่อนระดับ API ที่จำเป็นสำหรับแอปในการเล่นสตรีมโฆษณา DAI เป็นเวอร์ชันที่เสถียร
- เพิ่ม
replaceAdTagParameters(Map <String, String>)
toImaServerSideAdInsertionMediaSource.AdLoader
ที่อนุญาตให้แทนที่พารามิเตอร์แท็กโฆษณา ในรันไทม์ - แก้ไขข้อบกพร่องที่ไม่ได้เรียกใช้
VideoAdPlayer.VideoAdPlayerCallback.onError()
เมื่อเกิดข้อผิดพลาดของเพลเยอร์ในระหว่างการเล่นโฆษณา (#1334) - อัปเกรด IMA SDK เป็นเวอร์ชัน 3.33.0 เพื่อแก้ไข
NullPointerException
เมื่อ ใช้ URI ของแท็กโฆษณาdata://
(#700)
- เซสชัน:
- เปลี่ยนค่าเริ่มต้นของ
CommandButton.enabled
เป็นtrue
และตรวจสอบว่าค่า สามารถเป็นเท็จสำหรับตัวควบคุมได้แม้ว่าคำสั่งที่เกี่ยวข้องจะ พร้อมใช้งานก็ตาม - เพิ่มค่าคงที่ของไอคอนสำหรับ
CommandButton
ที่ควรใช้แทน ทรัพยากรไอคอนที่กำหนดเอง - เพิ่ม
MediaSessionService.isPlaybackOngoing()
เพื่อให้แอปค้นหาว่าบริการต้องหยุดในonTaskRemoved()
หรือไม่ (#1219) - เพิ่ม
MediaSessionService.pauseAllPlayersAndStopSelf()
ที่ช่วยให้คุณหยุดการเล่นของเซสชันทั้งหมดชั่วคราวได้อย่างสะดวก และเรียกใช้stopSelf()
เพื่อ สิ้นสุดวงจรของMediaSessionService
- แทนที่
MediaSessionService.onTaskRemoved(Intent)
เพื่อให้การติดตั้งใช้งานเริ่มต้นที่ปลอดภัย ซึ่งจะทำให้บริการทำงานต่อไปในเบื้องหน้า หากมีการเล่นอยู่ หรือหยุดบริการในกรณีอื่นๆ - ซ่อนแถบเลื่อนในข้อมูลการแจ้งเตือนสื่อสำหรับไลฟ์สดโดยไม่ตั้งค่า ระยะเวลาในข้อมูลเมตาของเซสชันแพลตฟอร์ม (#1256)
- จัดแนว Conversion ของ
MediaMetadata
เป็นMediaDescriptionCompat
เพื่อใช้ ลำดับและตรรกะที่ต้องการเดียวกันเมื่อเลือกพร็อพเพอร์ตี้ข้อมูลเมตาเช่นเดียวกับ ใน media1 - เพิ่ม
MediaSession.sendError()
ที่อนุญาตให้ส่งข้อผิดพลาดที่ไม่ร้ายแรงไปยัง ตัวควบคุม Media3 เมื่อใช้เครื่องมือควบคุมการแจ้งเตือน (ดูMediaSession.getMediaNotificationControllerInfo()
) ระบบจะใช้ข้อผิดพลาดที่กำหนดเอง เพื่ออัปเดตPlaybackState
ของเซสชันแพลตฟอร์มเป็น สถานะข้อผิดพลาดพร้อมข้อมูลข้อผิดพลาดที่ระบุ (#543) - เพิ่ม
MediaSession.Callback.onPlayerInteractionFinished()
เพื่อแจ้งให้ เซสชันทราบเมื่อการโต้ตอบของผู้เล่นหลายครั้งจากตัวควบคุมที่เฉพาะเจาะจง สิ้นสุดลง - เพิ่ม
SessionError
และใช้ในSessionResult
และLibraryResult
แทนรหัสข้อผิดพลาดเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด และวิธีแก้ไขข้อผิดพลาดหากเป็นไปได้ - เผยแพร่โค้ดสำหรับแอปทดสอบตัวควบคุม Media3 ที่ใช้เพื่อ ทดสอบการโต้ตอบกับแอปที่เผยแพร่เซสชันสื่อได้
- ส่งต่อข้อมูลพิเศษที่ส่งไปยัง
MediaSession[Builder].setSessionExtras()
ของ Media3 ไปยังPlaybackStateCompat.getExtras()
ของตัวควบคุม Media1 - แมปข้อผิดพลาดร้ายแรงและไม่ร้ายแรงไปยังและจากเซสชันแพลตฟอร์ม A
PlaybackException
จะแมปกับสถานะข้อผิดพลาดร้ายแรงของPlaybackStateCompat
SessionError
ที่ส่งไปยังตัวควบคุมการแจ้งเตือนสื่อ พร้อมMediaSession.sendError(ControllerInfo, SessionError)
จะได้รับการแมปกับข้อผิดพลาดที่ไม่ร้ายแรงในPlaybackStateCompat
ซึ่งหมายความว่า ระบบจะตั้งรหัสข้อผิดพลาดและข้อความ แต่สถานะของเซสชันแพลตฟอร์ม จะยังคงแตกต่างจากSTATE_ERROR
- อนุญาตให้ตั้งค่ากิจกรรมเซสชันต่อตัวควบคุมเพื่อลบล้าง
กิจกรรมเซสชันส่วนกลาง คุณกำหนดกิจกรรมเซสชันสำหรับ
คอนโทรลเลอร์ได้ในเวลาที่เชื่อมต่อโดยสร้าง
ConnectionResult
ด้วยAcceptedResultBuilder.setSessionActivivty(PendingIntent)
เมื่อเชื่อมต่อแล้ว คุณจะอัปเดตกิจกรรมเซสชันได้ด้วยMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
- ปรับปรุงการจำลองข้อผิดพลาดของการโทรไปยัง
MediaLibrarySession.Callback
ตอนนี้คุณกำหนดค่าการจำลองข้อผิดพลาดได้โดยใช้MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
เพื่อ เลือกประเภทข้อผิดพลาดหรือเลือกไม่ใช้การจำลองข้อผิดพลาดซึ่งเปิดอยู่ โดยค่าเริ่มต้น
- เปลี่ยนค่าเริ่มต้นของ
- UI:
- เพิ่มการรองรับการแสดงรูปภาพใน
PlayerView
เมื่อเชื่อมต่อกับExoPlayer
(#1144) - เพิ่มการปรับแต่งไอคอนต่างๆ ใน
PlayerControlView
ผ่านแอตทริบิวต์ xml เพื่ออนุญาตให้ใช้ Drawable ที่แตกต่างกันต่ออินสแตนซ์PlayerView
แทนการลบล้างส่วนกลาง (#1200) - แก้ไขข้อบกพร่องของแพลตฟอร์มที่ทำให้วิดีโอยืด/ครอบตัดเมื่อใช้
SurfaceView
ภายใน ComposeAndroidView
ใน API 34 (#1237)
- เพิ่มการรองรับการแสดงรูปภาพใน
- การดาวน์โหลด
- ตรวจสอบว่า
DownloadHelper
ไม่รั่วไหลอินสแตนซ์Renderer
ที่ยังไม่ได้เผยแพร่ ซึ่งอาจส่งผลให้แอปขัดข้องพร้อมกับIllegalStateException: Too many receivers, total of 1000, registered for pid
(#1224)
- ตรวจสอบว่า
- ส่วนขยาย Cronet
- แก้ไข
SocketTimeoutException
ในCronetDataSource
ใน Cronet บางเวอร์ชัน คำขอที่ส่งโดยการเรียกกลับอาจไม่เหมือนกันเสมอไป ซึ่งจะทำให้การเรียกกลับไม่สำเร็จและคำขอหมดเวลา (https://issuetracker.google.com/328442628)
- แก้ไข
- ส่วนขยาย HLS:
- แก้ไขข้อบกพร่องที่ตัวอย่าง EMSG ที่รอดำเนินการซึ่งรอการหยุดชะงัก
ได้รับการมอบหมายใน
HlsSampleStreamWrapper
โดยมีออฟเซ็ตที่ไม่ถูกต้องซึ่งทำให้เกิดIndexOutOfBoundsException
หรือIllegalArgumentException
(#1002) - แก้ไขข้อบกพร่องที่เพลย์ลิสต์ที่ไม่ใช่เพลย์ลิสต์หลักจะโหลดซ้ำสำหรับสตรีม LL-HLS (#1240)
- แก้ไขข้อบกพร่องที่การเปิดใช้ CMCD สำหรับ HLS ที่มีกลุ่มการเริ่มต้น
ส่งผลให้เกิด
Source Error
และIllegalArgumentException
- แก้ไขข้อบกพร่องที่เพลย์ลิสต์ที่เล่นที่ไม่ใช่เพลย์ลิสต์หลักไม่ได้รับการรีเฟรชระหว่าง การเล่นสด (#1240)
- แก้ไขข้อบกพร่องที่การเปิดใช้ CMCD สำหรับไลฟ์สด HLS ทำให้เกิด
ArrayIndexOutOfBoundsException
(#1395)
- แก้ไขข้อบกพร่องที่ตัวอย่าง EMSG ที่รอดำเนินการซึ่งรอการหยุดชะงัก
ได้รับการมอบหมายใน
- ส่วนขยาย DASH
- ส่วนขยาย Cast
- แก้ไขข้อบกพร่องที่แปลงชื่ออัลบั้มของ
MediaQueueItem
เป็น ศิลปินในรายการสื่อ Media3 (#1255)
- แก้ไขข้อบกพร่องที่แปลงชื่ออัลบั้มของ
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- ใช้
onInit()
และonRelease()
ในFakeRenderer
- เปลี่ยน
TestPlayerRunHelper.runUntil()/playUntil()
เมธอดให้ล้มเหลวเมื่อเกิดข้อผิดพลาดที่ไม่ร้ายแรง (เช่น ข้อผิดพลาดที่รายงานไปยังAnalyticsListener.onVideoCodecError()
) ใช้ห่วงโซ่เมธอดTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
ใหม่เพื่อปิดใช้ลักษณะการทำงานนี้
- ใช้
- แอปเดโม
- ใช้
DefaultPreloadManager
ในแอปเดโม Shorts - อนุญาตให้ตั้งค่าโหมดเล่นซ้ำด้วยอาร์กิวเมนต์
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.FormatSupport
IntDef และFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
,FORMAT_UNSUPPORTED_TYPE
ออก ใช้ IntDef และค่าคงที่ที่เทียบเท่าในandroidx.media3.common.C
แทน (เช่นC.FORMAT_HANDLED
) - นำอินเทอร์เฟซ
Bundleable
ออก ซึ่งรวมถึงการนำฟิลด์ค่าคงที่ทั้งหมดของBundleable.Creator<Foo> CREATOR
ออก ผู้โทรควรใช้วิธีBundle toBundle()
และstatic Foo fromBundle(Bundle)
ในแต่ละประเภทแทน
- นำ
เวอร์ชัน 1.4.0-rc01
10 กรกฎาคม 2024
ใช้เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-beta01
26 มิถุนายน 2024
ใช้เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-alpha02
7 มิถุนายน 2024
ใช้เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.4.0-alpha01
17 เมษายน 2024
ใช้เวอร์ชันเสถียร 1.4.0
เวอร์ชัน 1.3.0
เวอร์ชัน 1.3.1
11 เมษายน 2024
androidx.media3:media3-*:1.3.1
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.3.1 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- เพิ่ม
Format.labels
เพื่ออนุญาตให้ใช้ป้ายกำกับที่แปลแล้วหรือป้ายกำกับอื่น
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาที่
PreloadMediaPeriod
ไม่สามารถเก็บสตรีมไว้ได้เมื่อโหลดล่วงหน้าอีกครั้ง - ใช้
TrackSelectionResult
ที่ถูกต้องซึ่งสอดคล้องกับระยะเวลาการเล่น เมื่อเลือกแทร็กอีกครั้ง - เริ่มตัวแสดงผลที่เปิดใช้ก่อนเวลาหลังจากเลื่อนระยะเวลาการเล่น เมื่อเปลี่ยนระหว่างรายการสื่อเท่านั้น (#1017)
- เพิ่มประเภทการคืนสินค้าที่ขาดหายไปในกฎ Proguard
-keepclasseswithmembers
สำหรับDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187)
- แก้ไขปัญหาที่
- Transformer
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่เกิดจาก
MediaMuxer
ไม่รองรับ การประทับเวลาการนำเสนอที่เป็นลบก่อน API 30
- เพิ่มวิธีแก้ปัญหาสำหรับข้อยกเว้นที่เกิดจาก
- การเลือกแทร็ก
DefaultTrackSelector
: เลือกแทร็กวิดีโอที่มีอัตราเฟรม "สมเหตุสมผล" (>=10fps) มากกว่าแทร็กที่มีอัตราเฟรมต่ำกว่าหรือไม่ได้ตั้งค่า ซึ่งจะช่วยให้ เพลเยอร์เลือกแทร็กวิดีโอ "จริง" ใน MP4 ที่ดึงมาจากภาพเคลื่อนไหว ซึ่งอาจมีแทร็ก HEVC 2 แทร็ก โดยแทร็กหนึ่งมีความละเอียดสูงกว่า แต่มีจำนวนเฟรมน้อยมาก (#1051)
- โปรแกรมแยกข้อมูล
- แก้ไขปัญหาที่ไม่ได้ข้ามการเพิ่มพื้นที่เมื่ออ่านก้อนข้อมูลที่มีขนาดคี่ จากไฟล์ WAV (#1117)
- MP3: ป้อนข้อมูล
Format.averageBitrate
จากเฟรมข้อมูลเมตา เช่นXING
และVBRI
- MPEG-TS: เปลี่ยนกลับการเปลี่ยนแปลงที่มีจุดประสงค์เพื่อให้มั่นใจว่าเฟรมสุดท้ายจะได้รับการแสดงผล โดยการส่งหน่วยการเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909) เนื่องจากการเปลี่ยนแปลงทำให้เกิดปัญหาใหม่กับสตรีม HLS ที่มีเฉพาะ I-frame (#1150) และสตรีม HLS ของ H.262 (#1126)
- เสียง:
- อนุญาตให้กู้คืนโปรแกรมแสดงผลโดยการปิดใช้การออฟโหลดหากแทร็กเสียงเริ่มต้นในโหมดออฟโหลดไม่สำเร็จ
- วิดีโอ
- เพิ่มวิธีแก้ปัญหาสำหรับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ที่ทำให้ระบบทำเครื่องหมายสตรีม H265 ที่ 60fps ว่าไม่รองรับ
- เพิ่มวิธีแก้ปัญหาที่ช่วยให้มั่นใจได้ว่าเฟรมแรกจะได้รับการแสดงผลเสมอขณะ ทำ Tunneling แม้ว่าอุปกรณ์จะไม่ดำเนินการนี้โดยอัตโนมัติตามที่ API กำหนด (#1169) (#966)
- แก้ไขปัญหาที่การจัดการข้อมูลสี HDR ทำให้ตัวแปลงรหัสทำงานผิดปกติและ ป้องกันการสลับรูปแบบแบบปรับได้สำหรับแทร็กวิดีโอ SDR (#1158)
- ข้อความ:
- WebVTT: ป้องกันไม่ให้คิวที่ต่อเนื่องกันโดยตรงสร้าง
CuesWithTiming
อินสแตนซ์เพิ่มเติมWebvttParser.parse
ที่ไม่ถูกต้อง (#1177)
- WebVTT: ป้องกันไม่ให้คิวที่ต่อเนื่องกันโดยตรงสร้าง
- DRM:
- แก้ไขปัญหา
NoSuchMethodError
ซึ่งอาจเกิดจากMediaDrm
เฟรมเวิร์กแทนResourceBusyException
หรือNotProvisionedException
ในอุปกรณ์ Android 14 บางรุ่น (#1145)
- แก้ไขปัญหา
- ผลลัพธ์
- ปรับปรุงการแมปโทน PQ เป็น SDR โดยการแปลงพื้นที่สี
- เซสชัน:
- UI:
- ใช้ชื่อภาษาของแทร็กเสียงเป็นข้อมูลสำรองหาก
Locale
ระบุชื่อที่แสดงไม่ได้ (#988)
- ใช้ชื่อภาษาของแทร็กเสียงเป็นข้อมูลสำรองหาก
- ส่วนขยาย DASH
- ป้อนข้อมูลองค์ประกอบ
Label
ทั้งหมดจากไฟล์ Manifest ลงในFormat.labels
(#1054)
- ป้อนข้อมูลองค์ประกอบ
- ส่วนขยาย RTSP
- ข้ามค่าข้อมูลเซสชันที่ว่างเปล่า (i-tag) ในการแยกวิเคราะห์ SDP (#1087)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ปิดใช้ส่วนขยาย MIDI เป็นการขึ้นต่อกันในเครื่องโดยค่าเริ่มต้นเนื่องจากต้องกำหนดค่าที่เก็บ Maven เพิ่มเติม ผู้ใช้ที่ต้องการ โมดูลนี้จากทรัพยากร Dependency ในเครื่อง สามารถเปิดใช้โมดูลอีกครั้ง
เวอร์ชัน 1.3.0
6 มีนาคม 2024
androidx.media3:media3-*:1.3.0
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.3.0 มีการเปลี่ยนแปลงเหล่านี้
- คลังทั่วไป
- รองรับ URI ของทรัพยากร
android.resource://package/[type/]name
ดิบ ที่package
แตกต่างจากแพ็กเกจของแอปพลิเคชัน ปัจจุบัน เราได้บันทึกไว้เสมอว่าวิธีนี้ใช้ได้ แต่จนถึงตอนนี้ก็ยังไม่ได้ นำไปใช้ให้ถูกต้อง - แปลงประเภท MIME ที่ตั้งค่าโดยโค้ดแอปหรืออ่านจากสื่อให้เป็นตัวพิมพ์เล็กทั้งหมด
- กำหนดโฆษณาด้วย
MediaItem
แบบเต็มแทนUri
รายการเดียวในAdPlaybackState
- เพิ่ม
minSdk
เป็น 19 (Android KitKat) ซึ่งสอดคล้องกับไลบรารี AndroidX อื่นๆ ทั้งหมด และจำเป็นต่อการอัปเกรดเป็นเวอร์ชันล่าสุดของ การอ้างอิง AndroidX - ป้อนทั้ง
artworkUri
และartworkData
ในMediaMetadata.Builder.populate(MediaMetadata)
เมื่อมีอย่างน้อย 1 รายการ เป็นค่าที่ไม่ใช่ Null (#964)
- รองรับ URI ของทรัพยากร
- ExoPlayer:
- เพิ่ม
PreloadMediaSource
และPreloadMediaPeriod
ที่อนุญาตให้แอปโหลดแหล่งที่มาของสื่อเนื้อหาล่วงหน้า ณ ตำแหน่งเริ่มต้นที่เฉพาะเจาะจงก่อนการเล่นPreloadMediaSource
จะดูแลการเตรียมแหล่งที่มาของสื่อเนื้อหา เพื่อรับTimeline
การเตรียมและแคชช่วงเวลาที่ ตำแหน่งเริ่มต้นที่ระบุ การเลือกแทร็ก และการโหลดข้อมูลสื่อสำหรับ ช่วงเวลาดังกล่าว แอปจะควบคุมความคืบหน้าในการโหลดล่วงหน้าโดยการใช้PreloadMediaSource.PreloadControl
และตั้งค่าแหล่งที่มาที่โหลดล่วงหน้าเป็น เพลเยอร์สำหรับการเล่น - เพิ่ม
ExoPlayer.setImageOutput
ที่อนุญาตให้แอปตั้งค่าImageRenderer.ImageOutput
DefaultRenderersFactory
จะแสดงImageRenderer
ให้กับผู้เล่น โดยค่าเริ่มต้นพร้อมImageOutput
และImageDecoder.Factory.DEFAULT
ที่เป็นค่าว่าง- ปล่อยเหตุการณ์
Player.Listener.onPositionDiscontinuity
เมื่อข้ามช่วงเงียบ (#765) - เพิ่มการรองรับการแยกวิเคราะห์คำบรรยายแทนเสียงในระหว่างการดึงข้อมูลในเวอร์ชันทดลอง คุณ
เปิดใช้ได้โดยใช้
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
- รองรับแหล่งที่มาของสื่อแบบปรับได้ด้วย
PreloadMediaSource
- ใช้
HttpEngineDataSource
ซึ่งเป็นHttpDataSource
โดยใช้ HttpEngine API - ป้องกันการสร้างคลาสย่อย
CompositeSequenceableLoader
คอมโพเนนต์นี้เคยขยายได้ แต่ไม่เคยมีการสร้างคลาสย่อยภายในไลบรารี การปรับแต่งทำได้โดย การห่อหุ้มอินสแตนซ์โดยใช้รูปแบบ Decorator และ การใช้CompositeSequenceableLoaderFactory
ที่กำหนดเอง - แก้ไขปัญหาที่การทำซ้ำเวลาเดียวกันทำให้ระบบล้างข้อมูลเมตาจากรายการนี้ (#1007)
- เปลี่ยนชื่อ
experimentalSetSubtitleParserFactory
methods onBundledChunkExtractor.Factory
และDefaultHlsExtractorFactory
เป็นsetSubtitleParserFactory
และไม่อนุญาตให้ส่งnull
ใช้เมธอดใหม่ของexperimentalParseSubtitlesDuringExtraction(boolean)
เพื่อควบคุม ลักษณะการทำงานของการแยกวิเคราะห์ - เพิ่มการรองรับการปรับแต่ง
SubtitleParser.Factory
ที่ใช้ระหว่าง การแยก ซึ่งทำได้ด้วยMediaSource.Factory.setSubtitleParserFactory()
- เพิ่มคำนำหน้าแหล่งที่มาลงในช่อง
Format.id
ทั้งหมดที่สร้างจากMergingMediaSource
ซึ่งจะช่วยระบุแหล่งที่มาที่ทำให้เกิดFormat
(#883) - แก้ไขนิพจน์ทั่วไปที่ใช้ในการตรวจสอบชื่อคีย์ของข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ที่กำหนดเอง โดยการแก้ไขให้ตรวจสอบเฉพาะขีดกลาง (#1028)
- หยุดการเข้ารหัสพารามิเตอร์การค้นหา CMCD ซ้ำ (#1075)
- เพิ่ม
- Transformer
- เพิ่มการรองรับการรวมวิดีโอสโลว์โมชัน SEF ของ H.265/HEVC
- เพิ่มความเร็วในการแปลงมัลติเพล็กซ์ โดยเฉพาะการแก้ไขแบบ "นำวิดีโอออก"
- เพิ่ม API เพื่อให้มั่นใจว่าไฟล์เอาต์พุตจะเริ่มต้นในวิดีโอเฟรม ซึ่งจะช่วยให้เอาต์พุตของการดำเนินการตัดเข้ากันได้มากขึ้นกับการใช้งานโปรแกรมเล่นที่ไม่แสดงเฟรมวิดีโอแรกจนกว่าจะถึงการประทับเวลาการนำเสนอ (#829)
- เพิ่มการรองรับการเพิ่มประสิทธิภาพการดำเนินการตัด MP4 ของชิ้นงานเดียว
- เพิ่มการรองรับเพื่อให้แน่ใจว่าเฟรมวิดีโอมีการประทับเวลาแรกใน ไฟล์เอาต์พุต แก้ไขไฟล์เอาต์พุตที่ขึ้นต้นด้วยเฟรมสีดำในเพลเยอร์ที่ใช้ iOS (#829)
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.selectImageTrack
เพื่อเปิดใช้การเลือกแทร็กรูปภาพ - เพิ่ม
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
เพื่อ กำหนดว่าจะเลือกแทร็กรูปภาพหรือไม่หากมีทั้งแทร็กรูปภาพและ แทร็กวิดีโอ ค่าเริ่มต้นคือfalse
ซึ่งหมายความว่า ระบบจะจัดลำดับความสำคัญของการเลือกแทร็กวิดีโอ
- เพิ่ม
- โปรแกรมแยกข้อมูล
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมไปยังโปรแกรมแยก MP4 เพื่อดึงค่า
ColorInfo.colorSpace
,ColorInfo.colorTransfer
และColorInfo.colorRange
(#692) - MP3: ใช้การค้นหาบิตเรตคงที่ (CBR) สำหรับไฟล์ที่มีส่วนหัว
Info
(ส่วนหัวXing
ที่เทียบเท่ากับ CBR) ก่อนหน้านี้เราใช้ seek table จากส่วนหัวInfo
แต่การทำเช่นนี้จะทำให้การกรอวิดีโอ ไม่แม่นยำเท่ากับการไม่สนใจและถือว่าไฟล์เป็น CBR - MPEG2-TS: เพิ่มการรองรับ DTS, DTS-LBR และ DTS:X Profile2 (#275)
- ดึงข้อมูลประเภทเสียงจากตัวอธิบาย TS และแมปกับแฟล็กบทบาท เพื่อให้ผู้ใช้เลือกแทร็กเสียงได้อย่างมีข้อมูลมากขึ้น (#973)
- เพิ่มการแยกวิเคราะห์ AV1C เพิ่มเติมไปยังโปรแกรมแยก MP4 เพื่อดึงค่า
- เสียง:
- วิดีโอ
- เปลี่ยนเครื่องมือสร้าง
MediaCodecVideoRenderer
ที่รับอาร์กิวเมนต์VideoFrameProcessor.Factory
แล้วแทนที่ด้วยเครื่องมือสร้าง ที่รับอาร์กิวเมนต์VideoSinkProvider
แอปที่ต้องการแทรกVideoFrameProcessor.Factory
ที่กำหนดเอง สามารถสร้างอินสแตนซ์ของCompositingVideoSinkProvider
ที่ใช้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
- เล่นตัวอย่างที่ไม่มีการเข้ารหัส "clear lead" ในเนื้อหา DRM ทันทีโดยค่าเริ่มต้น แม้ว่าคีย์สำหรับตัวอย่างที่เข้ารหัสในภายหลังจะยังไม่พร้อมก็ตาม ซึ่งอาจทำให้การเล่นหยุดชะงักกลางคันหากคีย์ยังไม่พร้อม
เมื่อตำแหน่งการเล่นไปถึงตัวอย่างที่เข้ารหัส (แต่ก่อนหน้านี้
การเล่นจะยังไม่เริ่มเลย ณ จุดนี้) คุณปิดใช้ลักษณะการทำงานนี้ได้ด้วย
- ส่วนขยาย IMA
- แก้ไขปัญหาที่โฆษณา DASH และ HLS ที่ไม่มีนามสกุลไฟล์ที่เหมาะสม เล่นไม่ได้
- เซสชัน:
- ปิดใช้การตรวจหาการดับเบิลคลิกสำหรับแอปทีวี (#962)
- แก้ไขปัญหาที่
MediaItem.RequestMetadata
ที่มีเพียงส่วนเสริมที่ไม่ใช่ค่าว่าง จะไม่ส่งระหว่างตัวควบคุมสื่อและเซสชัน - เพิ่มตัวสร้างไปยัง
MediaLibrarySession.Builder
ที่รับเฉพาะContext
แทนที่จะเป็นMediaLibraryService
- ส่วนขยาย HLS:
- ลด
HlsMediaPeriod
เป็นระดับการเข้าถึงแบบแพ็กเกจส่วนตัว ไม่ควรใช้ประเภทนี้ จากภายนอกแพ็กเกจ HLS โดยตรง - Resolve ค้นหาจุดเริ่มต้นของกลุ่มได้อย่างมีประสิทธิภาพมากขึ้น (#1031)
- ลด
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ตัวถอดรหัส MIDI: ละเว้นข้อความเหตุการณ์ SysEx (#710)
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- อย่าหยุดเล่นใน
TestPlayerRunHelper.playUntilPosition
ชั่วคราว การทดสอบจะทำให้การเล่นอยู่ในสถานะกำลังเล่น แต่จะระงับความคืบหน้าไว้จนกว่า การทดสอบจะเพิ่มการยืนยันและการดำเนินการเพิ่มเติมได้
- อย่าหยุดเล่นใน
- แอปเดโม
- เพิ่มโมดูลการสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
PreloadMediaSource
พร้อม Use Case ของเนื้อหาแบบสั้น
- เพิ่มโมดูลการสาธิตแบบสั้นเพื่อสาธิตการใช้งาน
เวอร์ชัน 1.3.0-rc01
22 กุมภาพันธ์ 2024
เวอร์ชัน 1.3.0-beta01
7 กุมภาพันธ์ 2024
เวอร์ชัน 1.3.0-alpha01
15 มกราคม 2024
เวอร์ชัน 1.2.0
เวอร์ชัน 1.2.1
9 มกราคม 2024
- ExoPlayer:
- แก้ไขปัญหาที่การกรอด้วยตนเองนอก
LiveConfiguration.min/maxOffset
ช่วงจะปรับออฟเซ็ตกลับไปที่min/maxOffset
- แก้ไขปัญหาที่เลย์เอาต์ช่อง OPUS และ VORBIS ไม่ถูกต้องสำหรับ 3, 5, 6, 7 และ 8 ช่อง (#8396)
- แก้ไขปัญหาที่การเลือกแทร็กหลังจากกรอไปที่ 0 ในไลฟ์สด ทำให้สตรีมเริ่มที่ตำแหน่งเริ่มต้นอย่างไม่ถูกต้อง (#9347)
- แก้ไขปัญหาที่อินสแตนซ์ใหม่ของ
CmcdData.Factory
ได้รับค่าลบสำหรับbufferedDurationUs
จากแหล่งที่มาของก้อนข้อมูล ซึ่งส่งผลให้เกิดIllegalArgumentException
(#888)
- แก้ไขปัญหาที่การกรอด้วยตนเองนอก
- Transformer
- แก้ไขปัญหาที่ตัวเข้ารหัสจะหยุดทำงานในเวลาที่กำหนดค่า เนื่องจากการตั้งค่าอัตราการทำงานสูง
- โปรแกรมแยกข้อมูล
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในภาพเคลื่อนไหว JPEG เป็น
ROLE_FLAG_ALTERNATE
เพื่อป้องกันไม่ให้ระบบเลือกแทร็กเหล่านั้นโดยอัตโนมัติสำหรับการ เล่นเนื่องจากมีความละเอียดสูงกว่า - แก้ไขการตรวจหาคีย์เฟรมที่ไม่ถูกต้องสำหรับสตรีม TS H264 (#864)
- แก้ไขการประมาณระยะเวลาของสตรีม TS ที่ยาวกว่า 47721 วินาที (#855)
- ทำเครื่องหมายแทร็ก HEVC รอง (เล่นไม่ได้) ในภาพเคลื่อนไหว JPEG เป็น
- เสียง:
- แก้ไขการจัดการ EOS สำหรับ
SilenceSkippingAudioProcessor
เมื่อมีการเรียกใช้ หลายครั้ง (#712)
- แก้ไขการจัดการ EOS สำหรับ
- วิดีโอ
- เพิ่มวิธีแก้ปัญหาชั่วคราวสำหรับปัญหาเกี่ยวกับอุปกรณ์ใน Galaxy Tab S7 FE, Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ซึ่งทำให้ระบบทำเครื่องหมายสตรีม AVC ที่ 60fps ว่าไม่รองรับ (#693)
- ข้อมูลเมตา
- แก้ไขข้อบกพร่องที่
MediaMetadata
จะสร้างจากความคิดเห็น Vorbis เท่านั้น โดยใช้คีย์ตัวพิมพ์ใหญ่ (#876) - จับ
OutOfMemoryError
เมื่อแยกวิเคราะห์เฟรม ID3 ขนาดใหญ่มาก ซึ่งหมายความว่า การเล่นจะดำเนินต่อไปได้โดยไม่มีข้อมูลแท็กแทนที่จะเล่นไม่สำเร็จ โดยสมบูรณ์
- แก้ไขข้อบกพร่องที่
- DRM:
- ขยายการแก้ปัญหาสำหรับ URL ของใบอนุญาต ClearKey
https://default.url
ที่ไม่ถูกต้องไปยัง API 33 ขึ้นไป (ก่อนหน้านี้การแก้ปัญหาใช้ได้กับ API 33 เท่านั้น) (#837) - แก้ไข
ERROR_DRM_SESSION_NOT_OPENED
เมื่อเปลี่ยนจากเนื้อหาที่เข้ารหัสเป็นเนื้อหาที่ไม่ได้เข้ารหัสโดยไม่มี Surface ที่แนบมากับเพลเยอร์ ข้อผิดพลาดเกิดจาก การใช้ตัวถอดรหัสที่ปลอดภัยอย่างไม่ถูกต้องเพื่อเล่นเนื้อหาที่ไม่มีการเข้ารหัส
- ขยายการแก้ปัญหาสำหรับ URL ของใบอนุญาต ClearKey
- เซสชัน:
- ใส่คีย์และค่าที่กำหนดเองใน
MediaMetadataCompat
toMediaMetadata.extras
และMediaMetadata.extras
toMediaMetadataCompat
(#756, #802) - แก้ไขการออกอากาศ
notifyChildrenChanged
สำหรับคอนโทรลเลอร์เวอร์ชันเดิม (#644) - แก้ไขข้อบกพร่องที่การตั้งเวลาเป็นค่าลบสำหรับตัวจับเวลา
setWhen
ที่ปิดใช้แล้ว ของการแจ้งเตือนทำให้เกิดข้อขัดข้องในอุปกรณ์บางรุ่น (#903) - แก้ไข
IllegalStateException
เมื่อตัวควบคุมการแจ้งเตือนสื่อ เชื่อมต่อไม่เสร็จเมื่อมีการขออัปเดตการแจ้งเตือนครั้งแรก (#917)
- ใส่คีย์และค่าที่กำหนดเองใน
- UI:
- ส่วนขยาย DASH
- แยกวิเคราะห์ "f800" เป็นจำนวนช่อง 5 ช่องสำหรับ Dolby ในไฟล์ Manifest DASH (#688)
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- ส่วนขยาย Cast
- ล้างข้อมูลการสร้าง
Timeline
เพื่อไม่ให้แอปขัดข้องเมื่อโหลด สื่อไม่สำเร็จในอุปกรณ์แคสต์ (#708)
- ล้างข้อมูลการสร้าง
เวอร์ชัน 1.2.0
15 พฤศจิกายน 2023
- คลังทั่วไป
- เพิ่ม
@Nullable Throwable
พารามิเตอร์ลงในเมธอดในอินเทอร์เฟซLog.Logger
พารามิเตอร์message
ของเมธอดเหล่านี้จะไม่มีข้อมูลเกี่ยวกับThrowable
ที่ส่งไปยังเมธอดLog.{d,i,w,e}()
อีกต่อไป ดังนั้นการติดตั้งใช้งานจะต้องผนวกข้อมูลนี้ด้วยตนเองหากต้องการ (อาจใช้Logger.appendThrowableString(String, Throwable)
) - แก้ไขปัญหาความเข้ากันได้ของ Kotlin ที่ระบบไม่ตรวจหาพารามิเตอร์ประเภททั่วไปที่ยอมรับค่า Null
และประเภทองค์ประกอบอาร์เรย์ที่ยอมรับค่า Null ว่าเป็นค่า Null ตัวอย่าง
คือพารามิเตอร์เมธอด
TrackSelectorResult
และSimpleDecoder
(#6792) - เปลี่ยนลักษณะการทำงานของ UI และการแจ้งเตือนเริ่มต้นใน
Util.shouldShowPlayButton
เพื่อแสดงปุ่ม "เล่น" ขณะที่การเล่น ถูกระงับชั่วคราว (เช่น เนื่องจากสูญเสียโฟกัสเสียงชั่วคราว) คุณยังคงใช้ลักษณะการทำงานเดิมได้โดยใช้PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
หรือMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213) - อัปเกรด
androidx.annotation:annotation-experimental
เป็น1.3.1
เพื่อแก้ไข https://issuetracker.google.com/251172715 - ย้าย
ExoPlayer.setAudioAttributes
ไปยังอินเทอร์เฟซPlayer
- เพิ่ม
- ExoPlayer:
- แก้ไขปัญหาการกรอในสตรีม AC4 ที่เกิดจากการระบุตัวอย่าง ที่ถอดรหัสอย่างเดียวไม่ถูกต้อง (#11000)
- เพิ่มการระงับการเล่นในอุปกรณ์เอาต์พุตเสียงที่ไม่เหมาะสม (เช่น ลำโพงในตัวบนอุปกรณ์ Wear OS) เมื่อเปิดใช้ฟีเจอร์นี้ผ่าน
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
ระบบจะอัปเดตเหตุผลในการระงับการเล่นเป็นPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
หากมีการพยายามเล่น เมื่อไม่มีเอาต์พุตเสียงที่เหมาะสม หรือหากเอาต์พุตที่เหมาะสมทั้งหมดถูกตัดการเชื่อมต่อระหว่างการเล่น ระบบจะนำสาเหตุของการระงับออกเมื่อเชื่อมต่อเอาต์พุตที่เหมาะสม - เพิ่ม
MediaSource.canUpdateMediaItem
และMediaSource.updateMediaItem
เพื่อยอมรับการอัปเดตMediaItem
หลังจากสร้างผ่านPlayer.replaceMediaItem(s)
- อนุญาตการอัปเดต
MediaItem
สำหรับคลาสMediaSource
ทั้งหมดที่ไลบรารี ระบุผ่านPlayer.replaceMediaItem(s)
(#33, #9978) - เปลี่ยนชื่อ
MimeTypes.TEXT_EXOPLAYER_CUES
เป็นMimeTypes.APPLICATION_MEDIA3_CUES
- เพิ่ม
PngExtractor
ที่ส่งและอ่านไฟล์ PNG ทั้งหมดลงในTrackOutput
เป็นตัวอย่างเดียว - ปรับปรุง
SequenceableLoader.continueLoading(long)
ในอินเทอร์เฟซSequenceableLoader
เพื่อSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
LoadingInfo
มีพารามิเตอร์เพิ่มเติม ซึ่งรวมถึงplaybackSpeed
และlastRebufferRealtimeMs
นอกเหนือจากplaybackPositionUs
ที่มีอยู่ - ปรับปรุง
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
เมธอด ในอินเทอร์เฟซChunkSource
เพื่อChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
- เพิ่มฟิลด์เพิ่มเติมลงในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD): buffer
starvation (
bs
), deadline (dl
), playback rate (pr
) และ startup (su
) (#8699) - เพิ่มบิตดีปของความสว่างและสีลงใน
ColorInfo
(#491) - เพิ่มฟิลด์เพิ่มเติมลงในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD): คำขอออบเจ็กต์ถัดไป (
nor
) และคำขอช่วงถัดไป (nrr
) (#8699) - เพิ่มฟังก์ชันการทำงานเพื่อส่งข้อมูล Common Media Client Data (CMCD) โดยใช้ พารามิเตอร์การค้นหา (#553)
- แก้ไข
ConcurrentModificationException
ในExperimentalBandwidthMeter
(#612) - เพิ่มพารามิเตอร์
MediaPeriodId
ไปยังCompositeMediaSource.getMediaTimeForChildMediaTime
- รองรับ
ClippingMediaSource
(และแหล่งที่มาอื่นๆ ที่มีออฟเซ็ตเวลาช่วง/หน้าต่าง) ในConcatenatingMediaSource2
(#11226) - เปลี่ยน
BaseRenderer.onStreamChanged()
เพื่อรับอาร์กิวเมนต์MediaPeriodId
ด้วย
- Transformer
- แยกวิเคราะห์ข้อมูลการหมุน EXIF สำหรับอินพุตรูปภาพ
- นำ
TransformationRequest.HdrMode
ประเภทคำอธิบายประกอบและค่าคงที่ที่เกี่ยวข้องออก โปรดใช้Composition.HdrMode
และค่าคงที่ที่เกี่ยวข้อง แทน - ลดความซับซ้อนของ
OverlaySettings
เพื่อแก้ไขปัญหาการหมุน - เปลี่ยนพารามิเตอร์
frameRate
และdurationUs
ของSampleConsumer.queueInputBitmap
เป็นTimestampIterator
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
เพื่ออนุญาตหรือไม่อนุญาตการดัดแปลงที่ไม่ราบรื่นอย่างชัดเจน ค่าเริ่มต้น จะยังคงเป็นลักษณะการทำงานปัจจุบันของtrue
- เพิ่ม
- โปรแกรมแยกข้อมูล
- MPEG-TS: ตรวจสอบว่าเฟรมสุดท้ายได้รับการแสดงผลโดยการส่งหน่วยเข้าถึงสุดท้ายของสตรีมไปยังคิวตัวอย่าง (#7909)
- แก้ไขการสะกดคำผิดเมื่อกำหนด
rotationDegrees
เปลี่ยนprojectionPosePitch
เป็นprojectionPoseRoll
(#461) - ยกเลิกสมมติฐานที่ว่าสามารถตรวจสอบอินสแตนซ์
Extractor
โดยตรงด้วยinstanceof
หากต้องการเข้าถึงรายละเอียดการใช้งานของExtractor
ในรันไทม์ คุณต้องเรียกใช้Extractor.getUnderlyingInstance
ก่อน - เพิ่ม
BmpExtractor
- เพิ่ม
WebpExtractor
- เพิ่ม
HeifExtractor
- เพิ่มการรองรับ QuickTime แบบคลาสสิก
ลงใน
Mp4Extractor
- เสียง:
- เพิ่มการรองรับ PCM แบบบิ๊กเอนเดียน 24/32 บิตใน MP4 และ Matroska รวมถึงแยกวิเคราะห์
การเข้ารหัส PCM สำหรับ
lpcm
ใน MP4 - เพิ่มการรองรับการแยกเสียง Vorbis ใน MP4
- เพิ่ม
AudioSink.getFormatOffloadSupport(Format)
ที่ดึงข้อมูลระดับ การรองรับการออฟโหลดที่ Sink สามารถให้สำหรับรูปแบบผ่านDefaultAudioOffloadSupportProvider
โดยจะแสดงผลAudioOffloadSupport
ใหม่ที่มีisFormatSupported
,isGaplessSupported
และisSpeedChangeSupported
- เพิ่ม
AudioSink.setOffloadMode()
ซึ่งจะกำหนดค่าการออฟโหลด ในซิงก์เสียง ค่าเริ่มต้นคือAudioSink.OFFLOAD_MODE_DISABLED
- คุณเปิดใช้การออฟโหลดได้ผ่าน
setAudioOffloadPreference
ในTrackSelectionParameters
หากตั้งค่าให้เปิดใช้ อุปกรณ์รองรับการออฟโหลดสำหรับรูปแบบ และการเลือกแทร็กเป็น แทร็กเสียงเดียว ระบบจะเปิดใช้การออฟโหลดเสียง - หากตั้งค่า
audioOffloadModePreference
เป็นAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
DefaultTrackSelector
จะเลือกแทร็กเสียงก็ต่อเมื่อรูปแบบของแทร็กนั้นรองรับการออฟโหลดเท่านั้น หากไม่รองรับแทร็กเสียง ในการออฟโหลด ระบบจะไม่เลือกแทร็กใดๆ - ปิดใช้การรองรับการเล่นแบบไม่ขาดตอนสำหรับการออฟโหลดเมื่อเป็น API ระดับต่ำกว่า 33 เนื่องจาก ปัญหาตำแหน่งการเล่นหลังจากเปลี่ยนแทร็ก
- นำพารามิเตอร์
enableOffload
ออกจาก ลายเซ็นของเมธอดDefaultRenderersFactory.buildAudioSink
- นำวิธีการ
DefaultAudioSink.Builder.setOffloadMode
ออก - Remove intdef value
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - เพิ่มการรองรับข้อมูลเมตาแบบเล่นต่อเนื่องของ Opus ในระหว่างการเล่นที่ออฟโหลด
- อนุญาตการกู้คืนโปรแกรมแสดงผลโดยการปิดใช้การออฟโหลดหากเขียนไม่สำเร็จในครั้งแรก (#627)
- เปิดใช้การตั้งเวลาการออฟโหลดโดยค่าเริ่มต้นสำหรับการเล่นที่ออฟโหลดเฉพาะเสียง
- ลบ
ExoPlayer.experimentalSetOffloadSchedulingEnabled
และAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
- เปลี่ยนชื่อ
onExperimentalSleepingForOffloadChanged
เป็นonSleepingForOffloadChanged
และonExperimentalOffloadedPlayback
เป็นonOffloadedPlayback
- ย้ายโหมดการส่งผ่านข้อมูลเสียงที่เกี่ยวข้อง
TrackSelectionParameters
อินเทอร์เฟซ และคำจำกัดความไปยังคลาสAudioOffloadPreferences
ภายใน - เพิ่มการเรียกกลับ
onAudioTrackInitialized
และonAudioTrackReleased
ไปยังAnalyticsListener
,AudioRendererEventListener
และAudioSink.Listener
- แก้ไขปัญหาการล้นบัฟเฟอร์เสียงของ DTS Express (#650)
- แก้ไขข้อบกพร่องที่การตรวจสอบความสามารถสำหรับ E-AC3-JOC ทำให้เกิดข้อผิดพลาด
IllegalArgumentException
(#677)
- เพิ่มการรองรับ PCM แบบบิ๊กเอนเดียน 24/32 บิตใน MP4 และ Matroska รวมถึงแยกวิเคราะห์
การเข้ารหัส PCM สำหรับ
- วิดีโอ
- อนุญาตให้
MediaCodecVideoRenderer
ใช้VideoFrameProcessor.Factory
ที่กำหนดเอง - แก้ไขข้อบกพร่องที่ทำให้แสดงผลเฟรมแรกไม่ได้หากสตรีมเสียง เริ่มต้นด้วยการประทับเวลาที่เป็นค่าลบ (#291)
- อนุญาตให้
- ข้อความ:
- นำ
ExoplayerCuesDecoder
ออก ตอนนี้TextRenderer
จะจัดการแทร็กข้อความที่มีsampleMimeType = application/x-media3-cues
โดยตรงโดยไม่ต้องมีอินสแตนซ์SubtitleDecoder
- นำ
- ข้อมูลเมตา
MetadataDecoder.decode
จะไม่เรียกใช้สำหรับตัวอย่าง "ถอดรหัสเท่านั้น" อีกต่อไป เนื่องจากต้องมีการติดตั้งใช้งานที่แสดงผลเป็น Null อยู่แล้ว
- ผลลัพธ์
- เพิ่ม
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
การป้อนข้อมูลบิตแมปการจัดคิวตามการประทับเวลา - เปลี่ยน
VideoFrameProcessor.registerInputStream()
เป็นแบบไม่บล็อก แอปต้องใช้VideoFrameProcessor.Listener#onInputStreamRegistered()
- เปลี่ยนพารามิเตอร์
frameRate
และdurationUs
ของVideoFrameProcessor.queueInputBitmap
เป็นTimestampIterator
- เพิ่ม
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่สตรีมแบบสด DASH แบบหลายช่วงเวลาซึ่งไม่ใช่รายการแรก ในเพลย์ลิสต์อาจทำให้เกิดข้อยกเว้น (#571)
- ปล่อย StreamManager ก่อนโทรหา
AdsLoader.destroy()
- อัปเกรด IMA SDK เป็นเวอร์ชัน 3.31.0
- เซสชัน:
- ตั้งค่าลักษณะการทำงานของบริการที่ทำงานอยู่เบื้องหน้าของการแจ้งเตือนเป็น
FOREGROUND_SERVICE_IMMEDIATE
ในDefaultMediaNotificationProvider
(#167) - ใช้เฉพาะ
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
API 31 ขึ้นไปเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับ API ที่เลิกใช้งานแล้วในอุปกรณ์ Samsung (#167) - ใช้ตัวควบคุมการแจ้งเตือนสื่อเป็นพร็อกซีเพื่อตั้งค่าคำสั่งที่ใช้ได้ และเลย์เอาต์ที่กำหนดเองซึ่งใช้เพื่อสร้างการแจ้งเตือนและเซสชัน แพลตฟอร์ม
- แปลงเหตุการณ์ปุ่มสื่อที่ได้รับจาก
MediaSessionService.onStartCommand()
ภายใน Media3 แทนที่จะกำหนดเส้นทาง ไปยังเซสชันแพลตฟอร์มและกลับไปที่ Media3 ด้วยวิธีนี้ ผู้โทร ตัวควบคุมจะเป็นตัวควบคุมการแจ้งเตือนสื่อเสมอ และแอปจะ จดจำการโทรที่มาจากการแจ้งเตือนได้อย่างง่ายดายในลักษณะเดียวกันใน ระดับ API ที่รองรับทั้งหมด - แก้ไขข้อบกพร่องที่
MediaController.getCurrentPosition()
ไม่เลื่อนไปข้างหน้า เมื่อเชื่อมต่อกับMediaSessionCompat
รุ่นเดิม - เพิ่ม
MediaLibrarySession.getSubscribedControllers(mediaId)
เพื่อความสะดวก - ลบล้าง
MediaLibrarySession.Callback.onSubscribe()
เพื่อยืนยัน ความพร้อมใช้งานของรหัสหลักที่ตัวควบคุมสมัครใช้ หากสำเร็จ ระบบจะยอมรับการสมัครใช้บริการและเรียกใช้notifyChildrenChanged()
ทันทีเพื่อแจ้งให้เบราว์เซอร์ทราบ (#561) - เพิ่มโมดูลการสาธิตเซสชันสำหรับ Automotive OS และเปิดใช้การสาธิตเซสชันสำหรับ Android Auto
- อย่าตั้งค่าคิวของเซสชันเฟรมเวิร์กเมื่อ
COMMAND_GET_TIMELINE
ไม่พร้อมใช้งานสำหรับตัวควบคุม การแจ้งเตือนสื่อ เมื่อ Android Auto เป็นตัวควบคุมไคลเอ็นต์ที่อ่านจากเซสชันเฟรมเวิร์ก จะส่งผลให้ปุ่มqueue
ใน UI ของ Android Auto ไม่แสดง (#339) - ใช้
DataSourceBitmapLoader
แทนSimpleBitmapLoader
โดยค่าเริ่มต้น (#271, #327) - เพิ่ม
MediaSession.Callback.onMediaButtonEvent(Intent)
ที่อนุญาตให้แอป ลบล้างการจัดการเหตุการณ์ปุ่มสื่อเริ่มต้น
- ตั้งค่าลักษณะการทำงานของบริการที่ทำงานอยู่เบื้องหน้าของการแจ้งเตือนเป็น
- UI:
- เพิ่มการติดตั้งใช้งาน
Player.Listener
สำหรับอุปกรณ์ Wear OS ที่จัดการ การระงับการเล่นเนื่องจากPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
โดย เปิดกล่องโต้ตอบของระบบเพื่อให้ผู้ใช้เชื่อมต่อเอาต์พุตเสียงที่เหมาะสม (เช่น หูฟังบลูทูธ) ผู้ฟังจะเล่นต่อโดยอัตโนมัติ หากเชื่อมต่ออุปกรณ์ที่เหมาะสมภายในระยะหมดเวลาที่กำหนดค่าได้ (ค่าเริ่มต้นคือ 5 นาที)
- เพิ่มการติดตั้งใช้งาน
- การดาวน์โหลด
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้า "การซิงค์ข้อมูล" สำหรับ
DownloadService
เพื่อ ความเข้ากันได้กับ Android 14 เมื่อใช้บริการนี้ แอปจะต้อง เพิ่มdataSync
เป็นforegroundServiceType
ในไฟล์ Manifest และเพิ่มสิทธิ์FOREGROUND_SERVICE_DATA_SYNC
(#11239) ด้วย
- ประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้า "การซิงค์ข้อมูล" สำหรับ
- ส่วนขยาย HLS:
- รีเฟรชเพลย์ลิสต์สด HLS โดยใช้ช่วงเวลาที่คำนวณจากเวลาเริ่มต้นการโหลดครั้งล่าสุดแทนเวลาที่โหลดเสร็จสิ้นครั้งล่าสุด (#663)
- ส่วนขยาย DASH
- อนุญาตให้มีตัวระบุ DASH เดียวกันหลายรายการใน URL เทมเพลตของกลุ่ม
- เพิ่มการรองรับการแยกวิเคราะห์คำบรรยายแทนเสียงในระหว่างการดึงข้อมูลในเวอร์ชันทดลอง ซึ่งรองรับการผสานคำบรรยายที่ทับซ้อนกันได้ดีขึ้น รวมถึง
แก้ปัญหาการกะพริบเมื่อเปลี่ยนระหว่างส่วนของคำบรรยาย คุณ
เปิดใช้ฟีเจอร์นี้ได้โดยใช้
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
(#288)
- ส่วนขยาย RTSP
- แก้ไข Race Condition ที่อาจทำให้เกิด
IndexOutOfBoundsException
เมื่อ เปลี่ยนไปใช้ TCP หรือการเล่นหยุดชะงักในบางสถานการณ์ - ตรวจสอบสถานะในการตั้งค่า RTSP เมื่อแสดงสถานะการโหลดของ
RtspMediaPeriod
(#577) - ไม่สนใจวิธีการคำขอ Rtsp ที่กำหนดเองในส่วนหัวสาธารณะของการตอบกลับ Options (#613)
- ใช้ค่าระยะหมดเวลาของคำตอบการตั้งค่า RTSP ในช่วงเวลาของการส่ง คำขอตัวเลือก RTSP แบบ Keep-Alive (#662)
- แก้ไข Race Condition ที่อาจทำให้เกิด
- ส่วนขยายตัวถอดรหัส (FFmpeg, VP9, AV1, MIDI ฯลฯ)
- เปิดตัวโมดูลตัวถอดรหัส MIDI ซึ่งรองรับการเล่น ไฟล์ MIDI มาตรฐานโดยใช้ไลบรารี Jsyn เพื่อสังเคราะห์เสียง
- เพิ่ม
DecoderOutputBuffer.shouldBeSkipped
เพื่อทำเครื่องหมายบัฟเฟอร์เอาต์พุตโดยตรง ซึ่งไม่จำเป็นต้องแสดง เราขอแนะนำให้ใช้C.BUFFER_FLAG_DECODE_ONLY
แทนC.BUFFER_FLAG_DECODE_ONLY
ซึ่งจะเลิกใช้งานแล้ว - เพิ่ม
Decoder.setOutputStartTimeUs
และSimpleDecoder.isAtLeastOutputStartTimeUs
เพื่ออนุญาตให้ตัวถอดรหัสทิ้ง ตัวอย่างที่ถอดรหัสได้อย่างเดียว ก่อนเวลาเริ่มต้น ควรใช้ตัวเลือกนี้แทนBuffer.isDecodeOnly
ซึ่งจะเลิกใช้งาน - แก้ไขข้อบกพร่องในการเผยแพร่ชิ้นงานตัวถอดรหัส MIDI ไปยังที่เก็บ Maven เปลี่ยนชื่ออาร์ติแฟกต์เป็น
media3-exoplayer-midi
(#734)
- ส่วนขยาย Leanback
- แก้ไขข้อบกพร่องที่การปิดใช้พื้นผิวอาจทำให้เกิด
ArithmeticException
ใน โค้ด Leanback (#617)
- แก้ไขข้อบกพร่องที่การปิดใช้พื้นผิวอาจทำให้เกิด
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- ทำให้
TestExoPlayerBuilder
และFakeClock
เข้ากันได้กับการทดสอบ UI ของ Espresso และการทดสอบ UI ของ Compose ซึ่งจะแก้ไขข้อบกพร่องที่ทำให้การเล่น ไม่แน่นอนระหว่างการโต้ตอบในมุมมอง Espresso หรือ Compose
- ทำให้
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
และTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
ออก ใช้Composition.Builder.setHdrMode(int)
และส่งComposition
ไปยังTransformer.start(Composition, String)
แทน - นำเมธอด
DownloadNotificationHelper.buildProgressNotification
ที่เลิกใช้งานแล้วออก ให้ใช้เมธอดที่ยังไม่เลิกใช้งานซึ่งใช้พารามิเตอร์notMetRequirements
แทน
- นำ
เวอร์ชัน 1.2.0-rc01
1 พฤศจิกายน 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-beta01
19 ตุลาคม 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-alpha02
29 กันยายน 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.2.0-alpha01
17 สิงหาคม 2023
ใช้เวอร์ชันเสถียร 1.2.0
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.1
16 สิงหาคม 2023
- คลังทั่วไป
- นำการขึ้นต่อกันของ
multidex
ที่เพิ่มเข้ามาโดยไม่ตั้งใจออกจากโมดูลทั้งหมด (#499)
- นำการขึ้นต่อกันของ
- ExoPlayer:
- แก้ไขปัญหาใน
PlaybackStatsListener
ที่มีการสร้างPlaybackStats
ที่ไม่ถูกต้อง หลังจากล้างเพลย์ลิสต์แล้ว - เพิ่มฟิลด์เพิ่มเติมในการบันทึกข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD): รูปแบบการสตรีม (sf), ประเภทสตรีม (st), เวอร์ชัน (v), บิตเรตสูงสุด (tb), ระยะเวลาของออบเจ็กต์ (d), ปริมาณงานที่วัดได้ (mtp) และประเภทออบเจ็กต์ (ot) (#8699)
- แก้ไขปัญหาใน
- เสียง:
- แก้ไขข้อบกพร่องที่
Player.getState()
ไม่เปลี่ยนเป็นSTATE_ENDED
เมื่อเล่นไฟล์ที่สั้นมาก (#538)
- แก้ไขข้อบกพร่องที่
- การส่งต่อเสียง:
- เพิ่มหน้าส่วนหัวของรหัส Ogg และส่วนหัวของความคิดเห็นลงในบิตสตรีมสำหรับการ เล่น Opus ที่ออฟโหลดตาม RFC 7845
- วิดีโอ
- H.265/HEVC: แก้ไขการแยกวิเคราะห์ข้อมูลรูปภาพอ้างอิงระยะสั้นและระยะยาวของ SPS
- ข้อความ:
- CEA-608: เปลี่ยนตรรกะการตัดคิวให้พิจารณาเฉพาะข้อความที่มองเห็น ก่อนหน้านี้จะมีการรวมการเยื้องและการชดเชยแท็บเมื่อจำกัดความยาวคิว ไม่เกิน 32 อักขระ (ซึ่งเป็นไปตามข้อกำหนดทางเทคนิค) (#11019)
- ส่วนขยาย IMA
- อัปเดตเวอร์ชัน IMA SDK เป็น 3.30.3
- เซสชัน:
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุ Getter เพื่อ
เข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
MediaController.Listener.onCustomLayoutChanged
แอปที่ ต้องการส่งเลย์เอาต์ที่กำหนดเองที่แตกต่างกันไปยังตัวควบคุม Media3 ที่แตกต่างกัน สามารถทำได้ในMediaSession.Callback.onConnect
โดยใช้AcceptedResultBuilder
เพื่อให้แน่ใจว่าเลย์เอาต์ที่กำหนดเองพร้อมใช้งานสำหรับ ตัวควบคุมเมื่อการเชื่อมต่อเสร็จสมบูรณ์ - แก้ไขกรณีที่
MediaLibraryServiceLegacyStub
ส่งข้อผิดพลาดไปยังResult
ที่ไม่รองรับฟีเจอร์นี้ ซึ่งทำให้เกิดUnsupportedOperationException
(#78) - แก้ไขวิธีที่
PlayerWrapper
สร้างVolumeProviderCompat
โดย กำหนดvolumeControlType
ผ่านทั้งคำสั่งเดิม (COMMAND_ADJUST_DEVICE_VOLUME
และCOMMAND_SET_DEVICE_VOLUME
) และคำสั่งใหม่ (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
และCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554)
- เพิ่มเลย์เอาต์ที่กำหนดเองลงในสถานะของตัวควบคุมและระบุ Getter เพื่อ
เข้าถึง เมื่อเลย์เอาต์ที่กำหนดเองมีการเปลี่ยนแปลง ระบบจะเรียกใช้
เวอร์ชัน 1.1.0
5 กรกฎาคม 2023
- คลังทั่วไป
- เพิ่มเหตุผลในการระงับสำหรับเส้นทางเสียงที่ไม่เหมาะสมและเล่นเมื่อพร้อม เปลี่ยนเหตุผลในการระงับว่ายาวเกินไป (#15)
- เพิ่มคำสั่งลงในเพลเยอร์
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- เพิ่มเมธอดที่โอเวอร์โหลดลงใน Player ซึ่งอนุญาตให้ผู้ใช้ระบุแฟล็กระดับเสียง
ได้ ดังนี้
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- เพิ่ม
Builder
สำหรับDeviceInfo
และเลิกใช้งานตัวสร้างที่มีอยู่ - เพิ่ม
DeviceInfo.routingControllerId
เพื่อระบุตัวควบคุมการกำหนดเส้นทาง ID สำหรับการเล่นระยะไกล - เพิ่ม
Player.replaceMediaItem(s)
เป็นทางลัดในการเพิ่มและนำ รายการออกในตำแหน่งเดียวกัน (#8046)
- ExoPlayer:
- อนุญาตให้ ExoPlayer ควบคุมวิธีการปรับระดับเสียงของอุปกรณ์ได้เฉพาะในกรณีที่
เลือกใช้โดยชัดแจ้งเท่านั้น ใช้
ExoPlayer.Builder.setDeviceVolumeControlEnabled
เพื่อเข้าถึงรายการต่อไปนี้getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
และsetDeviceVolume(int, int)
increaseDeviceVolume(int)
และincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
และdecreaseDeviceVolume(int, int)
- เพิ่ม
FilteringMediaSource
ที่อนุญาตให้กรองประเภทแทร็กที่ใช้ได้ จากMediaSource
- เพิ่มการรองรับการรวมข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ใน
คำขอขาออกของรูปแบบการสตรีมแบบปรับอัตราการส่งข้อมูล DASH, HLS และ
SmoothStreaming เราได้รวมช่อง
br
,bl
,cid
,rtp
และsid
เข้าไว้ด้วยกัน (#8699) โครงสร้าง API และเมธอด API- ระบบจะปิดใช้การบันทึก CMCD โดยค่าเริ่มต้น ให้ใช้
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
เพื่อเปิดใช้ - ระบบจะเปิดใช้คีย์ทั้งหมดโดยค่าเริ่มต้น ให้ลบล้าง
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
เพื่อกรอง คีย์ที่บันทึก - ลบล้าง
CmcdConfiguration.RequestConfig.getCustomData()
เพื่อเปิดใช้ การบันทึกคีย์ที่กำหนดเอง
- ระบบจะปิดใช้การบันทึก CMCD โดยค่าเริ่มต้น ให้ใช้
- เพิ่มการดำเนินการเพิ่มเติมในไฟล์ Manifest ของเดโมหลักเพื่อให้เริ่มแอปเดโมด้วยไฟล์
*.exolist.json
ที่กำหนดเองได้ง่ายขึ้น (#439) - เพิ่ม
ExoPlayer.setVideoEffects()
สำหรับการใช้Effect
ระหว่างการเล่นวิดีโอ - อัปเดต
SampleQueue
เพื่อจัดเก็บsourceId
เป็นlong
แทนที่จะเป็นint
ซึ่งจะเปลี่ยนลายเซ็นของเมธอดสาธารณะSampleQueue.sourceId
และSampleQueue.peekSourceId
- เพิ่มพารามิเตอร์ลงในเมธอด
LoadControl
shouldStartPlayback
และonTracksSelected
ที่อนุญาตให้เชื่อมโยงเมธอดเหล่านี้กับMediaPeriod
ที่เกี่ยวข้อง - เปลี่ยนลายเซ็นของ
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
โดยเพิ่มพารามิเตอร์ไทม์ไลน์ที่มี ช่วงเวลาที่มี UID ที่ใช้เป็นคีย์ในแผนที่ ซึ่งจำเป็นเพื่อหลีกเลี่ยง ปัญหาการทำงานพร้อมกันกับไลฟ์สดแบบหลายช่วง - เลิกใช้งาน
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
และBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
คุณเรียกใช้รูปแบบของเมธอดที่ไม่มีmediaTimeOffsetUs
แทนได้ โปรดทราบว่าแม้จะเป็นตัวแปรที่เลิกใช้งานแล้ว ระบบก็จะไม่เพิ่มออฟเซ็ตลงในstartTimeUs
และendTimeUs
ของออบเจ็กต์MediaLoadData
ที่จัดส่งโดย Dispatcher อีกต่อไป - เปลี่ยนชื่อ
ExoTrackSelection.blacklist
เป็นexcludeTrack
และisBlacklisted
เป็นisTrackExcluded
- แก้ไขลักษณะการทำงานที่ไม่สอดคล้องกันระหว่าง
ExoPlayer.setMediaItem(s)
กับaddMediaItem(s)
เมื่อเรียกใช้ในเพลย์ลิสต์ที่ว่างเปล่า
- อนุญาตให้ ExoPlayer ควบคุมวิธีการปรับระดับเสียงของอุปกรณ์ได้เฉพาะในกรณีที่
เลือกใช้โดยชัดแจ้งเท่านั้น ใช้
- Transformer
- นำ
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
ออก โปรดใช้ExoPlayerAssetLoader.Factory(MediaSource.Factory)
และTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
แทน - นำ
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
ออก - แก้ไขข้อบกพร่องที่ทำให้การเปลี่ยนรูปแบบค้าง (ทำให้เกิดการหมดเวลาของ Muxer ) หากมีการส่งสัญญาณสิ้นสุดสตรีมวิดีโอในขณะที่ เฟรมอินพุตอยู่ระหว่างการประมวลผล
- ค้นหาตัวแปลงรหัสผ่าน
MediaCodecList
แทนการใช้ยูทิลิตีfindDecoder/EncoderForFormat
เพื่อขยายการรองรับ - นำการกำหนดค่า B-Frame ใน
DefaultEncoderFactory
ออกเนื่องจาก ใช้ไม่ได้ในอุปกรณ์บางเครื่อง
- นำ
- การเลือกแทร็ก
- เพิ่ม
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
ซึ่งจะปิดใช้โดยค่าเริ่มต้น เมื่อเปิดใช้DefaultTrackSelector
จะทริกเกอร์การเลือกแทร็กใหม่เมื่อความสามารถของโปรแกรมแสดงผล มีการเปลี่ยนแปลง
- เพิ่ม
- โปรแกรมแยกข้อมูล
- เสียง:
- แก้ไขข้อบกพร่องที่การเล่นบางรายการล้มเหลวเมื่อเปิดใช้การทำอุโมงค์และ
AudioProcessors
ทำงานอยู่ เช่น สำหรับการตัดแบบไม่เว้นช่องว่าง (#10847) - แคปซูลเฟรม Opus ในแพ็กเก็ต Ogg ในการเล่นโดยตรง (การออฟโหลด)
- ประมาณตำแหน่งปัจจุบันขณะอยู่ในโหมดสลีประหว่างการกำหนดเวลาการออฟโหลด
- เพิ่ม
Renderer.release()
และAudioSink.release()
เพื่อเผยแพร่ ทรัพยากรเมื่อสิ้นสุดวงจรของผู้เล่น - ฟังการเปลี่ยนแปลงความสามารถด้านเสียงใน
DefaultAudioSink
เพิ่มพารามิเตอร์ที่จำเป็นcontext
ในตัวสร้างของDefaultAudioSink
ซึ่งDefaultAudioSink
จะลงทะเบียนเป็น Listener ของAudioCapabilitiesReceiver
และอัปเดตพร็อพเพอร์ตี้audioCapabilities
เมื่อได้รับแจ้งการเปลี่ยนแปลงความสามารถ - เผยแพร่การเปลี่ยนแปลงความสามารถด้านเสียงผ่านเหตุการณ์ใหม่
onAudioCapabilitiesChanged
ในอินเทอร์เฟซAudioSink.Listener
และ อินเทอร์เฟซใหม่RendererCapabilities.Listener
ซึ่งทริกเกอร์เหตุการณ์onRendererCapabilitiesChanged
- เพิ่ม
ChannelMixingAudioProcessor
เพื่อใช้การปรับขนาด/การมิกซ์กับช่องเสียง - เพิ่มค่า int ใหม่
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
ไปยังDecoderDiscardReasons
เพื่อทิ้งตัวถอดรหัสเสียงเมื่อโหมดบายพาส เป็นไปได้หลังจากความสามารถด้านเสียงเปลี่ยนแปลง - เพิ่มการรองรับการเล่นโดยตรงสำหรับ DTS Express และ DTS:X (#335)
- แก้ไขข้อบกพร่องที่การเล่นบางรายการล้มเหลวเมื่อเปิดใช้การทำอุโมงค์และ
- วิดีโอ
- ทำให้
MediaCodecVideoRenderer
รายงานVideoSize
ที่มีความกว้างและความสูงเป็น 0 เมื่อปิดใช้โปรแกรมแสดงผลPlayer.Listener.onVideoSizeChanged
จะเรียกใช้ตามนั้นเมื่อPlayer.getVideoSize()
มีการเปลี่ยนแปลง การเปลี่ยนแปลงนี้จะทำให้ขนาดวิดีโอของ ExoPlayer ที่มีMediaCodecVideoRenderer
มีความกว้างและความสูงเป็น 0 เมื่อPlayer.getCurrentTracks
ไม่รองรับวิดีโอ หรือยังไม่ได้กำหนดขนาดของแทร็กวิดีโอที่รองรับ
- ทำให้
- DRM:
- ลดระดับการมองเห็นของเมธอดภายในเท่านั้นหลายรายการใน
DefaultDrmSession
ซึ่งไม่คาดว่าจะมีการเรียกจากภายนอกแพ็กเกจ DRM ดังนี้void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- ลดระดับการมองเห็นของเมธอดภายในเท่านั้นหลายรายการใน
- Muxer:
- เพิ่มไลบรารี Muxer ใหม่ซึ่งใช้สร้างไฟล์คอนเทนเนอร์ MP4 ได้
- ส่วนขยาย IMA
- เปิดใช้สตรีม DASH แบบสดหลายช่วงเวลาสำหรับ DAI โปรดทราบว่าการใช้งานในปัจจุบันยังไม่รองรับการกรอสตรีมแบบสด (#10912)
- แก้ไขข้อบกพร่องที่ทำให้มีการแทรกกลุ่มโฆษณาใหม่ในไลฟ์สดเนื่องจาก ตำแหน่งเนื้อหาที่คำนวณแล้วในไทม์ไลน์ที่ต่อเนื่องจะแตกต่างกันเล็กน้อย
- เซสชัน:
- เพิ่มเมธอดตัวช่วย
MediaSession.getControllerForCurrentRequest
เพื่อ รับข้อมูลเกี่ยวกับคอนโทรลเลอร์ที่เรียกใช้เมธอดPlayer
อยู่ในขณะนี้ - เพิ่ม
androidx.media3.session.MediaButtonReceiver
เพื่อให้แอป ใช้การเล่นต่อด้วยเหตุการณ์ปุ่มสื่อที่ส่งโดย เช่น ชุดหูฟังบลูทูธ (#167) - เพิ่มการติดตั้งใช้งานเริ่มต้นใน
MediaSession.Callback.onAddMediaItems
เพื่อ อนุญาตให้ส่งMediaItems
ที่ขอไปยังPlayer
หากมีLocalConfiguration
(เช่น URI) (#282) - เพิ่มปุ่มคำสั่ง "ข้ามไปยังก่อนหน้า" และ "ข้ามไปยังถัดไป" ในมุมมองการแจ้งเตือนสื่อแบบกะทัดรัดโดยค่าเริ่มต้นสำหรับ Android 12 และต่ำกว่า (#410)
- เพิ่มการติดตั้งใช้งานเริ่มต้นใน
MediaSession.Callback.onAddMediaItems
เพื่อ อนุญาตให้ส่งMediaItems
ที่ขอไปยังPlayer
หากมีLocalConfiguration
(เช่น URI) (#282) - เพิ่มปุ่มคำสั่ง "ข้ามไปยังก่อนหน้า" และ "ข้ามไปยังถัดไป" ในมุมมองการแจ้งเตือนสื่อแบบกะทัดรัดโดยค่าเริ่มต้นสำหรับ Android 12 และต่ำกว่า (#410)
- เพิ่มเมธอดตัวช่วย
- UI:
- เพิ่มเมธอด Util
shouldShowPlayButton
และhandlePlayPauseButtonAction
เพื่อเขียนองค์ประกอบ UI ที่กำหนดเองด้วย ปุ่มเล่น/หยุดชั่วคราว
- เพิ่มเมธอด Util
- ส่วนขยาย RTSP
- ส่วนขยาย DASH
- นำออฟเซ็ตเวลาของสื่อออกจาก
MediaLoadData.startTimeMs
และMediaLoadData.endTimeMs
สำหรับสตรีม DASH แบบหลายช่วงเวลา - แก้ไขข้อบกพร่องที่การเตรียมแหล่งสื่อ DASH แบบสดที่มีหลายช่วงเวลาอีกครั้ง
ทำให้เกิดข้อผิดพลาด
IndexOutOfBoundsException
(#10838)
- นำออฟเซ็ตเวลาของสื่อออกจาก
- ส่วนขยาย HLS:
- เพิ่ม
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
เพื่อตั้งค่าการหมดเวลาให้เทรดการโหลดรอให้TimestampAdjuster
เริ่มต้น หากการเริ่มต้นไม่เสร็จสมบูรณ์ก่อนหมดเวลา ระบบจะแสดงPlaybackException
เพื่อหลีกเลี่ยง การเล่นที่หยุดชะงักอย่างต่อเนื่อง ระบบจะตั้งค่าการหมดเวลาเป็น 0 โดยค่าเริ่มต้น (#323)
- เพิ่ม
- โปรแกรมอรรถประโยชน์สำหรับการทดสอบ
- ตรวจสอบการไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของรูปแบบ URI ใน
DataSourceContractTest
- ตรวจสอบการไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของรูปแบบ URI ใน
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำตัวสร้าง
DefaultAudioSink
ออก แล้วใช้DefaultAudioSink.Builder
แทน - นำ
HlsMasterPlaylist
ออก แล้วใช้HlsMultivariantPlaylist
แทน - นำ
Player.stop(boolean)
ออก โปรดใช้Player.stop()
และPlayer.clearMediaItems()
(หากreset
เป็นtrue
) แทน - นำตัวสร้าง
SimpleCache
ที่เลิกใช้งานแล้ว 2 รายการออก ให้ใช้ตัวสร้างที่ยังไม่เลิกใช้งาน ซึ่งรับDatabaseProvider
แทนเพื่อประสิทธิภาพที่ดีขึ้น - นำตัวสร้าง
DefaultBandwidthMeter
ออก แล้วใช้DefaultBandwidthMeter.Builder
แทน - นำตัวสร้าง
DefaultDrmSessionManager
ออก แล้วใช้DefaultDrmSessionManager.Builder
แทน - นำตัวสร้าง
HttpDataSource.InvalidResponseCodeException
ที่เลิกใช้งานแล้ว 2 รายการออก ใช้ตัวสร้างที่ไม่ได้เลิกใช้งานซึ่งยอมรับฟิลด์เพิ่มเติม(cause
,responseBody
) เพื่อเพิ่มประสิทธิภาพการบันทึกข้อผิดพลาด - นำ
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
และDownloadHelper.forSmoothStreaming
ออก แล้วใช้DownloadHelper.forMediaItem
แทน - นำตัวสร้าง
DownloadService
ที่เลิกใช้งานแล้วออก ให้ใช้ตัวสร้างที่ยังไม่เลิกใช้งาน ซึ่งมีตัวเลือกในการระบุพารามิเตอร์channelDescriptionResourceId
- นำค่าคงที่ String ที่เลิกใช้งานแล้วสำหรับ Charsets (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
และUTF16LE_NAME
) ออก แล้วใช้ Kotlin Charsets จากแพ็กเกจkotlin.text
,java.nio.charset.StandardCharsets
หรือcom.google.common.base.Charsets
แทน - นำตัวสร้าง
WorkManagerScheduler
ที่เลิกใช้งานแล้วออก ให้ใช้ตัวสร้างที่ยังไม่เลิกใช้งานซึ่งมีตัวเลือกในการระบุพารามิเตอร์Context
แทน - นำเมธอดที่เลิกใช้งานแล้ว
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
และcreateSampleFormat
ซึ่งใช้เพื่อสร้างอินสแตนซ์ของคลาสFormat
ออก แต่ให้ใช้Format.Builder
เพื่อสร้างอินสแตนซ์ของFormat
แทน - นำเมธอดที่เลิกใช้งานแล้ว
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
และcopyWithVideoSize
ออก แล้วใช้เมธอดFormat.buildUpon()
และ setter แทน - นำ
ExoPlayer.retry()
ที่เลิกใช้งานแล้วออก แล้วใช้prepare()
แทน - นำตัวสร้าง
DefaultTrackSelector
ที่เลิกใช้งานแล้วซึ่งไม่มีอาร์กิวเมนต์ออก แล้วใช้DefaultTrackSelector(Context)
แทน - นำตัวสร้าง
OfflineLicenseHelper
ที่เลิกใช้งานแล้วออก แล้วใช้OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
แทน - นำตัวสร้าง
DownloadManager
ที่เลิกใช้งานแล้วออก ให้ใช้ตัวสร้าง ที่รับExecutor
แทน - นำตัวสร้าง
Cue
ที่เลิกใช้งานแล้วออก แล้วใช้Cue.Builder
แทน - นำตัวสร้าง
OfflineLicenseHelper
ที่เลิกใช้งานแล้วออก แล้วใช้OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
แทน - นำเมธอด
AnalyticsListener
ที่เลิกใช้งานแล้ว 4 รายการออกonDecoderEnabled
ให้ใช้onAudioEnabled
และ/หรือonVideoEnabled
แทนonDecoderInitialized
ให้ใช้onAudioDecoderInitialized
และ/หรือonVideoDecoderInitialized
แทนonDecoderInputFormatChanged
ให้ใช้onAudioInputFormatChanged
และ/หรือonVideoInputFormatChanged
แทนonDecoderDisabled
ให้ใช้onAudioDisabled
และ/หรือonVideoDisabled
แทน
- นำ
Player.Listener.onSeekProcessed
และAnalyticsListener.onSeekProcessed
ที่เลิกใช้งานแล้วออก แล้วใช้onPositionDiscontinuity
กับDISCONTINUITY_REASON_SEEK
แทน - นำ
ExoPlayer.setHandleWakeLock(boolean)
ออก แล้วใช้setWakeMode(int)
แทน - นำ
DefaultLoadControl.Builder.createDefaultLoadControl()
ที่เลิกใช้งานแล้วออก แล้วใช้build()
แทน - นำ
MediaItem.PlaybackProperties
ที่เลิกใช้งานแล้วออก แล้วใช้MediaItem.LocalConfiguration
แทน ฟิลด์ที่เลิกใช้งานแล้วMediaItem.playbackProperties
ตอนนี้เป็นประเภทMediaItem.LocalConfiguration
- นำตัวสร้าง
เวอร์ชัน 1.1.0-rc01
21 มิถุนายน 2023
ใช้เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.1.0-beta01
7 มิถุนายน 2023
ใช้เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.1.0-alpha01
10 พฤษภาคม 2023
ใช้เวอร์ชันเสถียร 1.1.0
เวอร์ชัน 1.0.0
เวอร์ชัน 1.0.2
18 พฤษภาคม 2023
androidx.media3:media3-*:1.0.2
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.2 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.7
รุ่นนี้มีการเปลี่ยนแปลงต่อไปนี้ตั้งแต่รุ่น 1.0.1
- ไลบรารีหลัก
- เพิ่ม
Buffer.isLastSample()
ที่ระบุว่าBuffer
มีแฟล็กC.BUFFER_FLAG_LAST_SAMPLE
หรือไม่ - แก้ไขปัญหาที่เฟรมสุดท้ายอาจไม่ได้รับการแสดงผลหากมีการนำตัวอย่างสุดท้ายที่มีเฟรม ออกจากคิวโดยไม่ได้อ่านตัวอย่าง "สิ้นสุดสตรีม" (#11079)
- เพิ่ม
- โปรแกรมแยกข้อมูล
- แก้ไขการแยกวิเคราะห์ SPS ของ H.265 ในไฟล์ MPEG-TS โดยการนำตรรกะการแยกวิเคราะห์ ที่ตัวแยก RTSP และ MP4 ใช้ อยู่แล้วมาใช้ซ้ำ (#303)
- ข้อความ:
- SSA: เพิ่มการรองรับไฟล์ UTF-16 หากไฟล์เริ่มต้นด้วยเครื่องหมายลำดับไบต์ (#319)
- เซสชัน:
- แก้ไขปัญหาที่
MediaController
ไม่อัปเดตคำสั่งที่พร้อมใช้งาน เมื่อเชื่อมต่อกับMediaSessionCompat
รุ่นเดิมที่อัปเดต การดำเนินการ - แก้ไขข้อบกพร่องที่ทำให้
MediaLibraryService
ไม่แสดงค่า Null สำหรับ การเรียกจาก UI ของระบบไปยังCallback.onGetLibraryRoot
โดยมีparams.isRecent == true
ใน API 30 (#355) - แก้ไขปัญหาหน่วยความจำรั่วไหลของ
MediaSessionService
หรือMediaLibraryService
(#346) - แก้ไขข้อบกพร่องที่การอัปเดต
Timeline
และตำแหน่งร่วมกันในMediaSession
อาจทำให้MediaController
แสดงIllegalStateException
- แก้ไขปัญหาที่
เวอร์ชัน 1.0.1
18 เมษายน 2023
androidx.media3:media3-*:1.0.1
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.1 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.6
- ไลบรารีหลัก
- รีเซ็ตการลบล้างไลฟ์สดเป้าหมายเมื่อกรอไปยังตำแหน่งเริ่มต้น (#11051)
- แก้ไขข้อบกพร่องที่ทำให้สตรีมตัวอย่างที่ว่างเปล่าในสื่ออาจทำให้การเล่นค้าง
- เซสชัน:
- แก้ไขข้อบกพร่องที่ทำให้รายการในคิวที่เหมือนกันหลายรายการซึ่งเผยแพร่โดยรุ่นเดิม
MediaSessionCompat
ส่งผลให้เกิดข้อยกเว้นในMediaController
(#290) - เพิ่มการส่งต่อ
MediaSession.broadcastCustomCommand
ที่ขาดหายไปไปยังMediaControllerCompat.Callback.onSessionEvent
รุ่นเดิม (#293) - แก้ไขข้อบกพร่องในเรื่องที่การเรียกใช้
MediaSession.setPlayer
ไม่ได้อัปเดต คำสั่งที่ใช้ได้ - แก้ไขปัญหาที่ระบบไม่สนใจ
TrackSelectionOverride
อินสแตนซ์ที่ส่งจากMediaController
หากอ้างอิงกลุ่มที่มีFormat.metadata
(#296) - แก้ไขปัญหาที่
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
ต้องพร้อมใช้งานเพื่อเข้าถึงข้อมูลเมตาผ่านMediaSessionCompat
เดิม - แก้ไขปัญหาที่อินสแตนซ์
MediaSession
ในเธรดเบื้องหลังทำให้เกิดข้อขัดข้องเมื่อใช้ในMediaSessionService
(#318) - แก้ไขปัญหาที่ไลบรารีประกาศตัวรับปุ่มสื่อ โดยที่แอปไม่ได้ตั้งใจให้เป็นเช่นนั้น (#314)
- แก้ไขข้อบกพร่องที่ทำให้รายการในคิวที่เหมือนกันหลายรายการซึ่งเผยแพร่โดยรุ่นเดิม
- DASH:
- แก้ไขการจัดการไทม์ไลน์ของกลุ่มที่ว่างเปล่า (#11014)
- RTSP:
- ลองอีกครั้งด้วย TCP หากการตั้งค่า RTSP ด้วย UDP ล้มเหลวโดยมีข้อผิดพลาด RTSP 461 UnsupportedTransport (#11069)
เวอร์ชัน 1.0.0
22 มีนาคม 2023
androidx.media3:media3-*:1.0.0
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.5
ไม่มีการเปลี่ยนแปลงตั้งแต่เวอร์ชัน 1.0.0-rc02
เวอร์ชัน 1.0.0-rc02
2 มีนาคม 2023
androidx.media3:media3-*:1.0.0-rc02
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-rc02 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.4
- ไลบรารีหลัก
- การดาวน์โหลด
- กำหนดค่าความแตกต่างสูงสุดของเวลาเริ่มต้นของ 2 กลุ่มที่จะผสานได้ใน
SegmentDownloader
และคลาสย่อย (#248)
- กำหนดค่าความแตกต่างสูงสุดของเวลาเริ่มต้นของ 2 กลุ่มที่จะผสานได้ใน
- เสียง:
- วิดีโอ
- แมปรูปแบบ HEVC HDR10 ไปยัง
HEVCProfileMain10HDR10
แทนที่จะเป็นHEVCProfileMain10
- เพิ่มวิธีแก้ปัญหาสำหรับปัญหาเกี่ยวกับอุปกรณ์ใน Chromecast พร้อม Google TV และ Lenovo M10 FHD Plus ที่ทำให้ระบบทำเครื่องหมายสตรีม AVC ที่ 60fps ว่า ไม่รองรับ (#10898)
- แก้ไขปัญหาด้านประสิทธิภาพการปล่อยเฟรมเมื่อเล่นสื่อที่มีอัตราเฟรมสูงกว่าอัตราการรีเฟรชหน้าจอมาก
- แมปรูปแบบ HEVC HDR10 ไปยัง
- แคสต์
- แก้ไขปัญหาชั่วคราว
STATE_IDLE
เมื่อเปลี่ยนระหว่างรายการสื่อ (#245)
- แก้ไขปัญหาชั่วคราว
- RTSP:
- ดักจับ IllegalArgumentException ที่เกิดขึ้นในการแยกวิเคราะห์ข้อความตอบกลับ RTSP Describe ที่ไม่ถูกต้อง (#10971)
- เซสชัน:
- แก้ไขข้อบกพร่องที่ปุ่มเล่น/หยุดชั่วคราวของการแจ้งเตือนไม่อัปเดตตาม สถานะของเพลเยอร์ (#192)
- ส่วนขยาย IMA
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาเริ่มต้นไม่ได้
เนื่องจากไม่ได้รับ
LOADED
เหตุการณ์LOADED
แรก (และในกรณีที่ไม่มีโฆษณา เหตุการณ์นี้จะเป็นเหตุการณ์เดียว)
- แก้ไขข้อบกพร่องที่ทำให้สตรีม DAI ที่ไม่มีโฆษณาเริ่มต้นไม่ได้
เนื่องจากไม่ได้รับ
เวอร์ชัน 1.0.0-rc01
16 กุมภาพันธ์ 2023
androidx.media3:media3-*:1.0.0-rc01
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-rc01 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับการเปิดตัว ExoPlayer 2.18.3
- ไลบรารีหลัก
- ปรับแต่งตรรกะการจัดลำดับตัวถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากำหนดของ
MediaCodecSelector
แม้ว่าตัวถอดรหัสจะรายงานว่าอาจเล่นสื่อได้อย่างไม่มีประสิทธิภาพก็ตาม เช่น หากใช้ตัวเลือกเริ่มต้น ระบบจะเลือกใช้เครื่องมือถอดรหัสฮาร์ดแวร์ที่รองรับการทำงานเท่านั้นมากกว่าเครื่องมือถอดรหัสซอฟต์แวร์ที่รองรับรูปแบบอย่างเต็มที่ (#10604) - เพิ่ม
ExoPlayer.Builder.setPlaybackLooper
ที่ตั้งค่าเธรดการเล่นที่มีอยู่ ล่วงหน้าสำหรับอินสแตนซ์ ExoPlayer ใหม่ - อนุญาตให้ล้างข้อมูลผู้ช่วยของเครื่องมือจัดการการดาวน์โหลด (#10776)
- เพิ่มพารามิเตอร์ไปยัง
BasePlayer.seekTo
เพื่อระบุคำสั่งที่ใช้ สำหรับการกรอด้วย - ใช้ธีมเมื่อโหลด Drawable ใน API 21 ขึ้นไป (#220)
- เพิ่ม
ConcatenatingMediaSource2
ที่อนุญาตให้รวมรายการสื่อหลายรายการไว้ในหน้าต่างเดียว (#247)
- ปรับแต่งตรรกะการจัดลำดับตัวถอดรหัสของโปรแกรมแสดงผลเพื่อรักษาค่ากำหนดของ
- โปรแกรมแยกข้อมูล
- ส่ง
ParserException
แทนNullPointerException
หากตารางตัวอย่าง (stbl) ไม่มีคำอธิบายตัวอย่าง (stsd) ที่จำเป็นเมื่อแยกวิเคราะห์อะตอม trak - ข้ามตัวอย่างอย่างถูกต้องเมื่อกรอไปยังเฟรมที่ซิงค์โดยตรงใน fMP4 (#10941)
- ส่ง
- เสียง:
- ใช้บิตเรตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำ
สำหรับ
AudioTrack
ในการเล่นโดยตรง (ส่งผ่าน)
- ใช้บิตเรตของรูปแบบเสียงที่บีบอัดเพื่อคำนวณขนาดบัฟเฟอร์ขั้นต่ำ
สำหรับ
- ข้อความ:
- แก้ไขการส่งดัชนีที่ไม่ถูกต้อง (ค่าลบ) ไปยัง
TextRenderer
Subtitle.getEventTime
หากไฟล์คำบรรยายแทนเสียงไม่มีคิว - SubRip: เพิ่มการรองรับไฟล์ UTF-16 หากไฟล์เริ่มต้นด้วยเครื่องหมายลำดับไบต์
- แก้ไขการส่งดัชนีที่ไม่ถูกต้อง (ค่าลบ) ไปยัง
- ข้อมูลเมตา
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaType
เพื่อระบุประเภทเนื้อหาหรือประเภท โฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsable
แทนMediaMetadata.folderType
เราจะเลิกใช้งานประเภทโฟลเดอร์ใน รุ่นถัดไป
- DASH:
- เพิ่มการแยกวิเคราะห์แบบเต็มสำหรับชุดการดัดแปลงรูปภาพ รวมถึงจำนวนไทล์ (#3752)
- UI:
- เซสชัน:
- เพิ่มคลาส Abstract
SimpleBasePlayer
เพื่อช่วยใช้Player
อินเทอร์เฟซ สำหรับเพลเยอร์ที่กำหนดเอง - เพิ่มเมธอดตัวช่วยเพื่อแปลงโทเค็นเซสชันแพลตฟอร์มเป็น Media3
SessionToken
(#171) - ใช้
onMediaMetadataChanged
เพื่อทริกเกอร์การอัปเดตสื่อแพลตฟอร์ม เซสชัน (#219) - เพิ่มเซสชันสื่อเป็นอาร์กิวเมนต์ของ
getMediaButtons()
ของDefaultMediaNotificationProvider
และใช้รายการที่ไม่เปลี่ยนค่าเพื่อความชัดเจน (#216) - เพิ่ม
onSetMediaItems
callback listener เพื่อให้สามารถแก้ไข/ตั้งค่าMediaItem
รายการ ดัชนีเริ่มต้น และตำแหน่งตามเซสชันก่อนที่จะตั้งค่า ในเพลเยอร์ (#156) - หลีกเลี่ยงการตรวจหาการแตะสองครั้งสำหรับเหตุการณ์ปุ่มสื่อที่ไม่ใช่บลูทูธ (#233)
- ทำให้
QueueTimeline
มีความเสถียรมากขึ้นในกรณีที่สถานะเซสชันเดิมไม่น่าไว้วางใจ (#241)
- เพิ่มคลาส Abstract
- ข้อมูลเมตา
- แยกวิเคราะห์ค่าหลายค่าที่คั่นด้วยค่า Null จากเฟรม ID3 ตามที่ ID3 v2.4 อนุญาต
- เพิ่ม
MediaMetadata.mediaType
เพื่อระบุประเภทเนื้อหาหรือประเภท โฟลเดอร์ที่อธิบายโดยข้อมูลเมตา - เพิ่ม
MediaMetadata.isBrowsable
แทนMediaMetadata.folderType
เราจะเลิกใช้งานประเภทโฟลเดอร์ใน รุ่นถัดไป
- ส่วนขยาย Cast
- อัปเกรดเวอร์ชัน Cast SDK เป็น 21.2.0
- ส่วนขยาย IMA
- นำเครื่องมือฟังเพลเยอร์ของ
ImaServerSideAdInsertionMediaSource
on the application thread ออกเพื่อหลีกเลี่ยงปัญหาเกี่ยวกับเธรด - เพิ่มพร็อพเพอร์ตี้
focusSkipButtonWhenAvailable
ลงในImaServerSideAdInsertionMediaSource.AdsLoader.Builder
เพื่อขอ โฟกัสปุ่มข้ามบนอุปกรณ์ทีวีและตั้งค่าเป็น true โดยค่าเริ่มต้น - เพิ่มเมธอด
focusSkipButton()
ลงในImaServerSideAdInsertionMediaSource.AdsLoader
เพื่อ ขอโฟกัสปุ่มข้ามโดยอัตโนมัติ - อัปเดตเวอร์ชัน IMA SDK เป็น 3.29.0
- นำเครื่องมือฟังเพลเยอร์ของ
- แอปเดโม
- ขอสิทธิ์การแจ้งเตือนสำหรับการแจ้งเตือนการดาวน์โหลดที่รันไทม์ (#10884)
เวอร์ชัน 1.0.0-beta03
22 พฤศจิกายน 2022
androidx.media3:media3-*:1.0.0-beta03
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-beta03 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับการเปิดตัว ExoPlayer 2.18.2
- ไลบรารีหลัก
- เพิ่ม
ExoPlayer.isTunnelingEnabled
เพื่อตรวจสอบว่าเปิดใช้การทำอุโมงค์สำหรับ แทร็กที่เลือกในปัจจุบัน (#2518) หรือไม่ - เพิ่ม
WrappingMediaSource
เพื่อให้การห่อหุ้มMediaSource
รายการเดียวง่ายขึ้น (#7279) - ทิ้งบัฟเฟอร์ด้านหลังก่อนที่การเล่นจะหยุดชะงักเนื่องจากมีหน่วยความจำไม่เพียงพอ
- ปิดบล็อกการติดตาม "doSomeWork" เมื่อเปิดใช้การออฟโหลด
- แก้ไขปัญหาการติดตามเซสชันเมื่อกรอไปข้างหน้าอย่างรวดเร็วใน
PlaybackStatsListener
(#180) - ส่ง
onMediaItemTransition
การเรียกกลับseekToNext
ที่ขาดหายไปเมื่อเรียกใช้seekToPrevious
ในเพลย์ลิสต์ที่มีรายการเดียว (#10667) - เพิ่ม
Player.getSurfaceSize
ที่แสดงผลขนาดของพื้นผิวที่ วิดีโอแสดง - แก้ไขข้อบกพร่องที่การนำผู้ฟังออกในระหว่างการเผยแพร่เพลเยอร์อาจทำให้เกิด
IllegalStateException
(#10758)
- เพิ่ม
- สร้าง:
- บังคับใช้ขั้นต่ำ
compileSdkVersion
เพื่อหลีกเลี่ยงข้อผิดพลาดในการคอมไพล์ (#10684) - หลีกเลี่ยงการเผยแพร่บล็อกเมื่อรวมไว้ในการสร้าง Gradle อื่น
- บังคับใช้ขั้นต่ำ
- การเลือกแทร็ก
- แสดงแทร็กอื่นๆ แทน Dolby Vision หากจอแสดงผลไม่รองรับ (#8944)
- การดาวน์โหลด
- วิดีโอ
- ลองใช้ตัวถอดรหัสอื่นสำหรับ Dolby Vision หากจอแสดงผลไม่รองรับ (#9794)
- เสียง:
- ใช้
SingleThreadExecutor
สำหรับการเผยแพร่อินสแตนซ์AudioTrack
เพื่อหลีกเลี่ยงข้อผิดพลาด OutOfMemory เมื่อเผยแพร่เพลเยอร์หลายรายพร้อมกัน (#10057) - เพิ่ม
AudioOffloadListener.onExperimentalOffloadedPlayback
สำหรับ สถานะการออฟโหลด AudioTrack (#134) - ทำให้
AudioTrackBufferSizeProvider
เป็นอินเทอร์เฟซสาธารณะ - เพิ่ม
ExoPlayer.setPreferredAudioDevice
เพื่อตั้งค่าอุปกรณ์เอาต์พุตเสียงที่ต้องการ (#135) - เปลี่ยนชื่อ
androidx.media3.exoplayer.audio.AudioProcessor
เป็นandroidx.media3.common.audio.AudioProcessor
- แมปเสียง 8 แชแนลและ 12 แชแนลกับมาสก์แชแนล 7.1 และ 7.1.4 ตามลำดับใน Android ทุกเวอร์ชัน (#10701)
- ใช้
- ข้อมูลเมตา
MetadataRenderer
ตอนนี้กำหนดค่าให้แสดงข้อมูลเมตาได้ทันทีที่พร้อมใช้งาน สร้างอินสแตนซ์ด้วยMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
เพื่อระบุว่าตัวแสดงผลจะแสดงข้อมูลเมตาล่วงหน้าหรือ ซิงค์กับตำแหน่งของเพลเยอร์
- DRM:
- แก้ไขข้อบกพร่องในการติดตั้งใช้งาน ClearKey ของ Android 13 ที่แสดงผล URL ของใบอนุญาตที่ไม่ว่างเปล่าแต่ไม่ถูกต้อง
- แก้ไขข้อผิดพลาด
setMediaDrmSession failed: session not opened
เมื่อเปลี่ยน ระหว่างรูปแบบ DRM ในเพลย์ลิสต์ (เช่น Widevine เป็น ClearKey)
- ข้อความ:
- CEA-608: ตรวจสอบว่าระบบจัดการคำสั่งสวิตช์บริการในฟิลด์ 2 อย่างถูกต้อง (#10666)
- DASH:
- แยกวิเคราะห์
EventStream.presentationTimeOffset
จากไฟล์ Manifest (#10460)
- แยกวิเคราะห์
- UI:
- ใช้การลบล้างปัจจุบันของเพลเยอร์เป็นการตั้งค่าล่วงหน้าใน
TrackSelectionDialogBuilder
(#10429)
- ใช้การลบล้างปัจจุบันของเพลเยอร์เป็นการตั้งค่าล่วงหน้าใน
- เซสชัน:
- ตรวจสอบว่าได้เรียกใช้คำสั่งตามลำดับที่ถูกต้องเสมอ แม้ว่าบางคำสั่ง จะต้องมีการแก้ไขแบบไม่พร้อมกัน (#85)
- เพิ่ม
DefaultMediaNotificationProvider.Builder
เพื่อสร้างอินสแตนซ์DefaultMediaNotificationProvider
เครื่องมือสร้างสามารถกำหนดค่ารหัสการแจ้งเตือน รหัสแชแนลการแจ้งเตือน และชื่อแชแนลการแจ้งเตือนที่ผู้ให้บริการใช้ นอกจากนี้ ให้เพิ่มเมธอดDefaultMediaNotificationProvider.setSmallIcon(int)
เพื่อตั้งค่า ไอคอนขนาดเล็กของการแจ้งเตือน (#104) - ตรวจสอบว่าคำสั่งที่ส่งก่อน
MediaController.release()
ไม่ถูกทิ้ง (#99) SimpleBitmapLoader
สามารถโหลดบิตแมปจากfile://
URI (#108)- แก้ไขการยืนยันที่ทำให้
MediaController
ไม่สามารถกรอโฆษณาใน ระยะเวลาหนึ่งได้ (#122) - เมื่อการเล่นสิ้นสุดลง ระบบจะหยุด
MediaSessionService
จาก เบื้องหน้าและแสดงการแจ้งเตือนให้เริ่มเล่นรายการสื่อที่เล่นล่าสุดอีกครั้ง (#112) - อย่าเริ่มบริการที่ทำงานอยู่เบื้องหน้าด้วย PendingIntent สำหรับการหยุดชั่วคราว (#167)
- ซ่อน "ป้าย" ที่เชื่อมโยงกับการแจ้งเตือนที่สร้างโดย
DefaultNotificationProvider
ใน API 26 และ API 27 ด้วยตนเอง (ระบบจะซ่อนป้ายโดยอัตโนมัติใน API 28 ขึ้นไป) (#131) - แก้ไขข้อบกพร่องที่การเชื่อมต่อ Binder ที่ 2 จาก MediaSession เดิมไปยัง MediaController ของ Media3 ทำให้เกิด IllegalStateExceptions (#49)
- RTSP:
- IMA:
- ส่วนขยาย FFmpeg
- เพิ่มแฟล็กที่จำเป็นใหม่เพื่อลิงก์ไลบรารี FFmpeg กับ NDK 23.1.7779620 ขึ้นไป (#9933)
- ส่วนขยาย AV1
- อัปเดตเวอร์ชัน CMake เพื่อหลีกเลี่ยงปัญหาความไม่เข้ากันกับ Android Studio เวอร์ชันล่าสุด (#9933)
- ส่วนขยาย Cast
- ใช้
getDeviceInfo()
เพื่อระบุCastPlayer
เมื่อ ควบคุมการเล่นด้วยMediaController
(#142)
- ใช้
- Transformer
- เพิ่มตัวจับเวลาการตรวจสอบ Muxer เพื่อตรวจหาเมื่อการสร้างตัวอย่างเอาต์พุตช้าเกินไป
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Transformer.Builder.setOutputMimeType(String)
ออก มีการนำฟีเจอร์นี้ออกแล้ว ประเภท MIME จะเป็น MP4 เสมอเมื่อใช้ตัวมัลติเพล็กซ์เริ่มต้น
- นำ
เวอร์ชัน 1.0.0-beta02
21 กรกฎาคม 2022
androidx.media3:media3-*:1.0.0-beta02
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-beta02 มีคอมมิตเหล่านี้
รุ่นนี้สอดคล้องกับรุ่น ExoPlayer 2.18.1
- ไลบรารีหลัก
- ตรวจสอบว่าการเปลี่ยน
ShuffleOrder
ด้วยExoPlayer.setShuffleOrder
จะทำให้มีการเรียกใช้Player.Listener#onTimelineChanged
ด้วยreason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
(#9889) - สำหรับสื่อแบบ Progressive ให้รวมเฉพาะแทร็กที่เลือกไว้ในตำแหน่งที่บัฟเฟอร์ (#10361)
- อนุญาตให้ใช้เครื่องบันทึกที่กำหนดเองสำหรับเอาต์พุตบันทึกทั้งหมดของ ExoPlayer (#9752)
- แก้ไขการติดตั้งใช้งาน
setDataSourceFactory
ในDefaultMediaSourceFactory
ซึ่งใช้งานไม่ได้ในบางกรณี (#116)
- ตรวจสอบว่าการเปลี่ยน
- โปรแกรมแยกข้อมูล
- DASH:
- แยกวิเคราะห์ URL ของใบอนุญาต ClearKey จากไฟล์ Manifest (#10246)
- UI:
- ตรวจสอบว่า TalkBack ประกาศตัวเลือกความเร็วที่ใช้งานอยู่ใน เมนูควบคุมการเล่น (#10298)
- RTSP:
- เพิ่มการจัดการแพ็กเกต VP8 ที่แยกส่วน (#110)
- ส่วนขยาย Leanback
- ฟัง
playWhenReady
การเปลี่ยนแปลงในLeanbackAdapter
(10420)
- ฟัง
- แคสต์
เวอร์ชัน 1.0.0-beta01
16 มิถุนายน 2022
androidx.media3:media3-*:1.0.0-beta01
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-beta01 มีคอมมิตเหล่านี้
ซึ่งสอดคล้องกับการเปิดตัว ExoPlayer 2.18.0
- ไลบรารีหลัก
- เปิดใช้การรองรับการวินิจฉัยแพลตฟอร์ม Android ผ่าน
MediaMetricsManager
ExoPlayer จะส่งต่อเหตุการณ์การเล่นและ ข้อมูลประสิทธิภาพไปยังแพลตฟอร์ม ซึ่งจะช่วยให้ข้อมูลประสิทธิภาพของระบบและการแก้ไขข้อบกพร่องในอุปกรณ์ นอกจากนี้ Google อาจเก็บรวบรวมข้อมูลนี้ด้วย หากผู้ใช้อุปกรณ์เปิดใช้การแชร์ข้อมูลการใช้งานและการวินิจฉัย แอปสามารถเลือกไม่ให้มีส่วนร่วมในการวินิจฉัยแพลตฟอร์ม สำหรับ ExoPlayer ได้โดยใช้ExoPlayer.Builder.setUsePlatformDiagnostics(false)
- แก้ไขข้อบกพร่องที่ทำให้ระบบรีเซ็ตแทร็กบ่อยเกินไปเมื่อใช้
MergingMediaSource
เช่น เมื่อโหลดคำบรรยายแทนเสียงจากภายนอกและเปลี่ยนคำบรรยายแทนเสียงที่เลือกไว้กลางการเล่น(#10248) - หยุดตรวจหาประเภทเครือข่าย 5G-NSA ใน API 29 และ 30 การเล่นเหล่านี้ จะถือว่าใช้เครือข่าย 4G
- ไม่อนุญาตให้ส่ง
null
ไปยังMediaSource.Factory.setDrmSessionManagerProvider
และMediaSource.Factory.setLoadErrorHandlingPolicy
คุณส่งอินสแตนซ์ของDefaultDrmSessionManagerProvider
และDefaultLoadErrorHandlingPolicy
ได้อย่างชัดเจนหากจำเป็น - เพิ่ม
MediaItem.RequestMetadata
เพื่อแสดงข้อมูลเมตาที่จำเป็นต่อการเล่น สื่อเมื่อไม่ทราบLocalConfiguration
ที่แน่นอน นอกจากนี้ ให้นำMediaMetadata.mediaUrl
ออกด้วย เนื่องจากตอนนี้รวมอยู่ในRequestMetadata
แล้ว - เพิ่ม
Player.Command.COMMAND_SET_MEDIA_ITEM
เพื่อให้ผู้เล่นอนุญาต การตั้งค่าไอเทมเดียว
- เปิดใช้การรองรับการวินิจฉัยแพลตฟอร์ม Android ผ่าน
- การเลือกแทร็ก
- เปลี่ยน
TrackSelectionOverrides
ชั้นเรียนเป็นTrackSelectionParameters
และเลื่อนระดับTrackSelectionOverride
เป็นชั้นเรียนระดับบนสุด - เปลี่ยนชื่อ
TracksInfo
เป็นTracks
และTracksInfo.TrackGroupInfo
เป็นTracks.Group
นอกจากนี้ เรายังเปลี่ยนชื่อPlayer.getCurrentTracksInfo
และPlayer.Listener.onTracksInfoChanged
เป็นPlayer.getCurrentTracks
และPlayer.Listener.onTracksChanged
ด้วย ซึ่งรวมถึงการ "ยกเลิกการเลิกใช้งาน" ชื่อเมธอดPlayer.Listener.onTracksChanged
แต่มีประเภทพารามิเตอร์ที่ต่างกัน - เปลี่ยน
DefaultTrackSelector.buildUponParameters
และDefaultTrackSelector.Parameters.buildUpon
เพื่อแสดงผลDefaultTrackSelector.Parameters.Builder
แทนDefaultTrackSelector.ParametersBuilder
ที่เลิกใช้งานแล้ว - เพิ่ม
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
ซึ่งเปิดใช้อยู่โดยค่าเริ่มต้น เมื่อเปิดใช้DefaultTrackSelector
จะเลือกแทร็กเสียงที่มีจำนวนช่องไม่เกินความสามารถในการเอาต์พุตของอุปกรณ์ ในอุปกรณ์แบบพกพาDefaultTrackSelector
จะเลือกใช้รูปแบบเสียงสเตอริโอ/โมโนมากกว่ารูปแบบเสียงหลายช่องสัญญาณ เว้นแต่รูปแบบหลายช่องสัญญาณจะมีมิติ (Android 12L ขึ้นไป) หรือเป็นรูปแบบเสียงเซอร์ราวด์ Dolby นอกจากนี้ ในอุปกรณ์ที่รองรับการปรับเสียงตามตำแหน่งDefaultTrackSelector
จะตรวจสอบการเปลี่ยนแปลงในพร็อพเพอร์ตี้ Spatializer และทริกเกอร์การเลือกแทร็กใหม่เมื่อมีการเปลี่ยนแปลง อุปกรณ์ที่มีtelevision
โหมด UI จะได้รับการยกเว้นจากข้อจำกัดเหล่านี้ และระบบจะเลือกใช้รูปแบบที่มีจำนวนช่องสูงสุด หากต้องการเปิดใช้ฟีเจอร์นี้ ต้องสร้างอินสแตนซ์DefaultTrackSelector
ด้วยContext
- เปลี่ยน
- วิดีโอ
- เปลี่ยนชื่อ
DummySurface
เป็นPlaceholderSurface
- เพิ่มการรองรับ AV1 ลงใน
MediaCodecVideoRenderer.getCodecMaxInputSize
- เปลี่ยนชื่อ
- เสียง:
- ใช้การโฆษณาตัวถอดรหัสเสียง AC3 ของ LG ที่มีประเภท MIME ที่ไม่ใช่มาตรฐาน
- เปลี่ยนประเภทการคืนค่าของ
AudioAttributes.getAudioAttributesV21()
จากandroid.media.AudioAttributes
เป็นคลาส WrapperAudioAttributesV21
ใหม่ เพื่อป้องกันไม่ให้ ART ยืนยันช้าใน API < 21 - สอบถามแพลตฟอร์ม (API 29 ขึ้นไป) หรือถือว่าจำนวนช่องการเข้ารหัสเสียง สำหรับการส่งผ่านเสียงเมื่อไม่ได้ตั้งค่าจำนวนช่องเสียงของรูปแบบ ซึ่งเกิดขึ้นกับการเตรียม HLS แบบไม่มี Chunk (10204)
- กำหนดค่า
AudioTrack
ด้วยมาสก์ช่องAudioFormat.CHANNEL_OUT_7POINT1POINT4
หากตัวถอดรหัสส่งออกเสียง PCM แบบ 12 แชแนล (#10322
- DRM
- ตรวจสอบว่าเซสชัน DRM ได้รับการอัปเดตอย่างถูกต้องเสมอเมื่อมีการกรอ ทันทีหลังจากเปลี่ยนรูปแบบ (10274)
- ข้อความ:
- เปลี่ยน
Player.getCurrentCues()
เพื่อแสดงCueGroup
แทนList<Cue>
- SSA: รองรับการตั้งค่ารูปแบบ
OutlineColour
เมื่อBorderStyle == 3
(เช่นOutlineColour
ตั้งค่าพื้นหลังของคิว) (#8435) - CEA-708: แยกวิเคราะห์ข้อมูลเป็นบล็อกบริการหลายรายการและไม่สนใจบล็อกที่ไม่ได้ เชื่อมโยงกับหมายเลขบริการที่เลือกในปัจจุบัน
- นำ
RawCcExtractor
ออก ซึ่งใช้เพื่อจัดการรูปแบบคำบรรยายแทนเสียงภายในของ Google เท่านั้น
- เปลี่ยน
- โปรแกรมแยกข้อมูล
- UI:
- แก้ไขการนำส่งเหตุการณ์ไปยัง
OnClickListener
ที่ตั้งค่าไว้ในPlayerView
ในกรณีที่useController=false
(#9605) นอกจากนี้ ให้แก้ไข การนำส่งเหตุการณ์ไปยังOnLongClickListener
สำหรับการกำหนดค่ามุมมองทั้งหมดด้วย - แก้ไขการประมวลผลลำดับเหตุการณ์การแตะที่ออกจากขอบเขตของ
PlayerView
ก่อนACTION_UP
อย่างไม่ถูกต้องเป็นการคลิก (#9861) - แก้ไขปัญหาการช่วยเหลือพิเศษ
PlayerView
ที่การแตะอาจสลับการเล่น แทนที่จะซ่อนตัวควบคุม (#8627) - เขียน
TrackSelectionView
และTrackSelectionDialogBuilder
ใหม่เพื่อให้ทำงาน กับอินเทอร์เฟซPlayer
แทนExoPlayer
ซึ่งจะช่วยให้ใช้ มุมมองกับPlayer
การติดตั้งใช้งานอื่นๆ ได้ และนำ การอ้างอิงจากโมดูล UI ไปยังโมดูล ExoPlayer ออก นี่เป็นการ เปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง - ไม่แสดงแทร็กข้อความที่บังคับใน
PlayerView
ตัวเลือกแทร็ก และ เลือกแทร็กข้อความที่บังคับที่เหมาะสมไว้หากเลือก "ไม่มี" (#9432)
- แก้ไขการนำส่งเหตุการณ์ไปยัง
- DASH:
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
AudioChannelConfiguration
การดำเนินการนี้จะ เปิดใช้การส่งผ่านเสียงสำหรับสตรีม DTS อีกครั้ง (#10159) - ไม่อนุญาตการส่ง
null
ไปยังDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
คุณส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory
ได้อย่างชัดเจนหากจำเป็น
- แยกวิเคราะห์จำนวนช่องจากองค์ประกอบ DTS
- HLS:
- เปลี่ยนไปใช้การเตรียมข้อมูลแบบเป็นกลุ่มหากแอตทริบิวต์ CODECS ของเพลย์ลิสต์ไม่มีตัวแปลงสัญญาณเสียง (#10065)
- ไม่อนุญาตการส่ง
null
ไปยังHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
HlsMediaSource.Factory.setPlaylistParserFactory
และHlsMediaSource.Factory.setPlaylistTrackerFactory
คุณส่งอินสแตนซ์ของDefaultCompositeSequenceableLoaderFactory
,DefaultHlsPlaylistParserFactory
หรือการอ้างอิงถึงDefaultHlsPlaylistTracker.FACTORY
ได้อย่างชัดเจนหาก จำเป็น
- การสตรีมที่ราบรื่น
- ไม่อนุญาตการส่ง
null
ไปยังSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
คุณสามารถส่งอินสแตนซ์ ของDefaultCompositeSequenceableLoaderFactory
ได้อย่างชัดเจน หากจำเป็น
- ไม่อนุญาตการส่ง
- RTSP:
- เพิ่มโปรแกรมอ่าน RTP สำหรับ H263 (#63)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ MPEG4 (#35)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ HEVC (#36)
- เพิ่มโปรแกรมอ่าน RTP สำหรับ AMR ปัจจุบันรองรับเฉพาะสตรีม AMR แบบช่องเดียวและไม่แทรกสลับ ระบบไม่รองรับเพย์โหลด 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) - อัปเดตข้อมูลตำแหน่งเซสชันในไทม์ไลน์ change(#51)
- แก้ไข NPE ใน
MediaControllerImplBase
หลังจากปล่อยตัวควบคุม (#74)
- แทนที่
- การเล่นโฆษณา / IMA
- ลดอัตราการสำรวจโฆษณาจากทุกๆ 100 มิลลิวินาทีเป็นทุกๆ 200 มิลลิวินาที เพื่อให้สอดคล้องกับ คำแนะนำของ Media Rating Council (MRC)
- ส่วนขยาย FFmpeg
- อัปเดตเวอร์ชัน CMake เป็น
3.21.0+
เพื่อหลีกเลี่ยงข้อบกพร่องของ CMake ที่ทำให้การซิงค์ Gradle ของ Android Studio ล้มเหลว (#9933)
- อัปเดตเวอร์ชัน CMake เป็น
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
ออก โปรดใช้Player.Listener.onTracksChanged(Tracks)
แทน - นำ
Player.getCurrentTrackGroups
และPlayer.getCurrentTrackSelections
ออก โปรดใช้Player.getCurrentTracks
แทน นอกจากนี้ คุณยังใช้ExoPlayer.getCurrentTrackGroups
และExoPlayer.getCurrentTrackSelections
ต่อไปได้ แม้ว่าวิธีการเหล่านี้จะยังคง เลิกใช้งานแล้วก็ตาม - นำค่าคงที่
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
และDEFAULT_TRACK_SELECTOR_PARAMETERS
ออก โปรดใช้getDefaultTrackSelectorParameters(Context)
แทนหากเป็นไปได้ และDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
ในกรณีอื่นๆ - นำตัวสร้าง
DefaultTrackSelector(ExoTrackSelection.Factory)
ออก โปรดใช้DefaultTrackSelector(Context, ExoTrackSelection.Factory)
แทน - นำ
Transformer.Builder.setContext
ออก ควรส่งContext
ไปยังตัวสร้างTransformer.Builder
แทน
- นำ
เวอร์ชัน 1.0.0-alpha03
14 มีนาคม 2022
androidx.media3:media3-*:1.0.0-alpha03
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-alpha03 มีคอมมิตต่อไปนี้
ซึ่งสอดคล้องกับการเปิดตัว ExoPlayer 2.17.1
- เสียง:
- แก้ไขข้อผิดพลาดในการตรวจสอบความสามารถด้านเสียงสำหรับ Dolby Atmos (E-AC3-JOC) ใน HLS
- โปรแกรมแยกข้อมูล
- FMP4: แก้ไขปัญหาที่อาจมีการส่งออกข้อมูลเมตาของตัวอย่าง emsg ในลำดับที่ไม่ถูกต้องสำหรับสตรีมที่มีทั้งอะตอม emsg v0 และ v1 (#9996)
- ข้อความ:
- แก้ไขการโต้ตอบของ
SingleSampleMediaSource.Factory.setTrackId
และMediaItem.SubtitleConfiguration.Builder.setId
เพื่อจัดลำดับความสำคัญของฟิลด์SubtitleConfiguration
และกลับไปใช้ค่าFactory
หากไม่ได้ตั้งค่า (#10016)
- แก้ไขการโต้ตอบของ
- การเล่นโฆษณา
- แก้ไขการขาดหายของเสียงระหว่างช่วงโฆษณาในสตรีม HLS SSAI แบบสด
เวอร์ชัน 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) - นำคีย์ที่เป็นค่าว่างออกจาก
DefaultHttpDataSource#getResponseHeaders
- พักและลองอีกครั้งเมื่อสร้างอินสแตนซ์
MediaCodec
ไม่สำเร็จ ซึ่งจะช่วย แก้ปัญหาที่เกิดขึ้นในอุปกรณ์บางเครื่องเมื่อเปลี่ยนพื้นผิว จากตัวแปลงรหัสที่ปลอดภัยเป็นตัวแปลงรหัสอื่น (#8696) - เพิ่ม
MediaCodecAdapter.getMetrics()
เพื่ออนุญาตให้ผู้ใช้รับข้อมูลเมตริก จากMediaCodec
(#9766) - แก้ไขการแก้ปัญหาการขึ้นต่อกันของ Maven (#8353)
- ปิดใช้การปรับความเร็วอัตโนมัติสำหรับไลฟ์สดที่ไม่มีฟีเจอร์ที่มีเวลาในการตอบสนองต่ำและไม่มีการตั้งค่าความเร็วตามคำขอของผู้ใช้ (#9329)
- เปลี่ยนชื่อ
DecoderCounters#inputBufferCount
เป็นqueuedInputBufferCount
- ทำให้
SimpleExoPlayer.renderers
เป็นแบบส่วนตัว คุณเข้าถึงโปรแกรมแสดงผลได้ผ่านExoPlayer.getRenderer
- อัปเดตค่าคงที่บางค่าของ
AnalyticsListener.EventFlags
ให้ตรงกับค่าในPlayer.EventFlags
- แยก
AnalyticsCollector
ออกเป็นอินเทอร์เฟซและการติดตั้งใช้งานเริ่มต้น เพื่อให้ R8 นำออกได้หากแอปไม่จำเป็นต้องใช้
- เพิ่มเมธอดที่ได้รับการป้องกัน
- การเลือกแทร็ก
- รองรับแฟล็กบทบาทวิดีโอที่ต้องการในการเลือกแทร็ก (#9402)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอเพื่อพิจารณาประเภท MIME และค่าสถานะบทบาทที่ต้องการเมื่อเลือกแทร็กวิดีโอหลายรายการเพื่อการดัดแปลง (#9519)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอและเสียงให้เลือกเฉพาะรูปแบบสำหรับการเลือกแบบปรับได้ที่มีระดับตัวถอดรหัสและการรองรับฮาร์ดแวร์ในระดับเดียวกัน (#9565)
- อัปเดตตรรกะการเลือกแทร็กวิดีโอให้เลือกตัวแปลงรหัสที่มีประสิทธิภาพมากขึ้นหากตัวถอดรหัสหลักที่เร่งการแสดงผลด้วยฮาร์ดแวร์รองรับตัวแปลงรหัสหลายตัว (#4835)
- ให้เลือกค่ากำหนดเนื้อหาเสียง (เช่น แทร็กเสียง "เริ่มต้น" หรือแทร็กที่ตรงกับภาษาของภาษาในระบบ) มากกว่าข้อจำกัดทางเทคนิคในการเลือกแทร็ก (เช่น ประเภท MIME ที่ต้องการ หรือจำนวนช่องสูงสุด)
- แก้ไขปัญหาการเลือกแทร็กที่การลบล้างกลุ่มแทร็กหนึ่งไม่ได้ ปิดใช้กลุ่มแทร็กอื่นๆ ที่มีประเภทเดียวกัน (#9675)
- แก้ไขปัญหาการเลือกแทร็กที่ระบบใช้การลบล้างแทร็กแบบผสมทั้งที่มีและไม่มีข้อมูลไม่ถูกต้อง (#9649)
- ห้ามใช้
TrackGroup
ซ้ำกันในTrackGroupArray
TrackGroup
s สามารถแยกความแตกต่างได้เสมอโดยการตั้งค่าid
ใน เครื่องมือสร้างTrackGroup
การแก้ไขนี้จะแก้ปัญหาแอปขัดข้องเมื่อกลับมาเล่นต่อ หลังจากที่แอปทำงานในเบื้องหลังโดยมีการลบล้างแทร็กที่ใช้งานอยู่ (#9718) - แก้ไขตรรกะใน
AdaptiveTrackSelection
เพื่ออนุญาตให้เพิ่มคุณภาพ ภายใต้แบนด์วิดท์เครือข่ายที่เพียงพอแม้ว่าการเล่นจะใกล้กับ ขอบแบบเรียลไทม์มาก (#9784)
- วิดีโอ
- แก้ไขตรรกะการสำรองข้อมูลของตัวถอดรหัสสำหรับ Dolby Vision เพื่อใช้ตัวถอดรหัส H264/H265 ที่เข้ากันได้หากจำเป็น
- เสียง:
- แก้ไขตรรกะการสำรองตัวถอดรหัสสำหรับ Dolby Atmos (E-AC3-JOC) เพื่อใช้ตัวถอดรหัส E-AC3 ที่เข้ากันได้หากจำเป็น
- เปลี่ยน
AudioCapabilities
API ให้กำหนดการส่งAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
อย่างชัดแจ้ง แทนnull
- อนุญาตให้ปรับแต่งการคำนวณขนาดบัฟเฟอร์
AudioTrack
โดย แทรกAudioTrackBufferSizeProvider
ไปยังDefaultAudioSink
(#8891) - ลองสร้างอีกครั้งหากขนาดบัฟเฟอร์ที่ขอมีขนาดมากกว่า 1 MB
AudioTrack
(#9712)
- โปรแกรมแยกข้อมูล
- ข้อความ:
- DRM:
- นำ
playbackLooper
ออกจากDrmSessionManager.(pre)acquireSession
เมื่อแอปใช้DrmSessionManager
ในMediaSource
ที่กำหนดเอง คุณจะต้องส่งplaybackLooper
ไปยังDrmSessionManager.setPlayer
แทน
- นำ
- การเล่นโฆษณา / IMA
- เพิ่มการรองรับ การแทรกโฆษณาแบบไดนามิก (DAI) ของ IMA (#8213)
- เพิ่มวิธีการ
AdPlaybackState
เพื่ออนุญาตให้รีเซ็ตกลุ่มโฆษณาเพื่อให้ เล่นได้อีกครั้ง (#9615) - บังคับใช้ความเร็วในการเล่น 1.0 ระหว่างการเล่นโฆษณา (#9018)
- แก้ไขปัญหาที่กลุ่มโฆษณาโหลดไม่สำเร็จทำให้เกิดการ รีเซ็ตการเล่น ทันที (#9929)
- UI:
- DASH:
- เพิ่มพร็อพเพอร์ตี้ที่จำเป็นและเพิ่มเติมที่แยกวิเคราะห์แล้วลงใน
Representation
(#9579) - รองรับบทบาทการติดตาม
forced-subtitle
(#9727) - หยุดตีความบทบาทของแทร็ก
main
เป็นC.SELECTION_FLAG_DEFAULT
- แก้ไขตรรกะการยกเว้น URL ฐานสำหรับไฟล์ Manifest ที่ไม่ได้ประกาศเนมสเปซ DVB (#9856)
- รองรับ URL แบบสัมพัทธ์
MPD.Location
(#9939)
- เพิ่มพร็อพเพอร์ตี้ที่จำเป็นและเพิ่มเติมที่แยกวิเคราะห์แล้วลงใน
- HLS:
- ป้อนข้อมูล
Format.label
สำหรับสตรีม HLS ที่มีเสียงเท่านั้นอย่างถูกต้อง (#9608) - ใช้การเตรียมข้อมูลแบบไม่มีการแบ่งกลุ่มโดยค่าเริ่มต้นเพื่อปรับปรุงเวลาเริ่มต้น หาก
เวอร์ชันของคุณมีแทร็กคำบรรยายแทนเสียงแบบมัลติเพล็กซ์ที่ไม่ได้ประกาศ
ในเพลย์ลิสต์หลัก คุณควรเพิ่มแทร็กเหล่านั้นลงในเพลย์ลิสต์หลักเพื่อให้
พร้อมสำหรับการเล่น หรือปิดการเตรียมข้อมูลแบบไม่มีการแบ่งกลุ่มด้วย
HlsMediaSource.Factory.setAllowChunklessPreparation(false)
- รองรับการกรอไปข้างหน้า/ย้อนกลับที่แม่นยำใน HLS (#2882)
- ป้อนข้อมูล
- RTSP:
- Transformer
- เพิ่มเวอร์ชัน API ขั้นต่ำที่จำเป็นเป็น 21
TransformationException
ตอนนี้ใช้เพื่ออธิบายข้อผิดพลาดที่เกิดขึ้น ระหว่างการเปลี่ยนรูปแบบ- เพิ่ม
TransformationRequest
เพื่อระบุตัวเลือกการเปลี่ยนรูปแบบ - อนุญาตให้ลงทะเบียนผู้ฟังได้หลายคน
- แก้ไขปัญหาที่ Transformer ค้างเมื่ออ่านเอาต์พุตของตัวแปลงรหัสบางส่วน
- แก้ไข NPE ที่อาจเกิดขึ้นใน
Transformer.getProgress
เมื่อเผยแพร่ Muxer throws - เพิ่มแอปตัวอย่างเพื่อใช้การเปลี่ยนรูปแบบ
- ส่วนขยาย MediaSession
- โดยค่าเริ่มต้น
MediaSessionConnector
จะล้างเพลย์ลิสต์เมื่อหยุดเล่น แอปที่ต้องการเก็บเพลย์ลิสต์ไว้สามารถเรียกใช้setClearMediaItemsOnStop(false)
ในตัวเชื่อมต่อได้
- โดยค่าเริ่มต้น
- ส่วนขยาย Cast
- ส่วนขยาย FFmpeg
- ทำให้
build_ffmpeg.sh
ขึ้นอยู่กับ binutils ของ LLVM แทนของ GNU (#9933)
- ทำให้
- ความเข้ากันได้กับ Android 12
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
com.google.android.gms:play-services-cast-framework:20.1.0
play-services-cast-framework
เวอร์ชันก่อนหน้าไม่สามารถใช้งานร่วมกับแอปที่กำหนดเป้าหมายเป็น Android 12 และจะขัดข้องพร้อมกับIllegalArgumentException
เมื่อสร้างPendingIntent
(#9528)
- อัปเกรดส่วนขยาย Cast ให้ขึ้นอยู่กับ
- นำสัญลักษณ์ที่เลิกใช้งานแล้วออก
- นำ
Player.EventListener
ออก โปรดใช้Player.Listener
แทน - นำ
MediaSourceFactory#setDrmSessionManager
MediaSourceFactory#setDrmHttpDataSourceFactory
และMediaSourceFactory#setDrmUserAgent
ออก โปรดใช้MediaSourceFactory#setDrmSessionManagerProvider
แทน - นำ
MediaSourceFactory#setStreamKeys
ออก โปรดใช้MediaItem.Builder#setStreamKeys
แทน - นำ
MediaSourceFactory#createMediaSource(Uri)
ออก โปรดใช้MediaSourceFactory#createMediaSource(MediaItem)
แทน - นำ
setTag
ออกจากDashMediaSource
,HlsMediaSource
และSsMediaSource
โปรดใช้MediaItem.Builder#setTag
แทน - นำ
DashMediaSource#setLivePresentationDelayMs(long, boolean)
ออก ใช้MediaItem.Builder#setLiveConfiguration
และMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
เพื่อลบล้าง ไฟล์ Manifest หรือDashMediaSource#setFallbackTargetLiveOffsetMs
เพื่อระบุ ค่าสำรอง - นำ
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
ออก คุณไม่สามารถเลือกไม่ใช้การบังคับใช้ของเธรดได้อีกต่อไป - นำ
ActionFile
และActionFileUpgradeUtil
ออก ใช้ ExoPlayer 2.16.1 หรือเวอร์ชันก่อนหน้าเพื่อใช้ActionFileUpgradeUtil
ในการผสานไฟล์การดำเนินการเดิมเข้ากับDefaultDownloadIndex
- นำ
ProgressiveMediaSource#setExtractorsFactory
ออก โปรดใช้ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
ตัวสร้างแทน - นำ
ProgressiveMediaSource.Factory#setTag
และProgressiveMediaSource.Factory#setCustomCacheKey
ออก โปรดใช้MediaItem.Builder#setTag
และMediaItem.Builder#setCustomCacheKey
แทน - นำตัวสร้าง
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
และDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
ออก ให้ใช้ตัวสร้างDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
และDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
แทน - นำตัวสร้าง
CronetDataSource
สาธารณะทั้งหมดออก โปรดใช้CronetDataSource.Factory
แทน
- นำ
- เปลี่ยน
IntDefs
ต่อไปนี้เป็น@Target(TYPE_USE)
เท่านั้น ซึ่งอาจทำให้การคอมไพล์การใช้งานใน Kotlin หยุดทำงานได้ โดยคุณแก้ไขได้ด้วยการย้าย คำอธิบายประกอบเพื่อใส่คำอธิบายประกอบประเภท (Int
)@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(ในแพ็กเกจcom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(ในแพ็กเกจcom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
เวอร์ชัน 1.0.0-alpha01
27 ตุลาคม 2021
androidx.media3:media3-*:1.0.0-alpha01
ได้รับการเผยแพร่แล้ว
เวอร์ชัน 1.0.0-alpha01 มีคอมมิตต่อไปนี้
ฟีเจอร์ใหม่
Media3 เป็นที่อยู่ใหม่ของไลบรารีการรองรับสื่อ ซึ่งรวมถึง ExoPlayer อัลฟ่าเวอร์ชันแรกมีฟังก์ชันการทำงานเบื้องต้นของไลบรารีสำหรับ การใช้งานกรณีการใช้งานสื่อ ซึ่งรวมถึง
- ExoPlayer คือมีเดียเพลเยอร์ระดับแอปพลิเคชันสำหรับ Android ที่ปรับแต่งและขยายได้ง่าย
- ฟังก์ชันการทำงานของเซสชันสื่อสำหรับการแสดงและการควบคุมการเล่น โมดูลเซสชันใหม่นี้ใช้
Player
อินเทอร์เฟซเดียวกับ ExoPlayer - คอมโพเนนต์ UI สำหรับสร้างอินเทอร์เฟซผู้ใช้การเล่นสื่อ
- โมดูลที่ห่อหุ้มฟังก์ชันการทำงานในไลบรารีอื่นๆ เพื่อใช้กับ ExoPlayer เช่น การแทรกโฆษณาผ่าน IMA SDK
ดูข้อมูลเพิ่มเติมได้ที่โปรเจ็กต์ Media3 ใน GitHub
ก่อนหน้านี้ ExoPlayer โฮสต์อยู่ในโปรเจ็กต์ ExoPlayer GitHub แยกต่างหาก ใน Media3 ชื่อแพ็กเกจคือ androidx.media3.exoplayer
เราวางแผนที่จะดูแลรักษาและ
เผยแพร่โปรเจ็กต์ ExoPlayer GitHub ต่อไปอีกระยะหนึ่งเพื่อให้แอปมีเวลาในการย้ายข้อมูลไปยัง
Media3 Media3 มีโมดูลทดแทนสำหรับโมดูล ExoPlayer ทั้งหมดยกเว้น
ส่วนขยาย media2 และ mediasession เดิม ซึ่งจะแทนที่ด้วยโมดูล media3-session
ใหม่
ซึ่งช่วยให้ผสานรวมโดยตรงระหว่างเพลเยอร์กับ
เซสชันสื่อได้โดยไม่ต้องใช้คลาสอะแดปเตอร์/ตัวเชื่อมต่อ