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. IC/FPGA校招笔试题分析(一)
  2. 怎样实现两个线程共享一个集合_面试高频考察点:几种线程安全的Map解析
  3. 在.m中的@interface (原创)
  4. Java IO - 字符流
  5. ai钢笔工具怎么描线_骨灰级的AI钢笔工具运用技巧
  6. datatable select 性能
  7. powderdesinger显示中英文表名
  8. 【es】ELASTICSEARCH之自定义JAVA代码的安全策略管理
  9. C++标准转换运算符:static_cast
  10. frist Django app — 一、 创建工程
  11. 电工专业技能计算机操作,电工操作技能考核的方案.doc
  12. 锐捷交换机虚拟化配置
  13. Unity3D 《拥挤城市》3D房子建筑透视效果实
  14. 基于mysql实现的网站_基于JavaScript和MySQL的文化平台网站的设计与实现
  15. 性能分析工具JProfile使用指导书-小羊的记录本
  16. 短视频营销三大策略玩法,助力实体商家跑通地生活
  17. workman的学习总结
  18. 静下心来想想,为什么领域模型对于架构师如此重要?
  19. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java扶贫助农系统v7tq9
  20. 如何使用微信开发工具进行小程序开发

热门文章

  1. 山东大学软件学院项目实训第四周
  2. 浅谈架构、操作系统、芯片的理解
  3. 解锁将违法 越狱该怎么办?
  4. lnmp 一键安装包
  5. 企业网站[正能量系列]失业的程序员(一)
  6. 关于信息搜集的部分介绍
  7. 《数字经济》远光软件毕伟:数字化协同创新
  8. numpy序列预处理dna序列_使用机器学习和Python揭开DNA测序神秘面纱
  9. Java 高并发项目笔记
  10. 计算机硬件静电场,静电场场强测量仪设计(毕业论文).doc