โพรเกรสซีฟ

ExoPlayer สามารถเล่นสตรีมในรูปแบบคอนเทนเนอร์ต่อไปนี้ได้โดยตรง นอกจากนี้ ระบบยังต้องรองรับรูปแบบตัวอย่างเสียงและวิดีโอที่รวมอยู่ด้วย (ดูรายละเอียดในส่วนรูปแบบตัวอย่าง) ดูการรองรับคอนเทนเนอร์และรูปแบบรูปภาพได้ที่ รูปภาพ

รูปแบบคอนเทนเนอร์ รองรับ ความคิดเห็น
MP4 ใช่
M4A ใช่
FMP4 ใช่
WebM ใช่
Matroska ใช่
MP3 ใช่ สตรีมบางรายการจะค้นหาได้โดยใช้การค้นหาบิตเรตคงที่เท่านั้น**
Ogg ใช่ มี Vorbis, Opus และ FLAC
WAV ใช่
MPEG-TS ใช่
MPEG-PS ใช่
FLV ใช่ กรอไม่ได้*
ADTS (AAC) ใช่ ค้นหาได้โดยใช้การค้นหาบิตเรตคงที่เท่านั้น**
FLAC ใช่ การใช้ไลบรารี FLAC หรือโปรแกรมแยก FLAC ในไลบรารี ExoPlayer***
AMR ใช่ ค้นหาได้โดยใช้การค้นหาบิตเรตคงที่เท่านั้น**

* ระบบไม่รองรับการกรอเนื่องจากคอนเทนเนอร์ไม่มีข้อมูลเมตา (เช่น ดัชนีตัวอย่าง) เพื่อให้มีเดียเพลเยอร์ทำการกรอได้อย่างมีประสิทธิภาพ หากจำเป็นต้องใช้การค้นหา เราขอแนะนำให้ใช้รูปแบบคอนเทนเนอร์ที่เหมาะสมกว่า

** ตัวแยกข้อมูลเหล่านี้มีFLAG_ENABLE_CONSTANT_BITRATE_SEEKINGแฟล็กสำหรับ เปิดใช้การกรอโดยประมาณโดยใช้สมมติฐานอัตราบิตคงที่ ฟังก์ชันนี้ไม่ได้เปิดใช้โดยค่าเริ่มต้น วิธีที่ง่ายที่สุดในการเปิดใช้ฟังก์ชันนี้สำหรับโปรแกรมแยกข้อมูลทั้งหมดที่รองรับคือการใช้ DefaultExtractorsFactory.setConstantBitrateSeekingEnabled ตามที่อธิบายไว้ที่นี่

*** ตัวแยกไลบรารี FLAC จะเอาต์พุตเสียงดิบ ซึ่งเฟรมเวิร์กสามารถจัดการได้ ในทุกระดับ API โปรแกรมแยก FLAC ของไลบรารี ExoPlayer จะแสดงเฟรมเสียง FLAC จึงต้องมีตัวถอดรหัส FLAC (เช่น MediaCodec ตัวถอดรหัสที่จัดการ FLAC (ต้องใช้จาก API ระดับ 27) หรือไลบรารี FFmpeg ที่เปิดใช้ FLAC) DefaultExtractorsFactory ใช้ เครื่องมือแยกส่วนขยายหากแอปพลิเคชันสร้างขึ้นด้วยไลบรารี FLAC ไม่เช่นนั้นก็จะใช้ตัวแยกไลบรารี ExoPlayer

การใช้ MediaItem

หากต้องการเล่นสตรีมแบบ Progressive ให้สร้าง MediaItem ด้วย URI ของสื่อและส่ง ไปยังเพลเยอร์

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();

การใช้ ProgressiveMediaSource

หากต้องการตัวเลือกการปรับแต่งเพิ่มเติม คุณสามารถสร้าง ProgressiveMediaSource และ ส่งไปยังเพลเยอร์โดยตรงแทน MediaItem ได้

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
  ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

การปรับแต่งการเล่น

ExoPlayer มีหลายวิธีให้คุณปรับแต่งประสบการณ์การเล่นให้ตรงกับความต้องการของแอป ดูตัวอย่างได้ที่หน้าการปรับแต่ง