Vitamio是一个优秀的视频框架,全面支持硬件解码与 GPU 渲染,下面就来介绍一下如何接入并使用。

1. 导入Vitamio

因为是Android Studio接入,所以直接下载这个库 https://github.com/yixia/VitamioBundleStudio

下载完成后将vitamio目录解压出来

进入vitamio目录,修改build.gradle文件,源文件的 ANDROID_BUILD_SDK_VERSION和ANDROID_BUILD_TOOLS_VERSION 我们是没有配置的,所以需要修改为与自己项目中app/build.gradle一样,不过 targetSdkVersion 需要<=22,兼容某些机型

compileSdkVersion 30
// buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION
defaultConfig {minSdkVersion 21targetSdkVersion 22
}

接下来就可以导入到Android Studio,File - New - Import Module

2. 封装Vitamio

因为需要加一个进度条功能,所以将Vitamio封装起来更方便扩展。

public class VitamioManager {private static final int PROGRESS = 0x01;private VideoView mVideoView;private OnVideoProgressListener mVideoProgressListener;// 更新进度条private Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(@NonNull Message msg) {switch (msg.what) {case PROGRESS:if (mVideoProgressListener != null) {mVideoProgressListener.onProgress(getCurrentPosition());mHandler.sendEmptyMessageDelayed(PROGRESS, 1000);}break;}return false;}});// 视频播放进度接口public interface OnVideoProgressListener {void onProgress(long progress);}public VitamioManager(VideoView mVideoView) {this.mVideoView = mVideoView;}/*** 设置文件路径*/public void setVideoPath(String path) {mVideoView.setVideoPath(path);}/*** 设置网络路径*/public void setVideoURI(Uri uri) {mVideoView.setVideoURI(uri);}/*** 设置播放速度 [0.5 - 2.0]*/public void setPlaybackSpeed(MediaPlayer mediaPlayer, float speed) {mediaPlayer.setPlaybackSpeed(speed);}/*** 获取当前视频播放的位置*/public long getCurrentPosition() {return mVideoView.getCurrentPosition();}/*** 获取当前视频总长度*/public long getDuration() {return mVideoView.getDuration();}/*** 是否播放*/public boolean isPlaying() {return mVideoView.isPlaying();}/*** 播放*/public void start() {mVideoView.start();mHandler.sendEmptyMessage(PROGRESS);}/*** 暂停*/public void pause() {mVideoView.pause();}/*** 重新播放*/public void resume() {mVideoView.seekTo(0);}/*** 停止播放 释放资源*/public void stopPlayback() {mVideoView.stopPlayback();mHandler.removeMessages(PROGRESS);}/*** 从第几毫秒开始播放*/public void seekTo(int msec) {mVideoView.seekTo(msec);}/*** 视频播放完毕的监听*/public void setOnCompletionListener(MediaPlayer.OnCompletionListener listener) {mVideoView.setOnCompletionListener(listener);}/*** 发生错误的监听*/public void setOnErrorListener(MediaPlayer.OnErrorListener listener) {mVideoView.setOnErrorListener(listener);}/*** 视频加载完成的监听*/public void setOnPreparedListener(MediaPlayer.OnPreparedListener listener) {mVideoView.setOnPreparedListener(listener);}/*** 视频进度监听*/public void setOnVideoProgress(OnVideoProgressListener listener) {this.mVideoProgressListener = listener;}
}
3. 使用

布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"tools:context=".MainActivity"><io.vov.vitamio.widget.VideoViewandroid:id="@+id/vv_video"android:layout_width="match_parent"android:layout_height="match_parent"/><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="#000"app:layout_constraintBottom_toBottomOf="parent"><ImageViewandroid:id="@+id/iv_control"android:src="@drawable/mediacontroller_play"android:layout_width="40dp"android:layout_height="40dp"android:layout_margin="5dp"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"/><SeekBarandroid:id="@+id/sb_bar"android:layout_width="0dp"android:layout_height="wrap_content"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toRightOf="@id/iv_control"app:layout_constraintRight_toLeftOf="@id/tv_video_time"/><TextViewandroid:id="@+id/tv_video_time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dp"android:textColor="#fff"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintRight_toRightOf="parent"tools:text="10:30"/></androidx.constraintlayout.widget.ConstraintLayout></androidx.constraintlayout.widget.ConstraintLayout>

使用前一定要初始化Vitamio

Vitamio.isInitialized(getApplicationContext()); // 初始化Vitamio

接下来设置播放路径,监听视频加载完毕后就播放视频

mVitamioManager = new VitamioManager(mVvVideo);
mVitamioManager.setVideoPath(mVideoPath); // 设置播放路径// 视频加载完成监听
mVitamioManager.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {Log.i(TAG, "onPrepared: 视频加载完毕");mVitamioManager.setPlaybackSpeed(mp, 1.0f); // 设置播放速度long allDuration = mVitamioManager.getDuration(); // 获取视频总时长mVideoAllDuration = Utils.formatTime(allDuration); // 将视频总时长转换成 h:m:smSbBar.setMax((int) allDuration); // 设置进度mVitamioManager.start(); // 播放视频setIvControl(false);}
});

别忘了清理资源

