更新记录

1.0.0(2020-08-07)

首次更新


原生插件通用使用流程:

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


KJ-EZOpen

莹石云(EZVIZ) 提供iOS版本的实时视频预览、录像回放、语音对讲功能。

引入插件

<KJ-EZOpenComponent ref='EZOpenComponent' style="width:750rpx;height:200px" @ReceivedMessage="onReceivedMessage"
         @PlayFailed="onPlayFailed"> </KJ-EZOpenComponent>

基本使用步骤

1.初始化AppKey
2.授权登录
3.初始化播放器
4.开始实时预览
就可以看到实时预览的监控效果

a.如何获取AppKey和Secret?
答:进入莹石云开发平台:https://open.ys7.com/,进入“开发者服务”,
然后点击”我的账号“=>“应用信息”,点击添加应用,应用添加之后,就可以看到相关信息

b.如何添加设备?
答:进入莹石云开发平台:https://open.ys7.com/,进入“开发者服务”,
然后点击”我的资源“=>“设备列表”,点击添加设备。

c.如何云台控制?
答:进入莹石云开发平台的HTTP接口:https://open.ys7.com/doc/zh/book/index/device_ptz.html
有相关接口进行云台控制

相关代码

<template>
    <view>
        <KJ-EZOpen ref='EZOpen' style="width:750rpx;height:200px" @ReceivedMessage="onReceivedMessage"
         @PlayFailed="onPlayFailed"> </KJ-EZOpen>

        <button type="primary" @click="initAppKey">初始化AppKey</button>
        <button type="primary" @click="setAccessToken">授权登录</button>
        <button type="primary" @click="getDeviceInfo">获取设备信息</button>
        <button type="primary" @click="getDeviceList">获取设备列表</button>
        <button type="primary" @click="searchRecordFileFromDevice">SD卡存储录像列表</button>
        <button type="primary" @click="searchRecordFileFromCloud">云存储录像信息列表</button>
        <button type="primary" @click="isLogin">是否已经登录</button>
        <button type="primary" @click="getAccesstoken">获取当前accessToken</button>

        <button type="primary" @click="initPlayer">初始化播放器</button>
        <button type="primary" @click="setPlayVerifyCode">设置播放器解码密码</button>
        <button type="primary" @click="setHDPriority">设置使用硬件解码器优先</button>
        <button type="primary" @click="startRealPlay">开始实时预览</button>
        <button type="primary" @click="getHDPriorityStatus">获取当前的软硬解情况</button>
        <button type="primary" @click="stopRealPlay">停止实时预览</button>
        <button type="primary" @click="openSound">打开声音</button>
        <button type="primary" @click="closeSound">关闭声音</button>
        <button type="primary" @click="getStreamFlow">获取流量值</button>
        <button type="primary" @click="getOSDTime">获取当前播放时间进度</button>
        <button type="primary" @click="capturePicture">直播画面抓图</button>
        <button type="primary" @click="startVoiceTalk">开始语音对讲</button>
        <button type="primary" @click="stopVoiceTalk">关闭语音对讲</button>
        <button type="primary" @click="startPlaybackFromCloud">开始云存储远程回放</button>
        <button type="primary" @click="startPlaybackFromDevice">开始远程SD卡回放</button>
        <image :src="imageSrc"> </image>

    </view>
