แหล่งที่มาของสื่อ

สื่อทุกชิ้นใน ExoPlayer จะแสดงด้วย MediaItem อย่างไรก็ตาม เป็นการภายใน โปรแกรมเล่นต้องใช้ MediaSource อินสแตนซ์เพื่อเล่นเนื้อหา โปรแกรมเล่นจะสร้างรายการเหล่านี้จากรายการสื่อโดยใช้ MediaSource.Factory

โดยค่าเริ่มต้น โปรแกรมเล่นวิดีโอจะใช้ DefaultMediaSourceFactory ซึ่งสามารถสร้าง อินสแตนซ์ของการใช้เนื้อหา MediaSource ต่อไปนี้

นอกจากนี้ 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: ขยายแหล่งที่มาของสื่อด้วยโฆษณาฝั่งเซิร์ฟเวอร์ ความสามารถในการแทรก ดูรายละเอียดได้ในคู่มือการแทรกโฆษณา