Vitamio多媒体开发框架

来源:互联网 发布:飞升十方神器升级数据 编辑:程序博客网 时间:2024/04/28 06:06

1.Vitamio框架简介

Vitamio的中文名称为“维他蜜”。Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染。Vitamio 凭借其简洁易用的 API 接口赢得了全球众多开发者的青睐。到目前,全球已经有超过一万款应用在使用 Vitamio,覆盖用户超过 5亿。


下载地址:https://www.vitamio.org/Download/


2.如何使用




步骤二:将导入模块SDK和构建工具的版本改成我们自己工程的版本









3.给视频加上手势控制:双击暂停或播放、滑动改变音量和屏幕亮度

Vitamio的java代码+手势控制代码如下:

public class PlayActivity extends AppCompatActivity {    private VideoView videoView_play;    private MediaController controller = null;    //手势识别的类    private GestureDetector gestureDetector;    //屏幕尺寸大小为原始尺寸    private int mlayout = VideoView.VIDEO_LAYOUT_ZOOM;    //当前声音    private int mVolume = -1;    //最大声音    private int mMaxVolume;    //音频管理器    private AudioManager mAudioManager;    //当前亮度    private float mBrightness = -1f;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Vitamio.isInitialized(this);        setContentView(R.layout.activity_play);        initView();        initData();    }    /**     * 初始化View     */    private void initView() {        videoView_play = (VideoView) findViewById(R.id.videoView_play);        //实例化手势识别类        gestureDetector = new GestureDetector(this, new MyGestureDetector());        controller = new MediaController(this);        //初始化音频管理器        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);        //获取系统的最大声音        mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    }    /**     * 初始化数据     */    private void initData() {        //获取传递过来的uri        Intent intent = getIntent();        String uri = intent.getStringExtra("uri");        Log.i("uri", "--->>>" + uri);        //设置视频地址        videoView_play.setVideoURI(Uri.parse(uri));        //设置Controller,注意一定要是io.vov.vitamio.widget.MediaController        videoView_play.setMediaController(controller);        //给Controller设置VideoView        controller.setMediaPlayer(videoView_play);        //获得焦点        videoView_play.requestFocus();        //改变屏幕方向        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);        //VideoView.VIDEO_LAYOUT_ZOOM表示播放为视屏画面原始大小,第二个参数表示设置视频的宽高比,0表示自动检测        //videoView_play.setVideoLayout(VideoView.VIDEO_LAYOUT_ZOOM, 0);        //开始播放        videoView_play.start();    }    /**     * 处理手势事件     *     * @param event     * @return     */    @Override    public boolean onTouchEvent(MotionEvent event) {        //判断我们的手势识别类是否进行了识别操作        if (gestureDetector.onTouchEvent(event)) {            return true;        }        mVolume = -1;        mBrightness = -1f;        return super.onTouchEvent(event);    }    /**     * 识别手势操作的内部类     */    public class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {        //双击屏幕的方法        @Override        public boolean onDoubleTap(MotionEvent e) {            //判断媒体是否在播放状体,是:true,否:false            if (videoView_play.isPlaying()) {                //暂停播放                //Log.i("pause", "--->>>" + "暂停了");                videoView_play.pause();            } else {                //sLog.i("start", "--->>>" + "播放了");                videoView_play.start();            }            //一定要return true            return true;        }        //滑动        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {            //获取坐标点            float mOldX = e1.getX(), mOldY = e1.getY();            int y = (int) e2.getRawY();            //窗口管理器            Display disp = getWindowManager().getDefaultDisplay();            //获得屏幕宽高            int windowWidth = disp.getWidth();            int windowHeight = disp.getHeight();            //经过计算判断是否滑动的是右边            if (mOldX > windowWidth * 4.0 / 5) {                //将滑动距离带进调节音量的方法中                onVolumeSlide((mOldY - y) / windowWidth);                //经过计算判断是否滑动的是左边            } else if (mOldX < windowWidth / 5) {                //将滑动距离带进调节亮度的方法中                onBrightnessSlide((mOldY - y) / windowHeight);            }            return super.onScroll(e1, e2, distanceX, distanceY);        }    }    ///////////////////////////////////////////////////////////////////////////    // 改变音量和屏幕亮度的方法    ///////////////////////////////////////////////////////////////////////////    /**     * 改变音量     *     * @param percent     */    private void onVolumeSlide(float percent) {        //判断当前音量是否是-1,是则没有获取当前系统音量        if (mVolume == -1) {            //获得系统当前音量            mVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);            //判断当前音量是否为负数,是则设置最小为0            if (mVolume < 0) {                //如果当前音量小于0则给变量赋最小的值0                mVolume = 0;            }        }        //计算用户滑动的距离        int index = (int) ((percent * mMaxVolume) + mVolume);        //判断该距离是否大于最大音量值,是则把给变量赋值为最大值,否则最小值        if (index > mMaxVolume) {            index = mMaxVolume;        } else if (index < 0) {            index = 0;        }        //设置音量        mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, index, 0);    }    /**     * 滑动改变亮度     *     * @param percent     */    private void onBrightnessSlide(float percent) {        if (mBrightness < 0) {            //获得屏幕亮度            mBrightness = getWindow().getAttributes().screenBrightness;            //判断当前亮度是否小于0.01f,是的话则给变量赋值0.01f放置屏幕变黑            if (mBrightness <= 0.01f)                mBrightness = 0.01f;        }        /**WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;         它继承于 ViewGroup.LayoutParams; 它用于向WindowManager描述Window的管理策略。**/        //获取window窗口属性        WindowManager.LayoutParams lpa = getWindow().getAttributes();        //将当前屏幕亮度加上我们移动的距离的值赋给lpa(窗口管理)        lpa.screenBrightness = mBrightness + percent;        //判断当前亮度是否大于1,是则设置为1,(亮度最大只能是1)        if (lpa.screenBrightness > 1.0f)            lpa.screenBrightness = 1.0f;            //判断是否小于0.01,防止黑屏最小设置成0.01        else if (lpa.screenBrightness < 0.01f)            lpa.screenBrightness = 0.01f;        //让设置好的亮度生效        getWindow().setAttributes(lpa);    }}



2 0
原创粉丝点击