</template>



    var deviceSerial = "203751922"; //设备序列号
    var cameraNo = 1; //设备通道

    export default {
        data() {
            return {
                imageSrc: ''
            }
        },
        onLoad() {},
        methods: {
            /**
             * 播放器消息回调
             * 返回 messageCode
             * 1,//直播开始
             * 2,//直播流清晰度切换中
             * 3,//直播流取流正在重连
             * 4,//对讲开始
             * 5,//对讲结束
             * 10,//录像取流开始
             * 11,//录像回放开始播放
             * 12,//录像回放结束播放
             * 13,//录像回放被用户强制中断
             * 14,//录像回放暂停
             * 21,//播放器检测到wifi变换过
             * 22,//播放器检测到无网络
             * **/
            onReceivedMessage(e) {
                console.log("onPlayer: " + JSON.stringify(e.detail))
            },
            /**
             * 播放器播放失败错误回调
             * **/
            onPlayFailed(e) {
                console.log("onPlayer: " + JSON.stringify(e.detail))
            },
            /**
             * 初始化AppKey,必须执行
             * 一般放在App.vue里初始化
             * **/
            initAppKey() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                KJEZOpen.initAppKey("26810f3acd794862b608b6cfbc32a6b8");
            },
            /**
             * 授权登录,必须执行
             * 获取AccessToken,一般”https://open.ys7.com/api/lapp/token/get“使用这个接口获取,POST请求,参数appKey、appSecret
             * 
             * **/
            setAccessToken() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                KJEZOpen.setAccessToken("ra.br6qgnjn5h63ikli2q2zy7hx0yw9uu00-7slinherlw-0rg7wgy-fyfvato41");
            },
            /**
             * 获取设备信息
             * */
            getDeviceInfo() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                KJEZOpen.getDeviceInfo(deviceSerial, (res) => {
                    console.log("getDeviceInfo: " + JSON.stringify(res));
                });
            },
            /**
             * 获取设备列表
             * */
            getDeviceList() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                var dic = {
                    pageIndex: 0,//分页当前页码(从0开始)
                    pageSize: 20//分页每页数量(建议20以内)
                }
                KJEZOpen.getDeviceList(dic, (res) => {
                    console.log("getDeviceList: " + JSON.stringify(res));
                });
            },
            /**
             * 搜索SD卡存储录像列表
             * */
            searchRecordFileFromDevice() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                var dic = {
                    deviceSerial: deviceSerial,
                    cameraNo: cameraNo,
                    beginTime: "2020-08-05 01:00:00",
                    endTime: "2020-08-05 12:00:00"
                }
                KJEZOpen.searchRecordFileFromDevice(dic, (res) => {
                    console.log("searchRecordFileFromDevice: " + JSON.stringify(res));
                });
            },
            /**
             * 搜索云存储录像信息列表
             * */
            searchRecordFileFromCloud() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                var dic = {
                    pageIndex: 0,
                    pageSize: 20
                }
                KJEZOpen.searchRecordFileFromCloud(deviceSerial, (res) => {
                    console.log("searchRecordFileFromCloud: " + JSON.stringify(res));
                });
            },
            /**
             * 是否已经登录
             * */
            isLogin() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                KJEZOpen.isLogin((res) => {
                    console.log("isLogin: " + JSON.stringify(res));
                });
            },
            /**
             * 获取当前accessToken
             * */
            getAccesstoken() {
                const KJEZOpen = uni.requireNativePlugin('KJ-EZOpen');
                KJEZOpen.getAccesstoken((res) => {
                    console.log("getAccesstoken: " + JSON.stringify(res));
                });
            },
            /**
             * 初始化播放器
             * */
            initPlayer() {
                var dic = {
                    deviceSerial: deviceSerial,
                    cameraNo: cameraNo
                };
                this.$refs.EZOpen.initPlayer(dic);
            },
            /**
             * 设置播放器解码密码
             * 在播放流之前设置
             * */
            setPlayVerifyCode() {
                this.$refs.EZOpen.setPlayVerifyCode("xxxx");
            },
            /**
             * 设置使用硬件解码器优先
             * 在播放流之前设置
             * */
            setHDPriority() {
                this.$refs.EZOpen.setHDPriority(true);
            },
            /**
             * 开始实时预览
             * 在初始化播放器之后
             * */
            startRealPlay() {
                this.$refs.EZOpen.startRealPlay((res) => {
                    console.log("startRealPlay: " + JSON.stringify(res));
                });
            },
            /**
             * 获取当前的软硬解情况
             *value  1:软解 2:硬解 0:出错
             * */
            getHDPriorityStatus() {
                this.$refs.EZOpen.getHDPriorityStatus((res) => {
                    console.log("getHDPriorityStatus: " + JSON.stringify(res));
                });
            },
            /**
             * 停止实时预览
             * */
            stopRealPlay() {
                this.$refs.EZOpen.stopRealPlay((res) => {
                    console.log("stopRealPlay: " + JSON.stringify(res));
                });
            },
            /**
             * 打开声音
             * */
            openSound() {
                this.$refs.EZOpen.openSound((res) => {
                    console.log("openSound: " + JSON.stringify(res));
                });
            },
            /**
             * 关闭声音
             * */
            closeSound() {
                this.$refs.EZOpen.closeSound((res) => {
                    console.log("closeSound: " + JSON.stringify(res));
                });
            },
            /**
             * 获取流量值
             * */
            getStreamFlow() {
                this.$refs.EZOpen.getStreamFlow((res) => {
                    console.log("getStreamFlow: " + JSON.stringify(res));
                });
            },

            /**
             * 获取当前播放时间进度 
             * 返回格式 yyyy-MM-dd HH:mm:ss
             * */
            getOSDTime() {
                console.log("aaa");
                this.$refs.EZOpen.getOSDTime((res) => {
                    console.log("getOSDTime: " + JSON.stringify(res));
                });
            },
            /**
             * 直播画面抓图
             * */
            capturePicture() {
                var filePath = plus.io.convertLocalFileSystemURL("_doc/KJ-EZOpen");
                var fileName = "test1.png"
                var dic = {
                    "filePath":filePath,
                    "fileName":fileName,
                    quality:5 //抓图质量(0~100),数值越大图片质量越好,图片大小越大
                }
                var _this = this;
                this.$refs.EZOpen.capturePicture(dic,(res) => {
                    console.log("capturePicture: " + JSON.stringify(res));
                    _this.imageSrc = "file://"+filePath+"/"+fileName;
                });
            },
            /**
             * 开始语音对讲
             * */
            startVoiceTalk() {
                this.$refs.EZOpen.startVoiceTalk((res) => {
                    console.log("startVoiceTalk: " + JSON.stringify(res));
                });
            },
            /**
             * 关闭语音对讲
             * */
            stopVoiceTalk() {
                this.$refs.EZOpen.stopVoiceTalk((res) => {
                    console.log("stopVoiceTalk: " + JSON.stringify(res));
                });
            },
            /**
             * 开始云存储远程回放
             * */
            startPlaybackFromCloud() {
                //这些参数在searchRecordFileFromCloud这个方法获取
                var dic = {
                    deviceSerial: deviceSerial, // 设备序列号
                    cameraNo: cameraNo, // 设备通道号
                    fileId: "", // 云存储录像文件Id
                    startTime: "2020-08-01 01:00:00", // 云存储录像文件开始时间
                    stopTime: "2020-08-01 23:59:59", // 云存储录像文件结束时间
                    coverPic: "", // 云存储录像截图地址
                    downloadPath: "", // 云存储录像下载地址
                    encryption: "", // 云存储图片加密密码, 没有密码不传
                    istorageVersion: 1, //云存储类别:1 单文件存储模式;2 连续存储模式;3 待定
                    videoType: 0 //云存储录像类型,默认为0,表示不属于云存储录像
                }
                this.$refs.EZOpen.startPlaybackFromCloud(dic, (res) => {
                    console.log("startPlaybackFromCloud: " + JSON.stringify(res));
                });
            },
            /**
             * 开始远程SD卡回放
             * */
            startPlaybackFromDevice() {
                var dic = {
                    startTime: "2020-08-01 01:00:00",
                    stopTime: "2020-08-01 23:59:59"
                }
                this.$refs.EZOpen.startPlaybackFromDevice(dic, (res) => {
                    console.log("startPlaybackFromDevice: " + JSON.stringify(res));
                });
            }
        }
    }

消息回调errorCode具体错误码值

参考莹石云开放平台:https://open.ys7.com/doc/zh/book/index/ezopen_errorcode.html

隐私、权限声明

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

麦克风权限:1.ios:NSMicrophoneUsageDescription;

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

插件使用的 莹石云 SDK 会采集数据,详情可参考:https://open.ys7.com/

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

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