demo.js 71 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986
  1. // 初始化插件
  2. // 全局保存当前选中窗口
  3. var g_iWndIndex = 0; //可以不用设置这个变量,有窗口参数的接口中,不用传值,开发包会默认使用当前选择窗口
  4. var g_oLocalConfig = null; //本地配置
  5. //错误码
  6. //通用错误
  7. var ERROR_CODE_UNKNOWN = 1000; //未知错误
  8. var ERROR_CODE_NETWORKERROR = 1001; //网络错误
  9. var ERROR_CODE_PARAMERROR = 1002; //缺少插件元素
  10. //登录模块
  11. var ERROR_CODE_LOGIN_NOLOGIN = 2000; // 未登录
  12. var ERROR_CODE_LOGIN_REPEATLOGIN = 2001; //设备已登录,重复登录
  13. var ERROR_CODE_LOGIN_NOSUPPORT = 2002; //当前设备不支持Digest登录
  14. //预览播放
  15. var ERROR_CODE_PLAY_PLUGININITFAIL = 3000; //插件初始化失败
  16. var ERROR_CODE_PLAY_NOREPEATPLAY = 3001; //当前窗口已经在预览
  17. var ERROR_CODE_PLAY_PLAYBACKABNORMAL = 3002; //回放异常
  18. var ERROR_CODE_PLAY_PLAYBACKSTOP = 3003; //回放停止
  19. var ERROR_CODE_PLAY_NOFREESPACE = 3004; //录像过程中,硬盘容量不足
  20. //对讲
  21. var ERROR_CODE_TALK_FAIL = 5000; //语音对讲失败
  22. var version="V3.3.0build20230322"
  23. $(function () {
  24. // 初始化插件参数及插入插件
  25. WebVideoCtrl.I_InitPlugin({
  26. bWndFull: true, //是否支持单窗口双击全屏,默认支持 true:支持 false:不支持
  27. iWndowType: 1,
  28. // aIframe: ["test", "test2"],
  29. cbSelWnd: function (xmlDoc) {
  30. g_iWndIndex = parseInt($(xmlDoc).find("SelectWnd").eq(0).text(), 10);
  31. var szInfo = "当前选择的窗口编号:" + g_iWndIndex;
  32. showCBInfo(szInfo);
  33. },
  34. cbDoubleClickWnd: function (iWndIndex, bFullScreen) {
  35. var szInfo = "当前放大的窗口编号:" + iWndIndex;
  36. if (!bFullScreen) {
  37. szInfo = "当前还原的窗口编号:" + iWndIndex;
  38. }
  39. showCBInfo(szInfo);
  40. },
  41. cbEvent: function (iEventType, iParam1, iParam2) {
  42. if (2 == iEventType) {// 回放正常结束
  43. showCBInfo("窗口" + iParam1 + "回放结束!");
  44. } else if (-1 == iEventType) {
  45. showCBInfo("设备" + iParam1 + "网络错误!");
  46. } else if (3001 == iEventType) {
  47. clickStopRecord(g_szRecordType, iParam1);
  48. }
  49. },
  50. cbInitPluginComplete: function () {
  51. WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin").then(() => {
  52. // 检查插件是否最新
  53. WebVideoCtrl.I_CheckPluginVersion().then((bFlag) => {
  54. if (bFlag) {
  55. alert("检测到新的插件版本,双击开发包目录里的HCWebSDKPlugin.exe升级!");
  56. }
  57. });
  58. }, () => {
  59. alert("插件初始化失败,请确认是否已安装插件;如果未安装,请双击开发包目录里的HCWebSDKPlugin.exe安装!");
  60. });
  61. }
  62. });
  63. // 窗口事件绑定
  64. $(window).bind({
  65. resize: function () {
  66. //WebVideoCtrl.I_Resize($("body").width(), $("body").height());
  67. }
  68. });
  69. //初始化日期时间
  70. var szCurTime = dateFormat(new Date(), "yyyy-MM-dd");
  71. $("#starttime").val(szCurTime + " 00:00:00");
  72. $("#endtime").val(szCurTime + " 23:59:59");
  73. $("#downloadstarttime").val(szCurTime + " 00:00:00");
  74. $("#downloadendtime").val(szCurTime + " 23:59:59");
  75. });
  76. // 显示操作信息
  77. function showOPInfo(szInfo, status, xmlDoc) {
  78. var szTip = "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo;
  79. if (typeof status != "undefined" && status != 200) {
  80. var szStatusString = $(xmlDoc).find("statusString").eq(0).text();
  81. var szSubStatusCode = $(xmlDoc).find("subStatusCode").eq(0).text();
  82. if ("" === szSubStatusCode) {
  83. if("" === szSubStatusCode && "" === szStatusString){
  84. szTip += "(" + status + ")";
  85. }
  86. else{
  87. szTip += "(" + status + ", " + szStatusString + ")";
  88. }
  89. } else {
  90. szTip += "(" + status + ", " + szSubStatusCode + ")";
  91. }
  92. }
  93. szTip += "</div>";
  94. $("#opinfo").html(szTip + $("#opinfo").html());
  95. }
  96. // 显示回调信息
  97. function showCBInfo(szInfo) {
  98. szInfo = "<div>" + dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss") + " " + szInfo + "</div>";
  99. $("#cbinfo").html(szInfo + $("#cbinfo").html());
  100. }
  101. // 格式化时间
  102. function dateFormat(oDate, fmt) {
  103. var o = {
  104. "M+": oDate.getMonth() + 1, //月份
  105. "d+": oDate.getDate(), //日
  106. "h+": oDate.getHours(), //小时
  107. "m+": oDate.getMinutes(), //分
  108. "s+": oDate.getSeconds(), //秒
  109. "q+": Math.floor((oDate.getMonth() + 3) / 3), //季度
  110. "S": oDate.getMilliseconds()//毫秒
  111. };
  112. if (/(y+)/.test(fmt)) {
  113. fmt = fmt.replace(RegExp.$1, (oDate.getFullYear() + "").substr(4 - RegExp.$1.length));
  114. }
  115. for (var k in o) {
  116. if (new RegExp("(" + k + ")").test(fmt)) {
  117. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  118. }
  119. }
  120. return fmt;
  121. }
  122. // 获取窗口尺寸
  123. function getWindowSize() {
  124. var nWidth = $(this).width() + $(this).scrollLeft(),
  125. nHeight = $(this).height() + $(this).scrollTop();
  126. return {width: nWidth, height: nHeight};
  127. }
  128. // 打开选择框 0:文件夹 1:文件
  129. function clickOpenFileDlg(id, iType) {
  130. WebVideoCtrl.I_OpenFileDlg(iType).then(function(szDirPath){
  131. if (szDirPath != -1 && szDirPath != "" && szDirPath != null) {
  132. $("#" + id).val(szDirPath);
  133. }
  134. }, function() {
  135. showOPInfo("打开文件路径失败");
  136. });
  137. }
  138. // 获取本地参数
  139. function clickGetLocalCfg() {
  140. WebVideoCtrl.I_GetLocalCfg().then((oLocalConfig) => {
  141. g_oLocalConfig = oLocalConfig;
  142. $("#netsPreach").val(oLocalConfig.buffNumberType);
  143. $("#wndSize").val(oLocalConfig.playWndType);
  144. $("#rulesInfo").val(oLocalConfig.ivsMode);
  145. $("#captureFileFormat").val(oLocalConfig.captureFileFormat);
  146. $("#packSize").val(oLocalConfig.packgeSize);
  147. $("#recordPath").val(oLocalConfig.recordPath);
  148. $("#downloadPath").val(oLocalConfig.downloadPath);
  149. $("#previewPicPath").val(oLocalConfig.capturePath);
  150. $("#playbackPicPath").val(oLocalConfig.playbackPicPath);
  151. $("#devicePicPath").val(oLocalConfig.deviceCapturePath);
  152. $("#playbackFilePath").val(oLocalConfig.playbackFilePath);
  153. $("#protocolType").val(oLocalConfig.protocolType);
  154. $("#secretKey").val("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F");
  155. showOPInfo("本地配置获取成功!");
  156. }, (oError) => {
  157. var szInfo = "本地配置获取失败!";
  158. showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
  159. });
  160. }
  161. // 设置本地参数
  162. async function clickSetLocalCfg() {
  163. g_oLocalConfig.buffNumberType = $("#netsPreach").val();
  164. g_oLocalConfig.playWndType = $("#wndSize").val();
  165. g_oLocalConfig.ivsMode = $("#rulesInfo").val();
  166. g_oLocalConfig.captureFileFormat = $("#captureFileFormat").val();
  167. g_oLocalConfig.packgeSize = $("#packSize").val();
  168. g_oLocalConfig.recordPath = $("#recordPath").val();
  169. g_oLocalConfig.downloadPath = $("#downloadPath").val();
  170. g_oLocalConfig.capturePath = $("#previewPicPath").val();
  171. g_oLocalConfig.playbackPicPath = $("#playbackPicPath").val();
  172. g_oLocalConfig.deviceCapturePath = $("#devicePicPath").val();
  173. g_oLocalConfig.playbackFilePath = $("#playbackFilePath").val();
  174. g_oLocalConfig.protocolType = $("#protocolType").val();
  175. if ("\x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F" !== $("#secretKey").val()) {
  176. g_oLocalConfig.secretKey = await WebVideoCtrl.I_GetEncryptString($("#secretKey").val());
  177. }
  178. WebVideoCtrl.I_SetLocalCfg(g_oLocalConfig).then(() => {
  179. showOPInfo("本地配置设置成功!");
  180. }, (oError) => {
  181. var szInfo = "本地配置设置失败!";
  182. showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
  183. });
  184. }
  185. // 窗口分割数
  186. function changeWndNum(iType) {
  187. if ("1*2" === iType || "2*1" === iType) {
  188. WebVideoCtrl.I_ArrangeWindow(iType).then(() => {
  189. showOPInfo("窗口分割成功!");
  190. }, (oError) => {
  191. var szInfo = "窗口分割失败!";
  192. showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
  193. });
  194. } else {
  195. iType = parseInt(iType, 10);
  196. WebVideoCtrl.I_ChangeWndNum(iType).then(() => {
  197. showOPInfo("窗口分割成功!");
  198. }, (oError) => {
  199. var szInfo = "窗口分割失败!";
  200. showOPInfo(szInfo, oError.errorCode, oError.errorMsg);
  201. });
  202. }
  203. }
  204. // 登录
  205. function clickLogin(new_ip) {
  206. // var szIP = $("#loginip").val(),
  207. var szIP=new_ip,
  208. szPort = $("#port").val(),
  209. szUsername = $("#username").val(),
  210. szPassword = $("#password").val();
  211. if ("" == szIP || "" == szPort) {
  212. return;
  213. }
  214. var szDeviceIdentify = szIP + "_" + szPort;
  215. WebVideoCtrl.I_Login(szIP, 1, szPort, szUsername, szPassword, {
  216. timeout: 3000,
  217. success: function (xmlDoc) {
  218. showOPInfo(szDeviceIdentify + " 登录成功!");
  219. //$("#ip").empty(); //zlwu
  220. $("#ip").prepend("<option value='" + szDeviceIdentify + "'>" + szDeviceIdentify + "</option>");
  221. setTimeout(function () {
  222. $("#ip").val(szDeviceIdentify);
  223. setTimeout(function() {
  224. getChannelInfo();
  225. }, 100);
  226. getDevicePort();
  227. }, 100);
  228. setTimeout(function () {
  229. clickStartRealPlay();//zlwu
  230. }, 1000);
  231. },
  232. error: function (oError) {
  233. if (ERROR_CODE_LOGIN_REPEATLOGIN === status) {
  234. showOPInfo(szDeviceIdentify + " 已登录过!");
  235. clickStartRealPlay() //zlwu
  236. } else {
  237. showOPInfo(szDeviceIdentify + " 登录失败!", oError.errorCode, oError.errorMsg);
  238. }
  239. }
  240. });
  241. }
  242. // 退出
  243. function clickLogout() {
  244. var szDeviceIdentify = $("#ip").val();
  245. if (null == szDeviceIdentify) {
  246. return;
  247. }
  248. WebVideoCtrl.I_Logout(szDeviceIdentify).then(() => {
  249. showOPInfo(szDeviceIdentify + " " + "退出成功!");
  250. }, () => {
  251. showOPInfo(szDeviceIdentify + " " + "退出失败!");
  252. });
  253. }
  254. // 获取设备信息
  255. function clickGetDeviceInfo() {
  256. var szDeviceIdentify = $("#ip").val();
  257. if (null == szDeviceIdentify) {
  258. return;
  259. }
  260. WebVideoCtrl.I_GetDeviceInfo(szDeviceIdentify, {
  261. success: function (xmlDoc) {
  262. var arrStr = [];
  263. arrStr.push("设备名称:" + $(xmlDoc).find("deviceName").eq(0).text() + "\r\n");
  264. arrStr.push("设备ID:" + $(xmlDoc).find("deviceID").eq(0).text() + "\r\n");
  265. arrStr.push("型号:" + $(xmlDoc).find("model").eq(0).text() + "\r\n");
  266. arrStr.push("设备序列号:" + $(xmlDoc).find("serialNumber").eq(0).text() + "\r\n");
  267. arrStr.push("MAC地址:" + $(xmlDoc).find("macAddress").eq(0).text() + "\r\n");
  268. arrStr.push("主控版本:" + $(xmlDoc).find("firmwareVersion").eq(0).text() + " " + $(xmlDoc).find("firmwareReleasedDate").eq(0).text() + "\r\n");
  269. arrStr.push("编码版本:" + $(xmlDoc).find("encoderVersion").eq(0).text() + " " + $(xmlDoc).find("encoderReleasedDate").eq(0).text() + "\r\n");
  270. showOPInfo(szDeviceIdentify + " 获取设备信息成功!");
  271. alert(arrStr.join(""));
  272. },
  273. error: function (oError) {
  274. showOPInfo(szDeviceIdentify + " 获取设备信息失败!", oError.errorCode, oError.errorMsg);
  275. }
  276. });
  277. }
  278. // 获取通道
  279. function getChannelInfo() {
  280. var szDeviceIdentify = $("#ip").val(),
  281. oSel = $("#channels").empty();
  282. if (null == szDeviceIdentify) {
  283. return;
  284. }
  285. // 模拟通道
  286. WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {
  287. success: function (xmlDoc) {
  288. var oChannels = $(xmlDoc).find("VideoInputChannel");
  289. $.each(oChannels, function (i) {
  290. var id = $(this).find("id").eq(0).text(),
  291. name = $(this).find("name").eq(0).text();
  292. if ("" == name) {
  293. name = "Camera " + (i < 9 ? "0" + (i + 1) : (i + 1));
  294. }
  295. oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
  296. });
  297. showOPInfo(szDeviceIdentify + " 获取模拟通道成功!");
  298. },
  299. error: function (oError) {
  300. showOPInfo(szDeviceIdentify + " 获取模拟通道失败!", oError.errorCode, oError.errorMsg);
  301. }
  302. });
  303. // 数字通道
  304. WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
  305. success: function (xmlDoc) {
  306. var oChannels = $(xmlDoc).find("InputProxyChannelStatus");
  307. $.each(oChannels, function (i) {
  308. var id = $(this).find("id").eq(0).text(),
  309. name = $(this).find("name").eq(0).text(),
  310. online = $(this).find("online").eq(0).text();
  311. if ("false" == online) {// 过滤禁用的数字通道
  312. return true;
  313. }
  314. if ("" == name) {
  315. name = "IPCamera " + (i < 9 ? "0" + (i + 1) : (i + 1));
  316. }
  317. oSel.append("<option value='" + id + "' bZero='false'>" + name + "</option>");
  318. });
  319. showOPInfo(szDeviceIdentify + " 获取数字通道成功!");
  320. },
  321. error: function (oError) {
  322. showOPInfo(szDeviceIdentify + " 获取数字通道失败!", oError.errorCode, oError.errorMsg);
  323. }
  324. });
  325. // 零通道
  326. WebVideoCtrl.I_GetZeroChannelInfo(szDeviceIdentify, {
  327. success: function (xmlDoc) {
  328. var oChannels = $(xmlDoc).find("ZeroVideoChannel");
  329. $.each(oChannels, function (i) {
  330. var id = $(this).find("id").eq(0).text(),
  331. name = $(this).find("name").eq(0).text();
  332. if ("" == name) {
  333. name = "Zero Channel " + (i < 9 ? "0" + (i + 1) : (i + 1));
  334. }
  335. if ("true" == $(this).find("enabled").eq(0).text()) {// 过滤禁用的零通道
  336. oSel.append("<option value='" + id + "' bZero='true'>" + name + "</option>");
  337. }
  338. });
  339. showOPInfo(szDeviceIdentify + " 获取零通道成功!");
  340. },
  341. error: function (oError) {
  342. showOPInfo(szDeviceIdentify + " 获取零通道失败!", oError.errorCode, oError.errorMsg);
  343. }
  344. });
  345. }
  346. // 获取端口
  347. function getDevicePort() {
  348. var szDeviceIdentify = $("#ip").val();
  349. if (null == szDeviceIdentify) {
  350. return;
  351. }
  352. var oPort = WebVideoCtrl.I_GetDevicePort(szDeviceIdentify).then((oPort) => {
  353. $("#deviceport").val(oPort.iDevicePort);
  354. $("#rtspport").val(oPort.iRtspPort);
  355. showOPInfo(szDeviceIdentify + " 获取端口成功!");
  356. }, (oError) => {
  357. var szInfo = "获取端口失败!";
  358. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  359. });
  360. }
  361. // 获取数字通道
  362. async function clickGetDigitalChannelInfo() {
  363. var szDeviceIdentify = $("#ip").val(),
  364. iAnalogChannelNum = 0;
  365. $("#digitalchannellist").empty();
  366. if (null == szDeviceIdentify) {
  367. return;
  368. }
  369. // 模拟通道
  370. try {
  371. var oAnalogChannelInfo = await WebVideoCtrl.I_GetAnalogChannelInfo(szDeviceIdentify, {});
  372. iAnalogChannelNum = $(oAnalogChannelInfo).find("VideoInputChannel").length;
  373. } finally {
  374. // 数字通道
  375. WebVideoCtrl.I_GetDigitalChannelInfo(szDeviceIdentify, {
  376. success: function (xmlDoc) {
  377. var oChannels = $(xmlDoc).find("InputProxyChannelStatus");
  378. $.each(oChannels, function () {
  379. var id = parseInt($(this).find("id").eq(0).text(), 10),
  380. ipAddress = $(this).find("ipAddress").eq(0).text(),
  381. srcInputPort = $(this).find("srcInputPort").eq(0).text(),
  382. managePortNo = $(this).find("managePortNo").eq(0).text(),
  383. online = $(this).find("online").eq(0).text(),
  384. proxyProtocol = $(this).find("proxyProtocol").eq(0).text();
  385. var objTr = $("#digitalchannellist").get(0).insertRow(-1);
  386. var objTd = objTr.insertCell(0);
  387. objTd.innerHTML = (id - iAnalogChannelNum) < 10 ? "D0" + (id - iAnalogChannelNum) : "D" + (id - iAnalogChannelNum);
  388. objTd = objTr.insertCell(1);
  389. objTd.width = "25%";
  390. objTd.innerHTML = ipAddress;
  391. objTd = objTr.insertCell(2);
  392. objTd.width = "15%";
  393. objTd.innerHTML = srcInputPort;
  394. objTd = objTr.insertCell(3);
  395. objTd.width = "20%";
  396. objTd.innerHTML = managePortNo;
  397. objTd = objTr.insertCell(4);
  398. objTd.width = "15%";
  399. objTd.innerHTML = "true" == online ? "在线" : "离线";
  400. objTd = objTr.insertCell(5);
  401. objTd.width = "25%";
  402. objTd.innerHTML = proxyProtocol;
  403. });
  404. showOPInfo(szDeviceIdentify + " 获取数字通道成功!");
  405. },
  406. error: function (oError) {
  407. showOPInfo(szDeviceIdentify + " 没有数字通道!", oError.errorCode, oError.errorMsg);
  408. }
  409. });
  410. }
  411. }
  412. // 开始预览
  413. function clickStartRealPlay(iStreamType) {
  414. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  415. szDeviceIdentify = $("#ip").val(),
  416. iRtspPort = parseInt($("#rtspport").val(), 10),
  417. iChannelID = parseInt($("#channels").val(), 10),
  418. bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
  419. szInfo = "";
  420. if ("undefined" === typeof iStreamType) {
  421. iStreamType = parseInt($("#streamtype").val(), 10);
  422. }
  423. if (null == szDeviceIdentify) {
  424. return;
  425. }
  426. var startRealPlay = function () {
  427. WebVideoCtrl.I_StartRealPlay(szDeviceIdentify, {
  428. iStreamType: iStreamType,
  429. iChannelID: iChannelID,
  430. bZeroChannel: bZeroChannel,
  431. iPort: iRtspPort,
  432. success: function () {
  433. szInfo = "开始预览成功!";
  434. showOPInfo(szDeviceIdentify + " " + szInfo);
  435. },
  436. error: function (oError) {
  437. showOPInfo(szDeviceIdentify + " 开始预览失败!", oError.errorCode, oError.errorMsg);
  438. }
  439. });
  440. };
  441. if (oWndInfo != null) {// 已经在播放了,先停止
  442. WebVideoCtrl.I_Stop({
  443. success: function () {
  444. startRealPlay();
  445. }
  446. });
  447. } else {
  448. startRealPlay();
  449. }
  450. }
  451. function setTextOverlay() {
  452. var szDeviceIdentify = $("#ip").val();
  453. var szInfo = "";
  454. var that = this;
  455. var iChannelID = parseInt($("#channels").val(), 10);
  456. var szUrl = "ISAPI/System/Video/inputs/channels/" + iChannelID + "/overlays";
  457. WebVideoCtrl.I_GetTextOverlay(szUrl,szDeviceIdentify,{
  458. success:function(data){
  459. $(data).find("TextOverlay").eq(0).find("displayText").eq(0).text("我tet");
  460. $(data).find("TextOverlay").eq(0).find("positionX").eq(0).text("20");
  461. $(data).find("TextOverlay").eq(0).find("positionY").eq(0).text("30");
  462. var xmldoc = toXMLStr(data);
  463. var newOptions = {
  464. type: "PUT",
  465. data: xmldoc,
  466. success: function(){
  467. szInfo = "绘制osd信息成功";
  468. showOPInfo(szDeviceIdentify + " " + szInfo);
  469. },
  470. error: function(oError){
  471. showOPInfo(szDeviceIdentify + " 设置osd信息失败!", oError.errorCode, oError.errorMsg);
  472. }
  473. };
  474. WebVideoCtrl.I_SendHTTPRequest(szDeviceIdentify,szUrl,newOptions);
  475. },
  476. error: function(oError){
  477. showOPInfo(szDeviceIdentify + " 设置osd信息失败!", oError.errorCode, oError.errorMsg);
  478. }
  479. });
  480. }
  481. // 停止预览
  482. function clickStopRealPlay() {
  483. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  484. szInfo = "";
  485. if (oWndInfo != null) {
  486. WebVideoCtrl.I_Stop({
  487. success: function () {
  488. szInfo = "停止预览成功!";
  489. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  490. },
  491. error: function (oError) {
  492. showOPInfo(szDeviceIdentify + " 停止预览失败!", oError.errorCode, oError.errorMsg);
  493. }
  494. });
  495. }
  496. }
  497. // 打开声音
  498. function clickOpenSound() {
  499. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  500. szInfo = "";
  501. if (oWndInfo != null) {
  502. var allWndInfo = WebVideoCtrl.I_GetWindowStatus();
  503. // 循环遍历所有窗口,如果有窗口打开了声音,先关闭
  504. for (var i = 0, iLen = allWndInfo.length; i < iLen; i++) {
  505. oWndInfo = allWndInfo[i];
  506. if (oWndInfo.bSound) {
  507. WebVideoCtrl.I_CloseSound(oWndInfo.iIndex);
  508. break;
  509. }
  510. }
  511. WebVideoCtrl.I_OpenSound().then(() => {
  512. showOPInfo(oWndInfo.szDeviceIdentify + " " + "打开声音成功!");
  513. }, (oError) => {
  514. var szInfo = " 打开声音失败!";
  515. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  516. });
  517. }
  518. }
  519. // 关闭声音
  520. function clickCloseSound() {
  521. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  522. szInfo = "";
  523. if (oWndInfo != null) {
  524. WebVideoCtrl.I_CloseSound().then(() => {
  525. showOPInfo(oWndInfo.szDeviceIdentify + " " + "关闭声音成功!");
  526. }, (oError) => {
  527. var szInfo = " 关闭声音失败!";
  528. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  529. });
  530. }
  531. }
  532. // 设置音量
  533. function clickSetVolume() {
  534. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  535. iVolume = parseInt($("#volume").val(), 10),
  536. szInfo = "";
  537. if (oWndInfo != null) {
  538. WebVideoCtrl.I_SetVolume(iVolume).then(() => {
  539. showOPInfo(oWndInfo.szDeviceIdentify + " " + "设置音量成功");
  540. }, (oError) => {
  541. var szInfo = " 设置音量失败!";
  542. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  543. });
  544. }
  545. }
  546. // 抓图
  547. async function clickCapturePic(szType) {
  548. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  549. szInfo = "";
  550. if (oWndInfo != null) {
  551. var oLocalConfig = await WebVideoCtrl.I_GetLocalCfg();
  552. var szCaptureFileFormat = "0";
  553. if (oLocalConfig) {
  554. szCaptureFileFormat = oLocalConfig.captureFileFormat;
  555. }
  556. var szChannelID = $("#channels").val();
  557. var szPicName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime();
  558. //如果是回放抓图,需要增加如下前缀:"playback_"
  559. if ("playback" === szType) {
  560. szPicName = "playback_" + oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime();
  561. }
  562. szPicName += ("0" === szCaptureFileFormat) ? ".jpg": ".bmp";
  563. WebVideoCtrl.I_CapturePic(szPicName, {
  564. bDateDir: true //是否生成日期文件
  565. }).then(function(){
  566. szInfo = "抓图成功!";
  567. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  568. }, function(oError){
  569. szInfo = " 抓图失败!";
  570. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  571. });
  572. }
  573. }
  574. // 抓图
  575. function clickCapturePicData() {
  576. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  577. szInfo = "";
  578. if (oWndInfo != null) {
  579. WebVideoCtrl.I_CapturePicData().then(function(data){
  580. console.log(data);
  581. szInfo = "抓图上传成功!";
  582. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  583. },function(){
  584. szInfo = "抓图失败!";
  585. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  586. });
  587. }
  588. }
  589. // 开始录像
  590. var g_szRecordType = "";
  591. function clickStartRecord(szType) {
  592. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  593. szInfo = "";
  594. g_szRecordType = szType;
  595. if (oWndInfo != null) {
  596. var szChannelID = $("#channels").val(),
  597. szFileName = oWndInfo.szDeviceIdentify + "_" + szChannelID + "_" + new Date().getTime();
  598. WebVideoCtrl.I_StartRecord(szFileName, {
  599. bDateDir: true, //是否生成日期文件
  600. success: function () {
  601. if ('realplay' === szType) {
  602. szInfo = "开始录像成功!";
  603. } else if ('playback' === szType) {
  604. szInfo = "开始剪辑成功!";
  605. }
  606. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  607. },
  608. error: function (oError) {
  609. if ('realplay' === szType) {
  610. szInfo = " 开始录像失败!";
  611. } else if ('playback' === szType) {
  612. szInfo = " 开始剪辑失败!";
  613. }
  614. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  615. }
  616. });
  617. }
  618. }
  619. // 停止录像
  620. function clickStopRecord(szType, iWndIndex) {
  621. if ("undefined" === typeof iWndIndex) {
  622. iWndIndex = g_iWndIndex;
  623. }
  624. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(iWndIndex),
  625. szInfo = "";
  626. if (oWndInfo != null) {
  627. WebVideoCtrl.I_StopRecord({
  628. success: function () {
  629. if ('realplay' === szType) {
  630. szInfo = "停止录像成功!";
  631. } else if ('playback' === szType) {
  632. szInfo = "停止剪辑成功!";
  633. }
  634. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  635. },
  636. error: function (oError) {
  637. if ('realplay' === szType) {
  638. szInfo = "停止录像失败!";
  639. } else if ('playback' === szType) {
  640. szInfo = "停止剪辑失败!";
  641. }
  642. sshowOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  643. }
  644. });
  645. }
  646. }
  647. // 获取对讲通道
  648. function clickGetAudioInfo() {
  649. var szDeviceIdentify = $("#ip").val();
  650. if (null == szDeviceIdentify) {
  651. return;
  652. }
  653. WebVideoCtrl.I_GetAudioInfo(szDeviceIdentify, {
  654. success: function (xmlDoc) {
  655. var oAudioChannels = $(xmlDoc).find("TwoWayAudioChannel"),
  656. oSel = $("#audiochannels").empty();
  657. $.each(oAudioChannels, function () {
  658. var id = $(this).find("id").eq(0).text();
  659. oSel.append("<option value='" + id + "'>" + id + "</option>");
  660. });
  661. showOPInfo(szDeviceIdentify + " 获取对讲通道成功!");
  662. },
  663. error: function (oError) {
  664. showOPInfo(szDeviceIdentify + " 获取对讲通道失败!", oError.errorCode, oError.errorMsg);
  665. }
  666. });
  667. }
  668. // 开始对讲
  669. function clickStartVoiceTalk() {
  670. var szDeviceIdentify = $("#ip").val(),
  671. iAudioChannel = parseInt($("#audiochannels").val(), 10),
  672. szInfo = "";
  673. if (null == szDeviceIdentify) {
  674. return;
  675. }
  676. if (isNaN(iAudioChannel)) {
  677. alert("请选择对讲通道!");
  678. return;
  679. }
  680. WebVideoCtrl.I_StartVoiceTalk(szDeviceIdentify, iAudioChannel).then(() => {
  681. szInfo = "开始对讲成功!";
  682. showOPInfo(szDeviceIdentify + " " + szInfo);
  683. }, (oError) => {
  684. var szInfo = " 开始对讲失败!";
  685. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  686. });
  687. }
  688. // 停止对讲
  689. function clickStopVoiceTalk() {
  690. var szDeviceIdentify = $("#ip").val();
  691. WebVideoCtrl.I_StopVoiceTalk().then(() => {
  692. szInfo = "停止对讲成功!";
  693. showOPInfo(szDeviceIdentify + " " + szInfo);
  694. }, (oError) => {
  695. var szInfo = " 停止对讲失败!";
  696. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  697. });
  698. }
  699. // 启用电子放大
  700. function clickEnableEZoom() {
  701. var szDeviceIdentify = $("#ip").val();
  702. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  703. szInfo = "";
  704. if (oWndInfo != null) {
  705. WebVideoCtrl.I_EnableEZoom().then(() => {
  706. szInfo = "启用电子放大成功!";
  707. showOPInfo(szDeviceIdentify + " " + szInfo);
  708. }, (oError) => {
  709. szInfo = "启用电子放大失败!";
  710. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  711. });
  712. }
  713. }
  714. // 禁用电子放大
  715. function clickDisableEZoom() {
  716. var szDeviceIdentify = $("#ip").val();
  717. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  718. szInfo = "";
  719. if (oWndInfo != null) {
  720. WebVideoCtrl.I_DisableEZoom().then(() => {
  721. szInfo = "禁用电子放大成功!";
  722. showOPInfo(szDeviceIdentify + " " + szInfo);
  723. }, (oError) => {
  724. szInfo = "禁用电子放大失败!";
  725. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  726. });
  727. }
  728. }
  729. // 启用3D放大
  730. function clickEnable3DZoom() {
  731. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  732. szInfo = "";
  733. var szDeviceIdentify = $("#ip").val();
  734. if (oWndInfo != null) {
  735. WebVideoCtrl.I_Enable3DZoom().then(() => {
  736. szInfo = "启用3D放大成功!";
  737. showOPInfo(szDeviceIdentify + " " + szInfo);
  738. }, (oError) => {
  739. szInfo = "启用3D放大失败!";
  740. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  741. });
  742. }
  743. }
  744. // 禁用3D放大
  745. function clickDisable3DZoom() {
  746. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  747. szInfo = "";
  748. var szDeviceIdentify = $("#ip").val();
  749. if (oWndInfo != null) {
  750. WebVideoCtrl.I_Disable3DZoom().then(() => {
  751. szInfo = "禁用3D放大成功!";
  752. showOPInfo(szDeviceIdentify + " " + szInfo);
  753. }, (oError) => {
  754. szInfo = "禁用3D放大失败!";
  755. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  756. });
  757. }
  758. }
  759. // 全屏
  760. function clickFullScreen() {
  761. WebVideoCtrl.I_FullScreen(true).then(() => {
  762. showOPInfo("全屏成功");
  763. }, (oError) => {
  764. showOPInfo("全屏失败!", oError.errorCode, oError.errorMsg);
  765. });
  766. }
  767. // PTZ控制 9为自动,1,2,3,4,5,6,7,8为方向PTZ
  768. var g_bPTZAuto = false;
  769. function mouseDownPTZControl(iPTZIndex) {
  770. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  771. bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
  772. iPTZSpeed = $("#ptzspeed").val();
  773. if (bZeroChannel) {// 零通道不支持云台
  774. return;
  775. }
  776. if (oWndInfo != null) {
  777. if (9 == iPTZIndex && g_bPTZAuto) {
  778. iPTZSpeed = 0;// 自动开启后,速度置为0可以关闭自动
  779. } else {
  780. g_bPTZAuto = false;// 点击其他方向,自动肯定会被关闭
  781. }
  782. WebVideoCtrl.I_PTZControl(iPTZIndex, false, {
  783. iPTZSpeed: iPTZSpeed,
  784. success: function (xmlDoc) {
  785. if (9 == iPTZIndex && g_bPTZAuto) {
  786. showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!");
  787. } else {
  788. showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台成功!");
  789. }
  790. if (9 == iPTZIndex) {
  791. g_bPTZAuto = !g_bPTZAuto;
  792. }
  793. },
  794. error: function (oError) {
  795. showOPInfo(oWndInfo.szDeviceIdentify + " 开启云台失败!", oError.errorCode, oError.errorMsg);
  796. }
  797. });
  798. }
  799. }
  800. // 方向PTZ停止
  801. function mouseUpPTZControl() {
  802. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  803. if (oWndInfo != null) {
  804. WebVideoCtrl.I_PTZControl(1, true, {
  805. success: function (xmlDoc) {
  806. showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台成功!");
  807. },
  808. error: function (oError) {
  809. showOPInfo(oWndInfo.szDeviceIdentify + " 停止云台失败!", oError.errorCode, oError.errorMsg);
  810. }
  811. });
  812. }
  813. }
  814. // 设置预置点
  815. function clickSetPreset() {
  816. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  817. iPresetID = parseInt($("#preset").val(), 10);
  818. if (oWndInfo != null) {
  819. WebVideoCtrl.I_SetPreset(iPresetID, {
  820. success: function (xmlDoc) {
  821. showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点成功!");
  822. },
  823. error: function (oError) {
  824. showOPInfo(oWndInfo.szDeviceIdentify + " 设置预置点失败!", oError.errorCode, oError.errorMsg);
  825. }
  826. });
  827. }
  828. }
  829. // 调用预置点
  830. function clickGoPreset() {
  831. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  832. iPresetID = parseInt($("#preset").val(), 10);
  833. if (oWndInfo != null) {
  834. WebVideoCtrl.I_GoPreset(iPresetID, {
  835. success: function (xmlDoc) {
  836. showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点成功!");
  837. },
  838. error: function (oError) {
  839. showOPInfo(oWndInfo.szDeviceIdentify + " 调用预置点失败!", oError.errorCode, oError.errorMsg);
  840. }
  841. });
  842. }
  843. }
  844. // 搜索录像
  845. var g_iSearchTimes = 0;
  846. function clickRecordSearch(iType) {
  847. var szDeviceIdentify = $("#ip").val(),
  848. iChannelID = parseInt($("#channels").val(), 10),
  849. bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
  850. iStreamType = parseInt($("#record_streamtype").val(), 10),
  851. szStartTime = $("#starttime").val(),
  852. szEndTime = $("#endtime").val();
  853. if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) {
  854. alert("开始时间大于结束时间");
  855. return;
  856. }
  857. if (null == szDeviceIdentify) {
  858. return;
  859. }
  860. if (bZeroChannel) {// 零通道不支持录像搜索
  861. return;
  862. }
  863. if (0 == iType) {// 首次搜索
  864. $("#searchlist").empty();
  865. g_iSearchTimes = 0;
  866. }
  867. //如果是前端设备,需要将搜索时间转换为UTC时间
  868. WebVideoCtrl.I_RecordSearch(szDeviceIdentify, iChannelID, szStartTime, szEndTime, {
  869. iStreamType: iStreamType,
  870. iSearchPos: g_iSearchTimes,
  871. success: function (xmlDoc) {
  872. if ("MORE" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) {
  873. for(var i = 0, nLen = $(xmlDoc).find("searchMatchItem").length; i < nLen; i++) {
  874. var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text();
  875. if(szPlaybackURI.indexOf("name=") < 0) {
  876. break;
  877. }
  878. var szStartTime = $(xmlDoc).find("startTime").eq(i).text();
  879. var szEndTime = $(xmlDoc).find("endTime").eq(i).text();
  880. var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size="));
  881. var objTr = $("#searchlist").get(0).insertRow(-1);
  882. var objTd = objTr.insertCell(0);
  883. objTd.id = "downloadTd" + i;
  884. objTd.innerHTML = g_iSearchTimes + 1;
  885. objTd = objTr.insertCell(1);
  886. objTd.width = "30%";
  887. objTd.innerHTML = szFileName;
  888. objTd = objTr.insertCell(2);
  889. objTd.width = "30%";
  890. objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", "");
  891. objTd = objTr.insertCell(3);
  892. objTd.width = "30%";
  893. objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", "");
  894. objTd = objTr.insertCell(4);
  895. objTd.width = "10%";
  896. objTd.innerHTML = "<a href='javascript:;' onclick='clickStartDownloadRecord(" + g_iSearchTimes + ");'>下载</a>";
  897. $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName);
  898. $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI);
  899. ++g_iSearchTimes;
  900. }
  901. clickRecordSearch(1);// 继续搜索
  902. } else if ("OK" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) {
  903. var iLength = $(xmlDoc).find("searchMatchItem").length;
  904. for(var i = 0; i < iLength; i++) {
  905. var szPlaybackURI = $(xmlDoc).find("playbackURI").eq(i).text();
  906. if(szPlaybackURI.indexOf("name=") < 0) {
  907. break;
  908. }
  909. var szStartTime = $(xmlDoc).find("startTime").eq(i).text();
  910. var szEndTime = $(xmlDoc).find("endTime").eq(i).text();
  911. var szFileName = szPlaybackURI.substring(szPlaybackURI.indexOf("name=") + 5, szPlaybackURI.indexOf("&size="));
  912. var objTr = $("#searchlist").get(0).insertRow(-1);
  913. var objTd = objTr.insertCell(0);
  914. objTd.id = "downloadTd" + i;
  915. objTd.innerHTML = g_iSearchTimes + 1;
  916. objTd = objTr.insertCell(1);
  917. objTd.width = "30%";
  918. objTd.innerHTML = szFileName;
  919. objTd = objTr.insertCell(2);
  920. objTd.width = "30%";
  921. objTd.innerHTML = (szStartTime.replace("T", " ")).replace("Z", "");
  922. objTd = objTr.insertCell(3);
  923. objTd.width = "30%";
  924. objTd.innerHTML = (szEndTime.replace("T", " ")).replace("Z", "");
  925. objTd = objTr.insertCell(4);
  926. objTd.width = "10%";
  927. objTd.innerHTML = "<a href='javascript:;' onclick='clickStartDownloadRecord(" + g_iSearchTimes + ");'>下载</a>";
  928. $("#downloadTd" + g_iSearchTimes).data("fileName", szFileName);
  929. $("#downloadTd" + g_iSearchTimes).data("playbackURI", szPlaybackURI);
  930. ++g_iSearchTimes;
  931. }
  932. showOPInfo(szDeviceIdentify + " 搜索录像文件成功!");
  933. } else if("NO MATCHES" === $(xmlDoc).find("responseStatusStrg").eq(0).text()) {
  934. setTimeout(function() {
  935. g_iSearchTimes = 0;
  936. showOPInfo(szDeviceIdentify + " 没有录像文件!");
  937. }, 50);
  938. }
  939. },
  940. error: function (oError) {
  941. g_iSearchTimes = 0;
  942. showOPInfo(szDeviceIdentify + " 搜索录像文件失败!", oError.errorCode, oError.errorMsg);
  943. }
  944. });
  945. }
  946. // 开始回放
  947. function clickStartPlayback() {
  948. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  949. szDeviceIdentify = $("#ip").val(),
  950. iRtspPort = parseInt($("#rtspport").val(), 10),
  951. iStreamType = parseInt($("#record_streamtype").val(), 10),
  952. bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
  953. iChannelID = parseInt($("#channels").val(), 10),
  954. szStartTime = $("#starttime").val(),
  955. szEndTime = $("#endtime").val(),
  956. szInfo = "",
  957. bChecked = $("#transstream").prop("checked"),
  958. iRet = -1;
  959. if (null == szDeviceIdentify) {
  960. return;
  961. }
  962. if (bZeroChannel) {// 零通道不支持回放
  963. return;
  964. }
  965. var startPlayback = function () {
  966. if (bChecked) {// 启用转码回放
  967. var oTransCodeParam = {
  968. TransFrameRate: "14",// 0:全帧率,5:1,6:2,7:4,8:6,9:8,10:10,11:12,12:16,14:15,15:18,13:20,16:22
  969. TransResolution: "1",// 255:Auto,3:4CIF,2:QCIF,1:CIF
  970. TransBitrate: "19"// 2:32K,3:48K,4:64K,5:80K,6:96K,7:128K,8:160K,9:192K,10:224K,11:256K,12:320K,13:384K,14:448K,15:512K,16:640K,17:768K,18:896K,19:1024K,20:1280K,21:1536K,22:1792K,23:2048K,24:3072K,25:4096K,26:8192K
  971. };
  972. WebVideoCtrl.I_StartPlayback(szDeviceIdentify, {
  973. iRtspPort: iRtspPort,
  974. iStreamType: iStreamType,
  975. iChannelID: iChannelID,
  976. szStartTime: szStartTime,
  977. szEndTime: szEndTime,
  978. oTransCodeParam: oTransCodeParam,
  979. success: function () {
  980. szInfo = "开始回放成功!";
  981. showOPInfo(szDeviceIdentify + " " + szInfo);
  982. },
  983. error: function (oError) {
  984. szInfo = "开始回放失败!";
  985. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  986. }
  987. });
  988. } else {
  989. WebVideoCtrl.I_StartPlayback(szDeviceIdentify, {
  990. iRtspPort: iRtspPort,
  991. iStreamType: iStreamType,
  992. iChannelID: iChannelID,
  993. szStartTime: szStartTime,
  994. szEndTime: szEndTime,
  995. success: function () {
  996. szInfo = "开始回放成功!";
  997. showOPInfo(szDeviceIdentify + " " + szInfo);
  998. },
  999. error: function (oError) {
  1000. szInfo = "开始回放失败!";
  1001. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1002. }
  1003. });
  1004. }
  1005. };
  1006. if (oWndInfo != null) {// 已经在播放了,先停止
  1007. WebVideoCtrl.I_Stop({
  1008. success: function () {
  1009. startPlayback();
  1010. }
  1011. });
  1012. } else {
  1013. startPlayback();
  1014. }
  1015. }
  1016. // 停止回放
  1017. function clickStopPlayback() {
  1018. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1019. szInfo = "";
  1020. if (oWndInfo != null) {
  1021. WebVideoCtrl.I_Stop({
  1022. success: function () {
  1023. szInfo = "停止回放成功!";
  1024. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1025. },
  1026. error: function (oError) {
  1027. szInfo = "停止回放失败!";
  1028. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1029. }
  1030. });
  1031. }
  1032. }
  1033. // 开始倒放
  1034. function clickReversePlayback() {
  1035. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1036. szDeviceIdentify = $("#ip").val(),
  1037. iRtspPort = parseInt($("#rtspport").val(), 10),
  1038. iStreamType = parseInt($("#record_streamtype").val(), 10),
  1039. bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false,
  1040. iChannelID = parseInt($("#channels").val(), 10),
  1041. szStartTime = $("#starttime").val(),
  1042. szEndTime = $("#endtime").val(),
  1043. szInfo = "";
  1044. if (null == szDeviceIdentify) {
  1045. return;
  1046. }
  1047. if (bZeroChannel) {// 零通道不支持倒放
  1048. return;
  1049. }
  1050. var reversePlayback = function () {
  1051. WebVideoCtrl.I_ReversePlayback(szDeviceIdentify, {
  1052. iRtspPort: iRtspPort,
  1053. iStreamType: iStreamType,
  1054. iChannelID: iChannelID,
  1055. szStartTime: szStartTime,
  1056. szEndTime: szEndTime
  1057. }).then(() => {
  1058. szInfo = "开始倒放成功!";
  1059. showOPInfo(szDeviceIdentify + " " + szInfo);
  1060. }, (oError) => {
  1061. szInfo = "开始倒放失败!";
  1062. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1063. });
  1064. };
  1065. if (oWndInfo != null) {// 已经在播放了,先停止
  1066. WebVideoCtrl.I_Stop({
  1067. success: function () {
  1068. reversePlayback();
  1069. }
  1070. });
  1071. } else {
  1072. reversePlayback();
  1073. }
  1074. }
  1075. // 单帧
  1076. function clickFrame() {
  1077. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1078. szInfo = "";
  1079. if (oWndInfo != null) {
  1080. WebVideoCtrl.I_Frame({
  1081. success: function () {
  1082. szInfo = "单帧播放成功!";
  1083. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1084. },
  1085. error: function (oError) {
  1086. szInfo = "单帧播放失败!";
  1087. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1088. }
  1089. });
  1090. }
  1091. }
  1092. // 暂停
  1093. function clickPause() {
  1094. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1095. szInfo = "";
  1096. if (oWndInfo != null) {
  1097. WebVideoCtrl.I_Pause({
  1098. success: function () {
  1099. szInfo = "暂停成功!";
  1100. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1101. },
  1102. error: function (oError) {
  1103. szInfo = "暂停失败!";
  1104. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1105. }
  1106. });
  1107. }
  1108. }
  1109. // 恢复
  1110. function clickResume() {
  1111. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1112. szInfo = "";
  1113. if (oWndInfo != null) {
  1114. WebVideoCtrl.I_Resume({
  1115. success: function () {
  1116. szInfo = "恢复成功!";
  1117. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1118. },
  1119. error: function (oError) {
  1120. szInfo = "恢复失败!";
  1121. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1122. }
  1123. });
  1124. }
  1125. }
  1126. // 慢放
  1127. function clickPlaySlow() {
  1128. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1129. szInfo = "";
  1130. if (oWndInfo != null) {
  1131. WebVideoCtrl.I_PlaySlow({
  1132. success: function () {
  1133. szInfo = "慢放成功!";
  1134. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1135. },
  1136. error: function (oError) {
  1137. szInfo = "慢放失败!";
  1138. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1139. }
  1140. });
  1141. }
  1142. }
  1143. // 快放
  1144. function clickPlayFast() {
  1145. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex),
  1146. szInfo = "";
  1147. if (oWndInfo != null) {
  1148. WebVideoCtrl.I_PlayFast({
  1149. success: function () {
  1150. szInfo = "快放成功!";
  1151. showOPInfo(oWndInfo.szDeviceIdentify + " " + szInfo);
  1152. },
  1153. error: function (oError) {
  1154. szInfo = "快放失败!";
  1155. showOPInfo(oWndInfo.szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1156. }
  1157. });
  1158. }
  1159. }
  1160. // OSD时间
  1161. function clickGetOSDTime() {
  1162. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1163. if (oWndInfo != null) {
  1164. WebVideoCtrl.I_GetOSDTime({
  1165. success: function (szOSDTime) {
  1166. $("#osdtime").val(szOSDTime);
  1167. showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间成功!");
  1168. },
  1169. error: function (oError) {
  1170. showOPInfo(oWndInfo.szDeviceIdentify + " 获取OSD时间失败!", oError.errorCode, oError.errorMsg);
  1171. }
  1172. });
  1173. }
  1174. }
  1175. // 下载录像
  1176. var g_iDownloadID = -1;
  1177. var g_tDownloadProcess = 0;
  1178. function clickStartDownloadRecord(i) {
  1179. var szDeviceIdentify = $("#ip").val(),
  1180. szChannelID = $("#channels").val(),
  1181. szFileName = $("#downloadTd" + i).data("fileName"),
  1182. szPlaybackURI = $("#downloadTd" + i).data("playbackURI");
  1183. if (null == szDeviceIdentify) {
  1184. return;
  1185. }
  1186. WebVideoCtrl.I_StartDownloadRecord(szDeviceIdentify, szPlaybackURI, szFileName, {
  1187. bDateDir: true //是否生成日期文件
  1188. }).then((iDownloadID) => {
  1189. g_iDownloadID = iDownloadID;
  1190. $("<div id='downProcess' class='freeze'></div>").appendTo("body");
  1191. g_tDownloadProcess = setInterval("downProcess(" + i + ")", 1000);
  1192. }, (oError) => {
  1193. WebVideoCtrl.I_GetLastError().then((iErrorValue) => {
  1194. if (34 == iErrorValue) {
  1195. showOPInfo(szDeviceIdentify + " 已下载!");
  1196. } else if (33 == iErrorValue) {
  1197. showOPInfo(szDeviceIdentify + " 空间不足!");
  1198. } else {
  1199. showOPInfo(szDeviceIdentify + " 下载失败!");
  1200. }
  1201. });
  1202. });
  1203. }
  1204. function clickStartDownloadRecordByTime() {
  1205. var szDeviceIdentify = $("#ip").val(),
  1206. szChannelID = $("#channels").val(),
  1207. szFileName = $("#downloadTd0").data("fileName"),
  1208. szPlaybackURI = $("#downloadTd0").data("playbackURI"),
  1209. szStartTime = $("#downloadstarttime").val(),
  1210. szEndTime = $("#downloadendtime").val();
  1211. if (null == szDeviceIdentify) {
  1212. return;
  1213. }
  1214. if (Date.parse(szEndTime.replace(/-/g, "/")) - Date.parse(szStartTime.replace(/-/g, "/")) < 0) {
  1215. alert("开始时间大于结束时间");
  1216. return;
  1217. }
  1218. WebVideoCtrl.I_StartDownloadRecordByTime(szDeviceIdentify, szPlaybackURI, szFileName, szStartTime,szEndTime,{
  1219. bDateDir: true //是否生成日期文件
  1220. }).then((iDownloadID) => {
  1221. g_iDownloadID = iDownloadID;
  1222. $("<div id='downProcess' class='freeze'></div>").appendTo("body");
  1223. g_tDownloadProcess = setInterval("downProcess(" + 0 + ")", 1000);
  1224. }, (oError) => {
  1225. showOPInfo(szDeviceIdentify + " 下载失败!");
  1226. });
  1227. }
  1228. function clickStopDownload() {
  1229. WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID).then(() => {
  1230. showOPInfo("停止下载成功!");
  1231. clearInterval(g_tDownloadProcess);
  1232. g_tDownloadProcess = 0;
  1233. g_iDownloadID = -1;
  1234. $("#downProcess").remove();
  1235. }, (oError) => {
  1236. showOPInfo(szDeviceIdentify + " 停止下载失败!", oError.errorCode, oError.errorMsg);
  1237. });
  1238. }
  1239. // 下载进度
  1240. async function downProcess() {
  1241. var iStatus = await WebVideoCtrl.I_GetDownloadStatus(g_iDownloadID);
  1242. if (0 == iStatus) {
  1243. $("#downProcess").css({
  1244. width: $("#searchlist").width() + "px",
  1245. height: "100px",
  1246. lineHeight: "100px",
  1247. left: $("#searchdiv").offset().left + "px",
  1248. top: $("#searchdiv").offset().top + "px"
  1249. });
  1250. var iProcess = await WebVideoCtrl.I_GetDownloadProgress(g_iDownloadID);
  1251. if (iProcess < 0) {
  1252. clearInterval(g_tDownloadProcess);
  1253. g_tDownloadProcess = 0;
  1254. g_iDownloadID = -1;
  1255. } else if (iProcess < 100) {
  1256. $("#downProcess").text(iProcess + "%");
  1257. } else {
  1258. $("#downProcess").text("100%");
  1259. setTimeout(function () {
  1260. $("#downProcess").remove();
  1261. }, 1000);
  1262. await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID);
  1263. showOPInfo("录像下载完成!");
  1264. clearInterval(g_tDownloadProcess);
  1265. g_tDownloadProcess = 0;
  1266. g_iDownloadID = -1;
  1267. }
  1268. } else {
  1269. await WebVideoCtrl.I_StopDownloadRecord(g_iDownloadID);
  1270. clearInterval(g_tDownloadProcess);
  1271. g_tDownloadProcess = 0;
  1272. g_iDownloadID = -1;
  1273. }
  1274. }
  1275. // 导出配置文件
  1276. function clickExportDeviceConfig() {
  1277. var szDeviceIdentify = $("#ip").val(),
  1278. szInfo = "";
  1279. if (null == szDeviceIdentify) {
  1280. return;
  1281. }
  1282. var szDevicePassWord = $("#edfpassword").val();
  1283. WebVideoCtrl.I_ExportDeviceConfig(szDeviceIdentify,szDevicePassWord).then(() => {
  1284. szInfo = "导出配置文件成功!";
  1285. showOPInfo(szDeviceIdentify + " " + szInfo);
  1286. }, (oError) => {
  1287. szInfo = "导出配置文件失败!";
  1288. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1289. });
  1290. }
  1291. // 导入配置文件
  1292. function clickImportDeviceConfig() {
  1293. var szDeviceIdentify = $("#ip").val(),
  1294. szFileName = $("#configFile").val(),
  1295. szDevicePassWord = $("#edfpassword").val(),
  1296. szInfo = "";
  1297. if (null == szDeviceIdentify) {
  1298. return;
  1299. }
  1300. if ("" == szFileName) {
  1301. alert("请选择配置文件!");
  1302. return;
  1303. }
  1304. WebVideoCtrl.I_ImportDeviceConfig(szDeviceIdentify, szFileName,szDevicePassWord).then(() => {
  1305. szInfo = "导入成功!";
  1306. showOPInfo(szDeviceIdentify + " " + szInfo);
  1307. WebVideoCtrl.I_Restart(szDeviceIdentify, {
  1308. success: function (xmlDoc) {
  1309. $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo("body");
  1310. var oSize = getWindowSize();
  1311. $("#restartDiv").css({
  1312. width: oSize.width + "px",
  1313. height: oSize.height + "px",
  1314. lineHeight: oSize.height + "px",
  1315. left: 0,
  1316. top: 0
  1317. });
  1318. setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
  1319. },
  1320. error: function (oError) {
  1321. showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg);
  1322. }
  1323. });
  1324. }, (oError) => {
  1325. szInfo = "导入失败!";
  1326. showOPInfo(szDeviceIdentify + szInfo, oError.errorCode, oError.errorMsg);
  1327. });
  1328. }
  1329. // 重连
  1330. function reconnect(szDeviceIdentify) {
  1331. WebVideoCtrl.I_Reconnect(szDeviceIdentify, {
  1332. timeout: 3000,
  1333. success: function (xmlDoc) {
  1334. $("#restartDiv").remove();
  1335. },
  1336. error: function () {
  1337. setTimeout(function () {reconnect(szDeviceIdentify);}, 5000);
  1338. }
  1339. });
  1340. }
  1341. // 开始升级
  1342. var g_tUpgrade = 0;
  1343. function clickStartUpgrade(szDeviceIdentify) {
  1344. var szDeviceIdentify = $("#ip").val(),
  1345. szFileName = $("#upgradeFile").val();
  1346. if (null == szDeviceIdentify) {
  1347. return;
  1348. }
  1349. if ("" == szFileName) {
  1350. alert("请选择升级文件!");
  1351. return;
  1352. }
  1353. WebVideoCtrl.I_StartUpgrade(szDeviceIdentify, szFileName).then(function(){
  1354. g_tUpgrade = setInterval("getUpgradeStatus('" + szDeviceIdentify + "')", 1000);
  1355. },function(){
  1356. clearInterval(g_tUpgrade);
  1357. showOPInfo(szDeviceIdentify + " 升级失败!");
  1358. });
  1359. }
  1360. // 获取升级状态
  1361. async function getUpgradeStatus(szDeviceIdentify) {
  1362. var bUpdating = await WebVideoCtrl.I_UpgradeStatus(szDeviceIdentify);
  1363. if (bUpdating) {
  1364. var iProcess = await WebVideoCtrl.I_UpgradeProgress(szDeviceIdentify);
  1365. if (iProcess < 0) {
  1366. clearInterval(g_tUpgrade);
  1367. g_tUpgrade = 0;
  1368. showOPInfo(szDeviceIdentify + " 获取进度失败!");
  1369. return;
  1370. } else if (iProcess < 100) {
  1371. if (0 == $("#restartDiv").length) {
  1372. $("<div id='restartDiv' class='freeze'></div>").appendTo("body");
  1373. var oSize = getWindowSize();
  1374. $("#restartDiv").css({
  1375. width: oSize.width + "px",
  1376. height: oSize.height + "px",
  1377. lineHeight: oSize.height + "px",
  1378. left: 0,
  1379. top: 0
  1380. });
  1381. }
  1382. $("#restartDiv").text(iProcess + "%");
  1383. } else {
  1384. await WebVideoCtrl.I_StopUpgrade();
  1385. clearInterval(g_tUpgrade);
  1386. g_tUpgrade = 0;
  1387. $("#restartDiv").remove();
  1388. WebVideoCtrl.I_Restart(szDeviceIdentify, {
  1389. success: function (xmlDoc) {
  1390. $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo("body");
  1391. var oSize = getWindowSize();
  1392. $("#restartDiv").css({
  1393. width: oSize.width + "px",
  1394. height: oSize.height + "px",
  1395. lineHeight: oSize.height + "px",
  1396. left: 0,
  1397. top: 0
  1398. });
  1399. setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
  1400. },
  1401. error: function (oError) {
  1402. showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg);
  1403. }
  1404. });
  1405. }
  1406. } else {
  1407. await WebVideoCtrl.I_StopUpgrade();
  1408. clearInterval(g_tUpgrade);
  1409. g_tUpgrade = 0;
  1410. $("#restartDiv").remove();
  1411. WebVideoCtrl.I_Restart(szDeviceIdentify, {
  1412. success: function () {
  1413. $("<div id='restartDiv' class='freeze'>重启中...</div>").appendTo("body");
  1414. var oSize = getWindowSize();
  1415. $("#restartDiv").css({
  1416. width: oSize.width + "px",
  1417. height: oSize.height + "px",
  1418. lineHeight: oSize.height + "px",
  1419. left: 0,
  1420. top: 0
  1421. });
  1422. setTimeout("reconnect('" + szDeviceIdentify + "')", 20000);
  1423. },
  1424. error: function (oError) {
  1425. showOPInfo(szDeviceIdentify + " 重启失败!", oError.errorCode, oError.errorMsg);
  1426. }
  1427. });
  1428. }
  1429. }
  1430. // 检查插件版本
  1431. function clickCheckPluginVersion() {
  1432. var szDeviceIdentify = $("#ip").val();
  1433. WebVideoCtrl.I_CheckPluginVersion().then((bNeedUpdate) => {
  1434. if (bNeedUpdate) {
  1435. alert("检测到新的插件版本!");
  1436. } else {
  1437. alert("您的插件版本已经是最新的!");
  1438. }
  1439. }, () => {
  1440. showOPInfo(szDeviceIdentify + " 检测插件新版本失败");
  1441. });
  1442. }
  1443. function clickRestoreDefault() {
  1444. var szDeviceIdentify = $("#ip").val(),
  1445. szMode = "basic";
  1446. WebVideoCtrl.I_RestoreDefault(szDeviceIdentify, szMode).then(() => {
  1447. $("#restartDiv").remove();
  1448. showOPInfo(szDeviceIdentify + " 恢复默认参数成功!");
  1449. }, (oError) => {
  1450. showOPInfo(szDeviceIdentify + " 恢复默认参数失败!", oError.errorCode, oError.errorMsg);
  1451. });
  1452. }
  1453. function PTZZoomIn() {
  1454. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1455. if (oWndInfo != null) {
  1456. WebVideoCtrl.I_PTZControl(10, false, {
  1457. iWndIndex: g_iWndIndex,
  1458. success: function (xmlDoc) {
  1459. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+成功!");
  1460. },
  1461. error: function (oError) {
  1462. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦+失败!", oError.errorCode, oError.errorMsg);
  1463. }
  1464. });
  1465. }
  1466. }
  1467. function PTZZoomout() {
  1468. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1469. if (oWndInfo != null) {
  1470. WebVideoCtrl.I_PTZControl(11, false, {
  1471. iWndIndex: g_iWndIndex,
  1472. success: function (xmlDoc) {
  1473. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-成功!");
  1474. },
  1475. error: function (oError) {
  1476. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦-失败!", oError.errorCode, oError.errorMsg);
  1477. }
  1478. });
  1479. }
  1480. }
  1481. function PTZZoomStop() {
  1482. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1483. if (oWndInfo != null) {
  1484. WebVideoCtrl.I_PTZControl(11, true, {
  1485. iWndIndex: g_iWndIndex,
  1486. success: function (xmlDoc) {
  1487. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止成功!");
  1488. },
  1489. error: function (oError) {
  1490. showOPInfo(oWndInfo.szDeviceIdentify + " 调焦停止失败!", oError.errorCode, oError.errorMsg);
  1491. }
  1492. });
  1493. }
  1494. }
  1495. function PTZFocusIn() {
  1496. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1497. if (oWndInfo != null) {
  1498. WebVideoCtrl.I_PTZControl(12, false, {
  1499. iWndIndex: g_iWndIndex,
  1500. success: function (xmlDoc) {
  1501. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+成功!");
  1502. },
  1503. error: function (oError) {
  1504. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦+失败!", oError.errorCode, oError.errorMsg);
  1505. }
  1506. });
  1507. }
  1508. }
  1509. function PTZFoucusOut() {
  1510. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1511. if (oWndInfo != null) {
  1512. WebVideoCtrl.I_PTZControl(13, false, {
  1513. iWndIndex: g_iWndIndex,
  1514. success: function (xmlDoc) {
  1515. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-成功!");
  1516. },
  1517. error: function (oError) {
  1518. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦-失败!", oError.errorCode, oError.errorMsg);
  1519. }
  1520. });
  1521. }
  1522. }
  1523. function PTZFoucusStop() {
  1524. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1525. if (oWndInfo != null) {
  1526. WebVideoCtrl.I_PTZControl(12, true, {
  1527. iWndIndex: g_iWndIndex,
  1528. success: function (xmlDoc) {
  1529. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止成功!");
  1530. },
  1531. error: function (oError) {
  1532. showOPInfo(oWndInfo.szDeviceIdentify + " 聚焦停止失败!", oError.errorCode, oError.errorMsg);
  1533. }
  1534. });
  1535. }
  1536. }
  1537. function PTZIrisIn() {
  1538. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1539. if (oWndInfo != null) {
  1540. WebVideoCtrl.I_PTZControl(14, false, {
  1541. iWndIndex: g_iWndIndex,
  1542. success: function (xmlDoc) {
  1543. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+成功!");
  1544. },
  1545. error: function (oError) {
  1546. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈+失败!", oError.errorCode, oError.errorMsg);
  1547. }
  1548. });
  1549. }
  1550. }
  1551. function PTZIrisOut() {
  1552. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1553. if (oWndInfo != null) {
  1554. WebVideoCtrl.I_PTZControl(15, false, {
  1555. iWndIndex: g_iWndIndex,
  1556. success: function (xmlDoc) {
  1557. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-成功!");
  1558. },
  1559. error: function (oError) {
  1560. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈-失败!", oError.errorCode, oError.errorMsg);
  1561. }
  1562. });
  1563. }
  1564. }
  1565. function PTZIrisStop() {
  1566. var oWndInfo = WebVideoCtrl.I_GetWindowStatus(g_iWndIndex);
  1567. if (oWndInfo != null) {
  1568. WebVideoCtrl.I_PTZControl(14, true, {
  1569. iWndIndex: g_iWndIndex,
  1570. success: function (xmlDoc) {
  1571. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止成功!");
  1572. },
  1573. error: function (oError) {
  1574. showOPInfo(oWndInfo.szDeviceIdentify + " 光圈停止失败!", oError.errorCode, oError.errorMsg);
  1575. }
  1576. });
  1577. }
  1578. }
  1579. // 切换模式
  1580. function changeIPMode(iType) {
  1581. var arrPort = [0, 7071, 80];
  1582. $("#serverport").val(arrPort[iType]);
  1583. }
  1584. // 获取设备IP,B1暂不支持
  1585. // function clickGetDeviceIP() {
  1586. // var iDeviceMode = parseInt($("#devicemode").val(), 10),
  1587. // szAddress = $("#serveraddress").val(),
  1588. // iPort = parseInt($("#serverport").val(), 10) || 0,
  1589. // szDeviceID = $("#deviceid").val(),
  1590. // szDeviceInfo = "";
  1591. // szDeviceInfo = WebVideoCtrl.I_GetIPInfoByMode(iDeviceMode, szAddress, iPort, szDeviceID);
  1592. // if ("" == szDeviceInfo) {
  1593. // showOPInfo("设备IP和端口解析失败!");
  1594. // } else {
  1595. // showOPInfo("设备IP和端口解析成功!");
  1596. // var arrTemp = szDeviceInfo.split("-");
  1597. // $("#loginip").val(arrTemp[0]);
  1598. // $("#deviceport").val(arrTemp[1]);
  1599. // }
  1600. // }
  1601. // 启用多边形绘制
  1602. var g_bEnableDraw = false;
  1603. function clickEnableDraw() {
  1604. WebVideoCtrl.I_SetPlayModeType(6).then(() => {
  1605. g_bEnableDraw = true;
  1606. showOPInfo("启用绘制成功!");
  1607. }, (oError) => {
  1608. showOPInfo("启用绘制失败!", oError.errorCode, oError.errorMsg);
  1609. });
  1610. }
  1611. // 禁用多边形绘制
  1612. function clickDisableDraw() {
  1613. WebVideoCtrl.I_SetSnapDrawMode(0, -1).then(() => {
  1614. g_bEnableDraw = false;
  1615. showOPInfo("禁用绘制成功!");
  1616. }, (oError) => {
  1617. showOPInfo("禁用绘制失败!", oError.errorCode, oError.errorMsg);
  1618. });
  1619. }
  1620. // 添加图形,最多不超过16个图形
  1621. function clickAddSnapPolygon() {
  1622. if (!g_bEnableDraw) {
  1623. return;
  1624. }
  1625. var szId = $("#snapId").val();
  1626. var szName = encodeString($("#snapName").val());
  1627. var szInfo = "<?xml version='1.0' encoding='utf-8'?>";
  1628. szInfo += "<SnapPolygonList>";
  1629. szInfo += "<SnapPolygon>";
  1630. szInfo += "<id>" + szId + "</id>"; // [1, 32]
  1631. szInfo += "<polygonType>0</polygonType>"; //如果想绘制多边形,polygonType指需要改为1
  1632. szInfo += "<PointNumMax>17</PointNumMax>"; // [MinClosed, 17]
  1633. szInfo += "<MinClosed>4</MinClosed>"; // [4, 17]
  1634. szInfo += "<tips>#" + szId + "#" + szName + "</tips>";
  1635. szInfo += "<isClosed>false</isClosed>";
  1636. szInfo += "<color><r>0</r><g>255</g><b>0</b></color>";
  1637. szInfo += "<pointList/>";
  1638. szInfo += "</SnapPolygon>";
  1639. szInfo += "</SnapPolygonList>";
  1640. WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => {
  1641. showOPInfo("添加图形成功!");
  1642. });
  1643. WebVideoCtrl.I_SetSnapDrawMode(g_iWndIndex, 2);
  1644. }
  1645. // 删除图形
  1646. function clickDelSnapPolygon() {
  1647. if (!g_bEnableDraw) {
  1648. return;
  1649. }
  1650. var szId = $("#snapId").val();
  1651. var aShapes = [];
  1652. aShapes.push({
  1653. polygonType: 0,
  1654. id: szId
  1655. });
  1656. WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex, aShapes);
  1657. }
  1658. // 获取图形,保存到自己数据库中
  1659. function clickGetSnapPolygon() {
  1660. WebVideoCtrl.I_GetSnapPolygonInfo(g_iWndIndex).then((szXml) => {
  1661. alert(szXml);
  1662. });
  1663. }
  1664. // 设置图形,页面打开时可以设置以前设置过的图形
  1665. function clickSetSnapPolygon() {
  1666. if (!g_bEnableDraw) {
  1667. return;
  1668. }
  1669. WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex);
  1670. var szInfo = "<?xml version='1.0' encoding='utf-8'?>";
  1671. szInfo += "<SnapPolygonList>";
  1672. szInfo += "<SnapPolygon>";
  1673. szInfo += "<id>1</id>";
  1674. szInfo += "<polygonType>1</polygonType>";
  1675. szInfo += "<tips>#1#设置1</tips>";
  1676. szInfo += "<isClosed>true</isClosed>";
  1677. szInfo += "<color><r>0</r><g>255</g><b>0</b></color>";
  1678. szInfo += "<pointList>";
  1679. szInfo += "<point><x>0.737903</x><y>0.229730</y></point>";
  1680. szInfo += "<point><x>0.947581</x><y>0.804054</y></point>";
  1681. szInfo += "<point><x>0.362903</x><y>0.777027</y></point>";
  1682. szInfo += "</pointList>";
  1683. szInfo += "</SnapPolygon>";
  1684. szInfo += "<SnapPolygon>";
  1685. szInfo += "<id>2</id>";
  1686. szInfo += "<polygonType>0</polygonType>";
  1687. szInfo += "<tips>#2#设置2</tips>";
  1688. szInfo += "<isClosed>true</isClosed>";
  1689. szInfo += "<color><r>255</r><g>255</g><b>0</b></color>";
  1690. szInfo += "<pointList>";
  1691. szInfo += "<point><x>0.2</x><y>0.2</y></point>";
  1692. szInfo += "<point><x>0.8</x><y>0.2</y></point>";
  1693. szInfo += "<point><x>0.8</x><y>0.8</y></point>";
  1694. szInfo += "<point><x>0.2</x><y>0.8</y></point>";
  1695. szInfo += "</pointList>";
  1696. szInfo += "</SnapPolygon>";
  1697. szInfo += "</SnapPolygonList>";
  1698. WebVideoCtrl.I_SetSnapPolygonInfo(g_iWndIndex, szInfo).then(() => {
  1699. showOPInfo("设置图形成功!");
  1700. }, (oError) => {
  1701. showOPInfo("设置图形失败!", oError.errorCode, oError.errorMsg);
  1702. });
  1703. }
  1704. // 清空图形
  1705. function clickDelAllSnapPolygon() {
  1706. if (!g_bEnableDraw) {
  1707. return;
  1708. }
  1709. WebVideoCtrl.I_ClearSnapInfo(g_iWndIndex).then(() => {
  1710. showOPInfo("清空图形成功!");
  1711. }, (oError) => {
  1712. showOPInfo("清空图形失败!", oError.errorCode, oError.errorMsg);
  1713. });
  1714. }
  1715. // 设备抓图
  1716. function clickDeviceCapturePic() {
  1717. var szInfo = "";
  1718. var szDeviceIdentify = $("#ip").val();
  1719. var bZeroChannel = $("#channels option").eq($("#channels").get(0).selectedIndex).attr("bZero") == "true" ? true : false;
  1720. var iChannelID = parseInt($("#channels").val(), 10);
  1721. var iResolutionWidth = parseInt($("#resolutionWidth").val(), 10);
  1722. var iResolutionHeight = parseInt($("#resolutionHeight").val(), 10);
  1723. if (null == szDeviceIdentify) {
  1724. return;
  1725. }
  1726. if (bZeroChannel) {// 零通道不支持设备抓图
  1727. return;
  1728. }
  1729. var szPicName = szDeviceIdentify + "_" + iChannelID + "_" + new Date().getTime();
  1730. var iRet = WebVideoCtrl.I_DeviceCapturePic(szDeviceIdentify, iChannelID, szPicName, {
  1731. bDateDir: true, //是否生成日期文件
  1732. iResolutionWidth: iResolutionWidth,
  1733. iResolutionHeight: iResolutionHeight
  1734. });
  1735. if (0 == iRet) {
  1736. szInfo = "设备抓图成功!";
  1737. } else {
  1738. szInfo = "设备抓图失败!";
  1739. }
  1740. showOPInfo(szDeviceIdentify + " " + szInfo);
  1741. }
  1742. function loadXML(szXml) {
  1743. if(null == szXml || "" == szXml) {
  1744. return null;
  1745. }
  1746. var oXmlDoc = null;
  1747. if (window.DOMParser) {
  1748. var oParser = new DOMParser();
  1749. oXmlDoc = oParser.parseFromString(szXml, "text/xml");
  1750. } else {
  1751. oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  1752. oXmlDoc.async = false;
  1753. oXmlDoc.loadXML(szXml);
  1754. }
  1755. return oXmlDoc;
  1756. }
  1757. function toXMLStr(oXmlDoc) {
  1758. var szXmlDoc = "";
  1759. try {
  1760. var oSerializer = new XMLSerializer();
  1761. szXmlDoc = oSerializer.serializeToString(oXmlDoc);
  1762. } catch (e) {
  1763. try {
  1764. szXmlDoc = oXmlDoc.xml;
  1765. } catch (e) {
  1766. return "";
  1767. }
  1768. }
  1769. if (szXmlDoc.indexOf("<?xml") == -1) {
  1770. szXmlDoc = "<?xml version='1.0' encoding='utf-8'?>" + szXmlDoc;
  1771. }
  1772. return szXmlDoc;
  1773. }
  1774. function encodeString(str) {
  1775. if (str) {
  1776. return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  1777. } else {
  1778. return "";
  1779. }
  1780. }