โพรเกรสซีฟ

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 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING สำหรับเปิดใช้การกรอเวลาโดยประมาณโดยใช้ค่าประมาณอัตราบิตคงที่ ช่วงเวลานี้ ฟังก์ชันการทำงานไม่ได้เปิดใช้งานโดยค่าเริ่มต้น วิธีที่ง่ายที่สุดในการดำเนินการนี้ ฟังก์ชันการทำงานของเครื่องมือแยกทุกส่วนที่รองรับการใช้งาน DefaultExtractorsFactory.setConstantBitrateSeekingEnabled ตามที่อธิบายไว้ ที่นี่

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

การใช้ MediaItem

หากต้องการเล่นสตรีมแบบโพรเกรสซีฟ ให้สร้าง 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 มีวิธีต่างๆ ในการปรับแต่งประสบการณ์การเล่นให้เหมาะกับความต้องการของแอป ดูตัวอย่างได้ที่หน้าการปรับแต่ง