XVideo 一个能自动进行压缩的小视频录制库

简介: XVideo 一个能自动进行压缩的小视频录制库

XVideo


微信截图_20220514194733.png


一个能自动进行压缩的视频录制库


关于我


微信截图_20220514194814.png


特征


  • 支持自定义小视频录制时的视频质量。


  • 支持自定义视频录制的界面。


  • 支持自定义最大录制时长和最小录制时长。


  • 支持自定义属性的视频压缩。


演示(请star支持)


微信截图_20220514194917.png


添加Gradle依赖


1.在项目根目录的 build.gradle 的 repositories 添加:


allprojects {
     repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}


2.在主项目的 build.gradle 中增加依赖。


dependencies {
    ···
    implementation 'com.github.xuexiangjys:XVideo:1.0.1'
}


3.进行视频录制存储目录地址的设置。


/**
 * 初始化xvideo的存放路径
 */
public static void initVideo() {
    XVideo.setVideoCachePath(PathUtils.getExtDcimPath() + "/xvideo/");
    // 初始化拍摄
    XVideo.initialize(false, null);
}


视频录制


1.视频录制需要CAMERA权限和STORAGE权限。在Android6.0机器上需要动态获取权限,推荐使用XAOP进行权限申请。


2.调用MediaRecorderActivity.startVideoRecorder开始视频录制。


/**
 * 开始录制视频
 * @param requestCode 请求码
 */
@Permission({PermissionConsts.CAMERA, PermissionConsts.STORAGE})
public void startVideoRecorder(int requestCode) {
    MediaRecorderConfig mediaRecorderConfig = MediaRecorderConfig.newInstance();
    XVideo.startVideoRecorder(this, mediaRecorderConfig, requestCode);
}


3.MediaRecorderConfig是视频录制的配置对象,可自定义视频的宽、高、时长以及质量等。


MediaRecorderConfig config = new MediaRecorderConfig.Builder()
        .fullScreen(needFull)  //是否全屏
        .videoWidth(needFull ? 0 : Integer.valueOf(width)) //视频的宽
        .videoHeight(Integer.valueOf(height))  //视频的高
        .recordTimeMax(Integer.valueOf(maxTime)) //最大录制时间
        .recordTimeMin(Integer.valueOf(minTime)) //最小录制时间
        .maxFrameRate(Integer.valueOf(maxFrameRate)) //最大帧率
        .videoBitrate(Integer.valueOf(bitrate)) //视频码率
        .captureThumbnailsTime(1)
        .build();


视频压缩


使用libx264进行视频压缩。由于手机本身CPU处理能力有限的问题,在手机上进行视频压缩的效率并不是很高,大约压缩的时间需要比视频拍摄本身的时长还要长一些。


LocalMediaConfig.Builder builder = new LocalMediaConfig.Builder();
final LocalMediaConfig config = builder
        .setVideoPath(path)  //设置需要进行视频压缩的视频路径
        .captureThumbnailsTime(1)
        .doH264Compress(compressMode) //设置视频压缩的模式
        .setFramerate(iRate)  //帧率
        .setScale(fScale) //压缩比例
        .build();
CompressResult compressResult = XVideo.startCompressVideo(config);
复制代码


混淆配置


-keep class com.xuexiang.xvideo.jniinterface.** { *; }



相关文章
|
算法
MATLAB求解线性方程组的八种方法
求解线性方程分为两种方法--直接法和迭代法 常见的方法一共有8种 直接法 Gauss消去法 Cholesky分解法 迭代法 Jacobi迭代法 Gauss-Seidel迭代法 超松弛迭代法 共轭梯度法 Bicg迭代法 Bicgstab迭代法
943 0
|
Java
Java“解析时到达文件末尾”解决
在Java编程中,“解析时到达文件末尾”通常指在读取或处理文件时提前遇到了文件结尾,导致程序无法继续读取所需数据。解决方法包括:确保文件路径正确,检查文件是否完整,使用正确的文件读取模式(如文本或二进制),以及确保读取位置正确。合理设置缓冲区大小和循环条件也能避免此类问题。
1107 2
vuecli3 启动服务的时候报错:TypeError: Cannot read property ‘upgrade‘ of undefined
vuecli3 启动服务的时候报错:TypeError: Cannot read property ‘upgrade‘ of undefined
408 0
vuecli3 启动服务的时候报错:TypeError: Cannot read property ‘upgrade‘ of undefined
|
机器学习/深度学习 自然语言处理 达摩院
通义大模型:打造更智能、更灵活的自然语言处理技术
大家好,今天我想向大家介绍一款备受瞩目的自然语言处理技术——通义大模型。作为一种基于深度学习的人工智能技术,通义大模型能够模拟人类的思维方式,实现更智能、更灵活的自然语言处理,为我们的生活和工作带来了极大的便利。
1162 2
通义大模型:打造更智能、更灵活的自然语言处理技术
ly~
|
缓存 监控 编译器
如何优化 SDL 图形库在不同系统中的性能
SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,用于优化不同系统中的图形库性能。在银河麒麟系统中,通过SDL渲染模式提升视频监控客户端性能,支持更多播放路数。优化方法包括:1) 图像加载时使用SDL_ConvertSurface转换图像格式,避免内存中存在多份拷贝;2) 在VSCode下配置SDL时,合理设置编译器选项和项目架构,减少API调用带来的性能开销;3) 使用SDL库在景嘉微7200显卡上优化渲染性能,提高播放路数。综合考虑图像加载优化、系统特性利用及硬件兼容性,以实现最佳性能。
ly~
665 6
|
12月前
|
数据可视化 Python
使用Python进行数据可视化的初学者指南
【10月更文挑战第20天】本文旨在为编程新手提供一个简洁明了的入门指南,通过Python语言实现数据可视化。我们会介绍如何安装必要的库、理解数据结构,并利用这些知识来创建基本图表。文章将用通俗易懂的语言和示例代码,帮助读者快速掌握数据可视化的基础技能。
139 4
|
自然语言处理 数据库 C++
Table-GPT:让大语言模型理解表格数据
llm对文本指令非常有用,但是如果我们尝试向模型提供某种文本格式的表格数据和该表格上的问题,LLM更有可能产生不准确的响应。
775 0
|
机器学习/深度学习 数据采集 存储
【机器学习】数据清洗之识别重复点
【机器学习】数据清洗之识别重复点
530 1
|
存储 Kubernetes 数据安全/隐私保护
kubernetes 中pv的回收策略
在Kubernetes中,持久卷(Persistent Volume,PV)的回收策略可以通过`persistentVolumeReclaimPolicy`字段来定义。这个字段有以下几个可选值:1. `Retain`:保留持久卷,不进行自动回收。当持久卷使用完成后,需要手动进行清理和释放。2. `Delete`:删除持久卷,当持久卷不再被使用时,Kubernetes会自动删除并释放它。3. `Recycle`:回收持久卷,当持久卷不再被使用时,Kubernetes会自动进行回收操作。这种回收策略主要适用于一些旧的存储后端,它会尝试清空持久卷中的数据,但不会保证数据安全。需要注意的是,`Recy
714 0
|
小程序
【边做边学】uniapp里面的生命周期钩子函数
【边做边学】uniapp里面的生命周期钩子函数
463 0