@Override
protected void onDestroy() {super.onDestroy();if (mVitamioManager != null) {mVitamioManager.stopPlayback(); // 停止播放}
}

Demo在此

其实有个问题,Vitamio在app返回后就会释放相关资源,点回app后就会自动加载资源并重新开始播放视频。还没仔细研究是什么原因造成的,所以没有实现app返回后暂停视频播放,点回app后点击播放按钮再继续播放视频。

Android使用Vitamio来打造自己的视频播放器相关推荐

  1. Vitamio使用篇,打造强悍的视频播放器

    Vitamio是一个优秀的Android视频框架,很多人也在用,所以这篇文章就是带大家接入Vitamio并且使用的 首先我们要明白一个需求就是,我们需要做一个视频播放器,那这样的话,我们首先想到的就是 ...

  2. Android vitamio、节操、ijkplayer视频播放器优缺点对比

    Vitamio 是一款 Android 与 iOS 平台上的全能多媒体开发框架 Vitamio 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频,还 ...

  3. Android studio+idea+tomcat+mysql实现网络视频播放器app全套源码(前端后端都有)

    目录 文章目录 前言 一.功能介绍 1.登录页背景视频(主流app必备) 2.glide实现下拉刷新和上拉无限加载视频列表 3.exoplayer播放器实现全视频无卡顿播放.全屏播放 4.二维码生成器 ...

  4. 《android多媒体api》之MediaPlayer自定义视频播放器

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  5. 基于android实现模拟爱奇艺本地视频播放器app项目演示【附项目源码+论文说明】分享

    软件概述 软件用途 本软件的开发是xxxx. a.本软件的开发目的:熟悉android开发的基本知识,包括四大组件的使用方法.列表控件的数据源绑定.数据库的操作等. b.基本原理:通过数据库存储用户和 ...

  6. Android视频播放器的来世今生

    android音视频探究 1 获取mediaplayer 实例          final MediaPlayer mediaPlayer = new MediaPlayer();          ...

  7. 视频播放器+android,Android视频播放器

    Video Player for Android,最简单易用的视频播放器. Video Player for Android是目前市场上最简单易用的视频播放器.它的智能检测自适应算法使得它更加方便快捷 ...

  8. 零基础用Android Studio实现简单的本地视频播放器

    用Android Studio的VideoView组件实现简单的本地视频播放器 一.创建Android Studio项目 二.在界面布局文件activity_main.xml中定义VideoView组 ...

  9. android电影播放器,安卓视频播放器哪个好 五款主流视频播放器对比

    如今手机的流行趋势是屏幕越来越大,从3.5寸到3.7寸再到现在不少主流的安卓手机所采用的4.3寸屏幕,用手机来看电影已经是一项在我们日常生活中使用频率非常高的功能.而手机处理器性能的进化也让我们可以轻 ...

最新文章

  1. 通过apt自动生成建造者模式单线程版代码(二)
  2. python调用kafka拉取数据失败_无法使用kafkapython从另一个容器向Kafka容器发出请求...
  3. Web IOC 容器初体验
  4. C/C++打造Windows岁月留声机
  5. Ansible: hosts文件拆分为inventory和定义inventory全局变量
  6. ssh整合出现的错误
  7. 8.1-5shell介绍 ,命令历史 ,命令补全和别名,通配符,输入输出重定向
  8. bc8android汽车中控屛功能有哪些,安卓大屏功能强大 卡仕达顺车机一机全能
  9. 2015年9月01日【磁盘和文件系统管理】-JY1506402-19+liuhui880818
  10. php 修复excel 乱码,php下载excel乱码的解决方法
  11. 科学计算机壁纸,Nature大盘点:2020年最佳科学影像,每一张都是壁纸,每一张都是历史...
  12. python控制键盘游戏内无效_python 采坑总结 调用键盘事件后导致键盘失灵的可能原因...
  13. matlab中的三次样条曲线拟合,三次样条拟合典型实例.doc
  14. 整理了46个python人工智能库,详细介绍(含资源),建议收藏
  15. 弹性布局(骰子六个面制作)
  16. MAC微信接收到的文档打开都变成(只读)解决办法
  17. java地理坐标转屏幕_(转)经纬度坐标转换为屏幕坐标
  18. 机器学习分类器模型评价指标
  19. 光遇测试服怎么显示服务器错误,光遇服务器错误怎么办_光遇服务器错误解决方法_3DM手游...
  20. android diy固件,官方固件不给力?咱自己DIY!手把手教你修改固件!

热门文章

  1. 权限管理中的RBAC与ABAC
  2. 洛谷P1489 猫狗大战
  3. TP-WR842N虚拟服务器设置,TP-Link WR842N无线路由器怎么设置无线桥接
  4. 驯龙高手java版_石器时代2驯龙高手
  5. WPS中excel 把ABCD改成数字
  6. 电感RDC、IDC值是什么意思?或DCR DCI
  7. 21世纪东方美女标准[男士参考女士学习]
  8. t-s模糊神经网络matlab,基于T-S模型的模糊神经网络,Fuzzy Neural Network based on T-S mode,音标,读音,翻译,英文例句,英语词典...
  9. 线性回归、岭回归和Lasso回归
  10. PageHelper使用方法