在 ExoPlayer 中,每個媒體都以 MediaItem
表示。不過
內部,播放器需要 MediaSource
執行個體才能播放內容。
播放器會使用 MediaSource.Factory
根據媒體項目建立這些內容。
根據預設,玩家會使用 DefaultMediaSourceFactory
,
下列內容 MediaSource
實作的執行個體:
- DASH 的
DashMediaSource
。 SsMediaSource
用於 SmoothStreaming。HlsMediaSource
代表 HLS。ProgressiveMediaSource
:適用於一般媒體檔案。RtspMediaSource
代表 RTSP。
DefaultMediaSourceFactory
也可以建立更複雜的媒體來源,具體取決於
相應媒體項目的屬性中一探究竟。詳細說明
詳細介紹
媒體項目頁面。
如果應用程式需要媒體來源設定,但不受 系統會提供多個選項 。
自訂媒體來源建立作業
建構播放器時,可以插入 MediaSource.Factory
。例如:
如果應用程式要插入廣告,並使用 CacheDataSource.Factory
支援
DefaultMediaSourceFactory
的執行個體可以設定為
這些規定會在建立播放器時插入:
Kotlin
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
Java
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
DefaultMediaSourceFactory
JavaDoc
就會詳細說明可用的選項
您也可以插入自訂的 MediaSource.Factory
實作,
都支援建立自訂媒體來源類型。工廠的
系統會呼叫 createMediaSource(MediaItem)
,為每個項目建立媒體來源
屬於
已新增至播放清單。
媒體來源播放清單 API
ExoPlayer
介面定義了其他接受的播放清單方法
媒體資源而非媒體項目您可以略過
播放器的內部 MediaSource.Factory
,並將媒體來源例項傳遞至
播放器:
Kotlin
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
Java
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
進階媒體來源組合
ExoPlayer 提供多個 MediaSource
實作以修改和撰寫
其他 MediaSource
執行個體。如果有多個
自訂動作必須結合在一起
而且使用簡單的設定路徑
而負責任的 AI 技術做法
有助於達成這項目標
ClippingMediaSource
:允許將媒體剪輯至指定的時間戳記範圍。 如果這是唯一的修改,則建議使用MediaItem.ClippingConfiguration
。FilteringMediaSource
:篩選指定類型可用的音軌, 例如,從含有這兩種音訊的檔案公開視訊軌。 和影片如果這是唯一的修改,則建議使用 追蹤選取參數。MergingMediaSource
:合併多個媒體來源以平行播放。於 在所有情況下,最好使用adjustPeriodTimeOffsets
和clipDurations
設為 true,以確保全部 個來源的開始時間和結束時間相同。如已修改完畢 建議使用側載字幕MediaItem.SubtitleConfiguration
。ConcatenatingMediaSource2
:合併多個要播放的媒體來源 。使用者能看見的媒體結構 提供單一的Timeline.Window
,代表類似單一項目。如果這是 修改了可播放多個不該外觀的項目 單一影片,不過建議使用 playlist API 方法:Player.addMediaItem
。SilenceMediaSource
:在指定的時間長度內產生靜音 以彌補資料落差AdsMediaSource
:透過用戶端廣告插播擴充媒體來源 即便沒有技術背景,也能因這些工具的功能而受益詳情請參閱廣告插入指南。ServerSideAdInsertionMediaSource
:使用伺服器端廣告擴充媒體來源 插入功能詳情請參閱廣告插入指南。