exoplayer:2.15.0的HttpDataSource.Factory中没有setOkHttpClient
时间: 2024-05-18 10:18:50 浏览: 161
是的,你说得对。在ExoPlayer 2.15.0及以上版本中,`HttpDataSource.Factory`类已经不再提供`setOkHttpClient`方法,因此你无法直接设置`OkHttpClient`对象。
如果你想在ExoPlayer中使用自定义的`OkHttpClient`对象,可以使用`Factory`的`setDefaultRequestProperties`方法来设置HTTP请求的头信息,然后创建一个`OkHttpDataSource.Factory`对象来使用自定义的`OkHttpClient`对象。
以下是一个示例代码:
```
// 创建一个OkHttpClient对象
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.build();
// 设置HTTP请求的头信息
Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", "ExoPlayer");
headers.put("Referer", "http://www.example.com");
// 创建一个HttpDataSource.Factory对象
HttpDataSource.Factory factory = new DefaultHttpDataSource.Factory()
.setDefaultRequestProperties(headers);
// 创建一个OkHttpDataSource.Factory对象
OkHttpDataSource.Factory okHttpFactory = new OkHttpDataSource.Factory(okHttpClient);
// 创建一个媒体资源
MediaSource mediaSource = new ProgressiveMediaSource.Factory(okHttpFactory)
.createMediaSource(Uri.parse("http://www.example.com/audio.mp3"));
// 创建一个播放器
SimpleExoPlayer player = new SimpleExoPlayer.Builder(context).build();
// 准备播放器并开始播放
player.prepare(mediaSource);
player.setPlayWhenReady(true);
```
在这个例子中,我们首先创建一个自定义的`OkHttpClient`对象,并使用`setDefaultRequestProperties`方法设置HTTP请求的头信息。然后,我们创建了一个`DefaultHttpDataSource.Factory`对象,并使用`setDefaultRequestProperties`方法设置HTTP请求的头信息。接下来,我们创建了一个`OkHttpDataSource.Factory`对象,并将自定义的`OkHttpClient`对象传递给它。最后,我们使用`ProgressiveMediaSource.Factory`类创建了一个媒体资源,并使用`OkHttpDataSource.Factory`对象来加载媒体数据。
需要注意的是,如果你使用的是自签名证书,你需要在`OkHttpClient`对象中添加`SSLSocketFactory`和`HostnameVerifier`,以验证证书。
阅读全文