Android-推荐一个视频压缩库RxFFmpeg

2023-05-16

图片来源于网络

最近项目当中有遇到上传视频的时候,需要做合理压缩的需求。分享一下我使用的视频压缩库,希望能帮助遇到同样有视频处理的需求的小伙伴。

RxFFmpeg依赖

这个开源库一共有三个版本,这里贴两个版本的依赖:

//完整版
implementation 'com.github.microshow:RxFFmpeg:4.9.0'
//极速版 (预计占用 4M 左右空间),主要移除了一些不常用的编解码器
implementation 'com.github.microshow:RxFFmpeg:4.9.0-lite'

迷你版需要找开源库的大佬付费定制版本,如果真的有特别需求的小伙伴可以去GitHub的RxFFmpeg主页了解一下。

NDK支持

ndk {
    //目前已支持 "armeabi-v7a","arm64-v8a","x86","x86_64" 平台架构
    abiFilters "armeabi-v7a","arm64-v8a","x86","x86_64"
}

这里NDK支持按照自己的需求开放,全部支持会增加一定的apk大小。下面来说说相关的库的使用。

debug模式设置

RxFFmpegInvoke.getInstance().setDebug(true);

开始或者关闭debug模式,建议是在Application当中调用。

FFmpeg使用举例

由于我个人使用是在项目当中的,这里贴一下开源库的代码:


    private void runFFmpegRxJava() {

        String text = "ffmpeg -y -i /storage/emulated/0/1/input.mp4 -vf boxblur=25:5 -preset superfast /storage/emulated/0/1/result.mp4";

        String[] commands = text.split(" ");

        myRxFFmpegSubscriber = new MyRxFFmpegSubscriber(this);

        //开始执行FFmpeg命令
        RxFFmpegInvoke.getInstance()
                .runCommandRxJava(commands)
                .subscribe(myRxFFmpegSubscriber);

    }

    public static class MyRxFFmpegSubscriber extends RxFFmpegSubscriber {

        private WeakReference<HomeFragment> mWeakReference;

        public MyRxFFmpegSubscriber(HomeFragment homeFragment) {
            mWeakReference = new WeakReference<>(homeFragment);
        }

        @Override
        public void onFinish() {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("处理成功");
            }
        }

        @Override
        public void onProgress(int progress, long progressTime) {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                //progressTime 可以在结合视频总时长去计算合适的进度值
                mHomeFragment.setProgressDialog(progress, progressTime);
            }
        }

        @Override
        public void onCancel() {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("已取消");
            }
        }

        @Override
        public void onError(String message) {
            final HomeFragment mHomeFragment = mWeakReference.get();
            if (mHomeFragment != null) {
                mHomeFragment.cancelProgressDialog("出错了 onError:" + message);
            }
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (myRxFFmpegSubscriber != null) {
            myRxFFmpegSubscriber.dispose();
        }
    }

执行FFmpeg命令

RxFFmpegInvoke.getInstance().runCommand(command, null);

这种调用方式是同步的。

中断FFmpeg命令

 RxFFmpegInvoke.getInstance().exit();

这个方法建议在onDestory()的时候调用,防止内存泄漏。

构建FFmpeg命令

    public static String[] getBoxblur() {
        RxFFmpegCommandList cmdlist = new RxFFmpegCommandList();
        cmdlist.append("-i");
        cmdlist.append("需要压缩的视频路径");
        cmdlist.append("-vf");
        cmdlist.append("boxblur=5:1");
        cmdlist.append("-preset");
        cmdlist.append("superfast");
        cmdlist.append("压缩后输出文件的路径");
        return cmdlist.build();
    }

获取媒体文件的信息

RxFFmpegInvoke.getInstance().getMediaInfo(String filePath);

代码混淆

-dontwarn io.microshow.rxffmpeg.**
-keep class io.microshow.rxffmpeg.**{*;}

按照博客的步骤来,一步步就可以简单实现视频压缩的功能了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android-推荐一个视频压缩库RxFFmpeg 的相关文章

