日常搬砖 ExoPlayer 第一个demo。
https://www.jianshu.com/p/36ccc1be76b8
这个有我从官网上面喽的导入教程,很简单,自己百度谷歌下就出现了。
这篇主要是讲,如何跑一个demo,个人建议还是将官网上面的那个代码下载下来,自己跑一下,能够解决很多问题。
文档地址。
https://exoplayer.dev/guide.html
ExoPlayer播放DASH,SmoothStreaming和HLS自适应流,以及MP4,M4A,FMP4,WebM,MKV,MP3,Ogg,WAV,MPEG-TS,MPEG-PS,FLV和ADTS等格式( AAC)。它还讨论了ExoPlayer事件,消息,自定义和DRM支持。这是谷歌翻译exoplayer能够播放什么格式文件的介绍。
image.png这个很重要,一共有4总MediaSource,首先 我们要知道 将要播放的视频格式需要对应创建那种MediaSource。
因为我主要是做 M3u8 和MP4播放,所有,其他的归类可能有误,欢迎指出。
在demo的PlayerActivity类的buildMediaSource方法中对 视频格式究竟属于哪个MediaSource 进行了分类。
image.png
。因为我只有m3u8和mp4 的视频源,所有我就直接创建的MediaSource 对象并未像官方这么创建。
首先是xml image.png然后是activity
image.png
嗯,重要的是 要设置这个:
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode"
至于 MyPlayerView是什么鬼,是我复制了一份PlayerView 然后把控制层代码删除了。
private MyPlayerView myPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.PlayerTheme_Spherical);
setContentView(R.layout.activity_my_player);
myPlayer = findViewById(R.id.myPlayer);
// myPlayer.setControllerVisibilityListener(this);//控制层
//myPlayer.setErrorMessageProvider(new PlayerErrorMessageProvider());//设置错误回调
myPlayer.requestFocus();
DefaultBandwidthMeter BANDWIDTH_METER = new DefaultBandwidthMeter();
String userAgent = Util.getUserAgent(this, "ExoPlayerDemo");
DefaultDataSourceFactory mediaDataSourceFactory = new DefaultDataSourceFactory(this, BANDWIDTH_METER,
new DefaultHttpDataSourceFactory(userAgent, BANDWIDTH_METER));
String fileName = "http://192.168.0.121:2100/video/20190405/8f4DyBLz/hls/index.m3u8";
Uri uri = Uri.parse(fileName);
HlsMediaSource mediaSource = null;
if (fileName.endsWith(".m3u8")){
mediaSource = new HlsMediaSource.Factory(mediaDataSourceFactory).createMediaSource(uri);
}
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this);
myPlayer.setPlayer(player);
// player.addListener(this);
player.setPlayWhenReady(true);
if(mediaSource!=null) {
player.prepare(mediaSource);
}
}
然后如果是其他格式的请参考上面图片,创建对应的MediaSource就好。