循序式掃描

採用下列容器格式的串流可直接由 ExoPlayer 播放。 也必須支援其中的音訊和視訊樣本格式 (詳情請參閱「樣本格式」一節)。如需映像檔容器和格式支援,請參閱 圖片

容器格式 支援 留言
MP4
M4A
FMP4
WebM
Matroska
MP3 部分串流只能使用固定比特率尋找功能進行尋找**
Ogg 包含 Vorbis、Opus 和 FLAC
WAV
MPEG-TS
MPEG-PS
FLV 無法搜尋*
ADTS (AAC) 只能透過固定位元率跳轉**
FLAC 使用 FLAC 程式庫ExoPlayer 程式庫中的 FLAC 擷取器***
AMR 僅可使用固定比特率尋找功能進行尋找**

* 容器不提供中繼資料,因此無法搜尋。例如, 範例索引),方便媒體播放器有效率地執行跳轉。 如果需要跳轉,建議您採用更適當的容器格式。

** 這些擷取工具有 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING 標記 使用固定位元率假設啟用近似跳轉功能。這個 這項功能會預設為停用,如要為所有支援這項功能的擷取器啟用這項功能,最簡單的方法就是使用 DefaultExtractorsFactory.setConstantBitrateSeekingEnabled,如這裡所述。

*** FLAC 程式庫萃取器會輸出原始音訊,可由所有 API 級別的架構處理。ExoPlayer 程式庫 FLAC Extractor 會輸出 FLAC 音訊影格,因此需要 FLAC 解碼器 (例如,處理 FLAC 的 MediaCodec 解碼器 (API 級別 27 以上版本必備),或是啟用 FLAC 的 FFmpeg 程式庫)。DefaultExtractorsFactory 會使用 擷取器 (如果應用程式使用 FLAC 程式庫建立)。 否則,會使用 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 提供多種方式,讓您依據應用程式需求調整播放體驗。如需範例,請參閱自訂頁面