[*] 日常优化

This commit is contained in:
acgist
2023-08-10 07:39:56 +08:00
parent d8f6b4b5af
commit 6336bb4767
4 changed files with 70 additions and 47 deletions

View File

@@ -1693,7 +1693,11 @@ class Taoyao {
* @param {*} body 消息主体 * @param {*} body 消息主体
*/ */
async mediaTransportWebrtcConnect(message, body) { async mediaTransportWebrtcConnect(message, body) {
const { roomId, transportId, dtlsParameters } = body; const {
roomId,
transportId,
dtlsParameters
} = body;
const room = this.rooms.get(roomId); const room = this.rooms.get(roomId);
const transport = room?.transports.get(transportId); const transport = room?.transports.get(transportId);
if(transport) { if(transport) {

View File

@@ -24,9 +24,14 @@ import lombok.extern.slf4j.Slf4j;
@Description( @Description(
body = { body = {
""" """
{
"roomId" : "房间ID",
"transportId" : "通道ID"
"dtlsParameters": "DTLS参数"
}
""" """
}, },
flow = "终端->信令服务->媒体服务->信令服务->终端" flow = "终端=>信令服务->媒体服务"
) )
public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter { public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter {
@@ -45,7 +50,7 @@ public class MediaTransportWebRtcConnectProtocol extends ProtocolRoomAdapter {
final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID); final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID);
log.info("{}连接WebRTC通道信令{}", clientId, transportId); log.info("{}连接WebRTC通道信令{}", clientId, transportId);
} else { } else {
// 忽略其他情况 this.logNoAdapter(clientType);
} }
} }

View File

@@ -34,19 +34,23 @@ import lombok.extern.slf4j.Slf4j;
body = { body = {
""" """
{ {
"roomId": "房间标识" "roomId" : "房间标识",
"forceTcp" : "强制使用TCP",
"producing" : "是否生产",
"consuming" : "是否消费",
"sctpCapabilities": "sctpCapabilities"
} }
{ {
"roomId": "房间标识", "roomId" : "房间标识",
"transportId": "传输通道标识", "transportId" : "传输通道标识",
"iceCandidates": "iceCandidates", "iceCandidates" : "iceCandidates",
"iceParameters": "iceParameters", "iceParameters" : "iceParameters",
"dtlsParameters": "dtlsParameters", "dtlsParameters": "dtlsParameters",
"sctpParameters": "sctpParameters" "sctpParameters": "sctpParameters"
} }
""" """
}, },
flow = "终端->信令服务->媒体服务->信令服务->终端" flow = "终端=>信令服务->媒体服务"
) )
public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter { public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter {
@@ -58,47 +62,51 @@ public class MediaTransportWebRtcCreateProtocol extends ProtocolRoomAdapter {
@Override @Override
public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) { public void execute(String clientId, ClientType clientType, Room room, Client client, Client mediaClient, Message message, Map<String, Object> body) {
body.put(Constant.CLIENT_ID, clientId); if(clientType.mediaClient()) {
final Message response = room.requestMedia(message); body.put(Constant.CLIENT_ID, clientId);
final Map<String, Object> responseBody = response.body(); final Message response = room.requestMedia(message);
final Map<String, Transport> transports = room.getTransports(); final Map<String, Object> responseBody = response.body();
final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID); final Map<String, Transport> transports = room.getTransports();
// 重写地址 final String transportId = MapUtils.get(responseBody, Constant.TRANSPORT_ID);
this.rewriteIp(client.getIP(), responseBody); // 重写地址
// 处理逻辑 this.rewriteIp(client.getIP(), responseBody);
final ClientWrapper clientWrapper = room.clientWrapper(client); // 处理逻辑
// 消费者 final ClientWrapper clientWrapper = room.clientWrapper(client);
final Boolean consuming = MapUtils.getBoolean(body, Constant.CONSUMING); // 消费者
if(Boolean.TRUE.equals(consuming)) { final Boolean consuming = MapUtils.getBoolean(body, Constant.CONSUMING);
Transport recvTransport = clientWrapper.getRecvTransport(); if(Boolean.TRUE.equals(consuming)) {
if(recvTransport == null) { Transport recvTransport = clientWrapper.getRecvTransport();
recvTransport = new Transport(transportId, Direction.RECV, room, client); if(recvTransport == null) {
transports.put(transportId, recvTransport); recvTransport = new Transport(transportId, Direction.RECV, room, client);
} else { transports.put(transportId, recvTransport);
log.warn("接收通道已经存在:{}", transportId); } else {
log.warn("接收通道已经存在:{}", transportId);
}
clientWrapper.setRecvTransport(recvTransport);
// 拷贝属性
recvTransport.copy(responseBody);
// 消费媒体:不能在连接时调用
this.publishEvent(new MediaConsumeEvent(room, clientWrapper));
} }
clientWrapper.setRecvTransport(recvTransport); // 生产者
// 拷贝属性 final Boolean producing = MapUtils.getBoolean(body, Constant.PRODUCING);
recvTransport.copy(responseBody); if(Boolean.TRUE.equals(producing)) {
// 消费媒体:不能在连接时调用 Transport sendTransport = clientWrapper.getSendTransport();
this.publishEvent(new MediaConsumeEvent(room, clientWrapper)); if(sendTransport == null) {
} sendTransport = new Transport(transportId, Direction.SEND, room, client);
// 生产者 transports.put(transportId, sendTransport);
final Boolean producing = MapUtils.getBoolean(body, Constant.PRODUCING); } else {
if(Boolean.TRUE.equals(producing)) { log.warn("发送通道已经存在:{}", transportId);
Transport sendTransport = clientWrapper.getSendTransport(); }
if(sendTransport == null) { clientWrapper.setSendTransport(sendTransport);
sendTransport = new Transport(transportId, Direction.SEND, room, client); // 拷贝属性
transports.put(transportId, sendTransport); sendTransport.copy(responseBody);
} else {
log.warn("发送通道已经存在:{}", transportId);
} }
clientWrapper.setSendTransport(sendTransport); client.push(response);
// 拷贝属性 log.info("{}创建WebRTC通道信令{}", clientId, transportId);
sendTransport.copy(responseBody); } else {
this.logNoAdapter(clientType);
} }
client.push(response);
log.info("{}创建WebRTC通道信令{}", clientId, transportId);
} }
/** /**

View File

@@ -18,6 +18,12 @@ import com.acgist.taoyao.signal.protocol.ProtocolRoomAdapter;
@Protocol @Protocol
@Description( @Description(
body = """ body = """
{
"roomId" : "房间ID",
"camera" : "是否摄像头",
"flip" : "是否翻转",
"rotation": "旋转角度"
}
""", """,
flow = "媒体服务->信令服务->终端" flow = "媒体服务->信令服务->终端"
) )