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