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

来源:互联网 发布:算法入门经典书籍推荐 编辑:程序博客网 时间:2024/06/05 03:18

一、 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();        }    }}