背景信息
Media3是谷歌官方推荐的用于打造音频和视频体验的解决方案,它提供一个简单的架构,可基于设备功能进行强大的自定义、可靠性和优化,以消除碎片带来的复杂性,可让 Android 应用显示丰富的视听体验。ExoPlayer 是 Media3 中 Player 接口的默认实现。
ExoPlayer是使用DataSource
来读取URI定义的资源数据,从网络读取资源默认是由DefaultHttpDataSource
来完成,其内部是使用HttpURLConnection
来处理网络请求。此外,ExoPlayer也提供了OkHttp网络库对应的OkHttpDataSource
来处理网络请求。
由于OkHttp暴露了自定义DNS服务的接口,通过该接口我们可以优雅地使用HTTPDNS,所以推荐使用OkHttpDataSource
。
添加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的版本保持一致。
使用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();
使用HTTPDNS
最后就是在OkHttp网络库中集成HTTPDNS,具体集成步骤请参考Android端HTTPDNS+OkHttp接入指南。
文档内容是否对您有帮助?