更新记录

1.0.0(2025-05-16)

插件发布


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 4.64,Android:4.4,iOS:不支持,HarmonyNext:不支持 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

1.0.0(2025-05-16)

插件发布 最新海康综合安防管理平台插件uniappx 版本(长期维护,可接单)

请试用合适再购买 请试用合适再购买 请试用合适再购买
适用uniappX 版本,uvue页面使用

插件使用

1.购买插件,选择该插件绑定的项目 2.根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能 3.打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。 4.开发完毕后正式云打包


<template>
    <scroll-view style="flex: 1;">
        <dnx-hikvision ref="dnPlayer" style="height: 300px;background-color: black;"></dnx-hikvision>
        <button @tap="start()">开始预览</button>
        <button @tap="rePlayStart()">开始回放</button>
        <button @tap="resume()">继续播放</button>
        <button @tap="pause()">暂停播放</button>
        <button @tap="stop()">停止播放</button>
        <button @tap="seekPlayback()">按绝对时间回放定位</button>
        <button @tap="getOSDTime()">查询当前播放时间</button>
        <button @tap="getPlaybackSpeed()">获取播放倍数</button>
        <button @tap="setPlaybackSpeed()">设置播放倍数</button>
        <button @tap="screenshot()">播放抓图</button>
        <button @tap="enableAudio()">声音控制</button>
        <button @tap="changeStream()">预览码流平滑切换</button>
        <button @tap="startVoiceTalk()">开始语音对讲</button>
        <button @tap="stopVoiceTalk()">停止语音对讲</button>
        <button @tap="startRecord()">开启本地录像</button>
        <button @tap="stopRecord()">停止本地录像</button>
        <button @tap="openDigitalZoom()">开启电子放大</button>
        <button @tap="closeDigitalZoom()">关闭电子放大</button>
        <button @tap="setFishEyeEnable()">鱼眼矫正</button>
        <button @tap="setFishEyeMode()">设置鱼眼矫正方式</button>
        <button @tap="setOriginalFECParam()">设置初始鱼眼PTZ参数</button>
        <button @tap="handleFishEyeCorrect()">处理鱼眼矫正参数</button>
    </scroll-view>

</template>

