รายการสื่อ

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ของตัวเองด้วย ได้กำหนดค่าตามนั้น