Skip to content

视频标牌 ​

此功能案例实现点击摄像头图层,添加图层标牌,展示监控画面,点击标牌告警按钮,可添加告警图标,点击标牌关闭按钮,关闭标牌。需使用 flv.min.js。

目录 ​

1. 功能点 ​

  • 图层点击事件 onLandmarkLayerClick
  • 添加地标图 addLandmarkLayer
  • 开启图层事件 pickOverlay
  • 添加标牌 addOverlayTip
  • 关闭标牌 removeOverlayTip
  • 添加 3DMarker add3DMarker

返回本章目录

2. 视频演示 ​

返回本章目录

3. 核心代码 ​

引入版本:3.1 起支持

第一步 ​

注册地标图点击事件

JavaScript
window.appInstance.uniCall('onLandmarkLayerClick', {}, (res) => {
    console.log(res.idObj)
    addVideoTip()
})

添加地标图,开启图层点击事件

JavaScript
// 准备数据
let pointsData = [
    {
        id: 'landmarkId1',
        label: '',
        coord: [113.94163319571, 22.51983158839],
        coordZ: 75,
        type: 'legendName1' 
    }
]
// 添加散点
function addPoints() {
    let jsonData = {
        id: 'layerId',     // 图层对象 id,新建时调用者自己传入的唯一标识,用于各种操作的对象识别
        name: 'layerName', // 图层名称,支持为图层自定义名称
        coordType: 0,      // XY 轴坐标类别,0:X 经度,Y 纬度;1:X 米,Y米,相对世界00点
        coordTypeZ: 0,     // Z 轴坐标类别,0:相对 3D 世界 0 海拔;1:相对 3D 世界地表;2:相对 3D 模型表面(单位:米)
        autoScale: true,   // 如果开启后,图标会按照摄像机远近自动缩放大小
        legends: [         // 定义图层包含图例,支持为不同图例定义各自样式
            {
                name: 'legendName1',
                color: '#FFFFFF',
                iconName: 'camera' 
            },
        ],
        data: pointsData   // 定义图层可视化数据
    }
    window.appInstance.uniCall('addLandmarkLayer', jsonData, (res) => {
        window.appInstance.uniCall('pickOverlay', {
            overlayType: 'landmarkLayer', // 图层对象类别
            idLayer: 'layerId',           // 如果具体想限定图层对象,则填写图层对象 id,如不限制,可不填
            type: 'click',                // 单选模式,click:点击选中;hover:悬停选中
            isShowDecorator: false        // 表示是否显示选中的高亮装饰符,true:显示,false:不显示,默认:true
        })
    })
}

第二步 ​

添加视频标牌,实例化视频流

JavaScript
// 添加视频标牌
function addVideoTip() {
    // 创建标牌html结构
    let videoBox = document.createElement('div')
    videoBox.className = 'tipDivId'
    videoBox.id = 'tipDivId'
    videoBox.innerHTML = `
        <div class="close">×</div>
        <div class="alert">!</div>
        <video muted controls autoplay></video>
      `
    document.body.appendChild(videoBox)
    // 找到页面中的按钮,添加点击事件
    let closeBtn = videoBox.querySelector('.close')
    let alertBtn = videoBox.querySelector('.alert')
    closeBtn.onclick = removeOverlay
    alertBtn.onclick = addAlert

    // 实例化监控视频
    let video = videoBox.querySelector('#tipDivId video')
    playVideo(video, 'rtsp://127.0.0.1:8554/video01')

    // 添加标牌
    window.appInstance.uniCall('addOverlayTip', {
        id: 'landmarkId1',            // 图层对象 id,新建时调用者自己传入的唯一标识,用于各种操作的对象识别
        overlayType: 'landmarkLayer', // 图层对象类别
        url: '',                      // Tip 窗口页面地址,如果divId不为“”,则这个属性不起作用
        divId: 'tipDivId',            // HTML侧弹出标牌的dom div id,如果这个不为"",url属性不起作用
        isShowClose: true,            // 是否显示右上角关闭按钮,默认显示关闭按钮
        size: [320, 180],             // Tip 窗口宽高xy,x:窗口宽;y:窗口高(单位:像素)
        offset: [0, 0]                // Tip 左上角相对 对象中心点 偏移量 xy,x:为正,向右偏移;y:为正,向上偏移(单位:像素)
    })
}

视频监控相关方法

JavaScript
// 随机guid
function newGuid() {
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
    }
    return (
        S4() +
        S4() +
        '-' +
        S4() +
        '-' +
        S4() +
        '-' +
        S4() +
        '-' +
        S4() +
        S4() +
        S4()
    )
}

// 视频逻辑
function playVideo(video, url) {
    let player = flvjs.createPlayer({
        type: 'flv',
        isLive: true,
        url: `ws://localhost:8888/rtsp/${newGuid()}/?url=${url}` 
    })

    player.attachMediaElement(video)
    player.load()
    player.play()
}

第三步 ​

点击告警,添加 3Dmarker

JavaScript
//添加3DMarker
function addAlert() {
    window.appInstance.uniCall(
        'add3DMarker',
        {
            id: '3DMarkerId1',                        // 模型对象 id,新建时调用者自己传入的唯一标识,用于各种操作的对象识别
            coordType: 0,                             // XY 轴坐标类别,0:X 经度,Y 纬度;1:X 米,Y米,相对世界00点
            coordTypeZ: 0,                            // Z 轴坐标类别,0:相对 3D 世界 0 海拔;1:相对 3D 世界地表;2:相对 3D 模型表面(单位:米)
            alpha: 1,                                 // 透明度,0:完全透明;1:完全不透明
            scale: 25,                                // 特效整体放缩倍数(单位:倍)
            type: 'Spread06',                         // 特效样式类别,详见下表:特效样式类别
            titleText: '警报',                         // 特效标签文本
            titleColor: '#ffffff',                    // 特效标签文本颜色,可选值,默认白色
            titleBackgroundColor: '#333333',          // 特效标签文本背景颜色,可选值,默认灰色
            coord: [113.94163319571, 22.51983158839], // XY 轴坐标,X:经度;Y:纬度
            coordZ: 100,                              // Z 轴高度(单位:米)
            tag: 'tag01',                             // 用户自动以标签
            visible: true                             // 是否显示
        },
        (res) => {
            console.log('add3DMarker', res)
        }
    )
}

点击关闭标牌按钮,关闭标牌

JavaScript
// 关闭标牌
function removeOverlay() {
    window.appInstance.uniCall(
        'removeOverlayTip',
        {
            id: 'landmarkId1',            // 图层对象 id,新建时调用者自己传入的唯一标识,用于各种操作的对象识别
            overlayType: 'landmarkLayer'  // 图层对象类别
        },
        (res) => {
            console.log(res)
        }
    )
}

返回本章目录

4. 代码下载 ​

点击跳转到下载页面

返回本章目录