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

ใน 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)ของ Factory เพื่อสร้างแหล่งที่มาของสื่อสำหรับ รายการสื่อแต่ละรายการที่เพิ่มลงในเพลย์ลิสต์

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 ซึ่งหมายความว่ารายการดังกล่าวจะดูเหมือนเป็นรายการเดียว หากการแก้ไขนี้ ทำขึ้นเพื่อเล่นหลายรายการที่ไม่ควรมีลักษณะเหมือน รายการเดียว ขอแนะนำให้ใช้วิธีการของ Playlist API เช่น Player.addMediaItem แทน
  • SilenceMediaSource: สร้างความเงียบตามระยะเวลาที่ระบุ ซึ่งมีประโยชน์ในการเติมช่องว่าง
  • AdsMediaSource: ขยายแหล่งที่มาของสื่อด้วยความสามารถในการแทรกโฆษณาฝั่งไคลเอ็นต์ ดูรายละเอียดได้ในคำแนะนำในการแทรกโฆษณา
  • ServerSideAdInsertionMediaSource: ขยายแหล่งที่มาของสื่อด้วยความสามารถในการแทรกโฆษณาฝั่งเซิร์ฟเวอร์ ดูรายละเอียดได้ในคำแนะนำในการแทรกโฆษณา