h52.html 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <!DOCTYPE html>
  2. <html lang=zh-CN>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport"
  6. content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  7. <title>监控详情页</title>
  8. <link href="https://unpkg.com/video.js@7.10.2/dist/video-js.min.css" rel="stylesheet" />
  9. <style type="text/css">
  10. body {
  11. margin: 0;
  12. background-color: #f3f3f3;
  13. }
  14. span.vjs-control-text {
  15. display: none;
  16. }
  17. /* iframe {
  18. width: 375px;
  19. height: 667px;
  20. background-color: #fff;
  21. box-sizing: content-box;
  22. border: none;
  23. } */
  24. .btn-box {
  25. margin-top: 20px;
  26. display: flex;
  27. flex-direction: row;
  28. justify-content: space-around;
  29. align-items: center;
  30. }
  31. .btn-container {
  32. position: relative;
  33. }
  34. .videoBtnPlay {
  35. position: absolute;
  36. height: 100px;
  37. width: 100px;
  38. top: 50%;
  39. left: 50%;
  40. transform: translate(-50%, -50%);
  41. }
  42. .more,
  43. .less {
  44. flex: 1
  45. }
  46. img {
  47. width: 100%;
  48. }
  49. .direc {
  50. width: 150px;
  51. height: 150px;
  52. background: url('https://s3.hnyfwlw.com/webstaticimg/bigdata_app/image/monitor/1.png');
  53. background-size: 100% auto;
  54. background-repeat: no-repeat;
  55. position: relative;
  56. }
  57. .direc div {
  58. width: 50px;
  59. height: 50px;
  60. position: absolute;
  61. }
  62. .top {
  63. top: 0;
  64. left: 50px
  65. }
  66. .bottom {
  67. bottom: 0;
  68. left: 50px
  69. }
  70. .left {
  71. left: 0;
  72. top: 50px
  73. }
  74. .right {
  75. right: 0;
  76. top: 50px
  77. }
  78. #box {
  79. height: 300px;
  80. width: 100%;
  81. background: #000;
  82. overflow: hidden;
  83. }
  84. #dialog {
  85. display: none;
  86. width: 200px;
  87. line-height: 80px;
  88. background: rgba(0, 0, 0, .8);
  89. color: #fff;
  90. text-align: center;
  91. position: absolute;
  92. left: 50%;
  93. margin-left: -100px;
  94. border-radius: 4px;
  95. z-index: 999;
  96. top: 50%;
  97. margin-top: -40px;
  98. }
  99. .imgBtn {
  100. position: absolute;
  101. width: 100%;
  102. padding: 10px;
  103. bottom: 0;
  104. left: 0;
  105. text-align: center;
  106. color: #338cd9;
  107. font-size: 16px;
  108. box-sizing: border-box;
  109. }
  110. .imgBtn img {
  111. display: inline-block;
  112. width: 20px;
  113. height: 20px;
  114. vertical-align: middle;
  115. margin-right: 2px;
  116. margin-bottom: 3px;
  117. }
  118. </style>
  119. </head>
  120. <body>
  121. <div class="btn-container">
  122. <div id="box"> </div>
  123. <div class="videoBtnPlay">
  124. <img src="https://webstaticimg.oss-cn-hangzhou.aliyuncs.com/bigdata_app/img/wxplayer.png" />
  125. </div>
  126. </div>
  127. <div id="dialog">
  128. </div>
  129. <div class="btn-box">
  130. <div class="more" ontouchstart="_configCamera('move', 8)" ontouchend="_stopConfigCamera()">
  131. <image src="https://s3.hnyfwlw.com/webstaticimg/bigdata_app/image/monitor/3.png" mode="widthFix">
  132. </image>
  133. </div>
  134. <div class="direc">
  135. <div class="top" ontouchstart="_configCamera('move', 0)" ontouchend="_stopConfigCamera()">
  136. </div>
  137. <div class="bottom" ontouchstart="_configCamera('move', 1)" ontouchend="_stopConfigCamera()">
  138. </div>
  139. <!-- <div class="photo" ontouchstart="_configCamera('takephoto', '')">
  140. 11111
  141. </div> -->
  142. <div class="left" ontouchstart="_configCamera('move', 2)" ontouchend="_stopConfigCamera()">
  143. </div>
  144. <div class="right" ontouchstart="_configCamera('move', 3)" ontouchend="_stopConfigCamera()">
  145. </div>
  146. </div>
  147. <div class="less" ontouchstart="_configCamera('move', 9)" ontouchend="_stopConfigCamera()">
  148. <image src="https://s3.hnyfwlw.com/webstaticimg/bigdata_app/image/monitor/2.png" mode="widthFix">
  149. </image>
  150. </div>
  151. </div>
  152. <div class="imgBtn">
  153. <img src="images/image.png" />查看图片
  154. </div>
  155. </body>
  156. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  157. <!-- 微信 JS-SDK 如果不需要兼容小程序,则无需引用此 JS 文件。 -->
  158. <!-- <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> -->
  159. <!-- uni 的 SDK -->
  160. <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
  161. <script src="https://unpkg.com/video.js@7.10.2/dist/video.min.js"></script>
  162. <script type="module">
  163. import Player from './videoPlayer/videoPlay-js.js'
  164. let player = null
  165. //上下左右和拍照
  166. var str = window.location.search.substr(1)
  167. var arr = str.split('&')
  168. // console.log(str);
  169. var device_id = arr[0].split('=')[1]
  170. // console.log(device_id);
  171. var accessToken = arr[1].split('=')[1]
  172. var token=localStorage.getItem('session_key')
  173. // console.log(accessToken)
  174. window._configCamera = configCamera;
  175. window._stopConfigCamera = stopConfigCamera;
  176. window._postPic = postPic;
  177. function configCamera(ctrl, movenum) {
  178. if (ctrl == "takephoto") {
  179. if (player) {
  180. // 云联的拍照特殊处理
  181. player.screenshot('yunlianPlayer')
  182. } else {
  183. $.ajax({
  184. type: "POST",
  185. url: "https://wx.hnyfwlw.com/api/api_gateway?method=camera.camera_manage.camera_takephoto",
  186. data: {
  187. device_id: device_id,
  188. token
  189. }
  190. }).then((res) => {
  191. if (res.data.data) {
  192. var data = JSON.parse(res.data.data);
  193. var picUrl = data.data.picUrl;
  194. } else {
  195. console.log(res.data.message)
  196. }
  197. });
  198. }
  199. } else {
  200. //上下左右、放大、缩小
  201. $.ajax({
  202. type: "POST",
  203. url: "https://wx.hnyfwlw.com/api/api_gateway?method=camera.camera_manage.ctrl_camera",
  204. data: {
  205. device_id: device_id,
  206. ctrl: ctrl,
  207. movenum: movenum,
  208. token
  209. }
  210. }).then((res) => {
  211. $('#dialog').html('指令下发成功,请等待...').stop().show(500).delay(3000).hide(500)
  212. })
  213. }
  214. }
  215. function stopConfigCamera() {
  216. if (player) {
  217. // 云联监控不需要这个指令
  218. return
  219. }
  220. $.ajax({
  221. type: "POST",
  222. url: "https://wx.hnyfwlw.com/api/api_gateway?method=camera.camera_manage.ctrl_camera",
  223. data: {
  224. device_id: device_id,
  225. ctrl: "stop",
  226. token
  227. },
  228. });
  229. }
  230. function postPic(file) {
  231. let form = new FormData()
  232. form.append('img_file', file)
  233. form.append('device_id', device_id)
  234. form.append('token', token)
  235. $.ajax({
  236. type: "POST",
  237. url: "https://wx.hnyfwlw.com/api/api_gateway?method=camera.camera_manage.save_camera_photo",
  238. contentType : false,
  239. processData : false,
  240. data: form
  241. }).then((res) => {
  242. if (res.message == '') {
  243. $('#dialog').html('拍照成功').stop().show(500).delay(1500).hide(500)
  244. } else {
  245. $('#dialog').html(res.data.message).stop().show(500).delay(1500).hide(500)
  246. }
  247. });
  248. }
  249. async function initYunlianPlayer(videoURL) {
  250. var playHtml =
  251. `<div id="yunlianPlayer" style="width: 100%;height: 300px;overflow: hidden;"></div>`;
  252. $("#box").html(playHtml)
  253. player = new Player(['yunlianPlayer'], {
  254. playFileOver: () => {
  255. console.log('播放结束')
  256. },
  257. playError: (id, e) => {
  258. console.log('播放错误', id, e)
  259. },
  260. talkStart: () => {
  261. console.log('对讲开始')
  262. },
  263. runtimeInitializedCallBack: () => {
  264. console.log('播放器初始化完成')
  265. },
  266. captureCallback: (id, data) => {
  267. // console.log('截图返回的数据', data.buffer)
  268. const blob = new Blob([data], {
  269. type: 'image/jpeg'
  270. })
  271. _postPic(blob)
  272. }
  273. })
  274. await player.init()
  275. setTimeout(() => {
  276. player.play('yunlianPlayer', {
  277. streamURL: videoURL,
  278. channelId: '0',
  279. bitStream: '0',
  280. isLive: true
  281. })
  282. }, 1000)
  283. }
  284. $('.videoBtnPlay').click(function() {
  285. $('.videoBtnPlay').hide()
  286. $.ajax({
  287. type: "POST",
  288. url: "https://wx.hnyfwlw.com/api/api_gateway?method=camera.camera_manage.addr_camera",
  289. // url: "http://192.168.0.117:8003/api/api_gateway?method=camera.camera_manage.addr_camera",
  290. data: {
  291. device_id: device_id,
  292. token
  293. // device_id: 'FA8690323-1',
  294. // token: localStorage.getItem('session_key')
  295. }
  296. }).then((res) => {
  297. // console.log(JSON.stringify(res))
  298. if (res.message == '') {
  299. var data = null
  300. if (typeof res.data == 'string') {
  301. data = eval('(' + res.data + ')');
  302. } else {
  303. data = res.data;
  304. }
  305. console.log(data, 'data');
  306. if (data.type_id == 2) {
  307. // 大华云联
  308. initYunlianPlayer(data.rtsp)
  309. } else {
  310. let hlsHdSrc = data.type_id == 0 ? data.hls : data.hlsHd;
  311. var playHtml =
  312. `<video id="myPlayer" poster='' controls playsInline webkit-playsinline src=${hlsHdSrc} style="width:100%; height:100%;"></video>`;
  313. $("#box").html(playHtml)
  314. var myVideo = videojs(`myPlayer`, {
  315. controls: true,
  316. autoplay: 'play',
  317. url: hlsHdSrc,
  318. sources: [{
  319. type: 'application/x-mpegURL',
  320. src: hlsHdSrc,
  321. }],
  322. }, function onPlayerReady() {
  323. myVideo.play()
  324. console.log('准备好了')
  325. });
  326. myVideo.on('play', function() {
  327. console.log('开始播放')
  328. })
  329. }
  330. } else {
  331. alert(res.message)
  332. }
  333. })
  334. })
  335. document.addEventListener('UniAppJSBridgeReady', function() {
  336. $('.imgBtn').click(function() {
  337. // if (player) {
  338. // player.close('yunlianPlayer')
  339. // player = null
  340. // }
  341. uni.navigateTo({
  342. url: '/pages/monitor/imagelist?id=' + device_id
  343. })
  344. })
  345. });
  346. </script>
  347. </html>