Android视频播放框架Vitamio

28 篇文章 0 订阅
1 篇文章 0 订阅

Vitamio 是一款 Android 平台上的全能多媒体开发框架。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。

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

支持 ARMv6 和 ARMv7 两种 ARM CPU,同时对 VFP, VFPv3, NEON 等指令集都做相应优化。

第一、Vitamino框架的导入

     1.开源项目的git地址 https://github.com/yixia/VitamioBundle

     2.下载完成后项目结构

     

    3.导入目录结构中的vitmio文件夹

    3.1快捷键Ctrl+Alt+Shift+S进入如下界面,选择红框的+

    

    3.2选择+出现如下界面,根据下图操作

   


   3.3导入成功之后,在app的build.gradle中配置如下

    compile project(':vitamio')

4.在AndroidMainfest中配置如下

 

<uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<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"></activity>

第二、框架的使用demo

1.demo的git地址:https://github.com/lantian0314/video

2.项目的初始化

Vitamio.initialize(MainActivity.this);

3.xml配置

<io.vov.vitamio.widget.VideoView
            android:id="@+id/video_view_vitamio"
            android:layout_width="match_parent"

            android:layout_height="match_parent" />

4.vitamio的使用

    private VideoView videoView = null;
    String videoPath = "http://qiubai-video.qiushibaike.com/91B2TEYP9D300XXH_3g.mp4";
    String secondPath = "http://bmob-cdn-5540.b0.upaiyun.com/2016/09/09/d0fff44f40ffbc32808db91e4d0e3b4f.mp4";
    private FrameLayout mVideoContanier = null;
    private ImageView mIvThumbnail = null;
    private ImageView mIvPlay = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vitamio);
        if (!LibsChecker.checkVitamioLibs(this)) {
            Toast.makeText(VitamioActivity.this, "Vitamio未初始化OK", Toast.LENGTH_SHORT).show();
            return;
        }
        videoView = (VideoView) findViewById(R.id.video_view_vitamio);
        mVideoContanier = (FrameLayout) findViewById(R.id.fl_layout_vitamio);
        mIvThumbnail = (ImageView) findViewById(R.id.iv_video_thumbnail);
        mIvPlay = (ImageView) findViewById(R.id.iv_video_start);
        setThumbnail();
        videoView.setVideoURI(Uri.parse(secondPath));
        mIvPlay.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.iv_video_start:
                //点击开始隐藏缩略图和开始图标
                mIvThumbnail.setVisibility(View.GONE);
                mIvPlay.setVisibility(View.GONE);
                //准备视频播放
                MediaController mediaController = new MediaController(VitamioActivity.this, true, mVideoContanier);
                videoView.setMediaController(mediaController);
                videoView.setOnPreparedListener(this);
                videoView.setOnCompletionListener(this);
                videoView.setOnErrorListener(this);
                break;
        }
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(VitamioActivity.this, "横屏", Toast.LENGTH_SHORT).show();
            //去掉系统通知栏
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
            //调整视频layout的布局
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            mVideoContanier.setLayoutParams(layoutParams);
            //原视频大小
//            public static final int VIDEO_LAYOUT_ORIGIN = 0;
            //最优选择,由于比例问题还是会离屏幕边缘有一点间距,所以最好把父View的背景设置为黑色会好一点
//            public static final int VIDEO_LAYOUT_SCALE = 1;
            //拉伸,可能导致变形
//            public static final int VIDEO_LAYOUT_STRETCH = 2;
            //会放大可能超出屏幕
//            public static final int VIDEO_LAYOUT_ZOOM = 3;
            //效果还是竖屏大小(字面意思是填充父View)
//            public static final int VIDEO_LAYOUT_FIT_PARENT = 4;
            videoView.setVideoLayout(VideoView.VIDEO_LAYOUT_SCALE, 0);
        } else {
            /*清除flag,恢复显示系统状态栏*/
            Toast.makeText(VitamioActivity.this, "竖屏", Toast.LENGTH_SHORT).show();
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, PixelUtils.dip2px(getApplicationContext(), 220));
            mVideoContanier.setLayoutParams(layoutParams);
        }
        super.onConfigurationChanged(newConfig);
    }

    /**
     * 设置缩略图
     */
    private void setThumbnail() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //设置缩略图,Vitamio提供的工具类。
                final Bitmap videoThumbnail = ThumbnailUtils.createVideoThumbnail(
                        VitamioActivity.this, secondPath
                        , MediaStore.Video.Thumbnails.MINI_KIND);
                if (videoThumbnail != null) {
                    mIvThumbnail.post(new Runnable() {
                        @Override
                        public void run() {
                            mIvThumbnail.setImageBitmap(videoThumbnail);
                        }
                    });
                }
            }
        }).start();
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        Toast.makeText(VitamioActivity.this, "准备好了", Toast.LENGTH_SHORT).show();
        videoView.start();
        videoView.setVideoLayout(VideoView.VIDEO_LAYOUT_SCALE, 0);
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        Toast.makeText(VitamioActivity.this, "播放完了", Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Toast.makeText(VitamioActivity.this, "Error", Toast.LENGTH_SHORT).show();
        return false;
    }




     

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值