API เพลย์ลิสต์อิงตามอินสแตนซ์ MediaItem
รายการซึ่งสร้างได้อย่างสะดวก
โดยใช้ MediaItem.Builder
MediaSource.Factory
จะแปลง MediaItem
ให้เป็น MediaSource
ที่เล่นได้ภายในโปรแกรมเล่น หากไม่มีการกําหนดค่าที่กําหนดเอง DefaultMediaSourceFactory
จะเป็นผู้ดำเนินการแปลงนี้ ซึ่งสามารถสร้างแหล่งที่มาของสื่อที่ซับซ้อนซึ่งสอดคล้องกับพร็อพเพอร์ตี้ของรายการสื่อ ตัวอย่างคุณสมบัติบางรายการที่ตั้งค่าในรายการสื่อได้มีอธิบายไว้
ที่ด้านล่าง
รายการสื่ออย่างง่าย
สร้างรายการสื่อที่ประกอบด้วย URI ของสตรีมเท่านั้นได้ด้วย fromUri
วิธีการที่สะดวก:
Kotlin
val mediaItem = MediaItem.fromUri(videoUri)
Java
MediaItem mediaItem = MediaItem.fromUri(videoUri);
สำหรับกรณีอื่นๆ ทั้งหมด คุณจะใช้ MediaItem.Builder
ได้ ในตัวอย่างต่อไปนี้ ระบบจะสร้างรายการสื่อที่มีรหัสและข้อมูลเมตาที่แนบมา
Kotlin
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();
การแนบข้อมูลเมตามีประโยชน์สำหรับการอัปเดต UI ของแอปเมื่อเพลย์ลิสต์เปลี่ยน
รูปภาพ
การเล่นรูปภาพต้องมีระยะเวลาในรายการสื่อเพื่อระบุระยะเวลา ภาพควรจะแสดงระหว่างการเล่น โปรดดู หน้าคำแนะนำรูปภาพสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ รูปภาพเคลื่อนไหวและ ไลบรารีการโหลดรูปภาพ (เช่น Glide)
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
นามสกุลไฟล์ที่ไม่ใช่มาตรฐานสำหรับสื่อแบบปรับเปลี่ยน
ExoPlayer มีแหล่งที่มาของสื่อที่ปรับเปลี่ยนได้สำหรับ DASH, HLS และ SmoothStreaming หาก URI ของรายการสื่อแบบปรับเปลี่ยนได้ดังกล่าวลงท้ายด้วยนามสกุลไฟล์มาตรฐาน ระบบจะสร้างแหล่งที่มาของสื่อที่เกี่ยวข้องโดยอัตโนมัติ หาก URI มีส่วนขยายที่ไม่เป็นมาตรฐานหรือไม่มีส่วนขยายใดๆ เลย คุณสามารถตั้งค่าประเภท MIME อย่างชัดเจนเพื่อระบุประเภทของรายการสื่อได้ ดังนี้
Kotlin
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();
สตรีมสื่อแบบโปรเกรสซีฟไม่จำเป็นต้องมีประเภท MIME
เนื้อหาที่ได้รับความคุ้มครอง
สำหรับเนื้อหาที่ได้รับการคุ้มครอง คุณควรตั้งค่าพร็อพเพอร์ตี้ DRM ของรายการสื่อ โดยจำเป็นต้องระบุ UUID แต่พร็อพเพอร์ตี้อื่นๆ ทั้งหมดเป็นตัวเลือก
ตัวอย่างการกําหนดค่าสําหรับการเล่นรายการที่ได้รับการคุ้มครองด้วย Widevine DRM ซึ่ง URI ของใบอนุญาตไม่อยู่ในสื่อโดยตรง (เช่น ในเพลย์ลิสต์ DASH) และต้องใช้สําเร็จการหลายรายการ (เช่น เนื่องจากการหมุนคีย์)
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build()) .build();
ภายในโปรแกรมเล่น DefaultMediaSourceFactory
จะส่งพร็อพเพอร์ตี้เหล่านี้ไปยัง DrmSessionManagerProvider
เพื่อรับ DrmSessionManager
จากนั้นจะแทรก DrmSessionManager
ลงใน MediaSource
ที่สร้างขึ้น คุณปรับแต่งเพิ่มเติมลักษณะการทำงานของ DRM ให้เหมาะกับความต้องการของคุณได้
การไซด์โหลดแทร็กคำบรรยาย
หากต้องโหลดแทร็กคำบรรยายจากแหล่งที่ไม่รู้จัก คุณจะเพิ่มอินสแตนซ์ MediaItem.Subtitle
รายการได้
การสร้างรายการสื่อ:
Kotlin
val subtitle = SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build() val mediaItem = MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()
Java
MediaItem.SubtitleConfiguration subtitle = new MediaItem.SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build(); MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setSubtitleConfigurations(ImmutableList.of(subtitle)) .build();
DefaultMediaSourceFactory
จะใช้ MergingMediaSource
เพื่อรวมแหล่งที่มาของสื่อเนื้อหาเข้ากับ SingleSampleMediaSource
สำหรับแทร็กคำบรรยายแต่ละแทร็ก DefaultMediaSourceFactory
ไม่รองรับการโหลดจากอุปกรณ์อื่น
คำบรรยายแทนเสียงสำหรับ DASH แบบหลายช่วงเวลา
การตัดคลิปสตรีมสื่อ
หากต้องการตัดเนื้อหาที่รายการสื่ออ้างอิง ให้ตั้งค่าตำแหน่งเริ่มต้นและสิ้นสุดที่กำหนดเองโดยทำดังนี้
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( new ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build()) .build();
ภายใน DefaultMediaSourceFactory
จะใช้ ClippingMediaSource
เพื่อตัดสิ้นสุดแหล่งที่มาของสื่อเนื้อหา ยังมีพร็อพเพอร์ตี้การคลิปอื่นๆ อีก ดูรายละเอียดเพิ่มเติมใน MediaItem.Builder
Javadoc
การแทรกโฆษณา
หากต้องการแทรกโฆษณา คุณควรตั้งค่าพร็อพเพอร์ตี้ URI ของแท็กโฆษณาของรายการสื่อ ดังนี้
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
จากภายใน DefaultMediaSourceFactory
จะรวมแหล่งที่มาของสื่อเนื้อหาไว้ในไฟล์
AdsMediaSource
เพื่อแทรกโฆษณาตามที่แท็กโฆษณากำหนด โปรแกรมเล่นยังต้องDefaultMediaSourceFactory
กําหนดค่าให้สอดคล้องกันด้วยเพื่อให้การแชร์ใช้งานได้