| <!DOCTYPE html> | 
| <html lang="en" xmlns:th="http://www.thymeleaf.org"> | 
| <head> | 
|     <meta charset="UTF-8"> | 
|     <title>测试页</title> | 
|     <script th:src="@{/js/jquery-3.6.4.min.js}"></script> | 
|     <script th:src="@{/js/adapter.min.js}"></script> | 
|     <script th:src="@{/js/webrtcstreamer.js}"></script> | 
|     <link rel="stylesheet" th:href="@{/css/bootstrap.css}"/> | 
|     <script th:src="@{/js/bootstrap.js}"></script> | 
|     <style> | 
|         .top-buffer { | 
|             margin-top: 10px; | 
|         } | 
|     </style> | 
| <body> | 
| <div class="container"> | 
|     <div class="row "> | 
|         <div class="dropdown"> | 
|             相机id:<select id="select"> | 
|         </select> | 
|         </div> | 
|     </div> | 
|     <div class="row top-buffer"> | 
|         <div class="col-md-1 col-md-offset-1"> | 
|             <button id="up" type="button" class="btn btn-primary">上</button> | 
|         </div> | 
|         <div class="col-md-4 col-md-offset-3"> | 
|             <div class="btn-group" role="group"> | 
|                 <button id="controlZoomIn" type="button" class="btn btn-primary">调焦-</button> | 
|                 <button id="controlZoomOut" type="button" class="btn btn-primary">调焦+</button> | 
|             </div> | 
|         </div> | 
|     </div> | 
|     <div class="row "> | 
|         <div class="col-md-1"> | 
|             <button id="left" type="button" class="btn btn-primary">左</button> | 
|         </div> | 
|         <div class="col-md-1 col-md-offset-1"> | 
|             <button id="right" type="button" class="btn btn-primary">右</button> | 
|         </div> | 
|         <div class="col-md-4 col-md-offset-2"> | 
|             <div class="btn-group" role="group"> | 
|                 <button id="controlFocusNear" type="button" class="btn btn-primary">聚焦-</button> | 
|                 <button id="controlFocusFar" type="button" class="btn btn-primary">聚焦+</button> | 
|             </div> | 
|         </div> | 
|     </div> | 
|     <div class="row "> | 
|         <div class="col-md-1 col-md-offset-1"> | 
|             <button id="down" type="button" class="btn btn-primary">下</button> | 
|         </div> | 
|         <div class="col-md-4 col-md-offset-3"> | 
|             <div class="btn-group" role="group"> | 
|                 <button id="controlIrisOpen" type="button" class="btn btn-primary">光圈-</button> | 
|                 <button id="controlIrisClose" type="button" class="btn btn-primary">光圈+</button> | 
|             </div> | 
|         </div> | 
|     </div> | 
|     <div class="row"> | 
|         <div class="col-md-6"> | 
|             <div class="row top-buffer"> | 
|                 <div class="input-group"> | 
|                     <span class="input-group-addon">目的坐标值:</span> | 
|                     <input id="targetPostion" class="form-control" placeholder="目的坐标"/> | 
|                     <button id="setTargetPostion" type="button" class="btn btn-default">指向坐标</button> | 
|                 </div> | 
|                 <div class="input-group"> | 
|                     <span class="input-group-addon">P值:</span> | 
|                     <input id="p" class="form-control" placeholder="请输入P值"/> | 
|                 </div> | 
|                 <div class="input-group"> | 
|                     <span class="input-group-addon">T值:</span> | 
|                     <input id="t" class="form-control" placeholder="请输入T值"/> | 
|                 </div> | 
|                 <div class="input-group"> | 
|                     <span class="input-group-addon">Z值:</span> | 
|                     <input id="z" class="form-control" placeholder="请输入Z值"/> | 
|                 </div> | 
|             </div> | 
|             <div class="row top-buffer"> | 
|                 <div class="btn-group" role="group"> | 
|                     <button id="getPTZ" type="button" class="btn btn-default">获取ptz</button> | 
|                     <button id="setPTZ" type="button" class="btn btn-default">设置ptz</button> | 
|                     <button id="setPreset" type="button" class="btn btn-default">设预置点</button> | 
|                     <button id="gotoPreset" type="button" class="btn btn-default">调预置点</button> | 
|                     <button id="getZeroPTZ" type="button" class="btn btn-default">调用零方位角</button> | 
|                     <button id="setZeroPTZ" type="button" class="btn btn-default">设置零方位角</button> | 
|                 </div> | 
|             </div> | 
|             <div class="row top-buffer"> | 
|                 <div class="btn-group" role="group"> | 
|                     <button id="FocusMode" type="button" class="btn btn-default">手动聚焦</button> | 
|                     <div id="focusDiv" class="input-group"> | 
|                         <span class="input-group-addon">聚焦值:</span> | 
|                         <input id="focus" class="form-control" placeholder="聚焦值"/> | 
|                     </div> | 
|                     <button id="getFocusPos" type="button" class="btn btn-default">获取聚焦值</button> | 
|                     <button id="setFocusPos" type="button" class="btn btn-default">设置聚焦值</button> | 
|                 </div> | 
|             </div> | 
|             <div class="row top-buffer"> | 
|                 <div class="btn-group" role="group"> | 
|                     <button id="WiperPwron" type="button" class="btn btn-default">开启雨刷</button> | 
|                     <button id="Defogcfg" type="button" class="btn btn-default">开启透雾</button> | 
|                     <button id="Infrarecfg" type="button" class="btn btn-default">开启红外</button> | 
|                     <button id="HeateRpwron" type="button" class="btn btn-default">开启云台加热</button> | 
|                     <button id="CameraDeicing" type="button" class="btn btn-default">开启镜头加热</button> | 
|                 </div> | 
|             </div> | 
|             <div class="row top-buffer"> | 
|                 <div class="btn-group" role="group"> | 
|                     <button id="voice" type="button" class="btn btn-default">开始语音对讲</button> | 
|                     <button id="record" type="button" class="btn btn-default">开始录像</button> | 
|                     <button id="realCutPic" type="button" class="btn btn-default">实时抓图</button> | 
|                     <button id="saveCutPic" type="button" class="btn btn-default">存储抓图</button> | 
|                 </div> | 
|             </div> | 
|             <div class="row top-buffer"> | 
|                 <div class="col-md-6"> | 
|                     <img class="thumbnail" id="imgContainer" style="width: 500px; height: 300px;"/> | 
|                 </div> | 
|             </div> | 
|         </div> | 
|         <div class="col-md-1"/> | 
|         <div class="col-md-5"> | 
|             <div class="row top-buffer"> | 
|                 <video id="video" muted autoplay loop controls style="width: 800px; height: 100%; object-fit: fill;"/> | 
|             </div> | 
|         </div> | 
|     </div> | 
| </div> | 
| <script th:inline="javascript"> | 
|     var cameraId, opt, token; | 
|     window.onload = function () { | 
|         $.ajax({ | 
|             url: "../hik/list", | 
|             type: "get", | 
|             success: function (data) { | 
|                 console.log(data); | 
|                 var arr = data.data; | 
|                 for (var i = 0; i < arr.length; i++) { | 
|                     console.log(arr[i].id); | 
|                     var camera = { | 
|                         type: arr[i].gdtype, | 
|                         ipaddr: arr[i].ip, | 
|                         username: arr[i].username, | 
|                         password: arr[i].password, | 
|                         port: arr[i].rtspPort, | 
|                         longitude: arr[i].longitude, | 
|                         latitude: arr[i].latitude, | 
|                         altitude: arr[i].altitude | 
|                     }; | 
|                     cameraMap.set(arr[i].id, camera); | 
|                     //先创建好select里面的option元素 | 
|                     var option = document.createElement("option"); | 
|                     //给option的text赋值,这就是你点开下拉框能够看到的东西 | 
|                     $(option).text(arr[i].id); | 
|                     //获取select 下拉框对象,并将option添加进select | 
|                     $('#select').append(option); | 
|                 } | 
|             } | 
|         }) | 
|   | 
|         opt = {"username": "liusuyi", "password": "5959932"}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json' | 
|             }, | 
|             url: "../login", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|                 token = data.token; | 
|             } | 
|         }) | 
|         // 初始化内容 | 
|         console.log(cameraMap); | 
|     } | 
|     //云台上下左右 | 
|     $("#up").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 2; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|   | 
|     }) | 
|     $("#up").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 2; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#down").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 8; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#down").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 8; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#left").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 4; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#left").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 4; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#right").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 6; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#right").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 6; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     //变倍 | 
|     $("#controlZoomIn").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 10; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlZoomIn").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 10; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlZoomOut").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 11; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlZoomOut").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 11; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     //变焦 | 
|     $("#controlFocusNear").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 12; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlFocusNear").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 12; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlFocusFar").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 13; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlFocusFar").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 13; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     //光圈 | 
|     $("#controlIrisOpen").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 14; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlIrisOpen").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 14; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlIrisClose").mousedown(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 15; | 
|         var enable = true; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|     $("#controlIrisClose").mouseup(function () { | 
|         var url = "../hik/PTZControlWithSpeed"; | 
|         var code = 15; | 
|         var enable = false; | 
|         commondMethod(url, code, enable); | 
|     }) | 
|   | 
|     $("#setPreset").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1, "speed": 8, "presetIndex": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/setPreset", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#gotoPreset").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1, "speed": 8, "presetIndex": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/gotoPreset", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#getPTZ").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/getPTZ", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (datas) { | 
|                 console.log(datas); | 
|                 $("#p").val(datas.data.p); | 
|                 $("#t").val(datas.data.t); | 
|                 $("#z").val(datas.data.z); | 
|             } | 
|         }) | 
|     }) | 
|     $("#setPTZ").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         var p = $('#p').val(); | 
|         var t = $('#t').val(); | 
|         var z = $('#z').val(); | 
|         //定义一个带有Map字段的实体对象 | 
|         var myEntity = { | 
|             channelNum: 1, | 
|             cameraId: cameraId, | 
|             ptzMap: { | 
|                 p: p, | 
|                 t: t, | 
|                 z: z | 
|             } | 
|         }; | 
|         console.log(opt) | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/setPTZ", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(myEntity), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#setTargetPostion").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         var camera = cameraMap.get(cameraId); | 
|         var camP = camera.longitude + ',' + camera.latitude + ',' + camera.altitude; | 
|         var targetP = $('#targetPostion').val(); | 
|         //定义一个带有Map字段的实体对象 | 
|         var myEntity = { | 
|             channelNum: 1, | 
|             cameraId: cameraId, | 
|             targetPosition: targetP, | 
|             camPosition: camP, | 
|         }; | 
|         console.log(myEntity) | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/setTargetPosition", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(myEntity), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#setZeroPTZ").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/setZeroPTZ", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#WiperPwron").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1, "speed": 8, "enable": true, "code": 16}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/PTZControlWithSpeed", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     }) | 
|     var defogflag = true; | 
|     $("#Defogcfg").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (defogflag) { | 
|             $(this).text("关闭透雾"); | 
|             defogflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/defogcfg", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|             $(this).text("开启透雾"); | 
|             defogflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/defogcfg", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|   | 
|     }) | 
|     var infrareflag = true; | 
|     $("#Infrarecfg").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (infrareflag) { | 
|             $(this).text("关闭红外"); | 
|             infrareflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/infrarecfg", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|   | 
|             $(this).text("开启红外"); | 
|             infrareflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/infrarecfg", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|     }) | 
|     var focusModeflag = true; | 
|     $("#FocusMode").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (focusModeflag) { | 
|             $(this).text("自动聚焦"); | 
|             focusModeflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/focusMode", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|             $(this).text("手动聚焦"); | 
|             focusModeflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/focusMode", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|     }) | 
|     var heateRpwronflag = true; | 
|     $("#HeateRpwron").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (heateRpwronflag) { | 
|             $(this).text("关闭云台加热"); | 
|             heateRpwronflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/heateRpwron", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|             $(this).text("开启云台加热"); | 
|             heateRpwronflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/heateRpwron", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|     }) | 
|     var CameraDeicingflag = true; | 
|     $("#CameraDeicing").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (CameraDeicingflag) { | 
|             $(this).text("关闭镜头加热"); | 
|             CameraDeicingflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json' | 
|                 }, | 
|                 url: "../hik/cameraDeicing", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|             $(this).text("开启镜头加热"); | 
|             CameraDeicingflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/cameraDeicing", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|     }) | 
|     $("#realCutPic").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/captureJPEGPicture", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data.data); | 
|                 $("#imgContainer").attr("src", "data:image/png;base64," + data.data); | 
|             } | 
|         }) | 
|     }) | 
|     $("#saveCutPic").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: "../hik/picCutCate", | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data.data); | 
|                 $('#imgContainer').attr('src', data.data); | 
|             } | 
|         }) | 
|     }) | 
|     var recordflag = true; | 
|     $("#record").click(function () { | 
|         cameraId = $('#select option:selected').val(); | 
|         optOpen = {"cameraId": cameraId, "channelNum": 1, "enable": true}; | 
|         optClose = {"cameraId": cameraId, "channelNum": 1, "enable": false}; | 
|         if (recordflag) { | 
|             $(this).text("停止录像"); | 
|             recordflag = false; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/record", | 
|                 type: "post", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optOpen), | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } else { | 
|             $(this).text("开始录像"); | 
|             recordflag = true; | 
|             $.ajax({ | 
|                 headers: { | 
|                     'Accept': 'application/json', | 
|                     'Content-Type': 'application/json', | 
|                     'Authorization': token | 
|                 }, | 
|                 url: "../hik/record", | 
|                 dataType: "json", | 
|                 data: JSON.stringify(optClose), | 
|                 type: "post", | 
|                 success: function (data) { | 
|                     console.log(data); | 
|                 } | 
|             }) | 
|         } | 
|     }) | 
|   | 
|     var cameraMap = new Map(); | 
|   | 
|     /*云台公共方法*/ | 
|     function commondMethod(url, code, enable) { | 
|         cameraId = $('#select option:selected').val(); | 
|         opt = {"cameraId": cameraId, "channelNum": 1, "speed": 8, "enable": enable, "code": code}; | 
|         $.ajax({ | 
|             headers: { | 
|                 'Accept': 'application/json', | 
|                 'Content-Type': 'application/json', | 
|                 'Authorization': token | 
|             }, | 
|             url: url, | 
|             type: "post", | 
|             dataType: "json", | 
|             data: JSON.stringify(opt), | 
|             success: function (data) { | 
|                 console.log(data); | 
|             } | 
|         }) | 
|     } | 
|   | 
|     let webRtcServer = null; | 
|     let videoMap = new Map(); | 
|     $('video').click(function (e) { | 
|         let ID = e.target.id;//获取当前点击事件的元素 | 
|         console.log(ID); | 
|         if (videoMap.get(ID) != null) { | 
|             closeVideo(ID, videoMap.get(ID)); | 
|         } else { | 
|             var cameraId = $('#select option:selected').val(); | 
|             let camera = cameraMap.get(cameraId); | 
|             console.log(camera); | 
|             if (camera.type == "ys") { | 
|                 realViewYs("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port); | 
|             } else if (camera.type == "dh") { | 
|                 realViewDh("127.0.0.1", ID, camera.username, camera.password, camera.ipaddr, camera.port); | 
|             } else { | 
|                 realViewHik("192.168.1.15", ID, camera.username, camera.password, camera.ipaddr, camera.port); | 
|             } | 
|         } | 
|     }); | 
|   | 
|     //预览海康相机 | 
|     function realViewHik(serverip, elem, username, password, ipaddr, port) { | 
|         webRtcServer = new WebRtcStreamer(elem, "http://" + serverip + ":8000"); | 
|         let rtspUrl = "rtsp://" + username + ":" + password + "@" + ipaddr + ":" + port + "/ch1/main/av_stream"; | 
|         let option = "rtptransport=tcp"; | 
|         console.log("rtsp地址:" + rtspUrl); | 
|         webRtcServer.connect(rtspUrl, null, option, null); | 
|         videoMap.set(elem, webRtcServer); | 
|     } | 
|   | 
|     //预览大华相机 | 
|     function realViewDh(serverip, elem, username, password, ipaddr, port) { | 
|         webRtcServer = new WebRtcStreamer(elem, "http://" + serverip + ":8000"); | 
|         let rtspUrl = "rtsp://" + username + ":" + password + "@" + ipaddr + ":" + port + "/cam/realmonitor?channel=1&subtype=0"; | 
|         let option = "rtptransport=tcp"; | 
|         console.log("rtsp地址:" + rtspUrl); | 
|   | 
|         webRtcServer.connect(rtspUrl, null, option, null); | 
|         videoMap.set(elem, webRtcServer); | 
|     } | 
|   | 
|     //预览宇视相机 | 
|     function realViewYs(serverip, elem, username, password, ipaddr, port) { | 
|         webRtcServer = new WebRtcStreamer(elem, "http://" + serverip + ":8000"); | 
|         let rtspUrl = "rtsp://" + username + ":" + password + "@" + ipaddr + ":" + port + "/media/video1/multicast"; | 
|         console.log("rtsp地址:" + rtspUrl); | 
|         let option = "rtptransport=tcp"; | 
|         webRtcServer.connect(rtspUrl, null, option, null); | 
|         videoMap.set(elem, webRtcServer); | 
|     } | 
|   | 
|     function closeVideo(id, webrtc) { | 
|         webrtc.disconnect(); | 
|         videoMap.delete(id); | 
|     } | 
|   | 
|     //页面退出时销毁 | 
|     window.onbeforeunload = function () { | 
|         webRtcServer.disconnect(); | 
|     } | 
| </script> | 
| </body> | 
| </html> |