[*] 日常优化
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user