API เพลย์ลิสต์อิงตามอินสแตนซ์ MediaItem
รายการซึ่งสร้างได้อย่างสะดวก
โดยใช้ MediaItem.Builder
ภายในโปรแกรมเล่น MediaItem
จะถูกแปลงเป็น
MediaSource
ที่เล่นได้โดย MediaSource.Factory
ไม่มี
การกำหนดค่าที่กำหนดเอง
Conversion นี้ดำเนินการโดย 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
ซึ่งเท่ากับ
แทรกลงใน 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
ของตัวเองด้วย
ได้กำหนดค่าตามนั้น