上一篇中我们完成了一个简单的视频播放器demo,不过它只能播放单个资源文件,如果是连续播放多个的功能则无法满足了。所以,现在我们来实现播放列表。
1.创建播放列表
使用ConcatenatingMediaSource
来创建Playlists, 这个类允许我们将媒体资源结合起来并无缝地播放它们。它负责在后台进行缓冲,这样用户在更改源时就不会看到缓冲旋转器。
使用下面代码替换旧的buildMediaSource
方法:
PlayerActivity.java
private MediaSource buildMediaSource(Uri uri) {
// These factories are used to construct two media sources below
DataSource.Factory dataSourceFactory =
new DefaultDataSourceFactory(this, "exoplayer-codelab");
ProgressiveMediaSource.Factory mediaSourceFactory =
new ProgressiveMediaSource.Factory(dataSourceFactory);
// Create a media source using the supplied URI
MediaSource mediaSource1 = mediaSourceFactory.createMediaSource(uri);
// Additionally create a media source using an MP3
Uri audioUri = Uri.parse(getString(R.string.media_url_mp3));
MediaSource mediaSource2 = mediaSourceFactory.createMediaSource(audioUri);
return new ConcatenatingMediaSource(mediaSource1, mediaSource2);
}
测试修改后的播放控件功能,现在上一个和下一个按钮已经连接了媒体源的顺序导航。
截屏: 显示next和previous按钮的回放控件 。
2.自适应流
什么是自适应流?
自适应流是一种根据可用网络带宽改变流媒体质量的流媒体技术,这允许用户体验他们的带宽所允许的最佳质量的媒体。
通常,相同的媒体内容被分割成具有不同质量(比特率和分辨率)的多个轨道。播放器根据可用的网络带宽选择一个音轨。每个音轨都被分割成特定时长的片段,通常在2到10秒之间。这允许播放器在可用带宽变化时快速切换音轨,播放器负责拼接这些块在一起无缝播放。
Adaptive track selection( 自适应跟踪选择 )
自适应流的核心是为当前环境选择最合适的轨道, 更新应用程序,使用自适应轨道选择播放自适应流媒体源。
- 使用下面的代码升级
initializePlayer
PlayerActi