全部產品
Search
文件中心

HTTPDNS:Android端HTTPDNS+ExoPlayer最佳實務

更新時間:Nov 07, 2025

通過Android SDK接入流程這篇文檔,您已經瞭解了Android SDK匯入、配置、解析IP、應用到網路程式庫和接入驗證的完整流程,本文主要介紹如何在 ExoPlayer 中通過 OkHttp 接入 HTTPDN的具體方案。

1. 背景說明

Media3是Google官方推薦的用於打造音頻和視頻體驗的解決方案,它提供一個簡單的架構,可基於裝置功能進行強大的自訂、可靠性和最佳化,以消除片段帶來的複雜性,可讓 Android 應用顯示豐富的視聽體驗。ExoPlayer 是 Media3 中 Player 介面的預設實現。

ExoPlayer是使用DataSource來讀取URI定義的資源資料,從網路讀取資源預設是由DefaultHttpDataSource來完成,其內部是使用HttpURLConnection來處理網路請求。此外,ExoPlayer也提供了OkHttp網路程式庫對應的OkHttpDataSource來處理網路請求。

由於OkHttp暴露了自訂DNS服務的介面,通過該介面我們可以優雅地使用HTTPDNS,所以推薦使用OkHttpDataSource

2. 添加OkHttp擴充SDK

您需要根據您使用的ExoPlayer版本來選擇對應的OkHttp擴充SDK。

  • 如果您使用的ExoPlayer版本是androix下的media,需要添加下面的依賴項:

implementation "androidx.media3:media3-datasource-okhttp:x.x.x"
說明

OkHttp擴充庫的版本請和ExoPlayer SDK的版本保持一致。

如果您使用的ExoPlayer版本是ExoPlayer2,需要添加下面的依賴項:

implementation "com.google.android.exoplayer:extension-okhttp:x.x.x"
說明

OkHttp擴充庫的版本請和ExoPlayer SDK的版本保持一致。

3. 使用OkHttp擴充SDK

在初始化ExoPlayer時,使用OkHttp擴充庫。

說明

上一部分介紹的兩個版本的ExoPlayer,使用OkHttp擴充庫的代碼是一樣的。

val player: ExoPlayer = ExoPlayer.Builder(context)
    .setMediaSourceFactory(
        DefaultMediaSourceFactory(
            OkHttpDataSource.Factory(
                Call.Factory { 
                    //此處clent是OkHttpClient執行個體,請替換成您專案中的OkHttpClient執行個體
                    request -> client.newCall(request) 
                })
        )
    )
    .build()
ExoPlayer player = new ExoPlayer.Builder(context)
        .setMediaSourceFactory(new DefaultMediaSourceFactory(new OkHttpDataSource.Factory(new Call.Factory() {
                    @NonNull
                    @Override
                    public Call newCall(@NonNull Request request) {
                        //此處clent是OkHttpClient執行個體,請替換成您專案中的OkHttpClient執行個體
                        return client.newCall(request);
                    }
                })))
        .build();

4. 基於OkHttp使用HTTPDNS

最後就是在OkHttp網路程式庫中整合HTTPDNS,具體整合步驟請參考Android端HTTPDNS+OkHttp最佳實務