From 04190e62abf6e0301945a068bce3d9a2387e2c48 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Sun, 24 Dec 2023 11:41:32 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E6=97=A5=E5=B8=B8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Docker.md | 45 ++++++ taoyao-client-web/src/components/Taoyao.js | 167 +++++++++------------ 2 files changed, 118 insertions(+), 94 deletions(-) diff --git a/docs/Docker.md b/docs/Docker.md index 5881278..4365513 100644 --- a/docs/Docker.md +++ b/docs/Docker.md @@ -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 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 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 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 +``` \ No newline at end of file diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js index d81a09e..0384678 100644 --- a/taoyao-client-web/src/components/Taoyao.js +++ b/taoyao-client-web/src/components/Taoyao.js @@ -607,7 +607,6 @@ class Taoyao extends RemoteClient { // 本地录像数据 mediaRecorderChunks = []; - // TODO:默认关闭data通道 constructor({ name, clientId, @@ -660,14 +659,14 @@ class Taoyao extends RemoteClient { * @returns Promise */ async connectSignal(callback) { - const me = this; this.closed = false; - me.callback = callback; - signalChannel.taoyao = me; + this.callback = callback; + signalChannel.taoyao = this; 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 信令回调 */ push(message, callback) { - const me = this; - const { header, body } = message; - const { id } = header; + const { header } = message; + const { id } = header; // 请求回调 if (callback) { - me.callbackMapping.set(id, callback); + this.callbackMapping.set(id, callback); } // 发送消息 try { @@ -689,6 +687,7 @@ class Taoyao extends RemoteClient { console.error("异步请求异常", message, error); } } + /** * 同步请求 * @@ -697,17 +696,16 @@ class Taoyao extends RemoteClient { * @returns Promise */ async request(message) { - const me = this; return new Promise((resolve, reject) => { - const { header, body } = message; - const { id } = header; + const { header } = message; + const { id } = header; // 设置超时 const rejectTimeout = setTimeout(() => { - me.callbackMapping.delete(id); + this.callbackMapping.delete(id); reject("请求超时", message); }, 5000); // 请求回调 - me.callbackMapping.set(id, (response) => { + this.callbackMapping.set(id, (response) => { resolve(response); clearTimeout(rejectTimeout); // 默认不用继续处理 @@ -733,35 +731,29 @@ class Taoyao extends RemoteClient { * @param {*} message 信令消息 */ async on(message) { - const me = this; - const { code, header, body } = message; - const { id, signal } = header; + const { code, header } = message; + const { id } = header; if(code !== "0000") { console.warn("信令错误", message); } // 请求回调 - if (me.callbackMapping.has(id)) { + if (this.callbackMapping.has(id)) { try { - if( - me.callbackMapping.get(id)(message) - ) { + if(this.callbackMapping.get(id)(message)) { return; } } finally { - me.callbackMapping.delete(id); + this.callbackMapping.delete(id); } } // 前置回调 - await me.preCallback(message); + await this.preCallback(message); // 全局回调 - if ( - me.callback && - await me.callback(message) - ) { + if (this.callback && await this.callback(message)) { return; } // 后置回调 - await me.postCallback(message); + await this.postCallback(message); } /** @@ -770,26 +762,20 @@ class Taoyao extends RemoteClient { * @param {*} message 消息 */ async preCallback(message) { - const me = this; - const { - header, - body - } = message; - const { - signal - } = header; + const { header, body } = message; + const { signal } = header; switch (signal) { case "client::config": - me.defaultClientConfig(message, body); + this.defaultClientConfig(message, body); break; case "media::consume": - await me.defaultMediaConsume(message, body); + await this.defaultMediaConsume(message, body); break; case "media::data::consume": - me.defaultMediaDataConsume(message, body); + await this.defaultMediaDataConsume(message, body); break; case "platform::error": - me.defaultPlatformError(message, body); + this.defaultPlatformError(message, body); break; } } @@ -800,137 +786,131 @@ class Taoyao extends RemoteClient { * @param {*} message 信令消息 */ async postCallback(message) { - const me = this; - const { - header, - body - } = message; - const { - signal - } = header; + const { header, body } = message; + const { signal } = header; switch (signal) { case "client::broadcast": - me.defaultClientBroadcast(message, body); + this.defaultClientBroadcast(message, body); break; case "client::offline": - me.defaultClientOffline(message, body); + this.defaultClientOffline(message, body); break; case "client::online": - me.defaultClientOnline(message, body); + this.defaultClientOnline(message, body); break; case "client::reboot": - me.defaultClientReboot(message, body); + this.defaultClientReboot(message, body); break; case "client::shutdown": - me.defaultClientShutdown(message, body); + this.defaultClientShutdown(message, body); break; case "client::unicast": - me.defaultClientUnicast(message, body); + this.defaultClientUnicast(message, body); break; case "control::bell": - me.defaultControlBell(message, body); + this.defaultControlBell(message, body); break; case "control::client::record": - me.defaultControlClientReccord(message, body); + this.defaultControlClientReccord(message, body); break; case "control::config::audio": - me.defaultControlConfigAudio(message, body); + this.defaultControlConfigAudio(message, body); break; case "control::config::video": - me.defaultControlConfigVideo(message, body); + this.defaultControlConfigVideo(message, body); break; case "control::photograph": - me.defaultControlPhotograph(message, body); + this.defaultControlPhotograph(message, body); break; case "control::wakeup": - me.defaultControlWakeup(message, body); + this.defaultControlWakeup(message, body); break; case "media::audio::volume": - me.defaultMediaAudioVolume(message, body); + this.defaultMediaAudioVolume(message, body); break; case "media::consumer::close": - me.defaultMediaConsumerClose(message, body); + this.defaultMediaConsumerClose(message, body); break; case "media::consumer::layers::change": this.defaultMediaConsumerLayersChange(message, body); break; case "media::consumer::pause": - me.defaultMediaConsumerPause(message, body); + this.defaultMediaConsumerPause(message, body); break; case "media::consumer::resume": - me.defaultMediaConsumerResume(message, body); + this.defaultMediaConsumerResume(message, body); break; case "media::consumer::score": - me.defaultMediaConsumerScore(message, body); + this.defaultMediaConsumerScore(message, body); break; case "media::data::consumer::close": - me.defaultMediaDataConsumerClose(message, body); + this.defaultMediaDataConsumerClose(message, body); break; case "media::data::producer::close": - me.defaultMediaDataProducerClose(message, body); + this.defaultMediaDataProducerClose(message, body); break; case "media::producer::close": - me.defaultMediaProducerClose(message, body); + this.defaultMediaProducerClose(message, body); break; case "media::producer::pause": - me.defaultMediaProducerPause(message, body); + this.defaultMediaProducerPause(message, body); break; case "media::producer::resume": - me.defaultMediaProducerResume(message, body); + this.defaultMediaProducerResume(message, body); break; case "media::producer::score": - me.defaultMediaProducerScore(message, body); + this.defaultMediaProducerScore(message, body); break; case "media::transport::close": - me.defaultMediaTransportClose(message, body); + this.defaultMediaTransportClose(message, body); break; case "media::video::orientation::change": - me.defaultMediaVideoOrientationChange(message, body); + this.defaultMediaVideoOrientationChange(message, body); break; case "platform::reboot": - me.defaultPlatformReboot(message, body); + this.defaultPlatformReboot(message, body); break; case "platform::shutdown": - me.defaultPlatformShutdown(message, body); + this.defaultPlatformShutdown(message, body); break; case "room::broadcast": - me.defaultRoomBroadcast(message, body); + this.defaultRoomBroadcast(message, body); break; case "room::client::list": - me.defaultRoomClientList(message, body); + this.defaultRoomClientList(message, body); break; case "room::close": - me.defaultRoomClose(message, body); + this.defaultRoomClose(message, body); break; case "room::create": this.defaultRoomCreate(message, body); break; case "room::enter": - me.defaultRoomEnter(message, body); + this.defaultRoomEnter(message, body); break; case "room::expel": - me.defaultRoomExpel(message, body); + this.defaultRoomExpel(message, body); break; case "room::invite": - me.defaultRoomInvite(message, body); + this.defaultRoomInvite(message, body); break; case "room::leave": - me.defaultRoomLeave(message, body); + this.defaultRoomLeave(message, body); break; case "session::call": - me.defaultSessionCall(message, body); + this.defaultSessionCall(message, body); break; case "session::close": - me.defaultSessionClose(message, body); + this.defaultSessionClose(message, body); break; case "session::exchange": - me.defaultSessionExchange(message, body); + this.defaultSessionExchange(message, body); break; case "session::pause": - me.defaultSessionPause(message, body); + this.defaultSessionPause(message, body); break; case "session::resume": - me.defaultSessionResume(message, body); + this.defaultSessionResume(message, body); break; } } @@ -941,13 +921,12 @@ class Taoyao extends RemoteClient { * @returns 生产者 */ getProducer(producerId) { - const me = this; - if(me.audioProducer?.id === producerId) { - return me.audioProducer; - } else if(me.videoProducer?.id === producerId) { - return me.videoProducer; - } else if(me.dataProducer?.id === producerId) { - return me.dataProducer; + if(this.audioProducer?.id === producerId) { + return this.audioProducer; + } else if(this.videoProducer?.id === producerId) { + return this.videoProducer; + } else if(this.dataProducer?.id === producerId) { + return this.dataProducer; } else { return null; }