[*] 流程

This commit is contained in:
acgist
2023-04-09 14:33:08 +08:00
parent 46f21e3a43
commit 124b161644
19 changed files with 477 additions and 162 deletions

View File

@@ -237,6 +237,8 @@ class Session {
name;
// 远程终端ID
clientId;
// 本地媒体流
localStream;
// 本地音频
localAudioTrack;
// 本地视频
@@ -258,6 +260,27 @@ class Session {
this.clientId = clientId;
}
async pause() {
this.localAudioTrack.enabled = false;
this.localVideoTrack.enabled = false;
this.localStream.active = false;
}
async resume() {
this.localAudioTrack.enabled = true;
this.localVideoTrack.enabled = true;
this.localStream.active = true;
}
async close() {
this.localStream.active = false;
this.localAudioTrack.stop();
this.localVideoTrack.stop();
this.remoteAudioTrack.stop();
this.remoteVideoTrack.stop();
this.peerConnection.close();
}
}
/**
@@ -599,12 +622,18 @@ class Taoyao extends RemoteClient {
case "session::call":
me.defaultSessionCall(message);
break;
case "session::close":
me.defaultSessionClose(message);
break;
case "session::close":
me.defaultSessionClose(message);
break;
case "session::exchange":
me.defaultSessionExchange(message);
break;
case "session::pause":
me.defaultSessionPause(message);
break;
case "session::resume":
me.defaultSessionResume(message);
break;
case "room::client::list":
me.defaultRoomClientList(message);
break;
@@ -2122,6 +2151,7 @@ class Taoyao extends RemoteClient {
this.sessionClients.set(sessionId, session);
session.peerConnection = await me.buildPeerConnection(session, sessionId);
const localStream = await me.getStream();
session.localStream = localStream;
session.localAudioTrack = localStream.getAudioTracks()[0];
session.localVideoTrack = localStream.getVideoTracks()[0];
// 相同Stream音视频同步
@@ -2139,10 +2169,24 @@ class Taoyao extends RemoteClient {
});
}
async sessionClose() {
async sessionClose(sessionId) {
const me = this;
me.push(protocol.buildMessage("session::close", {
sessionId
}));
}
async defaultSessionClose(message) {
const me = this;
const { sessionId } = message.body;
const session = me.sessionClients.get(sessionId);
if(session) {
console.debug("会话关闭", sessionId);
session.close();
me.sessionClients.delete(sessionId);
} else {
console.debug("关闭会话无效", sessionId);
}
}
async defaultSessionExchange(message) {
@@ -2169,6 +2213,24 @@ class Taoyao extends RemoteClient {
}
}
}
async defaultSessionPause(message) {
const me = this;
const { sessionId } = message.body;
const session = me.sessionClients.get(sessionId);
if(session) {
session.pause();
}
}
async defaultSessionResume(message) {
const me = this;
const { sessionId } = message.body;
const session = me.sessionClients.get(sessionId);
if(session) {
session.resume();
}
}
async buildPeerConnection(session, sessionId) {
const me = this;