日常搬砖 ExoPlayer 第一个demo。

2019-04-22  本文已影响0人  luoye呀

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播放,所有,其他的归类可能有误,欢迎指出。

image.png

在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就好。

上一篇下一篇

猜你喜欢

热点阅读