随机推荐

  • 数控机床G-Code在线仿真器

    G code是 CNC xff08 计算机数控 xff09 机床的编程语言 G code指的是Geometric Code xff0c 即几何代码 我们使用这种语言告诉机器做什么或怎么做某事 G code命令指示机器移动位置 移动速度以及要
  • ubuntu误删文件造成软件包信息列表损坏无法更新或安装文件

    因为一开始不知到如何彻底卸载软件包 xff0c 误把文件目录删除 xff0c 造成了软件包信息列表损坏 xff0c 系统无法使用apt get 命令 xff0c 无论实施更新或安装还是卸载都会提示软件包信息列表损坏 xff0c 建议重新安装
  • Docker镜像转换成Dockerfile

    通常我们会通过dockerfile构建docker xff0c 但是我们需要使用dockerfile时 xff0c 想还原其dockerfile xff0c 我们可以使用如下命令 docker run v var run docker so
  • 使用iperf测试网络速度--windows

    下载 下载iperf的Windows版本 xff1a iperf官网地址 这里下载的版本是iperf 3 1 3 win32 xff0c 电脑使用的是XP系统 下载文件中有cygwin1 dll xff0c cyggcc s 1 dll x
  • [最新]ubuntu22.04安装kubernetes1.25 k8s1.25

    条件 2G内存2 CPU网络连接 xff08 内网公网都可以 xff09 唯一的主机名 xff0c mac地址6443 xff0c 10650等端口禁用Swap20 GB var目录磁盘空间Sudo 用户权限 主机准备 Master Nod
  • hadoop目录介绍(各目录功能介绍)

    hadoop目录 1 bin xff1a 2 sbin3 etc4 lib5 logs6 include7 libexec8 share目录 介绍hadoop的目录 首先进入hadoop查看目录 挑重要的介绍 1 bin xff1a bin
  • Linux操作文件的系统调用

    操作文件的系统调用 1 文件操作有关的系统调用 open xff08 xff09 read xff08 xff09 write xff08 xff09 close xff08 xff09 1 xff09 open xff08 xff09 i
  • MySQL 分组查询

    文章目录 分组查询分组函数1 功能2 分类3 特点3 简单的使用4 和distinct搭配使用5 count函数的具体介绍6 和分组函数一同查询的字段有要求 分组查询1 语法2 简单的分组查询3 添加筛选条件3 1添加分组前的筛选3 2添加
  • Android-推荐一个视频播放库JZVideo

    最近项目当中有用到视频播放器这个功能 xff0c 分享一个我的开发心得 一般情况下 xff0c 我们不会去写一个视频播放器 xff0c 因为需要很多知识和播放场景考虑 分享一个我使用到的视频播放器的库 xff0c JZVideo 俗称饺子播
  • java zip压缩/解压工具类 ZipUtil

    public class ZipUtil public static void main String args throws Exception String ss 61 new String 2 ss 0 61 34 D adManag
  • echarts纯option制作自定义日历

    type 61 39 custom 39 34 tooltip 34 34 position 34 34 top 34 34 formatter 34 function p var format 61 echarts format form
  • hdparm命令详解

    hdparm命令来自于英文词组 hard disk parameters 的缩写 其功能是用于显示与设定硬盘参数 对于初次接手一块硬盘设备 了解相关性能属性有很好的帮助 nbsp 语法格式 hdparm 参数 设备名 nbsp 常用参数 n
  • Debian中配置JDK的环境

    在安装完Debian后 xff0c 系统中已经包含了open jdk但是该版本的jdk在开发java程序时有可能出现一些错误 xff0c 但对于不是开发而是普通使用的情况下一般没有太多问题 如果想要进行开发java的程序 xff0c 必须更
  • 【工控机开发】debian下安装QT及Opencv

    1 debian下安装QT开发环境 最近有需求要把虚拟机里面的程序直接在一台工控机上跑 xff0c 也就需要搭建相应的开发环境 首先说明下 xff0c debian下安装QT与在ubuntu下应该是有所区别的 xff0c 一开始偶我在deb
  • 考勤统计,一张表查询每月的员工考勤数据

    近期根据公司人事要求 写了一些关于考勤统计的报表 主要是查询员工每月的考勤数据 要求一行数据显示员工的当月的每天的考勤信息 标的样式如下 然后 根据考勤表 写了如下SQL语句 来实现报表的查询 谨以此做记录 以备后续查阅 SELECT De
  • 无法为数据库中的对象分配空间,因为‘PRIMARY‘文件组已满问题处理方式

    今天公司同事反馈 在手机APP端进行业务操作时 提示无法为数据库中的对象分配空间 因为 PRIMARY 文件组已满 如下所示 出现这个问题的原因是数据库中设置了Log日志限制了文件增长 设置如下所示 然后修改了相关设置 解决该问题 一般出现
  • C#如何连接SAP调用SAP接口函数

    在项目中我们经常会遇到SAP与其他应用系统对接的情况 xff0c 如OA对接SAP的FI HR模块 xff0c 生产系统对接SAP的MM模块等等 这里和大家介绍下C 如果调用SAP接口 xff0c 从而调用SAP接口函数 下面先贴出代码 这
  • SQLServer 分页分页查询优化方案,1秒内查询20万条数据的表

    最近在做sql分页查询的话 发现数据表中的数据量非常大的话 使用count 去统计行数的话 还是非常慢的 20多万条数据的表 用count查询 大概在9秒左右 服务器是4核8G内存的 5秒左右的时间 还是比较难以接受的 9秒时间的SQL语句
  • SQL Server 实现邮件发送功能(配置步骤及存储过程源码)

    日常企业开发中经常会遇到邮件推送的场景 我们利用SQL Server也可以实现邮件发送功能 本文主要和大家分享下利用SQL Server实现邮件发送的具体步骤 1 配置邮件服务器 配置邮件服务器 在SQL Server服务器上面选择 管理
  • Android-推荐一个视频压缩库RxFFmpeg

    最近项目当中有遇到上传视频的时候 xff0c 需要做合理压缩的需求 分享一下我使用的视频压缩库 xff0c 希望能帮助遇到同样有视频处理的需求的小伙伴 RxFFmpeg依赖 这个开源库一共有三个版本 xff0c 这里贴两个版本的依赖 xff