โพรเกรสซีฟ

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

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

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

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