Android音视频开发之ExoPlayer(一):快速入门ExoPlayer

初识ExoPlayer

ExoPlayer是Google推出的一种多媒体播放器框架,支持本地音视频的播放,同时网络视频也是支持的。

快速上手

首先,把ExoPlayer的库导进来。注意,这里使用的ExoPlayer版本是2.16.1,其他版本在初始化ExoPlayer上会略有区别,大家可以参看说明文档

android {
   	...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    ...
    //exoplayer
    implementation 'com.google.android.exoplayer:exoplayer:2.16.1'
}

导入库之后我们需要了解两个模块,一是ExoPlayer,视频的加载、播放、暂停等一系列操作就是由它来完成的,也就是说ExoPlayer是音视频播放的控制器。二是StyledPlayerView,视频播放总得显示在某个控件上,而StyledPlayerView就是负责这项工作的。

接下来,定义一个ExoPlayer和StyledPlayerView,并初始化它们。

 	private ExoPlayer mPlayer;
    private StyledPlayerView mVideoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
		
        mPlayer = new ExoPlayer.Builder(this.getApplication()).build();
        
        mVideoView = findViewById(R.id.videoView);
        mVideoView.setPlayer(mPlayer);
    }

接下来,准备好视频,URL可以是本地的视频地址也可以是网络视频地址。测试用的mp4可以在这里找到。

	public void onPlayClicked(View view) {
        if(!mPlayer.isLoading()){
            MediaItem mediaItem = MediaItem.fromUri("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
            mPlayer.setMediaItem(mediaItem);
            mPlayer.prepare();
        }
        mPlayer.play();
	}

	public void onPauseClicked(View view) {
        mPlayer.pause();
    }

由于涉及到网络请求和本地文件访问,所以还需要加上权限。高版本的Android可能还会出现请求失败的问题,可以参看这篇文章

	<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

	<application
        ...
        android:usesCleartextTraffic="true">

当设备跳到其他App页面或Home页面时,需要把暂停播放的视频。

	@Override
    protected void onPause() {
        super.onPause();
        mPlayer.pause();
    }

页面退出时记得释放资源,否则可能引起内存泄漏。

	@Override
    protected void onDestroy() {
        super.onDestroy();
        mPlayer.release();
    }

添加监听

如果需要监听播放器的状态,只需添加Listener即可。Listener接口包含了非常多的方法,其中最常用的就是 onPlaybackStateChanged 和 onIsPlayingChanged。

		mPlayer.addListener(new Player.Listener() {
            @Override
            public void onPlaybackStateChanged(int playbackState) {
                switch(playbackState){
                	//加载缓存且还未准备好时触发
                    case Player.STATE_BUFFERING:
                        Toast.makeText(MainActivity.this, "buffering", Toast.LENGTH_SHORT).show();
                        break;

					//视频准备完毕时触发
                    case Player.STATE_READY:
                        Toast.makeText(MainActivity.this, "ready", Toast.LENGTH_SHORT).show();
                        break;

					//视频播放结束时触发
                    case Player.STATE_ENDED:
                        Toast.makeText(MainActivity.this, "finished", Toast.LENGTH_SHORT).show();
                        break;
                }
            }

            @Override
            public void onIsPlayingChanged(boolean isPlaying) {
           		//播放状态改变时触发
                if(isPlaying){
                    Toast.makeText(MainActivity.this, "play", Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(MainActivity.this, "pause", Toast.LENGTH_SHORT).show();
                }
            }
        });

最后

本篇讲述了ExoPlayer的上手教程,下一篇讲述ExoPlayer播放列表的常用功能。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值