สื่อทุกชิ้นใน ExoPlayer จะแสดงด้วย MediaItem
อย่างไรก็ตาม
เป็นการภายใน โปรแกรมเล่นต้องใช้ MediaSource
อินสแตนซ์เพื่อเล่นเนื้อหา
โปรแกรมเล่นจะสร้างรายการเหล่านี้จากรายการสื่อโดยใช้ MediaSource.Factory
โดยค่าเริ่มต้น โปรแกรมเล่นวิดีโอจะใช้ DefaultMediaSourceFactory
ซึ่งสามารถสร้าง
อินสแตนซ์ของการใช้เนื้อหา MediaSource
ต่อไปนี้
DashMediaSource
สำหรับ DASHSsMediaSource
สำหรับ SmoothStreamingHlsMediaSource
สำหรับ HLSProgressiveMediaSource
สำหรับไฟล์สื่อทั่วไปRtspMediaSource
สำหรับ RTSP
นอกจากนี้ DefaultMediaSourceFactory
ยังอาจสร้างแหล่งที่มาของสื่อที่ซับซ้อนมากขึ้นได้
เกี่ยวกับคุณสมบัติของรายการสื่อที่เกี่ยวข้อง ซึ่งได้อธิบายไว้ใน
รายละเอียดเกี่ยวกับ
หน้ารายการสื่อ
สำหรับแอปที่ต้องการการตั้งค่าแหล่งที่มาของสื่อซึ่งโปรแกรมไม่รองรับ การกำหนดค่าเริ่มต้นของโปรแกรมเล่น มีหลายตัวเลือกสำหรับ การปรับแต่งได้มากขึ้น
การปรับแต่งการสร้างแหล่งที่มาของสื่อ
เมื่อสร้างโปรแกรมเล่น คุณจะแทรก MediaSource.Factory
ได้ ตัวอย่างเช่น
หากแอปต้องการแทรกโฆษณาและใช้ CacheDataSource.Factory
เพื่อรองรับ
การแคช อินสแตนซ์ของ DefaultMediaSourceFactory
สามารถกำหนดค่าให้ตรงกับ
และได้ใส่ข้อกำหนดเหล่านี้ระหว่างการสร้างโปรแกรมเล่น
Kotlin
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
Java
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
DefaultMediaSourceFactory
JavaDoc
จะอธิบายตัวเลือกที่มีอย่างละเอียดยิ่งขึ้น
นอกจากนี้ยังแทรกการใช้งาน MediaSource.Factory
ที่กำหนดเองสำหรับ
ตัวอย่างเพื่อสนับสนุนการสร้างประเภทแหล่งที่มาของสื่อที่กำหนดเอง จากโรงงาน
ระบบจะเรียก createMediaSource(MediaItem)
ให้สร้างแหล่งที่มาของสื่อสำหรับ
รายการสื่อที่
เพิ่มลงในเพลย์ลิสต์
API เพลย์ลิสต์ที่อิงตามแหล่งที่มาของสื่อ
อินเทอร์เฟซ ExoPlayer
กำหนดเมธอดเพลย์ลิสต์เพิ่มเติมที่ยอมรับ
แหล่งที่มาของสื่อ แทนที่จะเป็นรายการสื่อ จึงสามารถข้าม
MediaSource.Factory
ภายในของโปรแกรมเล่น และส่งอินสแตนซ์แหล่งที่มาของสื่อไปยัง
โปรแกรมเล่นโดยตรง:
Kotlin
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
Java
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
องค์ประกอบของแหล่งที่มาสื่อขั้นสูง
ExoPlayer มาพร้อมการใช้งาน MediaSource
มากมายในการแก้ไขและเขียนข้อความ
อินสแตนซ์อื่นๆ ของ MediaSource
วิธีนี้มีประโยชน์มากที่สุดในกรณีที่
การกำหนดค่าเองต้องรวมเข้าด้วยกัน และไม่มีเส้นทางการตั้งค่าที่ง่ายกว่านี้
เพียงพอ
ClippingMediaSource
: อนุญาตให้ตัดคลิปสื่อไปยังช่วงการประทับเวลาที่ระบุ หากนี่เป็นการแก้ไขเพียงอย่างเดียว คุณควรใช้MediaItem.ClippingConfiguration
แทนFilteringMediaSource
: กรองแทร็กที่พร้อมใช้งานตามประเภทที่ระบุ สำหรับ ตัวอย่างเช่น การแสดงแทร็กวิดีโอจากไฟล์ที่มีทั้งเสียง และวิดีโอ หากนี่เป็นการแก้ไขเพียงอย่างเดียว คุณควรใช้ พารามิเตอร์การเลือกแทร็กแทนMergingMediaSource
: รวมสื่อหลายๆ แหล่งเพื่อเล่นพร้อมกัน ใน ในเกือบทุกกรณี ขอแนะนำให้เรียกใช้ตัวสร้างด้วย ตั้งค่าadjustPeriodTimeOffsets
และclipDurations
เป็น "จริง" เพื่อให้แน่ใจว่าทั้งหมด แหล่งข้อมูลเริ่มต้นและสิ้นสุดในเวลาเดียวกัน หากแก้ไขเพื่อเพิ่ม คำบรรยายจากไซด์โหลด แนะนำให้ใช้MediaItem.SubtitleConfiguration
แทนConcatenatingMediaSource2
: รวมแหล่งที่มาของสื่อหลายแห่งเพื่อเล่น ติดต่อกัน โครงสร้างสื่อที่ผู้ใช้มองเห็นได้เผยให้เห็นTimeline.Window
ซึ่งหมายความว่าจะมีลักษณะเหมือนรายการเดียว หากสิ่งนี้ การแก้ไขนั้นเกิดขึ้นเพื่อเล่นหลายรายการที่ไม่ควรมีลักษณะเหมือน รายการเดียว คุณควรใช้เมธอด API สำหรับเพลย์ลิสต์ เช่นPlayer.addMediaItem
แทนSilenceMediaSource
: สร้างการปิดเสียงตามระยะเวลาที่ระบุซึ่ง มีประโยชน์ในการเติมเต็มช่องว่างAdsMediaSource
: ขยายแหล่งที่มาของสื่อด้วยการแทรกโฆษณาฝั่งไคลเอ็นต์ ความสามารถ ดูรายละเอียดได้ในคู่มือการแทรกโฆษณาServerSideAdInsertionMediaSource
: ขยายแหล่งที่มาของสื่อด้วยโฆษณาฝั่งเซิร์ฟเวอร์ ความสามารถในการแทรก ดูรายละเอียดได้ในคู่มือการแทรกโฆษณา