android 高级之旅 (五) VideoView 和 Vitamio的基本用法

一、 VideoView

(一)、使用要点

1.通过videoView.setVideoURI(Uri.parse(file.getAbsolutePath()));设置要播放的数据源
2.可以使用系统自带的控制栏,创建方式如下:
MediaController mediaController = new MediaController(this);
3.使用系统自带的控制栏时需要将VideoView和控制栏进行双向绑定。示例如下:
//将MediaController和VideoView绑定到一起
videoView.setMediaController(mediaController);
//双向绑定,将VideoView绑定到MediaController
mediaController.setMediaPlayer(videoView);
4.可以根据业务需求调整控制栏的位置:
//设置MediaController的左上右下的位置
mediaController.setPadding(0,0,0,200);
(二)、示例代码

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        videoView = (VideoView) findViewById(R.id.video_view);
        //设置播放文件的uri
        File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "曾经的你.mp4");
        videoView.setVideoURI(Uri.parse(file.getAbsolutePath()));
        MediaController mediaController = new MediaController(this);
        //设置MediaController的左上右下的位置
        mediaController.setPadding(0,0,0,200);
        //将MediaController和VideoView绑定到一起
        videoView.setMediaController(mediaController);
        //双向绑定,将VideoView绑定到MediaController
        mediaController.setMediaPlayer(videoView);
        //播放视频
//        videoView.start();
    }

    public void play(View view) {
        videoView.start();
    }

    public void pause(View view) {
        videoView.pause();
    }
}

二、 Vitamio

(一)、三方类库引用步骤

1.创建一个空的Library
2.将Vitamio库文件中的res,src,AndroidManifest.xml文件拷贝到新创建的Library的src\main目录下
3.将Vitamio库文件中的libs文件夹下的四个文件夹拷贝到新创建的库文件的Libs文件夹下
4.在新创建的文件下创建一个jniLibs文件夹(new–>Folder–>JNI Folder),在创建的过程中,选择change folder location,然后将文件名修改为jniLibs
5.修改库文件的gradle,将sourceSets { main { jni.srcDirs = [‘src/main/jni’, ‘src/main/jniLibs’] } }改为sourceSets { main { jniLibs.srcDirs = [‘libs’] } }
6.给App工程添加依赖

注意:1-5也可以通过导入类库的方式添加,导入完成后注意修改gradle文件中buildToolsVersion节点的值。

(二)、使用要点
1.可以使用Vitamio播放网络视频
2.Vitamio的用法和VideoView基本一致
3.使用Vitamio播放网络视频时一定要初始化,初始化代码如下:
Vitamio.initialize(this)
4.使用Vitamio播放网络视频时可以设置缓冲监听,设置方式如下:

//设置缓冲监听
videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
    //percent表示缓冲百分比
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        cachePercent.setText("已缓冲:" + percent + "%");
    }
});
videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        switch (what) {
            //开始缓冲
            case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                cachePercent.setVisibility(View.VISIBLE);
                netSpeed.setVisibility(View.VISIBLE);
                videoView.pause();
                break;
            //缓冲结束
            case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                cachePercent.setVisibility(View.GONE);
                netSpeed.setVisibility(View.GONE);
                videoView.start();
                break;
            //正在缓冲
            case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
                netSpeed.setText("下载速度:" + extra + "kb/s");
                break;
        }
        return true;
    }
});

(三)、示例代码

public class MainActivity extends AppCompatActivity {

    private TextView cachePercent;
    private TextView netSpeed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        cachePercent = (TextView) findViewById(R.id.cache_percent);
        netSpeed = (TextView) findViewById(R.id.net_speed);
        //当初始化成功时再来加载网络视频
        if (Vitamio.initialize(this)) {
            final VideoView videoView = (VideoView) findViewById(R.id.video_view);
            videoView.setVideoURI(Uri.parse("http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com/D046015255134077DDB3ACA0D7E68D45.flv"));
            MediaController controller = new MediaController(this);
            videoView.setMediaController(controller);
            controller.setMediaPlayer(videoView);
            //设置缓冲监听
            videoView.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
                //percent表示缓冲百分比
                @Override
                public void onBufferingUpdate(MediaPlayer mp, int percent) {
                    cachePercent.setText("已缓冲:" + percent + "%");
                }
            });
            videoView.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    switch (what) {
                        //开始缓冲
                        case MediaPlayer.MEDIA_INFO_BUFFERING_START:
                            cachePercent.setVisibility(View.VISIBLE);
                            netSpeed.setVisibility(View.VISIBLE);
                            videoView.pause();
                            break;
                        //缓冲结束
                        case MediaPlayer.MEDIA_INFO_BUFFERING_END:
                            cachePercent.setVisibility(View.GONE);
                            netSpeed.setVisibility(View.GONE);
                            videoView.start();
                            break;
                        //正在缓冲
                        case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
                            netSpeed.setText("下载速度:" + extra + "kb/s");
                            break;
                    }
                    return true;
                }
            });
            videoView.start();
//            videoView.pause();
//            videoView.stopPlayback();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值