採用下列容器格式的串流可直接由 ExoPlayer 播放。您也必須支援內含的音訊和影片範例格式 (詳情請參閱範例格式一節)。
容器格式 | 有權限 | 留言 |
---|---|---|
MP4 | 是 | |
M4A | 是 | |
FMP4 | 是 | |
WebM | 是 | |
馬特羅斯卡 | 是 | |
MP3 | 是 | 部分直播僅支援使用固定位元率的跳轉功能** |
蛋 | 是 | 包含 Vorbis、Opus 和 FLAC |
無障礙車輛 | 是 | |
MPEG-TS | 是 | |
MPEG-PS | 是 | |
FLV | 是 | 不可搜尋* |
ADTS (AAC) | 是 | 僅使用固定位元率跳轉功能** |
FLAC | 是 | 使用 FLAC 程式庫或 ExoPlayer 程式庫中的 FLAC 擷取器*** |
亞利桑那州 | 是 | 僅使用固定位元率跳轉功能** |
JPEG 動態相片 | 是 | 系統只會擷取 MP4 內容 |
* 不支援跳轉功能,因為容器並未提供中繼資料 (例如範例索引) 讓媒體播放器有效率地執行跳轉。 如果需要跳轉,建議您使用更適當的容器格式。
** 這些擷取器具有 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
旗標,可讓您使用固定的位元率假設啟用近似搜尋。這項功能預設為停用。如要為所有支援擷取器啟用這項功能,最簡單的方法就是使用 DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
,如這裡所述。
*** FLAC 程式庫擷取器會輸出原始音訊,而原始音訊可在所有 API 級別上由架構處理。ExoPlayer 程式庫 FLAC 擷取器會輸出 FLAC 音訊影格,因此需要使用 FLAC 解碼器 (例如處理 FLAC (API 級別 27 的必要) 的 MediaCodec
解碼器,或已啟用 FLAC 的 FFmpeg 程式庫)。如果應用程式是透過 FLAC 程式庫建構,DefaultExtractorsFactory
會使用擴充功能擷取器。否則,系統會使用 ExoPlayer 程式庫擷取工具。
使用 MediaItem
如要播放漸進式串流,請使用媒體 URI 建立 MediaItem
,並將其傳遞至播放器。
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 提供多種方式,可讓您根據應用程式需求打造專屬播放體驗。如需範例,請參閱自訂頁面。