exoplayer一直在更新,已经和以前的版本不太一样了,而且我这边需要播放rtmp流所以就又重新搞了下exoplayer
如果只是引用的话就直接
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
或者根据自己的需求引用需要的部分
implementation 'com.google.android.exoplayer:exoplayer-core:2.X.X'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.X.X'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.X.X'
2.X.X版本的话可以在RELEASENOTES.md查找
exoplayer本体是不支持rtmp流的,在首页点开extensions可以看到exoplayer的扩展,可以发现exoplayer已经支持很多东西了,点开rtmp找到引入方法
implementation 'com.google.android.exoplayer:extension-rtmp:2.X.X'
版本同上,这样就可以播放rtmp流了
也可以把源代码下载下来拷贝到自己的项目,我就是下载下来的,因为我的播放器有特殊需求要改代码
我只拷贝了core,dash,hls和rtmp的代码
拷贝到项目后发现exoplayer引入了很多的其他的项目,没办法,我也只能跟着引入
implementation 'org.checkerframework:checker:3.0.1'
implementation 'org.checkerframework:checker-compat-qual:2.5.5'
implementation 'org.jetbrains.kotlin:kotlin-annotations-jvm:1.3.60'
implementation 'com.google.code.findbugs:jsr305:3.0.2'
implementation 'net.butterflytv.utils:rtmp-client:3.1.0'
如果不知道要引入什么的话可以打开各文件夹下边的build.gradle就可以看到了,比如rtmp文件夹下的build.gradle内找到implementation 'net.butterflytv.utils:rtmp-client:3.1.0'
还是直接引入方便,没特别要求还是不要拷贝代码了
由于exoplayer和我以前的版本差别比较大,初始化代码都不一样了,所以简单贴一下,以播放hls和rtmp为例,默认播放hls
private void initPlayer(){
Uri url = Uri.parse(videoUrl);
TrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(/* context= */ this, trackSelectionFactory);
player = new SimpleExoPlayer.Builder(/* context= */ this)
.setTrackSelector(trackSelector)
.build();
MediaSource videoSource;
if("rtmp".equals(videoUrl.substring(0,4))){
RtmpDataSource.Factory dataSourceFactory = new RtmpDataSourceFactory();
videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(url);
}else{
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,
Util.getUserAgent(this, "ExoPlayer"));
videoSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(url);
}
player.prepare(videoSource);
}