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