Android Studio 导入 Vitamio及横竖屏切换

来源:互联网 发布:世界地图销售网络下载 编辑:程序博客网 时间:2024/06/06 20:52

建议不要使用Vitamio,各种深坑

https://github.com/Bilibili/ijkplayer看看bilibili的开源播放器

Vitamio

官方:https://www.vitamio.org/
GitHub:https://github.com/yixia/VitamioBundle

Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,支持 MMS, RTSP, RTMP, HLS(m3u8) 等常见的多种视频流媒体协议,包括点播与直播。

1.下载Vitamio

去官网下载即可

  • 地址https://www.vitamio.org/Download/

2.解压并导入Android

  • 找到到文件夹VitamioBundle

    VitamioBundle

  • File > New > New Module
    这里写图片描述

  • 导入完成后是这样的

    这里写图片描述

3.导入到自己的项目(即不使用Vitamio的libiary,强迫症专属)

这里写图片描述

A.在自己的目录下建立io.vov.vitamio

并导入所有的类,以及将jniLibs目录拷贝到main目录下,还有相关的资源文件

B.在AndroidManifest.xml文件中写入

<activity android:name="io.vov.vitamio.activity.InitActivity"             android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"android:launchMode="singleTop"android:theme="@android:style/Theme.NoTitleBar"android:windowSoftInputMode="stateAlwaysHidden"/>

并加入相应的权限

C.在你喜欢的地方初始化Vitamio

开玩笑的,放在activity或者是Application的onCreate中

Vitamio.isInitialized(application.getApplicationContext());


3.Vatimio的使用

A.界面的搭建

这里写图片描述

可以看到
整个页面主要分上下两层,主要是为了视屏全屏的时候能方便的隐藏整个下面的布局

B.使用

在此之前为了方便的使用视屏全屏播放,对MediaController(package io.vov.vitamio.widget)做一个小小的改造:
添加一个构造:主要用于把视屏,进度条等放到一个View中,便于全屏展示

//这个全屏的操作可把我难坏了,看到这个真的是为原作者的机智点赞  public MediaController(Context context,boolean fromXml,View container) {    super(context);    initController(context);    mFromXml = fromXml;    mRoot = makeControllerView();    //这个地方的FrameLayout.LayoutpParams是因为布局文件中要把MediaController的视图作为childView加到一个FrameLayout中去    LayoutParams p = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);    //想怎样布局MediaController就尽情的发挥这个LayoutParams吧    p.gravity = Gravity.BOTTOM;    mRoot.setLayoutParams(p);    ((FrameLayout)container).addView(mRoot);  }

接着你就可以愉快的玩耍了:
在oncreate中调用

  initVitamioView();
//初始化控件private void initVitamioView() {//VideoViewmVideoView = (VideoView) findViewById(R.id.buffer);//这个就是包裹整个视屏模块的FrameLayoutfl_controller = (FrameLayout) findViewById(R.id.fl_controller);//缓冲时出现的进度条pb = (ProgressBar) findViewById(R.id.probar);//播放进度,并可以拖动调节视屏播放位置downloadRateView = (TextView) findViewById(R.id.download_rate);loadRateView = (TextView) findViewById(R.id.load_rate);//设置视屏setVideoURI可以缓冲并播放//setVideoPath()缓冲完再播放mVideoView.setVideoURI(Uri.parse(TextUtils.isEmpty(path)?defaultPath:path));//这里使用自定义的那个MediaController构造mMediaController= new MediaController(this, true, fl_controller);//这里的监听其实是在MediaController中自己定义的,主要就是全屏的切换按钮mMediaController.setOnControllerClick(new MediaController.OnControllerClick() {     @Override     public void OnClick(int type) {         if (type == 0) {  //表示点击切换全屏按钮              if (isPortrait) {                  //不是全屏,切换为全屏                 //代码块1               } else {                  //是全屏,近来就切为原来的大小                 //代码块2               }          }          }        });//类似绑定 mVideoView.setMediaController(mMediaController);//隐藏控制模块mMediaController.setVisibility(View.GONE);mVideoView.requestFocus();//设置对视屏信息的监听mVideoView.setOnInfoListener(this);//视屏缓冲的监听mVideoView.setOnBufferingUpdateListener(this);//视屏OKmVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {     @Override     public void onPrepared(MediaPlayer mediaPlayer) {         //设置播放速度         mediaPlayer.setPlaybackSpeed(1.0f);            }        });    }

补充代码块1

RelativeLayout.LayoutParams fl_lp = new RelativeLayout.LayoutParams(displayheight, displayWidth);                        fl_controller.setLayoutParams(fl_lp);//设置横屏                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  //这样mVideoView会自己充满全屏                        mVideoView.setVideoLayout(VideoView.VIDEO_LAYOUT_SCALE, 0);                        isPortrait = false;

代码块2

RelativeLayout.LayoutParams fl_lp = new RelativeLayout.LayoutParams(                                LinearLayout.LayoutParams.MATCH_PARENT,                                DensityUtils.dip2px(ClassRoomActivity.this,200)                        );                        fl_controller.setLayoutParams(fl_lp);                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);                        isPortrait = true;
/* * 横竖屏切换的时候回走这个回调 * */@Overridepublic void onConfigurationChanged(Configuration newConfig) {        //屏幕切换时,设置全屏        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {            //隐藏下面的布局和标题            tLBelow.setVisibility(View.GONE);            mTitlebar.setVisibility(View.GONE);        }        if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {             //显示下面的布局和标题            tLBelow.setVisibility(View.VISIBLE);            mTitlebar.setVisibility(View.VISIBLE);        }        super.onConfigurationChanged(newConfig);    }

C.两个重要的监听(上面已经注册过了)

//缓冲的监听@Override    public void onBufferingUpdate(MediaPlayer mp, int percent) {    //显示缓冲进度        loadRateView.setText(percent + "%");    }
//视屏信息监听@Override    public boolean onInfo(MediaPlayer mp, int what, int extra) {        switch (what) {        //开始缓冲            case MediaPlayer.MEDIA_INFO_BUFFERING_START:                if (mVideoView.isPlaying()) {                    mVideoView.pause();                    pb.setVisibility(View.VISIBLE);                    downloadRateView.setText("");                    loadRateView.setText("");                    downloadRateView.setVisibility(View.VISIBLE);                    loadRateView.setVisibility(View.VISIBLE);                }                break;                //停止缓冲,这里自动开始播放            case MediaPlayer.MEDIA_INFO_BUFFERING_END:                mVideoView.start();                pb.setVisibility(View.GONE);                downloadRateView.setVisibility(View.GONE);                loadRateView.setVisibility(View.GONE);                break;            case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:                //缓冲的...那个啥    change                downloadRateView.setText("" + extra + "kb/s" + "  ");                break;        }        return true;    }

4.就这样

对了,完事记得

@Override    protected void onDestroy() {            mVideoView.stopPlayback();           super.onDestroy();    }

基本就是这样了,其他的问题自己解决一下就好了…

1 0
原创粉丝点击