Procházet zdrojové kódy

Merge branch 'develop' of Software/android-cloud-H5 into master

guocanfeng před 1 rokem
rodič
revize
5a27ee9029

+ 3 - 0
static/screenIos/WXdraw.js

@@ -67,6 +67,9 @@ function doConnectDirectives() {
       type: 'bitRate',
     };
     wsss.send(JSON.stringify(bitRate));
+
+     // 键盘透传 2 是用云机内置的
+    wsss.send(JSON.stringify({ data: { type: 2 }, type: 'InputMethod' }));
     // 进入发起询问
     var pings2 = {
       type: 'forwardMsg',

+ 45 - 27
static/webRtcYJ/WXdraw.js

@@ -26,29 +26,30 @@ var isAuth = parameters['authPhone']; // 是否是获取的云手机
 var wsss;
 var errorTime = 0;
 var first = true;
+let intervalerPing = null
 function changIsControl(value) {
   isControl = value;
   // if(){}
   $('#open-set-phone-size-dialog-btn').attr('hidden', !value);
 }
 
-function throttle(fn, delay) {
-  var flag = true;
-  return () => {
-    if (!flag) return;
-    flag = false;
-    errorTime += delay;
-    timer = setTimeout(() => {
-      fn();
-      flag = true;
-    }, delay);
-  };
-}
-
-const throttleDoConnectDirectives = throttle(() => {
-  doConnectDirectives();
-}, 100);
+let directivesTimeInterval = 1
+// function throttle(fn, delay) {
+//   var flag = true;
+//   return () => {
+//     if (!flag) return;
+//     flag = false;
+//     errorTime += delay;
+//     timer = setTimeout(() => {
+//       fn();
+//       flag = true;
+//     }, delay);
+//   };
+// }
 
+// const throttleDoConnectDirectives = throttle(() => {
+//   doConnectDirectives();
+// }, 100);
 function doConnectDirectives() {
   videoWidth = Number(resolvingPower) ? Number(resolvingPower) : 720;
   videoHeight = videoWidth === 720 ? 1280 : 1920;
@@ -56,7 +57,11 @@ function doConnectDirectives() {
   wsss.binaryType = 'arraybuffer';
 
   wsss.onopen = function () {
+    clearInterval(intervalerPing)
     // 获取虚拟场景状态
+    intervalerPing = setInterval(() => {
+      wsss.send('ping');
+    }, 3000)
     errorTime = 0;
     var pings = { type: 'getVsStatus' };
     wsss.send(JSON.stringify(pings));
@@ -67,6 +72,8 @@ function doConnectDirectives() {
       type: 'bitRate',
     };
     wsss.send(JSON.stringify(bitRate));
+    // 键盘透传 2 是用云机内置的
+    wsss.send(JSON.stringify({ data: { type: 2 }, type: 'InputMethod' }));
     // // 进入发起询问
     // var pings2 = {
     //   type: 'forwardMsg',
@@ -85,26 +92,37 @@ function doConnectDirectives() {
     );
   };
   wsss.onerror = function (e) {
+    clearInterval(intervalerPing)
+    if(!quitBool) return 
+    if (directivesTimeInterval > 7) {
+      quit();
+      return
+    }
     // console.log('🚀 ~ file: WXdraw.js ~ line 82 ~ onerror ~ e', e);
-    wsss.close(1006);
+    // wsss.close(1006);
     // throttle(doConnectDirectives, 100);
     // if (errorTime > 1000) {
     //   quit();
     // }
+    directivesTimeInterval++
+    // 异常关闭,重连
+    doConnectDirectives();
+    // doConnectDirectives();
+    // throttle(doConnectDirectives, 100);
   };
   wsss.onclose = function (e) {
     // console.log('🚀 ~ file: WXdraw.js ~ line 93 ~ onclose ~ e', e);
     // new WebSocket(e.)
     // doConnectDirectives();
-    if (e.code === 1006) {
-      // 异常关闭,重连
-      throttleDoConnectDirectives();
-      // doConnectDirectives();
-      // throttle(doConnectDirectives, 100);
-      if (errorTime > 1000) {
-        quit();
-      }
-    }
+    // if (e.code === 1006) {
+    //   // 异常关闭,重连
+    //   throttleDoConnectDirectives();
+    //   // doConnectDirectives();
+    //   // throttle(doConnectDirectives, 100);
+    //   if (errorTime > 1000) {
+    //     quit();
+    //   }
+    // }
   };
   wsss.onmessage = function (res) {
     var result = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;
@@ -281,7 +299,7 @@ function doConnectDirectives() {
         (window.currentPhoneSize.width !==
           Math.min(result.data.width, result.data.height) ||
           window.currentPhoneSize.height !==
-            Math.max(result.data.width, result.data.height) ||
+          Math.max(result.data.width, result.data.height) ||
           window.currentPhoneSize.dpi !== result.data.dpi)
       ) {
         // 获取到的分辨率与当前分辨率不符

+ 41 - 13
static/webRtcYJ/WXtrialInterface.html

@@ -406,6 +406,7 @@
       });
     </script>
     <script>
+      // let vc = new VConsole()
       // 如果immediate为true,就是立即执行防抖,反之就是延迟防抖
       function debounce(fn, delay, immediate) {
         let timeout;
@@ -423,6 +424,8 @@
           }, delay);
         };
       }
