From 112ba61d9215b33a63991a87b60f781f5e4959de Mon Sep 17 00:00:00 2001 From: "yineng.huang" Date: Mon, 26 Aug 2024 15:26:49 +0800 Subject: [PATCH] =?UTF-8?q?android=E8=AE=BE=E5=A4=87=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E7=99=BD=E5=B1=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/AndroidScreenResponseThread.java | 27 +++----------- .../screen/ImageScreenResponse.java | 37 +++++++++++++++---- .../screen/IosScreenResponseThread.java | 5 +++ .../service/AndroidDebuggerServiceImpl.java | 2 +- 4 files changed, 42 insertions(+), 29 deletions(-) diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/AndroidScreenResponseThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/AndroidScreenResponseThread.java index 9ebd7b7..e12384d 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/AndroidScreenResponseThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/AndroidScreenResponseThread.java @@ -144,27 +144,12 @@ public class AndroidScreenResponseThread extends ImageScreenResponse { logger.warn("设备【{}】响应到上位机的屏幕线程退出..........................", adbDevice.getSerial()); } -// public void sendConnectInfo2Web() { -// //新连接需要先发送状态 -// if (null != screenOnRequest) { //只发第一次screen_on指令 -// //向前端推送之前缓存的最新帧 -// if (null != adbDevice) { -// if (null != lastData && lastData.length > 0) { -// SessionUtils.sendBinary(wsSession, lastData); -// logger.debug("上位机发送缓存帧成功,大小:{}", lastData.length); -// Map result = new HashMap<>(); -// result.put(ResponseCmd.DeviceStatus.STATUS, ResponseCmd.DeviceStatus.CONNECTED); -// SessionUtils.sendMessageInitiative(wsSession, ResponseCmd.DEVICE_STATUS, adbDevice.getSerial(), result, "设备连接失败"); -// sendDeviceStatus = false; -// } else { -// logger.warn("设备【{}】缓存帧获取为空...", adbDevice.getSerial()); -// } -// } -// //向前端推送之前缓存的最新帧后发screenOn回复 -// SessionUtils.sendSuccessData(wsSession, screenOnRequest, null, "开启屏幕成功"); -// setScreenOnRequest(null); -// } -// } + @Override + public void changeScreenSize() { + logger.info("改变设备【{}】屏幕的宽高..........................", adbDevice.getSerial()); + ScreenStreamCommand screenStreamCommand = new ScreenStreamCommand(true, catchParam.getRotation(), catchParam.getWidth(), catchParam.getHeight(), catchParam.getFrameRate(), catchParam.getQuality()); + this.asyncAgentSession.send(screenStreamCommand); + } @Override public void stopFetchPic() { diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/ImageScreenResponse.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/ImageScreenResponse.java index a855ce8..6df5aec 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/ImageScreenResponse.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/ImageScreenResponse.java @@ -9,6 +9,9 @@ import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; import javax.websocket.Session; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; @@ -71,26 +74,44 @@ public abstract class ImageScreenResponse extends Thread{ } public void startSendScreenToWeb(Session session, CatchParam catchParam) { + this.catchParam = catchParam; logger.info("设备【{}】当前连接了{}个web客户端...............",deviceId,this.webSessions.size()); - if (this.webSessions.size() > 3) { + if (this.webSessions.size() > 1) { //通知前端断开连接,最多只能连接三个 Map messageMap = new HashMap<>(); messageMap.put(ResponseCmd.DeviceStatus.STATUS, ResponseCmd.DeviceStatus.DISCONNECT); - SessionUtils.sendMessageInitiative(session, ResponseCmd.DEVICE_STATUS, deviceId, messageMap, "最多支持三个客户端同时浏览手机"); + SessionUtils.sendMessageInitiative(session, ResponseCmd.DEVICE_STATUS, deviceId, messageMap, "最多支持一个客户端观察直播"); return; } - this.catchParam = catchParam; this.webSessions.add(session); + //先发一个改变屏幕宽高的指令过去 + changeScreenSize(); //通知前端开始连接 Map messageMap = new HashMap<>(); messageMap.put(ResponseCmd.DeviceStatus.STATUS, ResponseCmd.DeviceStatus.CONNECTING); SessionUtils.sendMessageInitiative(session, ResponseCmd.DEVICE_STATUS, deviceId, messageMap, "设备掉线了"); logger.info("发送设备【{}】最后一张图片到前端..............",deviceId); if (null != this.lastData) { - Map result = new HashMap<>(); - result.put(ResponseCmd.DeviceStatus.STATUS, ResponseCmd.DeviceStatus.CONNECTED); - SessionUtils.sendMessageInitiative(session, ResponseCmd.DEVICE_STATUS, deviceId, result, "设备已连接"); - SessionUtils.sendBinary(session, this.lastData); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + try { + logger.info("开始压缩设备【{}】最后一张图片到前端,宽:{},高:{}..............",deviceId,catchParam.getWidth(),catchParam.getHeight()); + Thumbnails.of(new ByteArrayInputStream(this.lastData)).forceSize(catchParam.getWidth(), catchParam.getHeight()).toOutputStream(outputStream); + logger.info("压缩完毕设备【{}】最后一张图片到前端..............",deviceId); + byte[] data = outputStream.toByteArray(); + Map result = new HashMap<>(); + result.put(ResponseCmd.DeviceStatus.STATUS, ResponseCmd.DeviceStatus.CONNECTED); + SessionUtils.sendMessageInitiative(session, ResponseCmd.DEVICE_STATUS, deviceId, result, "设备已连接"); + SessionUtils.sendBinary(session, data); + } catch (Exception e) { + logger.info("设备【{}】在编码第一张图片的时候出现了错误,等一下张图片再发..............",deviceId,e); + this.sendDeviceStatus = true; + }finally { + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } else { logger.info("发送设备【{}】最后一张图片是空,获取到了再发..............",deviceId); this.sendDeviceStatus = true; @@ -98,6 +119,8 @@ public abstract class ImageScreenResponse extends Thread{ } + public abstract void changeScreenSize(); + public void setSendDeviceStatus(boolean sendDeviceStatus) { this.sendDeviceStatus = sendDeviceStatus; } diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/IosScreenResponseThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/IosScreenResponseThread.java index 2ccc511..b6f6354 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/IosScreenResponseThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/deviceManager/screen/IosScreenResponseThread.java @@ -291,5 +291,10 @@ public class IosScreenResponseThread extends ImageScreenResponse { interrupt(); } + @Override + public void changeScreenSize() { + + } + } diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/service/AndroidDebuggerServiceImpl.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/service/AndroidDebuggerServiceImpl.java index fe6799a..b706784 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/service/AndroidDebuggerServiceImpl.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/service/AndroidDebuggerServiceImpl.java @@ -829,7 +829,7 @@ public class AndroidDebuggerServiceImpl extends AbstractDebuggerService { catchParam.setRealHeight(screenSizeMap.get("height")); catchParam.setRealWidth(screenSizeMap.get("width")); catchParam.setWidth(screenSizeMap.get("width")/2); - catchParam.setHeight(screenSizeMap.get("width")/2); + catchParam.setHeight(screenSizeMap.get("height")/2); catchParam.setFrameRate(30); catchParam.setQuality(75); catchParam.setRotation(screenSizeMap.get("rotation"));