更新记录
1.0.0(2023-08-07)
1、初版
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 12.0 | armeabi-v7a:支持,arm64-v8a:支持,x86:未测试 | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在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原生插件配置”->”云端插件“列表中删除该插件重新选择
插件使用说明
注意事项
- 购买本插件前,请先试用,并充分自测确认满足需求之后再行购买。一经购买,概不退还;
- 如有使用上的疑问、bug或者要求定制插件,可以QQ【192227519】联系作者;
- 本插件支持定制,定制费用另算;
- 请在合法范围内使用,若使用本插件做非法开发,本方概不负责。
插件使用示例
官方对UI类功能的扩展,只能在 nvue 文件中使用,不需要引入即可直接使用。
manifest.json 原生插件配置中勾选云端插件,云打包后生效。
<dc-hikvideo style="width: 750rpx; height: 400rpx; background-color: #000000;" ref="hikComponent" @onPlay="onPlay" @saveImage="saveImage"></dc-hikvideo>
Events
1.预览|回放结果回调
@onPlay 参数说明: 参数存放在detail中
detail参数说明
成员名 | 数据类型 | 说明 |
---|---|---|
status | Number | 四种状态 0:播放成功 1:播放失败 2:取流异常 3:播放结束 |
errorCode | String | 错误码, 只有1和2才有值 |
2.截屏后保存图片回调
@saveImage 参数说明: 参数存放在detail中
detail参数说明
成员名 | 数据类型 | 说明 |
---|---|---|
status | Number | 0:保存成功 1:保存失败 |
errorCode | String | 错误描述“保存失败” |
视频核心功能使用
实时预览
// 播放前设置播放配置(可选)
let config = {
hardDecode: true,// 使用硬解码 Android, iOS
privateData: true,// 开启智能信息 Android, iOS
}
this.$refs.hikComponent.setPlayConfig(config);
// 设置播放参数
// realPlayUrl 为预览短链接, 需要通过调用openApi获取
// headers 为请求参数, 不需要可不传或者传null
this.$refs.hikComponent.setDataSource(realPlayUrl, headers);
// 预览
this.$refs.hikComponent.start();
// 关闭预览
this.$refs.hikComponent.stop();
// 播放结果回调
// e.detail.status 四种状态 0:播放成功 1:播放失败 2:取流异常 3:播放结束
// e.detail.errorCode(错误码)只有1和2才有值
onPlay: function(e) {
}
网络录像回放
// 播放前设置播放配置(可选)
let config = {
hardDecode: true,// 使用硬解码 Android, iOS
privateData: true,// 开启智能信息 Android, iOS
}
this.$refs.hikComponent.setPlayConfig(config);
// 设置回放参数
// playbackUrl 为回放短链接, 需要通过调用openApi获取
// headers 为请求参数
// startTime: 开始时间,必传,yyyy-MM-dd'T'HH:mm:ss.SSS+08:00时间格式
// endTime: 结束时间,必传,yyyy-MM-dd'T'HH:mm:ss.SSS+08:00时间格式
let headers = {
startTime: "2021-07-29T00:00:00.000+08:00",
endTime: "2021-07-29T23:59:59.000+08:00"
}
this.$refs.hikComponent.setDataSource(playbackUrl, headers);
// 开启回放
this.$refs.hikComponent.start();
// 关闭回放
this.$refs.hikComponent.stop();
// 播放结果回调
// e.detail.status 四种状态 0:播放成功 1:播放失败 2:取流异常 3:播放结束
// e.detail.errorCode(错误码)只有1和2才有值
onPlay: function(e) {
}
组件Api说明
1初始化
1.1 设置视频配置
this.$refs.hikComponent.setPlayConfig(playConfig);
playConfig为Map数据类型, 包含以下成员
成员名 | 数据类型 | 必填 | 说明 | 适用 |
---|---|---|---|---|
hardDecode | Boolean | 否 | 是否使用硬解码,默认 NO | Android、iOS |
privateData | Boolean | 否 | 是否显示智能信息,默认 NO | Android、iOS |
timeout | int | 否 | 取流超时时间,单位秒,默认 20s | Android、iOS |
secretKey | String | 否 | 解密秘钥。如果码流进行了加密,需要设置播放密码 | Android、iOS |
waterConfigs | 字符串数组Array |
否 | 水印信息 | iOS |
bufferLength | int | 否 | 流缓冲区大小,默认为5M 格式:5*1024*1024 | iOS |
waterConfig | Map | 否 | 水印 | Android |
playBuffer | int | 否 | *** | Android |
channelNum | int | 否 | 萤石参数-通道号 | 暂不支持 |
deviceSerial | String | 否 | 萤石参数-序列号 | 暂不支持 |
verifyCode | String | 否 | 萤石参数-验证码 | 暂不支持 |
Android参数waterConfig说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
isWaterTrans | int | 否 | |
userWaterContent | 字符串数组Array |
否 | |
waterOffset | Map数组Array | 否 | |
waterFontColor | int | 否 | |
waterFontWidth | int | 否 | |
waterFontHeight | int | 否 |
Android参数waterOffset说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
OffsetX | int | 否 | |
OffsetY | int | 否 |
2视频播放
2.1设置视频播放参数
this.$refs.hikComponent.setDataSource(path, headers);
参数说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
path | String | 是 | 预览取流 URL,不能为空 |
headers | Map | 否 | 其他请求参数 |
已定义HeaderParams
成员名 | 数据类型 | 说明 |
---|---|---|
token | String | 用于 headers 中传递 token 的 key |
startTime | Map | 用于 headers 中传递回放开始时间的 key |
endTime | Map | 用于 headers 中传递回放结束时间的 key |
2.2开始播放
this.$refs.hikComponent.start();
2.3停止播放
this.$refs.hikComponent.stop();
2.4销毁播放器
this.$refs.hikComponent.destoryPlayer();
2.5恢复取流
this.$refs.hikComponent.startStream();
2.6暂停取流
this.$refs.hikComponent.stopStream();
3实时预览
3.1切换码流
this.$refs.hikComponent.stopStream(qualityType, (res) => {
});
__接口描述__
切换码流清晰度接口,用于码流无缝切换高清-标清,不会出现黑屏。
__返回值__
res返回0代表操作成功, 1代表操作失败
备注
使用码流平滑切换接口之前,必须先调用 设置视频播放参数 接口,设置新的取流 url;
参数说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
qualityType | int | 是 | 码流质量 |
callback | function | 否 | 结果回调 |
qualityType参数说明
成员名 | 数据类型 | 说明 |
---|---|---|
0 | int | QualityTypeHD |
1 | int | QualityTypeSD |
2 | int | QualityTypeFL |
4 网络录像回放
4.1 按绝对时间回放定位
this.$refs.hikComponent.seekPlayback(seekTime);
**接口描述**
在录像回放的开始时间和结束时间之间进行播放定位控制。
**参数说明**
seekTime, String, 必填, 定位录像文件的开始时间,时间格式为'2021-07- 29T00:00:00.000+08:00'
**返回值**
无
**备注**
1. 使用按绝对时间回放定位接口之前,必须先调用开始回放接口;
2. 定位播放时,时间格式为'yyyy-MM-dd'T'HH:mm:ss.SSSZ'。
4.2 查询当前播放时间戳
this.$refs.hikComponent.getOSDTime((res) =>{
});
**接口描述**
查询当前播放时间戳。
**参数说明**
callback function 非必填 结果回调
**返回值**
res: -1 表示失败,大于等于 0 时表示当前回放的时间戳,单位:毫秒。
4.3 暂停回放
this.$refs.hikComponent.pause((res) => {
})
**接口描述**
暂停录像回放取流及解码播放。
**参数说明**
callback, function, 非必填, 结果回调
**返回值**
res: 0成功 其他为错误码
4.4 恢复回放
this.$refs.hikComponent.resume((res) => {
})
**接口描述**
恢复录像回放取流及解码播放。
**参数说明**
callback, function, 非必填, 结果回调
**返回值**
res: 0成功 其他为错误码
4.5 设置回放倍速
this.$refs.hikComponent.setPlaybackSpeed(speed, (res) => {
})
**接口描述**
设置回放的播放速度,默认一倍速。
**参数说明**
speed, float, 必填, 倍速值(1/8, 1/4, 1/2, 1, 2, 4, 8)
callback, function, 非必填, 结果回调
**返回值**
res: 0成功 其他为错误码
4.6 获取当前回放倍速
this.$refs.hikComponent.getPlaybackSpeed((res) => {
})
__接口描述__
获取当前的回放的播放速度,默认一倍速。
__参数说明__
callback, function, 非必填, 结果回调
__返回值__
返回 0 表示成功,其他为错误码。
5.播放抓图
5.1 预览回放抓图
this.$refs.hikComponent.screenshootThumbnail(config, callback);
接口描述: 在视频预览或回放时,从视频中抓取一帧,并保存至指定的本地文件路径。
参数说明: callback, function, 非必填, 结果回调
返回值: 0代表操作成功
备注: 本地抓图文件可以通过手机自带图片应用查看。
代码参考
// 抓图并存入指定路径
var path = plus.io.convertLocalFileSystemURL("_doc/HikVideoPlayer");
let time = new Date().getTime();
var name = time + ".jpg"
let dic = {
filePath: path,
fileName: name
};
var self = this;
this.$refs.hikComponent.screenshootThumbnail(dic, res => {
self.filePath = path + "/" + name;
console.log("大小图路径: " + self.filePath);
});
特别注意: 此方法在iOS上无效, 虽然接口返回正常, 但图片实际并未存入本地, 推测为API的问题, Android可正常使用。iOS可考虑使用takeVideoScreen()方法代替
5.2 获取抓图数据
this.$refs.hikComponent.screenshoot((res) => {
});
接口描述: 在视频预览或回放时,从视频中抓取一帧,并返回抓图的数据。
参数说明: callback, function, 非必填, 结果回调
返回值: 图片数据流
备注: 鉴于UNI和iOS、Android多端数据流的传输与转化统一, 本接口暂不可用, 可以考虑
使用takeVideoScreen(), 抓取图片数据并保存至本地相册。
6.本地录像
6.1 开启本地录像
this.$refs.hikComponent.startRecord(mediaFilePath, (res) => {
})
接口说明: 在视频预览或回放时,保存录像数据流,并保存至指定的本地文件路径。
参数说明
mediaFilePath, String, 必填, 要保存的录像文件路径(含文件名),例:“/SnapShot/ 测试监控点.mp4”。
callback, function, 非必填, 结果回调
返回值: res返回 0 代表操作成功,其他为错误码。
备注
1. 因缓存原因录像会有 2~3 秒延时。
2. 本地录像文件如果不进行转码,一般不能直接播放,可以使用 SDK 中的本地文件播放方法进行播放。
代码参考
// 开启本地录像
let path = plus.io.convertLocalFileSystemURL("_doc/HikVideoPlayer");
let time = new Date().getTime();
var name = time + ".mp4"
let dic = {
filePath: path,
fileName: name
}
var self = this;
this.$refs.hikComponent.startRecord(dic, (res) => {
console.log("结果: " + res);
self.mediaPath = path + "/" + name;
let str = (0 == res) ? "开始录像" : "录像失败";
});
6.2 开启本地录像
this.$refs.hikComponent.startRecordAndConvert(mediaFilePath, (res) => {
})
接口说明: 在视频预览或回放时,保存录像数据流,并保存至指定的本地文件路径。录像文件可以正常使用系统播
放器播放,可正常保存相册。
参数说明
mediaFilePath, String, 必填, 要保存的录像文件路径(含文件名),例:“/SnapShot/ 测试监控点.mp4”。
callback, function, 非必填, 结果回调
返回值: res返回 0 代表操作成功,其他为错误码。
备注
1. 因缓存原因录像会有 2~3 秒延时。
2. 录像文件可以正常使用系统播放器播放,可正常保存相册。
3. V2.1.0版本新增
6.3 关闭本地录像
this.$refs.hikComponent.stopRecord((res) => {
});
接口描述: 在视频预览或回放时,关闭录像流。
参数说明: callback, function, 非必填, 结果回调
返回值: res返回 0 代表操作成功,其他为错误码。
7声音控制
7.1
this.$refs.hikComponent.enableAudio(enable, (res) => {
});
接口描述: 在视频预览或回放时,关闭录像流。
参数说明
enable, Boolean, 必填, YES-开启声音 NO-关闭声音
callback, function, 非必填, 结果回调
返回值: res返回 0 代表操作成功,其他为错误码。
8.电子放大
8.1 电子放大
this.$refs.hikComponent.openDigitalZoom(param, (res) => {
});
接口描述: 执行电子放大功能。
返回值: res返回 0 代表操作成功,其他为错误码。
备注:
1. 电子放大支持倍率为 1-10 倍。
2. 默认情况下不开启电子放大的。
param为Map数据类型, 包含以下成员
成员名 | 数据类型 | 必填 | 说明 | 适用 |
---|---|---|---|---|
original | String | 是 | 最初的显示区域的坐标矩形,格式"{{x, y}, {width, height}}" | iOS |
current | String | 是 | 目标显示区域的坐标矩形"{{0, 0}, {300, 300}}" | iOS |
originalA | Map | 是 | 最初的显示区域的坐标矩形 | Android |
currentA | Map | 是 | 目标显示区域的坐标矩形 | Android |
originalA和currentA参数说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
bottom | int | 是 | |
left | int | 是 | |
right | int | 是 | |
top | int | 是 |
8.2 关闭电子放大
this.$refs.hikComponent.closeDigitalZoom((res) => {
})
接口描述
关闭电子放大功能
参数说明: callback, function, 非必填, 结果回调
返回值: res返回 0 代表操作成功,其他为错误码。
9.本地播放
9.1 播放本地文件
this.$refs.hikComponent.playFile(path, (res) => {
});
接口描述: 播放本地文件
参数说明
path, String, 必填, 本地录像文件路径
callback, function, 非必填, 结果回调
备注: 配合 播放状态回调 方法,可以获取播放结果及错误码
9.2 获取文件播放总时长
this.$refs.hikComponent.getTotalTime((res) => {
});
接口描述: 获取播放文件的播放总时长。
返回值: res播放总时长,单位为:秒
备注: 播放成功后调用,否则返回 0;
9.3 获取当前已播放时长
this.$refs.hikComponent.getPlayedTime((res) => {
});
接口描述: 获取播放文件的已播放时长。
返回值: res已播放时长,单位为:秒
备注: 播放成功后调用,否则返回 0;
9.4 设置播放进度
this.$refs.hikComponent.setCurrentFrame(scale, (res) => {
});
接口描述: 设置当前文件的播放进度百分比
参数说明
| scale | float | 必填 | 播放百分比,取值范围 0-1.0 |
| callback | function | 非必填 | 结果回调 |
返回值: res返回 0 代表操作成功,其他为错误码。
9.5 获取消耗的流量
this.$refs.hikComponent.getTotalTraffic((res) => {
});
接口描述: 获取播放视频消耗的流量
返回值: res消耗的流量
10.获取版本号
10.1获取版本号
this.$refs.hikComponent.getVersion((res) => {
});
接口描述: SDK版本号
返回值: res版本号
11.播放帧率
11.1获取码流帧率
this.$refs.hikComponent.getFrameRate((res) => {
});
接口描述: 获取码流帧率。
参数说明
| callback | function | 非必填 | 结果回调 |
返回值: res获取成功返回码流帧率,获取失败返回-1。若码流中的帧率小于1,返回0。
11.2设置预期帧率(硬解不支持)
this.$refs.hikComponent.setExpectedFrameRate(frameRate, (res) => {
});
接口描述: 获取码流帧率。
参数说明
| frameRate | int | 必填 | 预期帧率(1~码流最大帧率) |
| callback | function | 非必填 | 结果回调 |
返回值: res返回 0 代表操作成功,其他为错误码。
备注:
1.此接口需要在播放成功后调用。
2.设置的预期帧率大于实际码流帧率的时候无效。
3.设置预期帧率小于1时无效。
4.开启硬解时无效。
5.开启播放成功后,可通过getFrameRate获取当前码流最大帧率,帧率设置范围为1~码流最大帧率。
6.此方法从V2.1.0开始支持
11.3 设置多线程解码线程数
this.$refs.hikComponent.setDecodeThreadNum(threadNum, (res) => {
})
接口描述: 设置多线程解码线程数,进一步提升解码性能。uni-app
返回值: res返回 0 代表操作成功,其他为错误码。
备注:
1.线程数支持1-8。
2.仅支持H264和H265的编码码流(包含smart264和smart265)。
3.开启硬解时无效。
4.此方法从V2.1.0开始支持。
参数说明
成员名 | 数据类型 | 必填 | 说明 |
---|---|---|---|
threadNum | int | 必填 | 线程数,1~8 |
callback | function | 非必填 | 结果回调 |
功能性API
this.$refs.hikComponent.takeVideoScreen();
接口描述: 抓取图片保存至本地相册
参数说明: 无
返回值: @saveImage事件回调
iOS独有API
获取版本号
this.$refs.hikComponent.getVersion((res) => {
})
接口描述: 获取当前SDK版本号
参数说明
| callback | function | 非必填 | 结果回调 |
备注: Android原生文档中虽然有getVersion这个API, 但实际SDK中并没有此方法。