From 6336bb47675cc65acee8ee0edafa1d6515a7b165 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Thu, 10 Aug 2023 07:39:56 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E6=97=A5=E5=B8=B8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- taoyao-client-media/src/Taoyao.js | 6 +- .../MediaTransportWebRtcConnectProtocol.java | 9 +- .../MediaTransportWebRtcCreateProtocol.java | 96 ++++++++++--------- .../MediaVideoOrientationChangeProtocol.java | 6 ++ 4 files changed, 70 insertions(+), 47 deletions(-) diff --git a/taoyao-client-media/src/Taoyao.js b/taoyao-client-media/src/Taoyao.js index d6dc704..f2a4c05 100644 --- a/taoyao-client-media/src/Taoyao.js +++ b/taoyao-client-media/src/Taoyao.js @@ -1693,7 +1693,11 @@ class Taoyao { * @param {*} body 消息主体 */ async mediaTransportWebrtcConnect(message, body) { - const { roomId, transportId, dtlsParameters } = body; + const { + roomId, + transportId, + dtlsParameters + } = body; const room = this.rooms.get(roomId); const transport = room?.transports.get(transportId); if(transport) { diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcConnectProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcConnectProtocol.java index 3e85b8d..667eaa8 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcConnectProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcConnectProtocol.java @@ -24,9 +24,14 @@ import lombok.extern.slf4j.Slf4j; @Description( body = { """ + { + "roomId" : "房间ID", + "transportId" : "通道ID" + "dtlsParameters": "DTLS参数" + } """ }, - flow = "终端->信令服务->媒体服务->信令服务->终端" + flow = "终端=>信令服务->媒体服务" ) public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter { @@ -45,7 +50,7 @@ public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter { final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID); log.info("{}连接WebRTC通道信令:{}", clientId, transportId); } else { - // 忽略其他情况 + this.logNoAdapter(clientType); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcCreateProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcCreateProtocol.java index 37c80c5..2663d54 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcCreateProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaTransportWebRtcCreateProtocol.java @@ -34,19 +34,23 @@ import lombok.extern.slf4j.Slf4j; body = { """ { - "roomId": "房间标识" + "roomId" : "房间标识", + "forceTcp" : "强制使用TCP", + "producing" : "是否生产", + "consuming" : "是否消费", + "sctpCapabilities": "sctpCapabilities" } { - "roomId": "房间标识", - "transportId": "传输通道标识", - "iceCandidates": "iceCandidates", - "iceParameters": "iceParameters", + "roomId" : "房间标识", + "transportId" : "传输通道标识", + "iceCandidates" : "iceCandidates", + "iceParameters" : "iceParameters", "dtlsParameters": "dtlsParameters", "sctpParameters": "sctpParameters" } """ }, - flow = "终端->信令服务->媒体服务->信令服务->终端" + flow = "终端=>信令服务->媒体服务" ) public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter { @@ -58,47 +62,51 @@ public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter { @Override public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map body) { - body.put(Constant.CLIENT_ID, clientId); - final Message response = room.requestMedia(message); - final Map responseBody = response.body(); - final Map transports = room.getTransports(); - final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID); - // 重写地址 - this.rewriteIp(client.getIP(), responseBody); - // 处理逻辑 - final ClientWrapper clientWrapper = room.clientWrapper(client); - // 消费者 - final Boolean consuming = MapUtils.getBoolean(body, Constant.CONSUMING); - if(Boolean.TRUE.equals(consuming)) { - Transport recvTransport = clientWrapper.getRecvTransport(); - if(recvTransport == null) { - recvTransport = new Transport(transportId, Direction.RECV, room, client); - transports.put(transportId, recvTransport); - } else { - log.warn("接收通道已经存在:{}", transportId); + if(clientType.mediaClient()) { + body.put(Constant.CLIENT_ID, clientId); + final Message response = room.requestMedia(message); + final Map responseBody = response.body(); + final Map transports = room.getTransports(); + final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID); + // 重写地址 + this.rewriteIp(client.getIP(), responseBody); + // 处理逻辑 + final ClientWrapper clientWrapper = room.clientWrapper(client); + // 消费者 + final Boolean consuming = MapUtils.getBoolean(body, Constant.CONSUMING); + if(Boolean.TRUE.equals(consuming)) { + Transport recvTransport = clientWrapper.getRecvTransport(); + if(recvTransport == null) { + recvTransport = new Transport(transportId, Direction.RECV, room, client); + transports.put(transportId, recvTransport); + } else { + log.warn("接收通道已经存在:{}", transportId); + } + clientWrapper.setRecvTransport(recvTransport); + // 拷贝属性 + recvTransport.copy(responseBody); + // 消费媒体:不能在连接时调用 + this.publishEvent(new MediaConsumeEvent(room, clientWrapper)); } - clientWrapper.setRecvTransport(recvTransport); - // 拷贝属性 - recvTransport.copy(responseBody); - // 消费媒体:不能在连接时调用 - this.publishEvent(new MediaConsumeEvent(room, clientWrapper)); - } - // 生产者 - final Boolean producing = MapUtils.getBoolean(body, Constant.PRODUCING); - if(Boolean.TRUE.equals(producing)) { - Transport sendTransport = clientWrapper.getSendTransport(); - if(sendTransport == null) { - sendTransport = new Transport(transportId, Direction.SEND, room, client); - transports.put(transportId, sendTransport); - } else { - log.warn("发送通道已经存在:{}", transportId); + // 生产者 + final Boolean producing = MapUtils.getBoolean(body, Constant.PRODUCING); + if(Boolean.TRUE.equals(producing)) { + Transport sendTransport = clientWrapper.getSendTransport(); + if(sendTransport == null) { + sendTransport = new Transport(transportId, Direction.SEND, room, client); + transports.put(transportId, sendTransport); + } else { + log.warn("发送通道已经存在:{}", transportId); + } + clientWrapper.setSendTransport(sendTransport); + // 拷贝属性 + sendTransport.copy(responseBody); } - clientWrapper.setSendTransport(sendTransport); - // 拷贝属性 - sendTransport.copy(responseBody); + client.push(response); + log.info("{}创建WebRTC通道信令:{}", clientId, transportId); + } else { + this.logNoAdapter(clientType); } - client.push(response); - log.info("{}创建WebRTC通道信令:{}", clientId, transportId); } /** diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaVideoOrientationChangeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaVideoOrientationChangeProtocol.java index 7f4018b..66d906d 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaVideoOrientationChangeProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/media/MediaVideoOrientationChangeProtocol.java @@ -18,6 +18,12 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter; @Protocol @Description( body = """ + { + "roomId" : "房间ID", + "camera" : "是否摄像头", + "flip" : "是否翻转", + "rotation": "旋转角度" + } """, flow = "媒体服务->信令服务->终端" )