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