更新记录
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:未测试 | × |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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原生插件,现支持如下:
- 支持压缩,设置视频输出宽度,高度,视频比特率,帧率
- 支持压缩进度回调
- 支持读取压缩后视频的第一帧关键图片
- 支持多任务同时回调
- 支持压缩成功或失败的回调,失败会有原生压缩失败原因
- 单独开放出获取原视频分辨率,比特率的方法,可供用户自行定义压缩算法
- 单独开放出获取视频第一帧图片的方法
原理及思路,说明如下:
- 本插件原理,采用android原生MediaCodec压缩
- 压缩算法,默认(即调用插件时,不传宽高,比特率,帧率等参数),最终压缩成的效果是以分辨率1280*720,比特率1600kbps为模板压缩的(原因:录1分钟视频,大小10M左右,清晰度还可以,大小也可以,故照着这个模板压缩),故若原视频分辨率,比特率低于模板,视频基本是不压缩的。若想要压缩到比模板更小,压缩算法需要自己去思考,本插件提供了获取原视频分辨率,比特率的方法,可以根据自己需要,自己去定义视频压缩输出分辨率宽高,比特率,帧率等。
- 关于本插件默认压缩算法,现无偿提供给大家,可根据自己需要更改:获取原视频分辨率宽高中的最小值,最小值除以720获取到压缩倍率,然后原视频宽高分别除以倍率得到最终输出视频宽高,比特率除以1600kbps得到倍率,然后原视频比特率除以倍率得到最终输出比特率。关于为什么要计算倍率,直接按模板宽高为输出不可以吗?这是因为要做到尽量与原视频宽高比一致,不能最终输出视频画面扭曲了。
- 关于多任务,进度同时回调的调用,也无偿提供给大家,可下载“示例项目”参考代码。
- 关于支持压缩视频的格式,本插件采用android原生MediaCodec压缩,故MediaCodec支持的格式,本插件都会支持,经查阅MediaCodec支持大部分视频格式,由于测试机条件限制,只测试了mp4视频格式,没有问题,其它格式,用户需要在试用时谨慎测试一下,若有问题,可在评论区留言,我会及时答复
- 有关于输出视频格式,本插件目前输出视频格式为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使用许可协议