<script>
    export default {
        data() {
            return {
                realPlayUrl: 'rtsp://xxxxxxxxxxxx/vCw7T3y',
                playbackUrl: 'rtsp://xxxxxxxxxxx/nzXMVaw',
                voiceUrl: 'rtsp://xxxxxxxx/openUrl/RIiemly'
            }
        },
        methods: {

            /**
             * 开启预览
             * realPlayUrl为预览短链接,需要通过调用openApi获取
             */

            start() {
                const params : UTSJSONObject = {
                    hardDecode: true,
                    privateData: true,
                };
                (this.$refs['dnPlayer'] as DnxHikvisionElement).initPlugin(params, (res : any) => {
                    console.log(res)
                });
                (this.$refs['dnPlayer'] as DnxHikvisionElement).startPlay(this.realPlayUrl)
            },

            /**
             * playbackUrl为回放短链接,需要通过调用openApi获取
             * 开启回放
             * {startTime,endTime}
             * 时间格式为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ",例如:"2018-05-07T14:41:57.819+03:00"
             */
            rePlayStart() {
                var params : UTSJSONObject = {
                    hardDecode: true,
                    privateData: true
                };
                (this.$refs['dnPlayer'] as DnxHikvisionElement).initPlugin(params, (res : any) => {
                    console.log(JSON.stringify(res))
                });

                (this.$refs['dnPlayer'] as DnxHikvisionElement).startReplay(this.playbackUrl, {
                    "startTime": "2025-05-06T00:00:00.000+3:00",
                    "endTime": "2025-05-06T10:59:59.000+3:00"
                })
            },
            /**
             * 继续播放
             */
            resume() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).resume()
            },
            /**
             * 暂停播放
             */
            pause() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).pause()
            },
            /**
             * 停止播放
             */
            stop() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).stop()
            },
            /**
             * 在录像回放的开始时间和结束时间之间进行播放定位控制。
             * 使用按绝对时间回放定位接口之前,必须先调用开始回放接口
             * 定位播放时,时间格式为'yyyy-MM-dd'T'HH:mm:ss.SSSZ'
             * 
             */
            seekPlayback() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).seekPlayback("2025-05-06T02:00:00.000+3:00")
            },
            /**
            * 查询当前播放时间戳
            * -1表示失败,大于等于0时表示当前回放的时间戳,单位:毫秒。
            * 请在播放成功后调用。
            */
            getOSDTime() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).getOSDTime((res : any) => {
                    console.log(res)
                })
            },

            /**
             * 获取当前回放倍速,默认一倍速
             */
            getPlaybackSpeed() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).getPlaybackSpeed((res : any) => {
                    console.log(res)
                })
            },
            /**
             * 设置回放的播放速度,默认一倍速
             * 
             *0.125  PlaybackSpeed.ONE_EIGHTH 1/8倍速
                0.25    PlaybackSpeed.QUARTER 1/4倍速
                0.5 PlaybackSpeed.HALF 1/2倍速
                1.0 PlaybackSpeed.NORMAL 1倍速
                2.0 PlaybackSpeed.DOUBLE 2倍速
                4.0 PlaybackSpeed.FOUR 4倍速
                8.0 PlaybackSpeed.EIGHT 8倍速
             * 
             */
            setPlaybackSpeed() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setPlaybackSpeed(2.0, (res : any) => {
                    console.log(res)
                })
            },
            /**
             * 预览回放抓图
             * 返回0代表操作成功,其他为错误码
             * 在视频预览或回放时,从视频中抓取一帧,并保存至指定的本地文件路径
             */
            screenshot() {
                var bitmapPath = UTSAndroid.convert2AbsFullPath("static/bitmapPath.png")
                var thumbnailPath = UTSAndroid.convert2AbsFullPath("static/thumbnailPath.png")
                console.log(bitmapPath);
                console.log(thumbnailPath);
                (this.$refs['dnPlayer'] as DnxHikvisionElement).screenshot(bitmapPath, thumbnailPath, (res : any) => {
                    console.log(res)
                })
            },

            /**
             * 声音控制
             * 返回0代表操作成功,其他为错误码
             */
            enableAudio() {
                var isOpenAudio = true;
                (this.$refs['dnPlayer'] as DnxHikvisionElement).enableAudio(isOpenAudio, (res : any) => {
                    console.log(res)
                })
            },
            /**
             * 预览码流平滑切换
             * 返回0代表操作成功,其他为错误码
             */
            changeStream() {
                //0:高清 1:标清 2: 流畅
                var quality = 0;
                (this.$refs['dnPlayer'] as DnxHikvisionElement).changeStream(quality, (res : any) => {
                    console.log(res)
                })
            },
            /**
             * talkUrl为对讲短链接,需要通过调用openApi获取
             * headers 其他请求参数
             * 1. 如需传递token,请在headers中增加Token赋值。
             */
            setVoiceDataSource() {
                var header = {};
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setVoiceDataSource(this.voiceUrl, header)
            },
            /**
             *  播放结果回调status 共三种状态:SUCCESS(开启对讲成功)、FAILED(开启对讲失败)、EXCEPTION(取流异常)错误码,只有 FAILED 和 EXCEPTION 才有值
             */
            setVoiceStatusCallback() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setVoiceStatusCallback((res : any) => {
                    console.log(JSON.stringify(res))
                })
            },
            /**
             * 先设置回调再播放
             * 开启语音对讲
             */
            startVoiceTalk() {
                this.setVoiceDataSource();
                this.setVoiceStatusCallback();
                (this.$refs['dnPlayer'] as DnxHikvisionElement).startVoiceTalk()
            },

            /**
             * 停止语音对讲
             */
            stopVoiceTalk() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).stopVoiceTalk()
            },
            /**
             * 开启本地录像
             * 使用此接口保存的录像文件,只可以使用SDK进行播放
             * mediaFilePath 要保存的录像文件绝对路径(含文件名),例:“/SnapShot/测试监控点.mp4”。
             * 返回0代表操作成功,其他为错误码
             */
            startRecord() {
                //使用此接口保存的录像文件,只可以使用SDK进行播放

                var mediaFilePath = UTSAndroid.convert2AbsFullPath("static/mediaFilePath.mp4")
                console.log(mediaFilePath);
                // var mediaFilePath = plus.io.convertLocalFileSystemURL("_doc/mediaFilePath.mp4"); //要要保存的录像文件绝对路径(含文件名)

                (this.$refs['dnPlayer'] as DnxHikvisionElement).startRecord(mediaFilePath, (res : any) => {
                    console.log(JSON.stringify(res))
                })
            },

            /**
             * 开启本地录像
             * mediaFilePath 要保存的录像文件绝对路径(含文件名),例:“/SnapShot/测试监控点.mp4”。
             * 返回0代表操作成功,其他为错误码
             */
            startRecordAndConvert() {
                var mediaFilePath = UTSAndroid.convert2AbsFullPath("static/mediaFilePath.mp4")
                console.log(mediaFilePath);
                (this.$refs['dnPlayer'] as DnxHikvisionElement).startRecordAndConvert(mediaFilePath, (res : any) => {
                    console.log(JSON.stringify(res))
                })
            },

            stopRecord() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).stopRecord((res : any) => {
                    console.log(JSON.stringify(res))
                })
            },
            /**
             * original 最初的显示区域的坐标矩形  
             * target 目标显示区域的坐标矩形
             * 返回0代表操作成功,其他为错误码
             * 电子放大支持倍率为1-10倍。
             */
            openDigitalZoom() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).openDigitalZoom({
                    'left': 0,
                    'top': 0,
                    'right': 50,
                    'bottom': 50,
                }, {
                    'left': 0,
                    'top': 0,
                    'right': 100,
                    'bottom': 100,
                }, (res) => {
                    console.log(JSON.stringify(res))
                })
            },
            /**
             * 关闭电子放大
             * 返回0代表操作成功,其他为错误码
             */
            closeDigitalZoom() {
                (this.$refs['dnPlayer'] as DnxHikvisionElement).closeDigitalZoom((res : any) => {
                    console.log(JSON.stringify(res))
                })
            },
            /**
             * 电子放大和鱼眼不能同时开启
             * 开启预览后,设置是否开启鱼眼矫正效果;
             * 返回0代表操作成功,其他为错误码
             * enable boolean  开启或关闭鱼眼矫正,只作用于一路预览。
             */
            setFishEyeEnable() {
                var enable = true;
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setFishEyeEnable(enable, (res : any) => {
                    console.log(JSON.stringify(res))
                })
            },
            /**
             * 
             * 设置鱼眼矫正方式
             * 返回0代表操作成功,其他为错误码
             * 矫正方式,通过注解定义。
             *
                0  CorrectType.FEC_CORRECT_PTZ PTZ
                1   CorrectType.FEC_CORRECT_180 180°矫正
                2   CorrectType.FEC_CORRECT_360 360°全景矫正
                3   CorrectType.FEC_CORRECT_LAT 维度展开
                4   CorrectType.FEC_CORRECT_SEM 半球
                5   CorrectType.FEC_CORRECT_CYC 圆柱
                6   CorrectType.FEC_CORRECT_PLA 小行星
                7   CorrectType.FEC_CORRECT_CYC_SPL 剪开圆柱

                    安装方式,通过注解定义。
                0   PlaceType.FEC_NULL 无安装
                1   PlaceType.FEC_PLACE_WALL 壁装
                2   PlaceType.FEC_PLACE_FLOOR 底装
                3   PlaceType.FEC_PLACE_CEILING 顶装

                安装方式与矫正方式关系表
                矫正方式 壁装 底装 顶装
                FEC_CORRECT_PTZ 支持 支持 支持
                FEC_CORRECT_180 支持 支持
                FEC_CORRECT_360 支持 支持 支持
                矫正方式 壁装 底装 顶装
                FEC_CORRECT_LAT 支持
                FEC_CORRECT_SEM 支持 支持
                FEC_CORRECT_CYC 支持 支持
                FEC_CORRECT_CYC_SPL 支持 支持
                FEC_CORRECT_PLA 支持 支持

             */
            setFishEyeMode() {
                var correctType : Int = 0;
                var placeType : Int = 0;
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setFishEyeMode(correctType, placeType, (res) => {
                    console.log(JSON.stringify(res))
                })
            },

            /**
             * 设置初始鱼眼PTZ参数
             * 返回0代表操作成功,其他为错误码
             * originalX float  初始X坐标值
                originalY float  初始Y坐标值
                surfaceWidth int  当前播放View的宽度
                surfaceHeight int  当前播放View的高度
             */
            setOriginalFECParam() {
                var originalX = 1.0.toFloat();
                var originalY = 1.0.toFloat();
                var surfaceWidth : Int = 200;
                var surfaceHeight : Int = 100;
                (this.$refs['dnPlayer'] as DnxHikvisionElement).setOriginalFECParam(originalX, originalY, surfaceWidth, surfaceHeight)
            },

            /**
            * 处理鱼眼矫正参数
            * 打开鱼眼功能后,根据手势的不同,设置不同的矫正参数,展示对应的效果
            * 返回0代表操作成功,其他为错误码
             * isZoom boolean  是否缩放
            zoom float  缩放系数
            zoom3D float  3D缩放比例
            curX float  当前X坐标值
            curY float  当前Y坐标值
             */
            handleFishEyeCorrect() {
                var isZoom = true;
                var zoom = 1.0.toFloat();
                var zoom3D = 1.0.toFloat();
                var curX = 0.0.toFloat();
                var curY = 0.0.toFloat();
                (this.$refs['dnPlayer'] as DnxHikvisionElement).handleFishEyeCorrect(isZoom, zoom, zoom3D, curX, curY)
            },

        }
    }
</script>

<style>

</style>

隐私、权限声明

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

麦克风

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

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

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