diff --git a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java index 8e45529..65f1042 100644 --- a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java +++ b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java @@ -1173,7 +1173,7 @@ public final class Taoyao implements ITaoyao { final String sessionId = MapUtils.get(body, "sessionId"); final SessionClient sessionClient = this.sessions.remove(sessionId); if(sessionClient == null) { - Log.w(Taoyao.class.getSimpleName(), "无效会话:" + sessionId); + Log.w(Taoyao.class.getSimpleName(), "关闭媒体(无效会话):" + sessionId); return; } sessionClient.close(); @@ -1189,7 +1189,7 @@ public final class Taoyao implements ITaoyao { final String sessionId = MapUtils.get(body, "sessionId"); final SessionClient sessionClient = this.sessions.get(sessionId); if(sessionClient == null) { - Log.w(Taoyao.class.getSimpleName(), "无效会话:" + sessionId); + Log.w(Taoyao.class.getSimpleName(), "媒体交换(无效会话):" + sessionId); return; } sessionClient.exchange(message, body); diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index 9e27658..d04cc44 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -3072,21 +3072,20 @@ class Taoyao extends RemoteClient { * @param {*} message 信令消息 */ async defaultSessionCall(message) { - const me = this; - await me.checkDevice(); + await this.checkDevice(); const { name, clientId, sessionId } = message.body; const session = new Session({ name, clientId, sessionId, - audioEnabled: me.audioProduce, - videoEnabled: me.videoProduce + audioEnabled: this.audioProduce, + videoEnabled: this.videoProduce }); this.sessionClients.set(sessionId, session); - await me.buildPeerConnection(session, sessionId); + await this.buildPeerConnection(session, sessionId); session.peerConnection.createOffer().then(async (description) => { await session.peerConnection.setLocalDescription(description); - me.push(protocol.buildMessage("session::exchange", { + this.push(protocol.buildMessage("session::exchange", { sdp : description.sdp, type : description.type, sessionId: sessionId @@ -3095,61 +3094,63 @@ class Taoyao extends RemoteClient { } /** - * 关闭会话 + * 关闭媒体信令 * * @param {*} sessionId 会话ID */ async sessionClose(sessionId) { - const me = this; - me.push(protocol.buildMessage("session::close", { + this.push(protocol.buildMessage("session::close", { sessionId })); } /** - * 关闭会话信令 + * 关闭媒体信令 * * @param {*} message 信令消息 */ async defaultSessionClose(message) { - const me = this; const { sessionId } = message.body; - const session = me.sessionClients.get(sessionId); + const session = this.sessionClients.get(sessionId); if(session) { - console.debug("关闭会话", sessionId); - session.close(); - me.sessionClients.delete(sessionId); + console.debug("关闭媒体", sessionId); + await session.close(); + this.sessionClients.delete(sessionId); } else { - console.debug("关闭会话(无效)", sessionId); + console.debug("关闭媒体(无效会话)", sessionId); } } /** - * 会话媒体交换信令 + * 媒体交换信令 * * @param {*} message 信令消息 */ async defaultSessionExchange(message) { - const me = this; - const { type, candidate, sessionId } = message.body; + const body = message.body; + const { + type, + candidate, + sessionId, + } = body; const session = this.sessionClients.get(sessionId); if (type === "offer") { - await me.buildPeerConnection(session, sessionId); - await session.peerConnection.setRemoteDescription(new RTCSessionDescription(message.body)); + await this.buildPeerConnection(session, sessionId); + await session.peerConnection.setRemoteDescription(new RTCSessionDescription(body)); session.peerConnection.createAnswer().then(async description => { await session.peerConnection.setLocalDescription(description); - me.push(protocol.buildMessage("session::exchange", { + this.push(protocol.buildMessage("session::exchange", { sdp : description.sdp, type : description.type, sessionId: sessionId })); }); } else if (type === "answer") { - await session.peerConnection.setRemoteDescription(new RTCSessionDescription(message.body)); + await session.peerConnection.setRemoteDescription(new RTCSessionDescription(body)); } else if (type === "candidate") { await session.addIceCandidate(candidate); } else { - // 未知类型 + console.warn("媒体交换无效类型", body); } } @@ -3268,9 +3269,8 @@ class Taoyao extends RemoteClient { if(session.peerConnection) { return session.peerConnection; } - const me = this; const peerConnection = new RTCPeerConnection({ - "iceServers": me.webrtcConfig.iceServers || defaultRTCPeerConnectionConfig.iceServers + "iceServers": this.webrtcConfig.iceServers || defaultRTCPeerConnectionConfig.iceServers }); peerConnection.ontrack = event => { console.debug("会话添加远程媒体轨道", event); @@ -3284,7 +3284,7 @@ class Taoyao extends RemoteClient { } else { // 未知媒体类型 } - me.callbackTrack(session.clientId, track); + this.callbackTrack(session.clientId, track); if(session.proxy && session.proxy.media) { session.proxy.media(track); } else { @@ -3293,7 +3293,7 @@ class Taoyao extends RemoteClient { }; peerConnection.onicecandidate = event => { console.debug("会话媒体协商", event); - me.push(protocol.buildMessage("session::exchange", { + this.push(protocol.buildMessage("session::exchange", { type : "candidate", sessionId : sessionId, candidate : event.candidate @@ -3306,7 +3306,7 @@ class Taoyao extends RemoteClient { peerConnection.restartIce(); } } - const localStream = await me.getStream(); + const localStream = await this.getStream(); session.localStream = localStream; session.peerConnection = peerConnection; if(session.audioEnabled && localStream.getAudioTracks().length >= 0) { @@ -3595,4 +3595,3 @@ class Taoyao extends RemoteClient { } export { Taoyao }; - diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/session/SessionManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/session/SessionManager.java index 8ce8dda..5ee5166 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/session/SessionManager.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/party/session/SessionManager.java @@ -39,7 +39,7 @@ public class SessionManager { public Session call(Client source, Client target) { final Session session = new Session(this.idService.buildUuid(), source, target); this.sessions.put(session.getId(), session); - log.info("创建视频会话:{} - {} - {}", session.getId(), session.getSourceClientId(), session.getTargetClientId()); + log.info("创建会话:{} - {} - {}", session.getId(), session.getSourceClientId(), session.getTargetClientId()); return session; } @@ -60,7 +60,7 @@ public class SessionManager { public Session remove(String sessionId) { final Session session = this.sessions.remove(sessionId); if(session != null) { - log.info("移除视频会话:{} - {} - {}", sessionId, session.getSourceClientId(), session.getTargetClientId()); + log.info("移除会话:{} - {} - {}", sessionId, session.getSourceClientId(), session.getTargetClientId()); } return session; } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionCloseProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionCloseProtocol.java index f1b5c26..820fbb0 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionCloseProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionCloseProtocol.java @@ -14,11 +14,14 @@ import com.acgist.taoyao.signal.event.session.SessionCloseEvent; import com.acgist.taoyao.signal.party.session.Session; import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter; +import lombok.extern.slf4j.Slf4j; + /** * 关闭媒体信令 * * @author acgist */ +@Slf4j @Protocol @Description( body = """ @@ -39,13 +42,16 @@ public class SessionCloseProtocol extends ProtocolSessionAdapter implements Appl @Override public void onApplicationEvent(SessionCloseEvent event) { final Session session = event.getSession(); - final Map body = Map.of(Constant.SESSION_ID, event.getSessionId()); - session.push(this.build(body)); + session.push(this.build(Map.of( + Constant.SESSION_ID, + event.getSessionId() + ))); this.sessionManager.remove(session.getId()); } @Override public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map body) { + log.info("关闭会话:{}", session.getId()); session.close(); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionExchangeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionExchangeProtocol.java index 8bbb5fe..729a38e 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionExchangeProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/session/SessionExchangeProtocol.java @@ -26,12 +26,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter; body = """ { "sdp" : "sdp" - "type" : "offer", - "sessionId": "会话ID" - } - { - "sdp" : "sdp" - "type" : "answer", + "type" : "offer|answer", "sessionId": "会话ID" } { @@ -39,7 +34,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter; "sessionId": "会话ID", "candidate": { "sdpMid" : "sdpMid", - "candidate" : "candidate信息", + "candidate" : "candidate", "sdpMLineIndex": sdpMLineIndex } }