+      let webSocketWorker = null
+      let getResidueTimeBool = true
       // 判断是否是苹果手机
       let isiPhone = /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent);
       // 判断是否支持webRTC
@@ -442,16 +445,19 @@
       let engine = null;
       let connectData = null;
       let debounceSwitchingScreens = debounce(
-        function () {
+        function (bool) {
           $('#playVideo').hide();
           $('#playCanvas').show();
           $('.weui-mask_transparent').show();
           $('.weui-toast').show();
-          engine.disconnect();
-          wsss.close();
-          decodeWoker.postMessage('close');
-          decodeWoker.terminate();
-          webSocketWorker.postMessage('close');
+          if(bool) {
+            engine && engine.disconnect();
+          } 
+        
+          wsss && wsss.close();
+          // decodeWoker.postMessage('close');
+          // decodeWoker.terminate();
+          webSocketWorker && webSocketWorker.postMessage('close');
           connect();
         },
         2000,
@@ -459,9 +465,12 @@
       );
       window.addEventListener('message', function (e) {
         let data = e.data;
-        if (data.bool && isVideo && !$('#playCanvas').is(':visible') && !isShowiPhoneWebRTC) {
+        let bool = isVideo && !$('#playCanvas').is(':visible') && !isShowiPhoneWebRTC
+        if(data.bool) {
+          if (bool) {
           document.getElementById('playVideo').play();
-          debounceSwitchingScreens();
+        }
+          debounceSwitchingScreens(bool);
         }
       });
       // 开发环境
@@ -653,10 +662,10 @@
           async: false,
           success: function (res) {
             if (res.status === 0) {
-              //getResidueTime()
-              if(connectStatus==1) {
-                getResidueTime();
-              }
+              // getResidueTime()
+              // if(connectStatus==1) {
+              //   getResidueTime();
+              // }
               if (timerInterval) {
                 timerInterval = clearTimeout();
               }
@@ -1272,6 +1281,11 @@
               logicWidth * logicHeight,
               (logicWidth / 2) * (logicHeight / 2),
             );
+            if(getResidueTimeBool) {
+              // 如果是计时卡的话就上报
+              getResidueTime()
+              getResidueTimeBool = false
+            }
             $('.weui-mask_transparent').hide();
             $('.weui-toast').hide();
             $('.loading').hide();
@@ -1379,7 +1393,7 @@
           // 启动视频流连接过程。这将根据之前配置的参数建立与服务器的 WebSocket 连接,并开始视频流的传输和播放。
           engine.connect();
         }
-        var webSocketWorker = new Worker(
+        webSocketWorker = new Worker(
           'websocket.js?socketURL=' +
             encodeURIComponent(socketURL) +
             '&cardToken=' +
@@ -1962,7 +1976,21 @@
           success: function (res) {},
         });
       }
+      // 避免重复退出的字段
+      let quitBool = true
       function quit() {
+          // 退出云机页时,把所有链接都关闭掉
+          engine && engine.disconnect();
+          wsss&&wsss.close();
+          decodeWoker&&decodeWoker.postMessage('close');
+          decodeWoker&&decodeWoker.terminate();
+          webSocketWorker && webSocketWorker.postMessage('close');
+          if(!quitBool) {
+              return 
+          }
+          quitBool = false
+          // 如果是指令请求失败或者直接退出,都要发送消息给视频流js文件,告知视频流请求失败情况不再做退出操作
+          webSocketWorker && webSocketWorker.postMessage('endRequest');
         if (navigator.userAgent.toLowerCase().includes('toutiaomicroapp')) {
           tt.miniProgram.switchTab({
             url: '/pages/home/home',

+ 9 - 0
static/webRtcYJ/helper.js

@@ -272,3 +272,12 @@ function RequestIFrame() {
   var outPut = new Uint8Array([0x20]);
   return makeFrameExtend(sn, 6, outPut);
 }
+
+// 设置fps
+function setFps(frameRate) {
+  let sn = 'RK3923C1201900139';
+  let jsonObj = { type: 5, data: { frame_rate: 25 } };
+  let jsonStr = JSON.stringify(jsonObj);
+  let outPut = new TextEncoder('utf-8').encode(jsonStr);
+  return makeFrameExtend(sn, 0x0D, outPut);
+}

+ 9 - 2
static/webRtcYJ/rtcEngine.min.js

@@ -3,7 +3,8 @@
 	typeof define === 'function' && define.amd ? define(factory) :
 	(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.RtcEngine = factory());
 })(this, (function () { 'use strict';
-
+	let ws = null, heartBeatFlag = null;
+	
 	//此文件实现将控制命令封装成协议,具体协议内容请看:
 	//链接:http://note.youdao.com/noteshare?id=dabda6c613adef7a416bd2625cd770a1
 
@@ -498,6 +499,7 @@
 			let verifyBuffer = VerifyCode(sn, this.token);
 			this.ws.send(verifyBuffer);
 			this.heartBeatFlag = setInterval(this.heartBeat, 2000);
+			heartBeatFlag  = this.heartBeatFlag
 		}
 
 		wsOnClose(event) {
@@ -8524,6 +8526,9 @@
 						}).catch(e => {
 							error(this.TAG, e);
 						});
+					}).catch(err => {
+						clearInterval(heartBeatFlag)
+						ws.close()
 					});
 				});
 			}).catch(e => {
@@ -8559,7 +8564,7 @@
 			});
 			// console.log("=======ip---------", window.cloudgame_sdk.extraData.remainingTimeData.data.extranetIp, window.cloudgame_sdk.extraData.remainingTimeData.data.extranetPort);
 			let aaa =
