更新记录

1.0.5(2022-07-04)

1.增加64位机支持
2.修复若干bug

1.0.3(2021-02-23)

1.修复某些类型视频压缩失败问题

1.0.2(2020-10-26)

1.支持视频压缩后,获取第一帧原尺寸图片
2.单独开放出获取视频第一帧原尺寸图片方法

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 12.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


K-VideoCompressModule 简介

视频压缩android原生插件,现支持如下:

  1. 支持压缩,设置视频输出宽度,高度,视频比特率,帧率
  2. 支持压缩进度回调
  3. 支持读取压缩后视频的第一帧关键图片
  4. 支持多任务同时回调
  5. 支持压缩成功或失败的回调,失败会有原生压缩失败原因
  6. 单独开放出获取原视频分辨率,比特率的方法,可供用户自行定义压缩算法
  7. 单独开放出获取视频第一帧图片的方法

原理及思路,说明如下:

  1. 本插件原理,采用android原生MediaCodec压缩
  2. 压缩算法,默认(即调用插件时,不传宽高,比特率,帧率等参数),最终压缩成的效果是以分辨率1280*720,比特率1600kbps为模板压缩的(原因:录1分钟视频,大小10M左右,清晰度还可以,大小也可以,故照着这个模板压缩),故若原视频分辨率,比特率低于模板,视频基本是不压缩的。若想要压缩到比模板更小,压缩算法需要自己去思考,本插件提供了获取原视频分辨率,比特率的方法,可以根据自己需要,自己去定义视频压缩输出分辨率宽高,比特率,帧率等。
  3. 关于本插件默认压缩算法,现无偿提供给大家,可根据自己需要更改:获取原视频分辨率宽高中的最小值,最小值除以720获取到压缩倍率,然后原视频宽高分别除以倍率得到最终输出视频宽高,比特率除以1600kbps得到倍率,然后原视频比特率除以倍率得到最终输出比特率。关于为什么要计算倍率,直接按模板宽高为输出不可以吗?这是因为要做到尽量与原视频宽高比一致,不能最终输出视频画面扭曲了。
  4. 关于多任务,进度同时回调的调用,也无偿提供给大家,可下载“示例项目”参考代码。
  5. 关于支持压缩视频的格式,本插件采用android原生MediaCodec压缩,故MediaCodec支持的格式,本插件都会支持,经查阅MediaCodec支持大部分视频格式,由于测试机条件限制,只测试了mp4视频格式,没有问题,其它格式,用户需要在试用时谨慎测试一下,若有问题,可在评论区留言,我会及时答复
  6. 有关于输出视频格式,本插件目前输出视频格式为mp4

使用说明

1. 压缩调用方法:
const plugin = uni.requireNativePlugin('K-VideoCompressModule');
plugin.compressAction({ oriPath: 'path视频原路径' }, result => {
    if (result && result.code === '0' && result.path && result.path.length > 0) {
        //压缩成功回调
        //若result.path无法被uni识别,如在uni的video中无法播放,uni.uploadFile无法识别路径,请在本路径前加"file://""后再使用
    } else if (result && result.progress && result.progress > 0) {
        //压缩进度回调                
    }
});

传参说明:

参数 类型 默认值 是否必填 说明
oriPath String 必填 要压缩的视频路径
outWidth Integer null 非必填 视频输出分辨率宽度
outHeight Integer null 非必填 视频输出分辨率高度
outBitrate Integer null 非必填 视频输出比特率,单位bps,例如1600kbps的比特率,传入时需要乘以1000转化为bps单位
outFrameRate Integer null 非必填 视频输出帧率,此字段需要慎传,太小,可能会卡
isNeedFramePic Boolean null 非必填 视频压缩完成后,是否需要输出第一帧原尺寸图片

返回参数(Json格式)说明:

