更新记录

1.0.0(2023-08-07)

1、初版


平台兼容性

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

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


插件使用说明

注意事项

  1. 购买本插件前,请先试用,并充分自测确认满足需求之后再行购买。一经购买,概不退还;
  2. 如有使用上的疑问、bug或者要求定制插件,可以QQ【192227519】联系作者;
  3. 本插件支持定制,定制费用另算;
  4. 请在合法范围内使用,若使用本插件做非法开发,本方概不负责。

插件使用示例

官方对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中并没有此方法。

隐私、权限声明

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

Android <uses-permission android:name="android.permission.INTERNET" /><!-- 允许程序写入录像文件和抓图 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 允许程序录制音频 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> iOS NSPhotoLibraryUsageDescription<!-- 相册使用权限 --> NSPhotoLibraryAddUsageDescription <!-- 图片写入相册权限 --> NSMicrophoneUsageDescription<!-- 麦克风权限 --> 视实际使用情况申请相应权限

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

本插件是对Android和iOS海康视频播放的UNI版封装,不采集任何数据,插件使用海康视频SDK,参考其官方网站https://open.hikvision.com/#home

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

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