[*] 日常优化

This commit is contained in:
acgist
2023-10-06 09:04:31 +08:00
parent c380ea294d
commit c60bb0902e
3 changed files with 241 additions and 186 deletions

View File

@@ -912,12 +912,10 @@ class Taoyao {
}); });
consumer.observer.on("pause", () => { consumer.observer.on("pause", () => {
console.debug("消费者暂停", consumer.id, streamId); console.debug("消费者暂停", consumer.id, streamId);
me.push( me.push(protocol.buildMessage("media::consumer::pause", {
protocol.buildMessage("media::consumer::pause", { roomId,
roomId, consumerId: consumer.id
consumerId: consumer.id }));
})
);
}); });
consumer.observer.on("resume", () => { consumer.observer.on("resume", () => {
console.debug("消费者恢复", consumer.id, streamId); console.debug("消费者恢复", consumer.id, streamId);
@@ -979,21 +977,23 @@ class Taoyao {
/** /**
* 暂停消费者信令 * 暂停消费者信令
* *
* @param {*} message 消息 * @param {*} message 信令消息
* @param {*} body 消息主体 * @param {*} body 消息主体
*/ */
async mediaConsumerPause(message, body) { async mediaConsumerPause(message, body) {
const me = this; const {
const { roomId, consumerId } = body; roomId,
const room = me.rooms.get(roomId); consumerId
} = body;
const room = this.rooms.get(roomId);
const consumer = room?.consumers.get(consumerId); const consumer = room?.consumers.get(consumerId);
if(consumer) { if(!consumer) {
consumer.localPaused = true; console.warn("暂停消费者(消费者无效)", roomId, consumerId);
console.debug("暂停消费者", consumerId); return;
await consumer.pause();
} else {
console.debug("暂停消费者(无效)", consumerId);
} }
consumer.localPaused = true;
console.debug("暂停消费者", consumerId);
await consumer.pause();
} }
/** /**

View File

@@ -758,20 +758,25 @@ class Taoyao extends RemoteClient {
*/ */
async preCallback(message) { async preCallback(message) {
const me = this; const me = this;
const { header, body } = message; const {
const { signal } = header; header,
body
} = message;
const {
signal
} = header;
switch (signal) { switch (signal) {
case "client::config": case "client::config":
me.defaultClientConfig(message); me.defaultClientConfig(message, body);
break; break;
case "media::consume": case "media::consume":
await me.defaultMediaConsume(message); await me.defaultMediaConsume(message, body);
break; break;
case "media::data::consume": case "media::data::consume":
me.defaultMediaDataConsume(message); me.defaultMediaDataConsume(message, body);
break; break;
case "platform::error": case "platform::error":
me.defaultPlatformError(message); me.defaultPlatformError(message, body);
break; break;
} }
} }
@@ -783,131 +788,133 @@ class Taoyao extends RemoteClient {
*/ */
async postCallback(message) { async postCallback(message) {
const me = this; const me = this;
const { header, body } = message; const {
const { signal } = header; header,
body
} = message;
const {
signal
} = header;
switch (signal) { switch (signal) {
case "client::broadcast": case "client::broadcast":
me.defaultClientBroadcast(message); me.defaultClientBroadcast(message, body);
break; break;
case "client::offline": case "client::offline":
me.defaultClientOffline(message); me.defaultClientOffline(message, body);
break; break;
case "client::online": case "client::online":
me.defaultClientOnline(message); me.defaultClientOnline(message, body);
break; break;
case "client::reboot": case "client::reboot":
me.defaultClientReboot(message); me.defaultClientReboot(message, body);
break; break;
case "client::shutdown": case "client::shutdown":
me.defaultClientShutdown(message); me.defaultClientShutdown(message, body);
break; break;
case "client::unicast": case "client::unicast":
me.defaultClientUnicast(message); me.defaultClientUnicast(message, body);
break; break;
case "control::bell": case "control::bell":
me.defaultControlBell(message); me.defaultControlBell(message, body);
break; break;
case "control::client::record": case "control::client::record":
me.defaultControlClientReccord(message); me.defaultControlClientReccord(message, body);
break; break;
case "control::config::audio": case "control::config::audio":
me.defaultControlConfigAudio(message); me.defaultControlConfigAudio(message, body);
break; break;
case "control::config::video": case "control::config::video":
me.defaultControlConfigVideo(message); me.defaultControlConfigVideo(message, body);
break; break;
case "control::photograph": case "control::photograph":
me.defaultControlPhotograph(message); me.defaultControlPhotograph(message, body);
break; break;
case "control::wakeup": case "control::wakeup":
me.defaultControlWakeup(message); me.defaultControlWakeup(message, body);
break; break;
case "media::audio::volume": case "media::audio::volume":
me.defaultMediaAudioVolume(message); me.defaultMediaAudioVolume(message, body);
break; break;
case "media::consumer::close": case "media::consumer::close":
me.defaultMediaConsumerClose(message); me.defaultMediaConsumerClose(message, body);
break; break;
case "media::consumer::pause": case "media::consumer::pause":
me.defaultMediaConsumerPause(message); me.defaultMediaConsumerPause(message, body);
break; break;
case "media::consumer::resume": case "media::consumer::resume":
me.defaultMediaConsumerResume(message); me.defaultMediaConsumerResume(message, body);
break; break;
case "media::consumer::score": case "media::consumer::score":
me.defaultMediaConsumerScore(message); me.defaultMediaConsumerScore(message, body);
break; break;
case "media::data::consumer::close": case "media::data::consumer::close":
me.defaultMediaDataConsumerClose(message); me.defaultMediaDataConsumerClose(message, body);
break; break;
case "media::data::producer::close": case "media::data::producer::close":
me.defaultMediaDataProducerClose(message); me.defaultMediaDataProducerClose(message, body);
break; break;
case "media::producer::close": case "media::producer::close":
me.defaultMediaProducerClose(message); me.defaultMediaProducerClose(message, body);
break; break;
case "media::producer::pause": case "media::producer::pause":
me.defaultMediaProducerPause(message); me.defaultMediaProducerPause(message, body);
break; break;
case "media::producer::resume": case "media::producer::resume":
me.defaultMediaProducerResume(message); me.defaultMediaProducerResume(message, body);
break; break;
case "media::producer::score": case "media::producer::score":
me.defaultMediaProducerScore(message); me.defaultMediaProducerScore(message, body);
break; break;
case "media::transport::close": case "media::transport::close":
me.defaultMediaTransportClose(message); me.defaultMediaTransportClose(message, body);
break; break;
case "media::video::orientation::change": case "media::video::orientation::change":
me.defaultMediaVideoOrientationChange(message); me.defaultMediaVideoOrientationChange(message, body);
break;
case "platform::error":
me.platformError(message);
break; break;
case "platform::reboot": case "platform::reboot":
me.defaultPlatformReboot(message); me.defaultPlatformReboot(message, body);
break; break;
case "platform::shutdown": case "platform::shutdown":
me.defaultPlatformShutdown(message); me.defaultPlatformShutdown(message, body);
break; break;
case "room::broadcast": case "room::broadcast":
me.defaultRoomBroadcast(message); me.defaultRoomBroadcast(message, body);
break; break;
case "room::client::list": case "room::client::list":
me.defaultRoomClientList(message); me.defaultRoomClientList(message, body);
break; break;
case "room::close": case "room::close":
me.defaultRoomClose(message); me.defaultRoomClose(message, body);
break; break;
case "room::create": case "room::create":
this.defaultRoomCreate(message); this.defaultRoomCreate(message, body);
break; break;
case "room::enter": case "room::enter":
me.defaultRoomEnter(message); me.defaultRoomEnter(message, body);
break; break;
case "room::expel": case "room::expel":
me.defaultRoomExpel(message); me.defaultRoomExpel(message, body);
break; break;
case "room::invite": case "room::invite":
me.defaultRoomInvite(message); me.defaultRoomInvite(message, body);
break; break;
case "room::leave": case "room::leave":
me.defaultRoomLeave(message); me.defaultRoomLeave(message, body);
break; break;
case "session::call": case "session::call":
me.defaultSessionCall(message); me.defaultSessionCall(message, body);
break; break;
case "session::close": case "session::close":
me.defaultSessionClose(message); me.defaultSessionClose(message, body);
break; break;
case "session::exchange": case "session::exchange":
me.defaultSessionExchange(message); me.defaultSessionExchange(message, body);
break; break;
case "session::pause": case "session::pause":
me.defaultSessionPause(message); me.defaultSessionPause(message, body);
break; break;
case "session::resume": case "session::resume":
me.defaultSessionResume(message); me.defaultSessionResume(message, body);
break; break;
} }
} }
@@ -1141,14 +1148,10 @@ class Taoyao extends RemoteClient {
* 终端广播信令 * 终端广播信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientBroadcast(message) { defaultClientBroadcast(message, body) {
const me = this; console.debug("终端广播", message);
const {
header,
body,
} = message;
console.debug("终端广播", header, body);
} }
/** /**
@@ -1164,10 +1167,11 @@ class Taoyao extends RemoteClient {
* 终端配置信令 * 终端配置信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientConfig(message) { defaultClientConfig(message, body) {
const me = this; const me = this;
const { media, webrtc } = message.body; const { media, webrtc } = body;
const { audio, video } = media; const { audio, video } = media;
me.audioConfig.sampleSize = { me.audioConfig.sampleSize = {
min : media.minSampleSize, min : media.minSampleSize,
@@ -1246,8 +1250,9 @@ class Taoyao extends RemoteClient {
* 终端下线信令 * 终端下线信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientOffline(message) { defaultClientOffline(message, body) {
console.debug("终端下线", message); console.debug("终端下线", message);
} }
@@ -1255,8 +1260,9 @@ class Taoyao extends RemoteClient {
* 终端上线信令 * 终端上线信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientOnline(message) { defaultClientOnline(message, body) {
console.debug("终端上线", message); console.debug("终端上线", message);
} }
@@ -1264,8 +1270,9 @@ class Taoyao extends RemoteClient {
* 重启终端信令 * 重启终端信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientReboot(message) { defaultClientReboot(message, body) {
console.info("重启终端", message); console.info("重启终端", message);
location.reload(); location.reload();
} }
@@ -1274,8 +1281,9 @@ class Taoyao extends RemoteClient {
* 关闭终端信令 * 关闭终端信令
* *
* @param {*} message 消息 * @param {*} message 消息
* @param {*} body 消息主体
*/ */
defaultClientShutdown(message) { defaultClientShutdown(message, body) {
console.info("关闭终端", message); console.info("关闭终端", message);
window.close(); window.close();
} }
@@ -1311,8 +1319,9 @@ class Taoyao extends RemoteClient {
* 终端单播信令 * 终端单播信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultClientUnicast(message) { defaultClientUnicast(message, body) {
console.debug("终端单播消息", message); console.debug("终端单播消息", message);
} }
@@ -1333,8 +1342,9 @@ class Taoyao extends RemoteClient {
* 响铃信令 * 响铃信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlBell(message) { defaultControlBell(message, body) {
console.debug("响铃", message); console.debug("响铃", message);
this.push(message); this.push(message);
} }
@@ -1357,10 +1367,12 @@ class Taoyao extends RemoteClient {
* 终端录像信令 * 终端录像信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlClientReccord(message) { defaultControlClientReccord(message, body) {
console.debug("终端录像", message); console.debug("终端录像", message);
this.push(message); this.push(message);
// TODO录像
} }
/** /**
@@ -1380,8 +1392,9 @@ class Taoyao extends RemoteClient {
* 配置音频信令 * 配置音频信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlConfigAudio(message) { defaultControlConfigAudio(message, body) {
console.debug("配置音频", message); console.debug("配置音频", message);
this.push(message); this.push(message);
// TODO配置本地音频 // TODO配置本地音频
@@ -1404,8 +1417,9 @@ class Taoyao extends RemoteClient {
* 配置视频信令 * 配置视频信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlConfigVideo(message) { defaultControlConfigVideo(message, body) {
console.debug("配置视频", message); console.debug("配置视频", message);
this.push(message); this.push(message);
// TODO配置本地视频 // TODO配置本地视频
@@ -1427,10 +1441,12 @@ class Taoyao extends RemoteClient {
* 拍照信令 * 拍照信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlPhotograph(message) { defaultControlPhotograph(message, body) {
console.debug("拍照", message); console.debug("拍照", message);
this.push(message); this.push(message);
// TODO拍照
} }
/** /**
@@ -1463,8 +1479,9 @@ class Taoyao extends RemoteClient {
* 终端唤醒信令 * 终端唤醒信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultControlWakeup(message) { defaultControlWakeup(message, body) {
console.debug("终端唤醒", message); console.debug("终端唤醒", message);
this.push(message); this.push(message);
} }
@@ -1473,13 +1490,14 @@ class Taoyao extends RemoteClient {
* 终端音量信令 * 终端音量信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaAudioVolume(message) { defaultMediaAudioVolume(message, body) {
const me = this; const me = this;
const { const {
roomId, roomId,
volumes volumes
} = message.body; } = body;
if (volumes && volumes.length > 0) { if (volumes && volumes.length > 0) {
// 声音 // 声音
volumes.forEach(v => { volumes.forEach(v => {
@@ -1520,13 +1538,14 @@ class Taoyao extends RemoteClient {
* 关闭消费者信令 * 关闭消费者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaConsumerClose(message) { defaultMediaConsumerClose(message, body) {
const me = this; const me = this;
const { const {
roomId, roomId,
consumerId consumerId
} = message.body; } = body;
const consumer = me.consumers.get(consumerId); const consumer = me.consumers.get(consumerId);
if (consumer) { if (consumer) {
console.debug("关闭消费者", consumerId); console.debug("关闭消费者", consumerId);
@@ -1536,48 +1555,6 @@ class Taoyao extends RemoteClient {
} }
} }
/**
* 暂停消费者信令
*
* @param {*} consumerId 消费者ID
*/
mediaConsumerPause(consumerId) {
const me = this;
const consumer = me.consumers.get(consumerId);
if(consumer) {
if(consumer.paused) {
return;
}
console.debug("暂停消费者", consumerId);
me.push(protocol.buildMessage("media::consumer::pause", {
roomId : me.roomId,
consumerId: consumerId,
}));
} else {
console.debug("暂停消费者无效", consumerId);
}
}
/**
* 暂停消费者信令
*
* @param {*} message 消息
*/
defaultMediaConsumerPause(message) {
const me = this;
const {
roomId,
consumerId
} = message.body;
const consumer = me.consumers.get(consumerId);
if (consumer) {
console.debug("暂停消费者", consumerId);
consumer.pause();
} else {
console.debug("暂停消费者无效", consumerId);
}
}
/** /**
* 消费媒体信令 * 消费媒体信令
* *
@@ -1604,8 +1581,9 @@ class Taoyao extends RemoteClient {
* const writableStream = receiverStreams.writable || receiverStreams.writableStream; * const writableStream = receiverStreams.writable || receiverStreams.writableStream;
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultMediaConsume(message) { async defaultMediaConsume(message, body) {
const me = this; const me = this;
if (!me.audioConsume && !me.videoConsume) { if (!me.audioConsume && !me.videoConsume) {
console.debug("没有消费媒体"); console.debug("没有消费媒体");
@@ -1623,7 +1601,7 @@ class Taoyao extends RemoteClient {
appData, appData,
rtpParameters, rtpParameters,
producerPaused, producerPaused,
} = message.body; } = body;
try { try {
const consumer = await me.recvTransport.consume({ const consumer = await me.recvTransport.consume({
id: consumerId, id: consumerId,
@@ -1684,6 +1662,51 @@ class Taoyao extends RemoteClient {
} }
} }
/**
* 暂停消费者信令
*
* @param {*} consumerId 消费者ID
*/
mediaConsumerPause(consumerId) {
const consumer = this.consumers.get(consumerId);
if(!consumer) {
console.debug("暂停消费者(消费者无效)", consumerId);
return;
}
if(consumer.paused) {
console.debug("暂停消费者(消费者已经暂停)", consumerId);
return;
}
console.debug("暂停消费者", consumerId);
this.push(protocol.buildMessage("media::consumer::pause", {
consumerId,
roomId: this.roomId,
}));
}
/**
* 暂停消费者信令
*
* @param {*} message 信令消息
* @param {*} body 消息主体
*/
defaultMediaConsumerPause(message, body) {
const {
consumerId
} = body;
const consumer = this.consumers.get(consumerId);
if (!consumer) {
console.debug("暂停消费者(消费者无效)", consumerId);
return;
}
if(consumer.paused) {
console.debug("暂停消费者(消费者已经暂停)", consumerId);
return;
}
console.debug("暂停消费者", consumerId);
consumer.pause();
}
/** /**
* 请求关键帧信令 * 请求关键帧信令
* *
@@ -1731,11 +1754,12 @@ class Taoyao extends RemoteClient {
* 恢复消费者信令 * 恢复消费者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaConsumerResume(message) { defaultMediaConsumerResume(message, body) {
const { const {
consumerId consumerId
} = message.body; } = body;
const consumer = this.consumers.get(consumerId); const consumer = this.consumers.get(consumerId);
if (!consumer) { if (!consumer) {
console.debug("恢复消费者(消费者无效)", consumerId); console.debug("恢复消费者(消费者无效)", consumerId);
@@ -1753,8 +1777,9 @@ class Taoyao extends RemoteClient {
* 媒体消费者评分信令 * 媒体消费者评分信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaConsumerScore(message) { defaultMediaConsumerScore(message, body) {
console.debug("消费者评分", message); console.debug("消费者评分", message);
} }
@@ -1834,8 +1859,9 @@ class Taoyao extends RemoteClient {
* 消费数据信令 * 消费数据信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultMediaDataConsume(message) { async defaultMediaDataConsume(message, body) {
const { const {
roomId, roomId,
clientId, clientId,
@@ -1847,7 +1873,7 @@ class Taoyao extends RemoteClient {
appData, appData,
protocol, protocol,
sctpStreamParameters, sctpStreamParameters,
} = message.body; } = body;
try { try {
const dataConsumer = await this.recvTransport.consumeData({ const dataConsumer = await this.recvTransport.consumeData({
id : consumerId, id : consumerId,
@@ -1900,11 +1926,12 @@ class Taoyao extends RemoteClient {
* 关闭数据消费者信令 * 关闭数据消费者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaDataConsumerClose(message) { defaultMediaDataConsumerClose(message, body) {
const { const {
consumerId consumerId
} = message.body; } = body;
const dataConsumer = this.dataConsumers.get(consumerId); const dataConsumer = this.dataConsumers.get(consumerId);
if (!dataConsumer) { if (!dataConsumer) {
console.debug("关闭数据消费者(数据消费者无效)", consumerId); console.debug("关闭数据消费者(数据消费者无效)", consumerId);
@@ -1994,11 +2021,12 @@ class Taoyao extends RemoteClient {
* 关闭数据生产者信令 * 关闭数据生产者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaDataProducerClose(message) { defaultMediaDataProducerClose(message, body) {
const { const {
producerId producerId
} = message.body; } = body;
const producer = this.getProducer(producerId); const producer = this.getProducer(producerId);
if(!producer) { if(!producer) {
console.debug("关闭数据生产者(数据生产者无效)", producerId); console.debug("关闭数据生产者(数据生产者无效)", producerId);
@@ -2369,11 +2397,12 @@ class Taoyao extends RemoteClient {
* 关闭生产者信令 * 关闭生产者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultMediaProducerClose(message) { async defaultMediaProducerClose(message, body) {
const { const {
producerId producerId
} = message.body; } = body;
const producer = this.getProducer(producerId); const producer = this.getProducer(producerId);
if(!producer) { if(!producer) {
console.debug("关闭生产者(生产者无效)", producerId); console.debug("关闭生产者(生产者无效)", producerId);
@@ -2408,12 +2437,13 @@ class Taoyao extends RemoteClient {
/** /**
* 暂停生产者信令 * 暂停生产者信令
* *
* @param {*} message 消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultMediaProducerPause(message) { defaultMediaProducerPause(message, body) {
const { const {
producerId producerId
} = message.body; } = body;
const producer = this.getProducer(producerId); const producer = this.getProducer(producerId);
if (!producer) { if (!producer) {
console.debug("暂停生产者(生产者无效)", producerId); console.debug("暂停生产者(生产者无效)", producerId);
@@ -2453,11 +2483,12 @@ class Taoyao extends RemoteClient {
* 恢复生产者信令 * 恢复生产者信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultMediaProducerResume(message) { defaultMediaProducerResume(message, body) {
const { const {
producerId producerId
} = message.body; } = body;
const producer = this.getProducer(producerId); const producer = this.getProducer(producerId);
if (!producer) { if (!producer) {
console.debug("恢复生产者(生产者无效)", producerId); console.debug("恢复生产者(生产者无效)", producerId);
@@ -2475,8 +2506,9 @@ class Taoyao extends RemoteClient {
* 媒体生产者评分信令 * 媒体生产者评分信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaProducerScore(message) { defaultMediaProducerScore(message, body) {
console.debug("生产者评分", message); console.debug("生产者评分", message);
} }
@@ -2509,12 +2541,13 @@ class Taoyao extends RemoteClient {
* 关闭通道信令 * 关闭通道信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaTransportClose(message) { defaultMediaTransportClose(message, body) {
const { const {
roomId, roomId,
transportId transportId
} = message.body; } = body;
if(this.recvTransport && this.recvTransport.id === transportId) { if(this.recvTransport && this.recvTransport.id === transportId) {
console.debug("关闭接收通道", transportId); console.debug("关闭接收通道", transportId);
this.recvTransport.close(); this.recvTransport.close();
@@ -2706,8 +2739,9 @@ class Taoyao extends RemoteClient {
* 视频方向变化信令 * 视频方向变化信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultMediaVideoOrientationChange(message) { defaultMediaVideoOrientationChange(message, body) {
console.debug("视频方向变化", message); console.debug("视频方向变化", message);
} }
@@ -2744,8 +2778,9 @@ class Taoyao extends RemoteClient {
* 平台异常信令 * 平台异常信令
* *
* @param {*} message 消息 * @param {*} message 消息
* @param {*} body 消息主体
*/ */
defaultPlatformError(message) { defaultPlatformError(message, body) {
const { const {
code code
} = message; } = message;
@@ -2770,8 +2805,9 @@ class Taoyao extends RemoteClient {
* 重启平台信令 * 重启平台信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultPlatformReboot(message) { defaultPlatformReboot(message, body) {
console.debug("重启平台", message); console.debug("重启平台", message);
} }
@@ -2801,8 +2837,9 @@ class Taoyao extends RemoteClient {
* 关闭平台信令 * 关闭平台信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultPlatformShutdown(message) { defaultPlatformShutdown(message, body) {
console.debug("平台关闭", message); console.debug("平台关闭", message);
} }
@@ -2822,8 +2859,9 @@ class Taoyao extends RemoteClient {
* 房间广播信令 * 房间广播信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultRoomBroadcast(message) { defaultRoomBroadcast(message, body) {
console.debug("房间广播", message); console.debug("房间广播", message);
} }
@@ -2860,11 +2898,12 @@ class Taoyao extends RemoteClient {
* 房间终端列表信令 * 房间终端列表信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultRoomClientList(message) { defaultRoomClientList(message, body) {
const { const {
clients clients
} = message.body; } = body;
clients.forEach(v => { clients.forEach(v => {
if (v.clientId === this.clientId) { if (v.clientId === this.clientId) {
// 忽略自己 // 忽略自己
@@ -2887,11 +2926,12 @@ class Taoyao extends RemoteClient {
* 关闭房间信令 * 关闭房间信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultRoomClose(message) { defaultRoomClose(message, body) {
const { const {
roomId roomId
} = message.body; } = body;
if (roomId !== this.roomId) { if (roomId !== this.roomId) {
return; return;
} }
@@ -2926,13 +2966,14 @@ class Taoyao extends RemoteClient {
* 用于房间重建 * 用于房间重建
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultRoomCreate(message) { async defaultRoomCreate(message, body) {
console.debug("创建房间", message); console.debug("创建房间", message);
const { const {
roomId, roomId,
password password
} = message.body; } = body;
if(this.roomId && roomId === this.roomId) { if(this.roomId && roomId === this.roomId) {
await this.roomLeave(); await this.roomLeave();
await this.roomEnter(roomId, password); await this.roomEnter(roomId, password);
@@ -2985,13 +3026,13 @@ class Taoyao extends RemoteClient {
* 其他终端进入房间 * 其他终端进入房间
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultRoomEnter(message) { defaultRoomEnter(message, body) {
const { const {
roomId, status,
clientId, clientId,
status } = body;
} = message.body;
if (clientId === this.clientId) { if (clientId === this.clientId) {
// 忽略自己 // 忽略自己
} else if(this.remoteClients.has(clientId)) { } else if(this.remoteClients.has(clientId)) {
@@ -3018,8 +3059,9 @@ class Taoyao extends RemoteClient {
* 踢出房间信令 * 踢出房间信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultRoomExpel(message) { async defaultRoomExpel(message, body) {
console.debug("收到提出房间信令", message); console.debug("收到提出房间信令", message);
await this.roomLeave(); await this.roomLeave();
} }
@@ -3040,13 +3082,14 @@ class Taoyao extends RemoteClient {
* 邀请终端信令 * 邀请终端信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultRoomInvite(message) { async defaultRoomInvite(message, body) {
// 默认自动进入:如果需要确认使用回调函数重写 // 默认自动进入:如果需要确认使用回调函数重写
const { const {
roomId, roomId,
password password
} = message.body; } = body;
// H5只能同时进入一个房间 // H5只能同时进入一个房间
if(this.roomId) { if(this.roomId) {
this.platformError("终端拒绝房间邀请"); this.platformError("终端拒绝房间邀请");
@@ -3071,9 +3114,12 @@ class Taoyao extends RemoteClient {
* 离开房间信令 * 离开房间信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
defaultRoomLeave(message) { defaultRoomLeave(message, body) {
const { clientId } = message.body; const {
clientId
} = body;
if(clientId === this.clientId) { if(clientId === this.clientId) {
this.closeRoomMedia(); this.closeRoomMedia();
console.debug("终端离开房间", clientId); console.debug("终端离开房间", clientId);
@@ -3155,8 +3201,9 @@ class Taoyao extends RemoteClient {
* 发起会话信令 * 发起会话信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultSessionCall(message) { async defaultSessionCall(message, body) {
await this.checkDevice(); await this.checkDevice();
const { const {
name, name,
@@ -3164,7 +3211,7 @@ class Taoyao extends RemoteClient {
video = true, video = true,
clientId, clientId,
sessionId sessionId
} = message.body; } = body;
console.debug("接收会话", clientId, sessionId, audio, video); console.debug("接收会话", clientId, sessionId, audio, video);
const session = new Session({ const session = new Session({
name, name,
@@ -3200,9 +3247,12 @@ class Taoyao extends RemoteClient {
* 关闭媒体信令 * 关闭媒体信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultSessionClose(message) { async defaultSessionClose(message, body) {
const { sessionId } = message.body; const {
sessionId
} = body;
const session = this.sessionClients.get(sessionId); const session = this.sessionClients.get(sessionId);
if(session) { if(session) {
console.debug("关闭媒体", sessionId); console.debug("关闭媒体", sessionId);
@@ -3217,9 +3267,9 @@ class Taoyao extends RemoteClient {
* 媒体交换信令 * 媒体交换信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultSessionExchange(message) { async defaultSessionExchange(message, body) {
const body = message.body;
const { const {
type, type,
candidate, candidate,
@@ -3270,12 +3320,13 @@ class Taoyao extends RemoteClient {
* 暂停媒体信令 * 暂停媒体信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultSessionPause(message) { async defaultSessionPause(message, body) {
const { const {
type, type,
sessionId sessionId
} = message.body; } = body;
const session = this.sessionClients.get(sessionId); const session = this.sessionClients.get(sessionId);
if(session) { if(session) {
console.debug("暂停媒体", type, sessionId); console.debug("暂停媒体", type, sessionId);
@@ -3309,12 +3360,13 @@ class Taoyao extends RemoteClient {
* 恢复媒体信令 * 恢复媒体信令
* *
* @param {*} message 信令消息 * @param {*} message 信令消息
* @param {*} body 消息主体
*/ */
async defaultSessionResume(message) { async defaultSessionResume(message, body) {
const { const {
type, type,
sessionId sessionId
} = message.body; } = body;
const session = this.sessionClients.get(sessionId); const session = this.sessionClients.get(sessionId);
if(session) { if(session) {
console.debug("恢复媒体", type, sessionId); console.debug("恢复媒体", type, sessionId);

View File

@@ -33,7 +33,10 @@ import lombok.extern.slf4j.Slf4j;
"consumerId": "消费者ID" "consumerId": "消费者ID"
} }
""", """,
flow = "终端->信令服务->媒体服务->信令服务->终端" flow = {
"终端->信令服务->媒体服务->信令服务->终端",
"终端-[暂停生产者]>信令服务->媒体服务-[暂停消费者]>信令服务->终端"
}
) )
public class MediaConsumerPauseProtocol extends ProtocolRoomAdapter implements ApplicationListener<MediaConsumerPauseEvent> { public class MediaConsumerPauseProtocol extends ProtocolRoomAdapter implements ApplicationListener<MediaConsumerPauseEvent> {
@@ -49,7 +52,7 @@ public class MediaConsumerPauseProtocol extends ProtocolRoomAdapter implements A
final Room room = event.getRoom(); final Room room = event.getRoom();
final Client mediaClient = event.getMediaClient(); final Client mediaClient = event.getMediaClient();
final Map<String, Object> body = Map.of( final Map<String, Object> body = Map.of(
Constant.ROOM_ID, room.getRoomId(), Constant.ROOM_ID, room.getRoomId(),
Constant.CONSUMER_ID, event.getConsumerId() Constant.CONSUMER_ID, event.getConsumerId()
); );
mediaClient.push(this.build(body)); mediaClient.push(this.build(body));