-				`a=candidate:udpcandidate 1 udp 120 ${extranetIp} ${extranetPort} typ host`;
+				`a=candidate:udpcandidate 1 udp 120 typ host`;
 
       var data = '';
 			// const deviceInline = CLOUD_GAME_SDK.getQueryVariable("deviceInline")
@@ -8839,6 +8844,7 @@
 	        this.startPlay      = this.startPlay.bind(this);
 
 	        this.ws             = new WebSocket(this.url);
+			ws                  = this.ws
 			this.ws.binaryType  = 'arraybuffer';
 			this.ws.onmessage   = this.wsOnMessage;
 			this.ws.onopen      = this.wsOpen;
@@ -8966,6 +8972,7 @@
 			let verifyBuffer = VerifyCode(sn, this.token);
 			this.ws.send(verifyBuffer);
 			this.heartBeatFlag = setInterval(this.heartBeat, 2000);
+			heartBeatFlag  = this.heartBeatFlag
 		}
 
 		wsOnClose(event) {

+ 43 - 25
static/webRtcYJ/websocket.js

@@ -7,18 +7,20 @@ var socketURL = decodeURIComponent(parameters['socketURL']);
 var intervaler;
 doConnect();
 
-function throttle(fn, delay) {
-  var flag = true;
-  return () => {
-    if (!flag) return;
-    flag = false;
-    errorTime += delay;
-    timer = setTimeout(() => {
-      fn();
-      flag = true;
-    }, delay);
-  };
-}
+// function throttle(fn, delay) {
+//   var flag = true;
+//   return () => {
+//     if (!flag) return;
+//     flag = false;
+//     errorTime += delay;
+//     timer = setTimeout(() => {
+//       fn();
+//       flag = true;
+//     }, delay);
+//   };
+// }
+let timeInterval = 1
+let quitBool = false
 function doConnect() {
   var ws = new WebSocket(socketURL);
   ws.binaryType = 'arraybuffer';
@@ -31,16 +33,26 @@ function doConnect() {
     }
   }, 3000);
   ws.onerror = function () {
-    ws.close(1006);
+    // ws.close(1006);
+    clearInterval(intervaler);
+    if (quitBool) return
+    if (timeInterval > 7) return self.postMessage('close');
+    timeInterval++
+    doConnect()
+    // if (errorTime > 1000) {
+    //   self.postMessage('close');
+    //   return
+    // }
+    // throttle(doConnect, 100)();
   };
   ws.addEventListener('close', function (e) {
-    if (e.code === 1006) {
-      clearInterval(intervaler);
-      throttle(doConnect, 100);
-      if (errorTime > 1000) {
-        self.postMessage('close');
-      }
-    }
+    // if (e.code === 1006) {
+    //   clearInterval(intervaler);
+    //   throttle(doConnect, 100);
+    //   if (errorTime > 1000) {
+    //     self.postMessage('close');
+    //   }
+    // }
   });
 
   ws.addEventListener('open', function (event) {
@@ -61,11 +73,17 @@ function doConnect() {
   self.addEventListener(
     'message',
     function (e) {
-      if (e.data === 'close') {
-        clearInterval(intervaler);
-        ws.close();
-      } else {
-        ws.send(e.data);
+      switch (e.data) {
+        case 'close':
+          clearInterval(intervaler)
+          ws.close()
+          break;
+        case 'endRequest':
+          quitBool = false
+          break;
+        default:
+          ws.send(e.data);
+          break;
       }
     },
     false,