[*] 日常优化
This commit is contained in:
@@ -13,6 +13,7 @@ docker exec -it acgist/taoyao-client-web:1.0.0 /bin/bash
|
|||||||
# 媒体服务
|
# 媒体服务
|
||||||
docker pull acgist/taoyao-client-media:1.0.0
|
docker pull acgist/taoyao-client-media:1.0.0
|
||||||
docker run --name="taoyao-client-media" -d acgist/taoyao-client-media:1.0.0
|
docker run --name="taoyao-client-media" -d acgist/taoyao-client-media:1.0.0
|
||||||
|
docker run --name="taoyao-client-media" --net=host -d acgist/taoyao-client-media:1.0.0
|
||||||
docker run --name="taoyao-client-media" -it acgist/taoyao-client-media:1.0.0 /bin/bash
|
docker run --name="taoyao-client-media" -it acgist/taoyao-client-media:1.0.0 /bin/bash
|
||||||
docker exec -it acgist/taoyao-client-media:1.0.0 /bin/bash
|
docker exec -it acgist/taoyao-client-media:1.0.0 /bin/bash
|
||||||
|
|
||||||
@@ -71,3 +72,47 @@ COPY taoyao-signal-server /data/taoyao/taoyao-signal-server
|
|||||||
WORKDIR /data/taoyao/taoyao-signal-server
|
WORKDIR /data/taoyao/taoyao-signal-server
|
||||||
CMD ./deploy/bin/startup.sh
|
CMD ./deploy/bin/startup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## DockerCompose
|
||||||
|
|
||||||
|
注意需要自己配置媒体服务(修改IP地址)
|
||||||
|
|
||||||
|
```
|
||||||
|
version: "3.1"
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
taoyao-client-web:
|
||||||
|
image: acgist/taoyao-client-web:1.0.0
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
network_mode: host
|
||||||
|
container_name: taoyao-client-web
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
|
||||||
|
taoyao-client-media:
|
||||||
|
image: acgist/taoyao-client-media:1.0.0
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
network_mode: host
|
||||||
|
container_name: taoyao-client-media
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- ./taoyao-client-media/Config.js:/data/taoyao/taoyao-client-media/src/Config.js
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
|
||||||
|
taoyao-signal-server:
|
||||||
|
image: acgist/taoyao-signal-server:1.0.0
|
||||||
|
restart: always
|
||||||
|
privileged: true
|
||||||
|
network_mode: host
|
||||||
|
container_name: taoyao-signal-server
|
||||||
|
volumes:
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
environment:
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
```
|
||||||
@@ -607,7 +607,6 @@ class Taoyao extends RemoteClient {
|
|||||||
// 本地录像数据
|
// 本地录像数据
|
||||||
mediaRecorderChunks = [];
|
mediaRecorderChunks = [];
|
||||||
|
|
||||||
// TODO:默认关闭data通道
|
|
||||||
constructor({
|
constructor({
|
||||||
name,
|
name,
|
||||||
clientId,
|
clientId,
|
||||||
@@ -660,14 +659,14 @@ class Taoyao extends RemoteClient {
|
|||||||
* @returns Promise<WebSocket>
|
* @returns Promise<WebSocket>
|
||||||
*/
|
*/
|
||||||
async connectSignal(callback) {
|
async connectSignal(callback) {
|
||||||
const me = this;
|
|
||||||
this.closed = false;
|
this.closed = false;
|
||||||
me.callback = callback;
|
this.callback = callback;
|
||||||
signalChannel.taoyao = me;
|
signalChannel.taoyao = this;
|
||||||
return await signalChannel.connect(
|
return await signalChannel.connect(
|
||||||
`wss://${me.host}:${me.port}/websocket.signal`
|
`wss://${this.host}:${this.port}/websocket.signal`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步请求
|
* 异步请求
|
||||||
*
|
*
|
||||||
@@ -675,12 +674,11 @@ class Taoyao extends RemoteClient {
|
|||||||
* @param {*} callback 信令回调
|
* @param {*} callback 信令回调
|
||||||
*/
|
*/
|
||||||
push(message, callback) {
|
push(message, callback) {
|
||||||
const me = this;
|
const { header } = message;
|
||||||
const { header, body } = message;
|
|
||||||
const { id } = header;
|
const { id } = header;
|
||||||
// 请求回调
|
// 请求回调
|
||||||
if (callback) {
|
if (callback) {
|
||||||
me.callbackMapping.set(id, callback);
|
this.callbackMapping.set(id, callback);
|
||||||
}
|
}
|
||||||
// 发送消息
|
// 发送消息
|
||||||
try {
|
try {
|
||||||
@@ -689,6 +687,7 @@ class Taoyao extends RemoteClient {
|
|||||||
console.error("异步请求异常", message, error);
|
console.error("异步请求异常", message, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 同步请求
|
* 同步请求
|
||||||
*
|
*
|
||||||
@@ -697,17 +696,16 @@ class Taoyao extends RemoteClient {
|
|||||||
* @returns Promise
|
* @returns Promise
|
||||||
*/
|
*/
|
||||||
async request(message) {
|
async request(message) {
|
||||||
const me = this;
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const { header, body } = message;
|
const { header } = message;
|
||||||
const { id } = header;
|
const { id } = header;
|
||||||
// 设置超时
|
// 设置超时
|
||||||
const rejectTimeout = setTimeout(() => {
|
const rejectTimeout = setTimeout(() => {
|
||||||
me.callbackMapping.delete(id);
|
this.callbackMapping.delete(id);
|
||||||
reject("请求超时", message);
|
reject("请求超时", message);
|
||||||
}, 5000);
|
}, 5000);
|
||||||
// 请求回调
|
// 请求回调
|
||||||
me.callbackMapping.set(id, (response) => {
|
this.callbackMapping.set(id, (response) => {
|
||||||
resolve(response);
|
resolve(response);
|
||||||
clearTimeout(rejectTimeout);
|
clearTimeout(rejectTimeout);
|
||||||
// 默认不用继续处理
|
// 默认不用继续处理
|
||||||
@@ -733,35 +731,29 @@ class Taoyao extends RemoteClient {
|
|||||||
* @param {*} message 信令消息
|
* @param {*} message 信令消息
|
||||||
*/
|
*/
|
||||||
async on(message) {
|
async on(message) {
|
||||||
const me = this;
|
const { code, header } = message;
|
||||||
const { code, header, body } = message;
|
const { id } = header;
|
||||||
const { id, signal } = header;
|
|
||||||
if(code !== "0000") {
|
if(code !== "0000") {
|
||||||
console.warn("信令错误", message);
|
console.warn("信令错误", message);
|
||||||
}
|
}
|
||||||
// 请求回调
|
// 请求回调
|
||||||
if (me.callbackMapping.has(id)) {
|
if (this.callbackMapping.has(id)) {
|
||||||
try {
|
try {
|
||||||
if(
|
if(this.callbackMapping.get(id)(message)) {
|
||||||
me.callbackMapping.get(id)(message)
|
|
||||||
) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
me.callbackMapping.delete(id);
|
this.callbackMapping.delete(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 前置回调
|
// 前置回调
|
||||||
await me.preCallback(message);
|
await this.preCallback(message);
|
||||||
// 全局回调
|
// 全局回调
|
||||||
if (
|
if (this.callback && await this.callback(message)) {
|
||||||
me.callback &&
|
|
||||||
await me.callback(message)
|
|
||||||
) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 后置回调
|
// 后置回调
|
||||||
await me.postCallback(message);
|
await this.postCallback(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -770,26 +762,20 @@ class Taoyao extends RemoteClient {
|
|||||||
* @param {*} message 消息
|
* @param {*} message 消息
|
||||||
*/
|
*/
|
||||||
async preCallback(message) {
|
async preCallback(message) {
|
||||||
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, body);
|
this.defaultClientConfig(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consume":
|
case "media::consume":
|
||||||
await me.defaultMediaConsume(message, body);
|
await this.defaultMediaConsume(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::data::consume":
|
case "media::data::consume":
|
||||||
me.defaultMediaDataConsume(message, body);
|
await this.defaultMediaDataConsume(message, body);
|
||||||
break;
|
break;
|
||||||
case "platform::error":
|
case "platform::error":
|
||||||
me.defaultPlatformError(message, body);
|
this.defaultPlatformError(message, body);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -800,137 +786,131 @@ class Taoyao extends RemoteClient {
|
|||||||
* @param {*} message 信令消息
|
* @param {*} message 信令消息
|
||||||
*/
|
*/
|
||||||
async postCallback(message) {
|
async postCallback(message) {
|
||||||
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, body);
|
this.defaultClientBroadcast(message, body);
|
||||||
break;
|
break;
|
||||||
case "client::offline":
|
case "client::offline":
|
||||||
me.defaultClientOffline(message, body);
|
this.defaultClientOffline(message, body);
|
||||||
break;
|
break;
|
||||||
case "client::online":
|
case "client::online":
|
||||||
me.defaultClientOnline(message, body);
|
this.defaultClientOnline(message, body);
|
||||||
break;
|
break;
|
||||||
case "client::reboot":
|
case "client::reboot":
|
||||||
me.defaultClientReboot(message, body);
|
this.defaultClientReboot(message, body);
|
||||||
break;
|
break;
|
||||||
case "client::shutdown":
|
case "client::shutdown":
|
||||||
me.defaultClientShutdown(message, body);
|
this.defaultClientShutdown(message, body);
|
||||||
break;
|
break;
|
||||||
case "client::unicast":
|
case "client::unicast":
|
||||||
me.defaultClientUnicast(message, body);
|
this.defaultClientUnicast(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::bell":
|
case "control::bell":
|
||||||
me.defaultControlBell(message, body);
|
this.defaultControlBell(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::client::record":
|
case "control::client::record":
|
||||||
me.defaultControlClientReccord(message, body);
|
this.defaultControlClientReccord(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::config::audio":
|
case "control::config::audio":
|
||||||
me.defaultControlConfigAudio(message, body);
|
this.defaultControlConfigAudio(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::config::video":
|
case "control::config::video":
|
||||||
me.defaultControlConfigVideo(message, body);
|
this.defaultControlConfigVideo(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::photograph":
|
case "control::photograph":
|
||||||
me.defaultControlPhotograph(message, body);
|
this.defaultControlPhotograph(message, body);
|
||||||
break;
|
break;
|
||||||
case "control::wakeup":
|
case "control::wakeup":
|
||||||
me.defaultControlWakeup(message, body);
|
this.defaultControlWakeup(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::audio::volume":
|
case "media::audio::volume":
|
||||||
me.defaultMediaAudioVolume(message, body);
|
this.defaultMediaAudioVolume(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consumer::close":
|
case "media::consumer::close":
|
||||||
me.defaultMediaConsumerClose(message, body);
|
this.defaultMediaConsumerClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consumer::layers::change":
|
case "media::consumer::layers::change":
|
||||||
this.defaultMediaConsumerLayersChange(message, body);
|
this.defaultMediaConsumerLayersChange(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consumer::pause":
|
case "media::consumer::pause":
|
||||||
me.defaultMediaConsumerPause(message, body);
|
this.defaultMediaConsumerPause(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consumer::resume":
|
case "media::consumer::resume":
|
||||||
me.defaultMediaConsumerResume(message, body);
|
this.defaultMediaConsumerResume(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::consumer::score":
|
case "media::consumer::score":
|
||||||
me.defaultMediaConsumerScore(message, body);
|
this.defaultMediaConsumerScore(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::data::consumer::close":
|
case "media::data::consumer::close":
|
||||||
me.defaultMediaDataConsumerClose(message, body);
|
this.defaultMediaDataConsumerClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::data::producer::close":
|
case "media::data::producer::close":
|
||||||
me.defaultMediaDataProducerClose(message, body);
|
this.defaultMediaDataProducerClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::producer::close":
|
case "media::producer::close":
|
||||||
me.defaultMediaProducerClose(message, body);
|
this.defaultMediaProducerClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::producer::pause":
|
case "media::producer::pause":
|
||||||
me.defaultMediaProducerPause(message, body);
|
this.defaultMediaProducerPause(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::producer::resume":
|
case "media::producer::resume":
|
||||||
me.defaultMediaProducerResume(message, body);
|
this.defaultMediaProducerResume(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::producer::score":
|
case "media::producer::score":
|
||||||
me.defaultMediaProducerScore(message, body);
|
this.defaultMediaProducerScore(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::transport::close":
|
case "media::transport::close":
|
||||||
me.defaultMediaTransportClose(message, body);
|
this.defaultMediaTransportClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "media::video::orientation::change":
|
case "media::video::orientation::change":
|
||||||
me.defaultMediaVideoOrientationChange(message, body);
|
this.defaultMediaVideoOrientationChange(message, body);
|
||||||
break;
|
break;
|
||||||
case "platform::reboot":
|
case "platform::reboot":
|
||||||
me.defaultPlatformReboot(message, body);
|
this.defaultPlatformReboot(message, body);
|
||||||
break;
|
break;
|
||||||
case "platform::shutdown":
|
case "platform::shutdown":
|
||||||
me.defaultPlatformShutdown(message, body);
|
this.defaultPlatformShutdown(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::broadcast":
|
case "room::broadcast":
|
||||||
me.defaultRoomBroadcast(message, body);
|
this.defaultRoomBroadcast(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::client::list":
|
case "room::client::list":
|
||||||
me.defaultRoomClientList(message, body);
|
this.defaultRoomClientList(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::close":
|
case "room::close":
|
||||||
me.defaultRoomClose(message, body);
|
this.defaultRoomClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::create":
|
case "room::create":
|
||||||
this.defaultRoomCreate(message, body);
|
this.defaultRoomCreate(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::enter":
|
case "room::enter":
|
||||||
me.defaultRoomEnter(message, body);
|
this.defaultRoomEnter(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::expel":
|
case "room::expel":
|
||||||
me.defaultRoomExpel(message, body);
|
this.defaultRoomExpel(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::invite":
|
case "room::invite":
|
||||||
me.defaultRoomInvite(message, body);
|
this.defaultRoomInvite(message, body);
|
||||||
break;
|
break;
|
||||||
case "room::leave":
|
case "room::leave":
|
||||||
me.defaultRoomLeave(message, body);
|
this.defaultRoomLeave(message, body);
|
||||||
break;
|
break;
|
||||||
case "session::call":
|
case "session::call":
|
||||||
me.defaultSessionCall(message, body);
|
this.defaultSessionCall(message, body);
|
||||||
break;
|
break;
|
||||||
case "session::close":
|
case "session::close":
|
||||||
me.defaultSessionClose(message, body);
|
this.defaultSessionClose(message, body);
|
||||||
break;
|
break;
|
||||||
case "session::exchange":
|
case "session::exchange":
|
||||||
me.defaultSessionExchange(message, body);
|
this.defaultSessionExchange(message, body);
|
||||||
break;
|
break;
|
||||||
case "session::pause":
|
case "session::pause":
|
||||||
me.defaultSessionPause(message, body);
|
this.defaultSessionPause(message, body);
|
||||||
break;
|
break;
|
||||||
case "session::resume":
|
case "session::resume":
|
||||||
me.defaultSessionResume(message, body);
|
this.defaultSessionResume(message, body);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -941,13 +921,12 @@ class Taoyao extends RemoteClient {
|
|||||||
* @returns 生产者
|
* @returns 生产者
|
||||||
*/
|
*/
|
||||||
getProducer(producerId) {
|
getProducer(producerId) {
|
||||||
const me = this;
|
if(this.audioProducer?.id === producerId) {
|
||||||
if(me.audioProducer?.id === producerId) {
|
return this.audioProducer;
|
||||||
return me.audioProducer;
|
} else if(this.videoProducer?.id === producerId) {
|
||||||
} else if(me.videoProducer?.id === producerId) {
|
return this.videoProducer;
|
||||||
return me.videoProducer;
|
} else if(this.dataProducer?.id === producerId) {
|
||||||
} else if(me.dataProducer?.id === producerId) {
|
return this.dataProducer;
|
||||||
return me.dataProducer;
|
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user