//成功或失败返回:  
{
"code":"0",//"0"-成功,非"0"-失败
"msg":"success",
"oriPath":"原视频路径",
"path":"压缩后,视频输出路径",//注意若这个路径无法在uni中使用,请自行在这个路径前加"file://"后,再尝试使用
"framePicPath":"压缩完成后,视频的第一帧原尺寸图片路径",//若传参“isNeedFramePic”为true,会返回此字段,否则没有此字段
}  
//压缩进度返回,此为实时返回  
{
"oriPath":"原视频路径",
"progress":0.506214666,//压缩进度,float类型,范围0-1
}  
2. 获取视频信息调用方法:
const dyVideoCompress = uni.requireNativePlugin('K-VideoCompressModule');
dyVideoCompress.getVideoInfo({ oriPath: 'path视频原路径' }, result => {

});

传参说明:

参数 类型 默认值 是否必填 说明
oriPath String 必填 要压缩的视频路径

返回参数(Json格式)说明:

//成功或失败返回:  
{
"code":"0",//"0"-成功,非"0"-失败
"msg":"success",
"oriPath":"原视频路径",
"width":1920,
"height":1080,
"bitrate":17023000//单位bps
}  
3. 获取视频第一帧原尺寸图片的方法:
const dyVideoCompress = uni.requireNativePlugin('K-VideoCompressModule');
dyVideoCompress.getVideoFrame({ oriPath: 'path视频原路径' }, result => {

});

传参说明:

| 参数        | 类型    |  默认值  |  是否必填  |  说明  |
| :---------    | :----- | :----   | :----     | :---- |
| oriPath     | String  |          |    必填    |要压缩的视频路径     |  

返回参数(Json格式)说明:

//成功或失败返回:  
{
"code":"0",//"0"-成功,非"0"-失败
"msg":"success",
"oriPath":"原视频路径",
"framePicPath":"视频第一帧原尺寸图片路径"//注意若这个路径无法在uni中使用,请自行在这个路径前加"file://"后,再尝试使用
}  
4. 相关说明:

(1)关于压缩效果,测试时,华为mate8,1分钟视频123M左右大小,默认压缩后,13M左右,10秒左右压缩完毕。
(2)关于压缩进度回调,若使用log打印,在hbuilder中查看进度时,因为插件为异步,到hbuilder中会同步打印,所以打印会很慢,实现上已经压缩完毕;遇到的现象是,实际已经压缩完毕,而hbuilder中进度的打印还在回调。
(3)关于多个视频文件同时压缩,建议uni中,多线程同时开启任务压缩,在每个线程任务中,调用插件,压缩的进度和结果也会在每个线程任务中回调回去。

5. 问题汇总(重要的事说三遍,请注意看这里!请注意看这里!请注意看这里!):

1. 若压缩后,返回的路径无法使用(如,在video组件中无法播放,uni.uploadFile无法识别到本路径),请在压缩返回后的路径前加"file://"再尝试使用
2. 若压缩后,视频第一帧图片路径无法使用(如,在image组件中无法展示,uni.uploadFile无法识别到本路径),请在压缩返回后的相关路径前加"file://"再尝试使用

6.Demo下载

您可下载Demo安装到手机上,参看一下效果,本Demo包括了作者开发的大部分插件,您可以进入相应插件模块查看效果,Demo中实现的效果只是常用举例且功能有限,而且并不及时更新,所以用户还是应以详细文档中的说明为准,参数自由组合实现想要的功能。Demo下载链接如下:
https://pan.baidu.com/s/1YMLAx21N2p5sirJqwkLJoA 提取码: awh9

7. 联系方式:

若有插件问题,可以评论留言描述,或加本人QQ
我的QQ是:3516626205 (加好友麻烦备注:uni视频压缩插件)
支持付费定制
(2)关于售后:
a.承诺bug类问题,终身免费维护
b.新功能新需求类,若两个小时能完成的小工作量功能,免费完善

本sdk的使用许可,详见HBuilder X使用许可协议

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问