[*] 日常优化

This commit is contained in:
acgist
2023-08-23 07:40:05 +08:00
parent 37987861f1
commit b2c25fff51
5 changed files with 43 additions and 43 deletions

View File

@@ -1173,7 +1173,7 @@ public final class Taoyao implements ITaoyao {
final String sessionId = MapUtils.get(body, "sessionId"); final String sessionId = MapUtils.get(body, "sessionId");
final SessionClient sessionClient = this.sessions.remove(sessionId); final SessionClient sessionClient = this.sessions.remove(sessionId);
if(sessionClient == null) { if(sessionClient == null) {
Log.w(Taoyao.class.getSimpleName(), "无效会话:" + sessionId); Log.w(Taoyao.class.getSimpleName(), "关闭媒体(无效会话" + sessionId);
return; return;
} }
sessionClient.close(); sessionClient.close();
@@ -1189,7 +1189,7 @@ public final class Taoyao implements ITaoyao {
final String sessionId = MapUtils.get(body, "sessionId"); final String sessionId = MapUtils.get(body, "sessionId");
final SessionClient sessionClient = this.sessions.get(sessionId); final SessionClient sessionClient = this.sessions.get(sessionId);
if(sessionClient == null) { if(sessionClient == null) {
Log.w(Taoyao.class.getSimpleName(), "无效会话:" + sessionId); Log.w(Taoyao.class.getSimpleName(), "媒体交换(无效会话" + sessionId);
return; return;
} }
sessionClient.exchange(message, body); sessionClient.exchange(message, body);

View File

@@ -3072,21 +3072,20 @@ class Taoyao extends RemoteClient {
* @param {*} message 信令消息 * @param {*} message 信令消息
*/ */
async defaultSessionCall(message) { async defaultSessionCall(message) {
const me = this; await this.checkDevice();
await me.checkDevice();
const { name, clientId, sessionId } = message.body; const { name, clientId, sessionId } = message.body;
const session = new Session({ const session = new Session({
name, name,
clientId, clientId,
sessionId, sessionId,
audioEnabled: me.audioProduce, audioEnabled: this.audioProduce,
videoEnabled: me.videoProduce videoEnabled: this.videoProduce
}); });
this.sessionClients.set(sessionId, session); this.sessionClients.set(sessionId, session);
await me.buildPeerConnection(session, sessionId); await this.buildPeerConnection(session, sessionId);
session.peerConnection.createOffer().then(async (description) => { session.peerConnection.createOffer().then(async (description) => {
await session.peerConnection.setLocalDescription(description); await session.peerConnection.setLocalDescription(description);
me.push(protocol.buildMessage("session::exchange", { this.push(protocol.buildMessage("session::exchange", {
sdp : description.sdp, sdp : description.sdp,
type : description.type, type : description.type,
sessionId: sessionId sessionId: sessionId
@@ -3095,61 +3094,63 @@ class Taoyao extends RemoteClient {
} }
/** /**
* 关闭会话 * 关闭媒体信令
* *
* @param {*} sessionId 会话ID * @param {*} sessionId 会话ID
*/ */
async sessionClose(sessionId) { async sessionClose(sessionId) {
const me = this; this.push(protocol.buildMessage("session::close", {
me.push(protocol.buildMessage("session::close", {
sessionId sessionId
})); }));
} }
/** /**
* 关闭会话信令 * 关闭媒体信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
*/ */
async defaultSessionClose(message) { async defaultSessionClose(message) {
const me = this;
const { sessionId } = message.body; const { sessionId } = message.body;
const session = me.sessionClients.get(sessionId); const session = this.sessionClients.get(sessionId);
if(session) { if(session) {
console.debug("关闭会话", sessionId); console.debug("关闭媒体", sessionId);
session.close(); await session.close();
me.sessionClients.delete(sessionId); this.sessionClients.delete(sessionId);
} else { } else {
console.debug("关闭会话(无效)", sessionId); console.debug("关闭媒体(无效会话", sessionId);
} }
} }
/** /**
* 会话媒体交换信令 * 媒体交换信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
*/ */
async defaultSessionExchange(message) { async defaultSessionExchange(message) {
const me = this; const body = message.body;
const { type, candidate, sessionId } = message.body; const {
type,
candidate,
sessionId,
} = body;
const session = this.sessionClients.get(sessionId); const session = this.sessionClients.get(sessionId);
if (type === "offer") { if (type === "offer") {
await me.buildPeerConnection(session, sessionId); await this.buildPeerConnection(session, sessionId);
await session.peerConnection.setRemoteDescription(new RTCSessionDescription(message.body)); await session.peerConnection.setRemoteDescription(new RTCSessionDescription(body));
session.peerConnection.createAnswer().then(async description => { session.peerConnection.createAnswer().then(async description => {
await session.peerConnection.setLocalDescription(description); await session.peerConnection.setLocalDescription(description);
me.push(protocol.buildMessage("session::exchange", { this.push(protocol.buildMessage("session::exchange", {
sdp : description.sdp, sdp : description.sdp,
type : description.type, type : description.type,
sessionId: sessionId sessionId: sessionId
})); }));
}); });
} else if (type === "answer") { } else if (type === "answer") {
await session.peerConnection.setRemoteDescription(new RTCSessionDescription(message.body)); await session.peerConnection.setRemoteDescription(new RTCSessionDescription(body));
} else if (type === "candidate") { } else if (type === "candidate") {
await session.addIceCandidate(candidate); await session.addIceCandidate(candidate);
} else { } else {
// 未知类型 console.warn("媒体交换无效类型", body);
} }
} }
@@ -3268,9 +3269,8 @@ class Taoyao extends RemoteClient {
if(session.peerConnection) { if(session.peerConnection) {
return session.peerConnection; return session.peerConnection;
} }
const me = this;
const peerConnection = new RTCPeerConnection({ const peerConnection = new RTCPeerConnection({
"iceServers": me.webrtcConfig.iceServers || defaultRTCPeerConnectionConfig.iceServers "iceServers": this.webrtcConfig.iceServers || defaultRTCPeerConnectionConfig.iceServers
}); });
peerConnection.ontrack = event => { peerConnection.ontrack = event => {
console.debug("会话添加远程媒体轨道", event); console.debug("会话添加远程媒体轨道", event);
@@ -3284,7 +3284,7 @@ class Taoyao extends RemoteClient {
} else { } else {
// 未知媒体类型 // 未知媒体类型
} }
me.callbackTrack(session.clientId, track); this.callbackTrack(session.clientId, track);
if(session.proxy && session.proxy.media) { if(session.proxy && session.proxy.media) {
session.proxy.media(track); session.proxy.media(track);
} else { } else {
@@ -3293,7 +3293,7 @@ class Taoyao extends RemoteClient {
}; };
peerConnection.onicecandidate = event => { peerConnection.onicecandidate = event => {
console.debug("会话媒体协商", event); console.debug("会话媒体协商", event);
me.push(protocol.buildMessage("session::exchange", { this.push(protocol.buildMessage("session::exchange", {
type : "candidate", type : "candidate",
sessionId : sessionId, sessionId : sessionId,
candidate : event.candidate candidate : event.candidate
@@ -3306,7 +3306,7 @@ class Taoyao extends RemoteClient {
peerConnection.restartIce(); peerConnection.restartIce();
} }
} }
const localStream = await me.getStream(); const localStream = await this.getStream();
session.localStream = localStream; session.localStream = localStream;
session.peerConnection = peerConnection; session.peerConnection = peerConnection;
if(session.audioEnabled && localStream.getAudioTracks().length >= 0) { if(session.audioEnabled && localStream.getAudioTracks().length >= 0) {
@@ -3595,4 +3595,3 @@ class Taoyao extends RemoteClient {
} }
export { Taoyao }; export { Taoyao };

View File

@@ -39,7 +39,7 @@ public class SessionManager {
public Session call(Client source, Client target) { public Session call(Client source, Client target) {
final Session session = new Session(this.idService.buildUuid(), source, target); final Session session = new Session(this.idService.buildUuid(), source, target);
this.sessions.put(session.getId(), session); this.sessions.put(session.getId(), session);
log.info("创建视频会话:{} - {} - {}", session.getId(), session.getSourceClientId(), session.getTargetClientId()); log.info("创建会话:{} - {} - {}", session.getId(), session.getSourceClientId(), session.getTargetClientId());
return session; return session;
} }
@@ -60,7 +60,7 @@ public class SessionManager {
public Session remove(String sessionId) { public Session remove(String sessionId) {
final Session session = this.sessions.remove(sessionId); final Session session = this.sessions.remove(sessionId);
if(session != null) { if(session != null) {
log.info("移除视频会话:{} - {} - {}", sessionId, session.getSourceClientId(), session.getTargetClientId()); log.info("移除会话:{} - {} - {}", sessionId, session.getSourceClientId(), session.getTargetClientId());
} }
return session; return session;
} }

View File

@@ -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.party.session.Session;
import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter; import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
import lombok.extern.slf4j.Slf4j;
/** /**
* 关闭媒体信令 * 关闭媒体信令
* *
* @author acgist * @author acgist
*/ */
@Slf4j
@Protocol @Protocol
@Description( @Description(
body = """ body = """
@@ -39,13 +42,16 @@ public class SessionCloseProtocol extends ProtocolSessionAdapter implements Appl
@Override @Override
public void onApplicationEvent(SessionCloseEvent event) { public void onApplicationEvent(SessionCloseEvent event) {
final Session session = event.getSession(); final Session session = event.getSession();
final Map<String, String> body = Map.of(Constant.SESSION_ID, event.getSessionId()); session.push(this.build(Map.of(
session.push(this.build(body)); Constant.SESSION_ID,
event.getSessionId()
)));
this.sessionManager.remove(session.getId()); this.sessionManager.remove(session.getId());
} }
@Override @Override
public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) { public void execute(String clientId, ClientType clientType, Session session, Client client, Message message, Map<String, Object> body) {
log.info("关闭会话:{}", session.getId());
session.close(); session.close();
} }

View File

@@ -26,12 +26,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
body = """ body = """
{ {
"sdp" : "sdp" "sdp" : "sdp"
"type" : "offer", "type" : "offer|answer",
"sessionId": "会话ID"
}
{
"sdp" : "sdp"
"type" : "answer",
"sessionId": "会话ID" "sessionId": "会话ID"
} }
{ {
@@ -39,7 +34,7 @@ import com.acgist.taoyao.signal.protocol.ProtocolSessionAdapter;
"sessionId": "会话ID", "sessionId": "会话ID",
"candidate": { "candidate": {
"sdpMid" : "sdpMid", "sdpMid" : "sdpMid",
"candidate" : "candidate信息", "candidate" : "candidate",
"sdpMLineIndex": sdpMLineIndex "sdpMLineIndex": sdpMLineIndex
} }
} }