From 7889d4f7081f691b037ae642d94110028e5df28b Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Mon, 6 Feb 2023 20:57:12 +0800 Subject: [PATCH] =?UTF-8?q?[*]=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 + taoyao-client-web/.gitignore | 2 - taoyao-client-web/.vscode/extensions.json | 3 - taoyao-client-web/index.html | 8 +- taoyao-client-web/public/favicon.ico | Bin 4286 -> 16958 bytes .../{src/static/fonts => public}/taoyao.svg | 0 .../{src/static/fonts => public}/taoyao.ttf | Bin .../{src/static/fonts => public}/taoyao.woff | Bin taoyao-client-web/src/App.vue | 42 +- taoyao-client-web/src/assets/base.css | 13 +- taoyao-client-web/src/assets/font.taoyao.css | 1492 +++++++++++++++++ taoyao-client-web/src/assets/logo.svg | 1 - taoyao-client-web/src/assets/main.css | 4 +- taoyao-client-web/src/components/Config.js | 0 .../src/components/HelloWorld.vue | 43 - .../src/components/LocalClient.vue | 7 + .../src/components/RemoteClient.vue | 7 + taoyao-client-web/src/components/Taoyao.js | 0 .../src/components/TheWelcome.vue | 86 - .../src/components/WelcomeItem.vue | 86 - .../src/components/icons/IconCommunity.vue | 7 - .../components/icons/IconDocumentation.vue | 7 - .../src/components/icons/IconEcosystem.vue | 7 - .../src/components/icons/IconSupport.vue | 7 - .../src/components/icons/IconTooling.vue | 19 - taoyao-client-web/vite.config.js | 4 +- taoyao-media-server/src/Config.js | 56 +- taoyao-media-server/src/Server.js | 4 +- taoyao-signal-server/README.md | 16 +- taoyao-signal-server/pom.xml | 3 +- .../config/SpringDocAutoConfiguration.java | 8 +- .../taoyao/boot/property/MediaProperties.java | 5 + .../boot/property/SecurityProperties.java | 7 - .../boot/property/WebrtcProperties.java | 4 +- .../interceptor/SecurityInterceptor.java | 26 +- .../src/main/resources/application-dev.yml | 4 + .../main/resources/application-release.yml | 3 - .../src/main/resources/application.yml | 44 +- .../src/main/resources/static/favicon.ico | Bin 0 -> 16958 bytes taoyao-signal-server/taoyao-signal/README.md | 28 +- .../media/meeting/MeetingListenerAdapter.java | 20 - .../taoyao/media/meeting/MeetingManager.java | 77 - .../listener/MeetingCreateListener.java | 27 - .../listener/MeetingEnterListener.java | 41 - .../taoyao/mediasoup/MediasoupClient.java | 48 +- .../mediasoup/MediasoupClientManager.java | 44 + .../com/acgist/taoyao/mediasoup/Router.java | 33 + .../com/acgist/taoyao/mediasoup/Stream.java | 52 + .../acgist/taoyao/mediasoup/Transport.java | 34 + .../taoyao/mediasoup/client/ClientStream.java | 10 - .../ApplyNetworkThrottleProtocol.java | 5 + .../{client => }/AuthorizeProtocol.java | 21 +- .../protocol/ChangeDisplayNameProtocol.java | 5 + .../protocol/CloseProducerProtocol.java | 5 + .../ConnectWebRtcTransportProtocol.java | 5 + .../CreateWebRtcTransportProtocol.java | 5 + .../protocol/GetConsumerStatsProtocol.java | 5 + .../GetDataConsumerStatsProtocol.java | 5 + .../GetDataProducerStatsProtocol.java | 5 + .../protocol/GetProducerStatsProtocol.java | 5 + .../protocol/GetTransportStatsProtocol.java | 5 + .../mediasoup/protocol/NewPeerProtocol.java | 5 + .../protocol/PauseConsumerProtocol.java | 5 + .../protocol/PauseProducerProtocol.java | 5 + .../protocol/ProduceDataProtocol.java | 5 + .../mediasoup/protocol/ProduceProtocol.java | 5 + .../protocol/ProducerScoreProtocol.java | 5 + .../RequestConsumerKeyFrameProtocol.java | 5 + .../ResetNetworkThrottleProtocol.java | 5 + .../protocol/RestartIceProtocol.java | 5 + .../protocol/ResumeConsumerProtocol.java | 5 + .../protocol/ResumeProducerProtocol.java | 5 + .../SetConsumerPreferredLayersProtocol.java | 2 +- .../protocol/SetConsumerPriorityProtocol.java | 5 + .../VideoorientationchangeProtocol.java | 5 + .../media/ApplyNetworkThrottleProtocol.java | 5 - .../media/ChangeDisplayNameProtocol.java | 5 - .../protocol/media/CloseProducerProtocol.java | 5 - .../media/ConnectWebRtcTransportProtocol.java | 5 - .../media/CreateWebRtcTransportProtocol.java | 5 - .../media/GetConsumerStatsProtocol.java | 5 - .../media/GetDataConsumerStatsProtocol.java | 5 - .../media/GetDataProducerStatsProtocol.java | 5 - .../media/GetProducerStatsProtocol.java | 5 - .../media/GetTransportStatsProtocol.java | 5 - .../protocol/media/NewPeerProtocol.java | 5 - .../protocol/media/PauseConsumerProtocol.java | 5 - .../protocol/media/PauseProducerProtocol.java | 5 - .../protocol/media/ProduceDataProtocol.java | 5 - .../protocol/media/ProduceProtocol.java | 5 - .../protocol/media/ProducerScoreProtocol.java | 5 - .../RequestConsumerKeyFrameProtocol.java | 5 - .../media/ResetNetworkThrottleProtocol.java | 5 - .../protocol/media/RestartIceProtocol.java | 5 - .../media/ResumeConsumerProtocol.java | 5 - .../media/ResumeProducerProtocol.java | 5 - .../media/SetConsumerPriorityProtocol.java | 5 - .../media/VideoorientationchangeProtocol.java | 5 - .../taoyao/mediasoup/router/Router.java | 19 - .../taoyao/mediasoup/transport/Transport.java | 28 - .../controller/RoomController.java} | 30 +- .../RoomCreateEvent.java} | 8 +- .../RoomEnterEvent.java} | 8 +- .../signal/listener/RoomListenerAdapter.java | 20 + .../listener/client/ClientCloseListener.java | 2 +- .../client/ClientRegisterListener.java | 2 +- .../listener/media}/MediaAnswerListener.java | 2 +- .../media}/MediaCandidateListener.java | 2 +- .../listener/media}/MediaOfferListener.java | 2 +- .../listener/media}/MediaPublishListener.java | 2 +- .../media}/MediaSubscribeListener.java | 2 +- .../listener/room/RoomCreateListener.java | 27 + .../listener/room/RoomEnterListener.java | 41 + .../taoyao/signal/protocol/Protocol.java | 2 +- .../signal/protocol/ProtocolJavaAdapter.java | 52 - .../protocol/ProtocolMediasoupAdapter.java | 3 +- .../client/ClientRegisterProtocol.java | 11 +- .../meeting/MeetingClientListProtocol.java | 5 - .../meeting/MeetingCloseProtocol.java | 5 - .../meeting/MeetingExpelProtocol.java | 5 - .../meeting/MeetingInviteProtocol.java | 5 - .../meeting/MeetingLeaveProtocol.java | 5 - .../protocol/meeting/MeetingListProtocol.java | 5 - .../meeting/MeetingStatusProtocol.java | 5 - .../protocol/room/RoomClientListProtocol.java | 5 + .../protocol/room/RoomCloseProtocol.java | 5 + .../RoomCreateProtocol.java} | 14 +- .../RoomEnterProtocol.java} | 14 +- .../protocol/room/RoomExpelProtocol.java | 5 + .../protocol/room/RoomInviteProtocol.java | 5 + .../protocol/room/RoomLeaveProtocol.java | 5 + .../protocol/room/RoomListProtocol.java | 5 + .../protocol/room/RoomStatusProtocol.java | 5 + .../Meeting.java => signal/room/Room.java} | 28 +- .../taoyao/signal/room/RoomManager.java | 77 + .../signal/service/SecurityService.java | 10 + .../service/impl/SecurityServiceImpl.java | 24 +- 137 files changed, 2255 insertions(+), 940 deletions(-) delete mode 100644 taoyao-client-web/.vscode/extensions.json rename taoyao-client-web/{src/static/fonts => public}/taoyao.svg (100%) rename taoyao-client-web/{src/static/fonts => public}/taoyao.ttf (100%) rename taoyao-client-web/{src/static/fonts => public}/taoyao.woff (100%) create mode 100644 taoyao-client-web/src/assets/font.taoyao.css delete mode 100644 taoyao-client-web/src/assets/logo.svg create mode 100644 taoyao-client-web/src/components/Config.js delete mode 100644 taoyao-client-web/src/components/HelloWorld.vue create mode 100644 taoyao-client-web/src/components/LocalClient.vue create mode 100644 taoyao-client-web/src/components/RemoteClient.vue create mode 100644 taoyao-client-web/src/components/Taoyao.js delete mode 100644 taoyao-client-web/src/components/TheWelcome.vue delete mode 100644 taoyao-client-web/src/components/WelcomeItem.vue delete mode 100644 taoyao-client-web/src/components/icons/IconCommunity.vue delete mode 100644 taoyao-client-web/src/components/icons/IconDocumentation.vue delete mode 100644 taoyao-client-web/src/components/icons/IconEcosystem.vue delete mode 100644 taoyao-client-web/src/components/icons/IconSupport.vue delete mode 100644 taoyao-client-web/src/components/icons/IconTooling.vue create mode 100644 taoyao-signal-server/taoyao-server/src/main/resources/static/favicon.ico delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingListenerAdapter.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingManager.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingCreateListener.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingEnterListener.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClientManager.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Router.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Stream.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Transport.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/client/ClientStream.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ApplyNetworkThrottleProtocol.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/{client => }/AuthorizeProtocol.java (64%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ChangeDisplayNameProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CloseProducerProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ConnectWebRtcTransportProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CreateWebRtcTransportProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetConsumerStatsProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataConsumerStatsProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataProducerStatsProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetProducerStatsProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetTransportStatsProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/NewPeerProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseConsumerProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseProducerProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceDataProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProducerScoreProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RequestConsumerKeyFrameProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResetNetworkThrottleProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RestartIceProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeConsumerProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeProducerProtocol.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/{media => }/SetConsumerPreferredLayersProtocol.java (50%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPriorityProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/VideoorientationchangeProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ApplyNetworkThrottleProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ChangeDisplayNameProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CloseProducerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ConnectWebRtcTransportProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CreateWebRtcTransportProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetConsumerStatsProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataConsumerStatsProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataProducerStatsProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetProducerStatsProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetTransportStatsProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/NewPeerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseConsumerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseProducerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceDataProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProducerScoreProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RequestConsumerKeyFrameProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResetNetworkThrottleProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RestartIceProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeConsumerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeProducerProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPriorityProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/VideoorientationchangeProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/router/Router.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/transport/Transport.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/meeting/controller/MeetingController.java => signal/controller/RoomController.java} (57%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/{meeting/MeetingEnterEvent.java => room/RoomCreateEvent.java} (61%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/{meeting/MeetingCreateEvent.java => room/RoomEnterEvent.java} (61%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/RoomListenerAdapter.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/listener => signal/listener/media}/MediaAnswerListener.java (94%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/listener => signal/listener/media}/MediaCandidateListener.java (94%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/listener => signal/listener/media}/MediaOfferListener.java (94%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/listener => signal/listener/media}/MediaPublishListener.java (94%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/listener => signal/listener/media}/MediaSubscribeListener.java (94%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomCreateListener.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolJavaAdapter.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{mediasoup => signal}/protocol/ProtocolMediasoupAdapter.java (89%) delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingClientListProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCloseProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingExpelProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingInviteProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingLeaveProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingListProtocol.java delete mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingStatusProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCloseProtocol.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/{meeting/MeetingCreateProtocol.java => room/RoomCreateProtocol.java} (55%) rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/{meeting/MeetingEnterProtocol.java => room/RoomEnterProtocol.java} (55%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomExpelProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomInviteProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomLeaveProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java rename taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/{media/meeting/Meeting.java => signal/room/Room.java} (58%) create mode 100644 taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java diff --git a/README.md b/README.md index 3350435..b28ec56 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ |taoyao-media-server|媒体服务|Mediasoup媒体服务| |taoyao-signal-server|信令服务|信令业务逻辑| +> 注意:只有Web实现完成信令控制,桌面还有安卓仅仅实现媒体收发。 + ## 部署 [部署文档](./docs/Deploy.md) @@ -50,3 +52,4 @@ * 信令服务集群 * 媒体交互式启动 * 一个信令服务多个媒体服务 +* 会议调整为房间 diff --git a/taoyao-client-web/.gitignore b/taoyao-client-web/.gitignore index 3656759..1b2055a 100644 --- a/taoyao-client-web/.gitignore +++ b/taoyao-client-web/.gitignore @@ -2,6 +2,4 @@ logs dist -.vscode/* -!.vscode/extensions.json node_modules diff --git a/taoyao-client-web/.vscode/extensions.json b/taoyao-client-web/.vscode/extensions.json deleted file mode 100644 index c0a6e5a..0000000 --- a/taoyao-client-web/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] -} diff --git a/taoyao-client-web/index.html b/taoyao-client-web/index.html index 99f583a..cfbe37c 100644 --- a/taoyao-client-web/index.html +++ b/taoyao-client-web/index.html @@ -1,10 +1,10 @@ - - - - Vite App + + + + 桃夭终端
diff --git a/taoyao-client-web/public/favicon.ico b/taoyao-client-web/public/favicon.ico index df36fcfb72584e00488330b560ebcf34a41c64c2..e7cf988d07ffe5c6b007459e6794f0d1f4e06368 100644 GIT binary patch literal 16958 zcmeI4d+c3B5yvkAB9LeV1O-tL&>9hAj4^?jR1h&V5{wWrm>@oRDlrNaS_&dkT0sP* zvCs#|qx@PPmPcuM{CLQ#Ahy&}3YDf%ftEL=Ev1xkK0Uw5nY(w-IeYFszy9-MnsfKu zduC_nyJu&2W_EvVwKmg#!-u!@bGO#8{adXaTdmeGz4WKnnR@a2MjD&g6`&wE~m9Pz$w+;0l}@4PGWq_%nOe38rMicEN@{kl|tn>J5m z;fo^cly|UcuznV5!NSiw z{^dVJwmUNoYf7Jd_zaO>Trct;9UDzi)A;B8PvkpOGn-1m)D6#OI)1)&naG37dhdm% z@UK{vy_*l{8d`>lG5z%kBFEhzGPYmjoV#-V(X&Oy-7Rv$jUvPUmS!tQ^@%Khz59M> z0{^YLhU|P!jw8gsI`VASzuU=f-9`nt+%2$WF#lKeH zTTmJFYDr8tJq@L_Z%nk$aCdw#h!MH-(;~C z?tMX|4|M)a83%RnGxiR=i$)f%A~dJN3dAs^)___(#v_Y~yh4 zkFxo#syCXzPaEL;*>#=zov3qS8KvT%^His7*1TS@qgPY-k;Q!bg@`Sbt&J)8UtTS; zOTqen&oi{#JvE7c*=r(Op4R!EwpagP`5SQ^Q}DB{ny*1g8|LR7s&>~4HHrUt^&3sk z4+i~k)U|OftMEUuBFAd7$IQume7@t0!_zG_g@5H+B3lh${>nun=ii(6h3Wm!vQ90l z@Q3sLXU-F0{h#}6F8|1BopMuuX$t>YcjWq9Gf!l_`Ujzpbdau7A(i1@`l`qlBXha* z!STNdTde>F2imiD~~{O4)RXnIb3IByq!C5#uyA9yOlzd_g2j|VZ=q`AIkc8{&m zHh$T zw9Wf@vmoXwo=?=t?~bu85JiF?6MJ{cX!slE7Sr(X68 zcI)%b#ObDE4F3x%%dk^^`OhY)xb*fi<7mx0-?6=qjLGWlqj|4X>K4D{AQ+oqsG<`BA08hGis9$|`Mw%8JL9eT{Pj(F zy_ru`ac9rF!TKm#+&l_(;4l3=likgd;ITIx@~d0 zUUl%ZSD8xmXVW-~|I#q9rX z^^Z*_$|?+*r1npXjftP1d8PfC|CWk>)w(>!-D_NX9O~s2-TT}Sn9QbQ_*brK$Im`i zUGhG}NxCi;Q7V2P=8~JKMXY^mAtsem~x*!#+n{A|Jnp+A8&VZ>!aYL#o10d`(UZ8D%kUDA#{y@16Q~ zaTdp@2>$~0F^!*+yh%)dlT%dU)0vzL|Jlh^g`c?F>KBcnPO14XjB{_x$nxt<5q{p? zC;yPQO})B)09p`xn(b1W-I<0}`1f-$F8+003fFzc5V>KaBK$n(Jc{)_Nd6~MzJG432yg!?G;XI*+l*A9z~KYxDvxrj3S z2V9!rC&ncgUza$8VYn$-#}*H)dnT(4KRicX(=G#>NZD66`BwUKGCnpg!q53f;yd(a z52h|*cQ$WYA8;-$q$>PNUe^6S_2EngCFc?A(sMeNOb)(?Q4xOft=1+yb%}E*R-cl- zjLE6OPrKwxy)0r7pF>X7?dNWP{;q-8EruW8%;KC8Q&Oepe4Ile$LDnp_dSd|1wUsy z$ZL9eyQ&?OLow`y^=Q6PI5I=K^wZZ(IO2h==UNv&6e5N}1(dFpATtCwjABCKGDjhhmt}!3_H3~l+ z{{*>vjZgPAUR@*d%>kLF6D8*piNngME`G)sv4C%f`%j&lJ}1szoY(hp>30Wg19`E% z)))@XG}!)|*NOOzGn!RY7eDeCYq35c*KxA0733H<FToNJX z6O-|G3n$IYeSG7?M?89Zw&z+ju8f!G_)2wibH0a~!f!I4)_CEE)AF-urfZWW>n8Ir zF;cJ8G=9^E*cp3dE^G=r=aEjGRi00`_EXEj!f)-9gJ8dwd6G3b%te*;4QDV8nw0&G z5a*HXT${;mq8x1ep^n-e8)FgnSlDM`AIe|k_SrkYpR7BVhi#>N-_-b1blQ|W9zXed f;*p_r@i*VZwalrML-E>}m-7D^!29<@t_S`Pa1+=1 literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S diff --git a/taoyao-client-web/src/static/fonts/taoyao.svg b/taoyao-client-web/public/taoyao.svg similarity index 100% rename from taoyao-client-web/src/static/fonts/taoyao.svg rename to taoyao-client-web/public/taoyao.svg diff --git a/taoyao-client-web/src/static/fonts/taoyao.ttf b/taoyao-client-web/public/taoyao.ttf similarity index 100% rename from taoyao-client-web/src/static/fonts/taoyao.ttf rename to taoyao-client-web/public/taoyao.ttf diff --git a/taoyao-client-web/src/static/fonts/taoyao.woff b/taoyao-client-web/public/taoyao.woff similarity index 100% rename from taoyao-client-web/src/static/fonts/taoyao.woff rename to taoyao-client-web/public/taoyao.woff diff --git a/taoyao-client-web/src/App.vue b/taoyao-client-web/src/App.vue index 633a5df..7bf5905 100644 --- a/taoyao-client-web/src/App.vue +++ b/taoyao-client-web/src/App.vue @@ -1,47 +1,11 @@ diff --git a/taoyao-client-web/src/assets/base.css b/taoyao-client-web/src/assets/base.css index 71dc55a..2fd3009 100644 --- a/taoyao-client-web/src/assets/base.css +++ b/taoyao-client-web/src/assets/base.css @@ -3,36 +3,28 @@ --vt-c-white: #ffffff; --vt-c-white-soft: #f8f8f8; --vt-c-white-mute: #f2f2f2; - --vt-c-black: #181818; --vt-c-black-soft: #222222; --vt-c-black-mute: #282828; - --vt-c-indigo: #2c3e50; - --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); - --vt-c-text-light-1: var(--vt-c-indigo); --vt-c-text-light-2: rgba(60, 60, 60, 0.66); --vt-c-text-dark-1: var(--vt-c-white); --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); } -/* semantic color variables for this project */ :root { --color-background: var(--vt-c-white); --color-background-soft: var(--vt-c-white-soft); --color-background-mute: var(--vt-c-white-mute); - --color-border: var(--vt-c-divider-light-2); --color-border-hover: var(--vt-c-divider-light-1); - --color-heading: var(--vt-c-text-light-1); --color-text: var(--vt-c-text-light-1); - --section-gap: 160px; } @@ -41,10 +33,8 @@ --color-background: var(--vt-c-black); --color-background-soft: var(--vt-c-black-soft); --color-background-mute: var(--vt-c-black-mute); - --color-border: var(--vt-c-divider-dark-2); --color-border-hover: var(--vt-c-divider-dark-1); - --color-heading: var(--vt-c-text-dark-1); --color-text: var(--vt-c-text-dark-2); } @@ -65,8 +55,7 @@ body { background: var(--color-background); transition: color 0.5s, background-color 0.5s; line-height: 1.6; - font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 15px; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; diff --git a/taoyao-client-web/src/assets/font.taoyao.css b/taoyao-client-web/src/assets/font.taoyao.css new file mode 100644 index 0000000..4b25797 --- /dev/null +++ b/taoyao-client-web/src/assets/font.taoyao.css @@ -0,0 +1,1492 @@ +@font-face { + font-family: taoyao; + src: url(./taoyao.ttf?oc7k8r) format("truetype"), url(./taoyao.woff?oc7k8r) format("woff"), url(./taoyao.svg?oc7k8r#taoyao) format("svg"); + font-weight: 400; + font-style: normal; + font-display: block; +} +[class*=" icon-"], +[class^="icon-"] { + font-family: taoyao !important; + speak: never; + font-style: normal; + font-weight: 400; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.icon-home:before { + content: "\e900"; +} +.icon-home2:before { + content: "\e901"; +} +.icon-home3:before { + content: "\e902"; +} +.icon-office:before { + content: "\e903"; +} +.icon-newspaper:before { + content: "\e904"; +} +.icon-pencil:before { + content: "\e905"; +} +.icon-pencil2:before { + content: "\e906"; +} +.icon-quill:before { + content: "\e907"; +} +.icon-pen:before { + content: "\e908"; +} +.icon-blog:before { + content: "\e909"; +} +.icon-eyedropper:before { + content: "\e90a"; +} +.icon-droplet:before { + content: "\e90b"; +} +.icon-paint-format:before { + content: "\e90c"; +} +.icon-image:before { + content: "\e90d"; +} +.icon-images:before { + content: "\e90e"; +} +.icon-camera:before { + content: "\e90f"; +} +.icon-headphones:before { + content: "\e910"; +} +.icon-music:before { + content: "\e911"; +} +.icon-play:before { + content: "\e912"; +} +.icon-film:before { + content: "\e913"; +} +.icon-video-camera:before { + content: "\e914"; +} +.icon-dice:before { + content: "\e915"; +} +.icon-pacman:before { + content: "\e916"; +} +.icon-spades:before { + content: "\e917"; +} +.icon-clubs:before { + content: "\e918"; +} +.icon-diamonds:before { + content: "\e919"; +} +.icon-bullhorn:before { + content: "\e91a"; +} +.icon-connection:before { + content: "\e91b"; +} +.icon-podcast:before { + content: "\e91c"; +} +.icon-feed:before { + content: "\e91d"; +} +.icon-mic:before { + content: "\e91e"; +} +.icon-book:before { + content: "\e91f"; +} +.icon-books:before { + content: "\e920"; +} +.icon-library:before { + content: "\e921"; +} +.icon-file-text:before { + content: "\e922"; +} +.icon-profile:before { + content: "\e923"; +} +.icon-file-empty:before { + content: "\e924"; +} +.icon-files-empty:before { + content: "\e925"; +} +.icon-file-text2:before { + content: "\e926"; +} +.icon-file-picture:before { + content: "\e927"; +} +.icon-file-music:before { + content: "\e928"; +} +.icon-file-play:before { + content: "\e929"; +} +.icon-file-video:before { + content: "\e92a"; +} +.icon-file-zip:before { + content: "\e92b"; +} +.icon-copy:before { + content: "\e92c"; +} +.icon-paste:before { + content: "\e92d"; +} +.icon-stack:before { + content: "\e92e"; +} +.icon-folder:before { + content: "\e92f"; +} +.icon-folder-open:before { + content: "\e930"; +} +.icon-folder-plus:before { + content: "\e931"; +} +.icon-folder-minus:before { + content: "\e932"; +} +.icon-folder-download:before { + content: "\e933"; +} +.icon-folder-upload:before { + content: "\e934"; +} +.icon-price-tag:before { + content: "\e935"; +} +.icon-price-tags:before { + content: "\e936"; +} +.icon-barcode:before { + content: "\e937"; +} +.icon-qrcode:before { + content: "\e938"; +} +.icon-ticket:before { + content: "\e939"; +} +.icon-cart:before { + content: "\e93a"; +} +.icon-coin-dollar:before { + content: "\e93b"; +} +.icon-coin-euro:before { + content: "\e93c"; +} +.icon-coin-pound:before { + content: "\e93d"; +} +.icon-coin-yen:before { + content: "\e93e"; +} +.icon-credit-card:before { + content: "\e93f"; +} +.icon-calculator:before { + content: "\e940"; +} +.icon-lifebuoy:before { + content: "\e941"; +} +.icon-phone:before { + content: "\e942"; +} +.icon-phone-hang-up:before { + content: "\e943"; +} +.icon-address-book:before { + content: "\e944"; +} +.icon-envelop:before { + content: "\e945"; +} +.icon-pushpin:before { + content: "\e946"; +} +.icon-location:before { + content: "\e947"; +} +.icon-location2:before { + content: "\e948"; +} +.icon-compass:before { + content: "\e949"; +} +.icon-compass2:before { + content: "\e94a"; +} +.icon-map:before { + content: "\e94b"; +} +.icon-map2:before { + content: "\e94c"; +} +.icon-history:before { + content: "\e94d"; +} +.icon-clock:before { + content: "\e94e"; +} +.icon-clock2:before { + content: "\e94f"; +} +.icon-alarm:before { + content: "\e950"; +} +.icon-bell:before { + content: "\e951"; +} +.icon-stopwatch:before { + content: "\e952"; +} +.icon-calendar:before { + content: "\e953"; +} +.icon-printer:before { + content: "\e954"; +} +.icon-keyboard:before { + content: "\e955"; +} +.icon-display:before { + content: "\e956"; +} +.icon-laptop:before { + content: "\e957"; +} +.icon-mobile:before { + content: "\e958"; +} +.icon-mobile2:before { + content: "\e959"; +} +.icon-tablet:before { + content: "\e95a"; +} +.icon-tv:before { + content: "\e95b"; +} +.icon-drawer:before { + content: "\e95c"; +} +.icon-drawer2:before { + content: "\e95d"; +} +.icon-box-add:before { + content: "\e95e"; +} +.icon-box-remove:before { + content: "\e95f"; +} +.icon-download:before { + content: "\e960"; +} +.icon-upload:before { + content: "\e961"; +} +.icon-floppy-disk:before { + content: "\e962"; +} +.icon-drive:before { + content: "\e963"; +} +.icon-database:before { + content: "\e964"; +} +.icon-undo:before { + content: "\e965"; +} +.icon-redo:before { + content: "\e966"; +} +.icon-undo2:before { + content: "\e967"; +} +.icon-redo2:before { + content: "\e968"; +} +.icon-forward:before { + content: "\e969"; +} +.icon-reply:before { + content: "\e96a"; +} +.icon-bubble:before { + content: "\e96b"; +} +.icon-bubbles:before { + content: "\e96c"; +} +.icon-bubbles2:before { + content: "\e96d"; +} +.icon-bubble2:before { + content: "\e96e"; +} +.icon-bubbles3:before { + content: "\e96f"; +} +.icon-bubbles4:before { + content: "\e970"; +} +.icon-user:before { + content: "\e971"; +} +.icon-users:before { + content: "\e972"; +} +.icon-user-plus:before { + content: "\e973"; +} +.icon-user-minus:before { + content: "\e974"; +} +.icon-user-check:before { + content: "\e975"; +} +.icon-user-tie:before { + content: "\e976"; +} +.icon-quotes-left:before { + content: "\e977"; +} +.icon-quotes-right:before { + content: "\e978"; +} +.icon-hour-glass:before { + content: "\e979"; +} +.icon-spinner:before { + content: "\e97a"; +} +.icon-spinner2:before { + content: "\e97b"; +} +.icon-spinner3:before { + content: "\e97c"; +} +.icon-spinner4:before { + content: "\e97d"; +} +.icon-spinner5:before { + content: "\e97e"; +} +.icon-spinner6:before { + content: "\e97f"; +} +.icon-spinner7:before { + content: "\e980"; +} +.icon-spinner8:before { + content: "\e981"; +} +.icon-spinner9:before { + content: "\e982"; +} +.icon-spinner10:before { + content: "\e983"; +} +.icon-spinner11:before { + content: "\e984"; +} +.icon-binoculars:before { + content: "\e985"; +} +.icon-search:before { + content: "\e986"; +} +.icon-zoom-in:before { + content: "\e987"; +} +.icon-zoom-out:before { + content: "\e988"; +} +.icon-enlarge:before { + content: "\e989"; +} +.icon-shrink:before { + content: "\e98a"; +} +.icon-enlarge2:before { + content: "\e98b"; +} +.icon-shrink2:before { + content: "\e98c"; +} +.icon-key:before { + content: "\e98d"; +} +.icon-key2:before { + content: "\e98e"; +} +.icon-lock:before { + content: "\e98f"; +} +.icon-unlocked:before { + content: "\e990"; +} +.icon-wrench:before { + content: "\e991"; +} +.icon-equalizer:before { + content: "\e992"; +} +.icon-equalizer2:before { + content: "\e993"; +} +.icon-cog:before { + content: "\e994"; +} +.icon-cogs:before { + content: "\e995"; +} +.icon-hammer:before { + content: "\e996"; +} +.icon-magic-wand:before { + content: "\e997"; +} +.icon-aid-kit:before { + content: "\e998"; +} +.icon-bug:before { + content: "\e999"; +} +.icon-pie-chart:before { + content: "\e99a"; +} +.icon-stats-dots:before { + content: "\e99b"; +} +.icon-stats-bars:before { + content: "\e99c"; +} +.icon-stats-bars2:before { + content: "\e99d"; +} +.icon-trophy:before { + content: "\e99e"; +} +.icon-gift:before { + content: "\e99f"; +} +.icon-glass:before { + content: "\e9a0"; +} +.icon-glass2:before { + content: "\e9a1"; +} +.icon-mug:before { + content: "\e9a2"; +} +.icon-spoon-knife:before { + content: "\e9a3"; +} +.icon-leaf:before { + content: "\e9a4"; +} +.icon-rocket:before { + content: "\e9a5"; +} +.icon-meter:before { + content: "\e9a6"; +} +.icon-meter2:before { + content: "\e9a7"; +} +.icon-hammer2:before { + content: "\e9a8"; +} +.icon-fire:before { + content: "\e9a9"; +} +.icon-lab:before { + content: "\e9aa"; +} +.icon-magnet:before { + content: "\e9ab"; +} +.icon-bin:before { + content: "\e9ac"; +} +.icon-bin2:before { + content: "\e9ad"; +} +.icon-briefcase:before { + content: "\e9ae"; +} +.icon-airplane:before { + content: "\e9af"; +} +.icon-truck:before { + content: "\e9b0"; +} +.icon-road:before { + content: "\e9b1"; +} +.icon-accessibility:before { + content: "\e9b2"; +} +.icon-target:before { + content: "\e9b3"; +} +.icon-shield:before { + content: "\e9b4"; +} +.icon-power:before { + content: "\e9b5"; +} +.icon-switch:before { + content: "\e9b6"; +} +.icon-power-cord:before { + content: "\e9b7"; +} +.icon-clipboard:before { + content: "\e9b8"; +} +.icon-list-numbered:before { + content: "\e9b9"; +} +.icon-list:before { + content: "\e9ba"; +} +.icon-list2:before { + content: "\e9bb"; +} +.icon-tree:before { + content: "\e9bc"; +} +.icon-menu:before { + content: "\e9bd"; +} +.icon-menu2:before { + content: "\e9be"; +} +.icon-menu3:before { + content: "\e9bf"; +} +.icon-menu4:before { + content: "\e9c0"; +} +.icon-cloud:before { + content: "\e9c1"; +} +.icon-cloud-download:before { + content: "\e9c2"; +} +.icon-cloud-upload:before { + content: "\e9c3"; +} +.icon-cloud-check:before { + content: "\e9c4"; +} +.icon-download2:before { + content: "\e9c5"; +} +.icon-upload2:before { + content: "\e9c6"; +} +.icon-download3:before { + content: "\e9c7"; +} +.icon-upload3:before { + content: "\e9c8"; +} +.icon-sphere:before { + content: "\e9c9"; +} +.icon-earth:before { + content: "\e9ca"; +} +.icon-link:before { + content: "\e9cb"; +} +.icon-flag:before { + content: "\e9cc"; +} +.icon-attachment:before { + content: "\e9cd"; +} +.icon-eye:before { + content: "\e9ce"; +} +.icon-eye-plus:before { + content: "\e9cf"; +} +.icon-eye-minus:before { + content: "\e9d0"; +} +.icon-eye-blocked:before { + content: "\e9d1"; +} +.icon-bookmark:before { + content: "\e9d2"; +} +.icon-bookmarks:before { + content: "\e9d3"; +} +.icon-sun:before { + content: "\e9d4"; +} +.icon-contrast:before { + content: "\e9d5"; +} +.icon-brightness-contrast:before { + content: "\e9d6"; +} +.icon-star-empty:before { + content: "\e9d7"; +} +.icon-star-half:before { + content: "\e9d8"; +} +.icon-star-full:before { + content: "\e9d9"; +} +.icon-heart:before { + content: "\e9da"; +} +.icon-heart-broken:before { + content: "\e9db"; +} +.icon-man:before { + content: "\e9dc"; +} +.icon-woman:before { + content: "\e9dd"; +} +.icon-man-woman:before { + content: "\e9de"; +} +.icon-happy:before { + content: "\e9df"; +} +.icon-happy2:before { + content: "\e9e0"; +} +.icon-smile:before { + content: "\e9e1"; +} +.icon-smile2:before { + content: "\e9e2"; +} +.icon-tongue:before { + content: "\e9e3"; +} +.icon-tongue2:before { + content: "\e9e4"; +} +.icon-sad:before { + content: "\e9e5"; +} +.icon-sad2:before { + content: "\e9e6"; +} +.icon-wink:before { + content: "\e9e7"; +} +.icon-wink2:before { + content: "\e9e8"; +} +.icon-grin:before { + content: "\e9e9"; +} +.icon-grin2:before { + content: "\e9ea"; +} +.icon-cool:before { + content: "\e9eb"; +} +.icon-cool2:before { + content: "\e9ec"; +} +.icon-angry:before { + content: "\e9ed"; +} +.icon-angry2:before { + content: "\e9ee"; +} +.icon-evil:before { + content: "\e9ef"; +} +.icon-evil2:before { + content: "\e9f0"; +} +.icon-shocked:before { + content: "\e9f1"; +} +.icon-shocked2:before { + content: "\e9f2"; +} +.icon-baffled:before { + content: "\e9f3"; +} +.icon-baffled2:before { + content: "\e9f4"; +} +.icon-confused:before { + content: "\e9f5"; +} +.icon-confused2:before { + content: "\e9f6"; +} +.icon-neutral:before { + content: "\e9f7"; +} +.icon-neutral2:before { + content: "\e9f8"; +} +.icon-hipster:before { + content: "\e9f9"; +} +.icon-hipster2:before { + content: "\e9fa"; +} +.icon-wondering:before { + content: "\e9fb"; +} +.icon-wondering2:before { + content: "\e9fc"; +} +.icon-sleepy:before { + content: "\e9fd"; +} +.icon-sleepy2:before { + content: "\e9fe"; +} +.icon-frustrated:before { + content: "\e9ff"; +} +.icon-frustrated2:before { + content: "\ea00"; +} +.icon-crying:before { + content: "\ea01"; +} +.icon-crying2:before { + content: "\ea02"; +} +.icon-point-up:before { + content: "\ea03"; +} +.icon-point-right:before { + content: "\ea04"; +} +.icon-point-down:before { + content: "\ea05"; +} +.icon-point-left:before { + content: "\ea06"; +} +.icon-warning:before { + content: "\ea07"; +} +.icon-notification:before { + content: "\ea08"; +} +.icon-question:before { + content: "\ea09"; +} +.icon-plus:before { + content: "\ea0a"; +} +.icon-minus:before { + content: "\ea0b"; +} +.icon-info:before { + content: "\ea0c"; +} +.icon-cancel-circle:before { + content: "\ea0d"; +} +.icon-blocked:before { + content: "\ea0e"; +} +.icon-cross:before { + content: "\ea0f"; +} +.icon-checkmark:before { + content: "\ea10"; +} +.icon-checkmark2:before { + content: "\ea11"; +} +.icon-spell-check:before { + content: "\ea12"; +} +.icon-enter:before { + content: "\ea13"; +} +.icon-exit:before { + content: "\ea14"; +} +.icon-play2:before { + content: "\ea15"; +} +.icon-pause:before { + content: "\ea16"; +} +.icon-stop:before { + content: "\ea17"; +} +.icon-previous:before { + content: "\ea18"; +} +.icon-next:before { + content: "\ea19"; +} +.icon-backward:before { + content: "\ea1a"; +} +.icon-forward2:before { + content: "\ea1b"; +} +.icon-play3:before { + content: "\ea1c"; +} +.icon-pause2:before { + content: "\ea1d"; +} +.icon-stop2:before { + content: "\ea1e"; +} +.icon-backward2:before { + content: "\ea1f"; +} +.icon-forward3:before { + content: "\ea20"; +} +.icon-first:before { + content: "\ea21"; +} +.icon-last:before { + content: "\ea22"; +} +.icon-previous2:before { + content: "\ea23"; +} +.icon-next2:before { + content: "\ea24"; +} +.icon-eject:before { + content: "\ea25"; +} +.icon-volume-high:before { + content: "\ea26"; +} +.icon-volume-medium:before { + content: "\ea27"; +} +.icon-volume-low:before { + content: "\ea28"; +} +.icon-volume-mute:before { + content: "\ea29"; +} +.icon-volume-mute2:before { + content: "\ea2a"; +} +.icon-volume-increase:before { + content: "\ea2b"; +} +.icon-volume-decrease:before { + content: "\ea2c"; +} +.icon-loop:before { + content: "\ea2d"; +} +.icon-loop2:before { + content: "\ea2e"; +} +.icon-infinite:before { + content: "\ea2f"; +} +.icon-shuffle:before { + content: "\ea30"; +} +.icon-arrow-up-left:before { + content: "\ea31"; +} +.icon-arrow-up:before { + content: "\ea32"; +} +.icon-arrow-up-right:before { + content: "\ea33"; +} +.icon-arrow-right:before { + content: "\ea34"; +} +.icon-arrow-down-right:before { + content: "\ea35"; +} +.icon-arrow-down:before { + content: "\ea36"; +} +.icon-arrow-down-left:before { + content: "\ea37"; +} +.icon-arrow-left:before { + content: "\ea38"; +} +.icon-arrow-up-left2:before { + content: "\ea39"; +} +.icon-arrow-up2:before { + content: "\ea3a"; +} +.icon-arrow-up-right2:before { + content: "\ea3b"; +} +.icon-arrow-right2:before { + content: "\ea3c"; +} +.icon-arrow-down-right2:before { + content: "\ea3d"; +} +.icon-arrow-down2:before { + content: "\ea3e"; +} +.icon-arrow-down-left2:before { + content: "\ea3f"; +} +.icon-arrow-left2:before { + content: "\ea40"; +} +.icon-circle-up:before { + content: "\ea41"; +} +.icon-circle-right:before { + content: "\ea42"; +} +.icon-circle-down:before { + content: "\ea43"; +} +.icon-circle-left:before { + content: "\ea44"; +} +.icon-tab:before { + content: "\ea45"; +} +.icon-move-up:before { + content: "\ea46"; +} +.icon-move-down:before { + content: "\ea47"; +} +.icon-sort-alpha-asc:before { + content: "\ea48"; +} +.icon-sort-alpha-desc:before { + content: "\ea49"; +} +.icon-sort-numeric-asc:before { + content: "\ea4a"; +} +.icon-sort-numberic-desc:before { + content: "\ea4b"; +} +.icon-sort-amount-asc:before { + content: "\ea4c"; +} +.icon-sort-amount-desc:before { + content: "\ea4d"; +} +.icon-command:before { + content: "\ea4e"; +} +.icon-shift:before { + content: "\ea4f"; +} +.icon-ctrl:before { + content: "\ea50"; +} +.icon-opt:before { + content: "\ea51"; +} +.icon-checkbox-checked:before { + content: "\ea52"; +} +.icon-checkbox-unchecked:before { + content: "\ea53"; +} +.icon-radio-checked:before { + content: "\ea54"; +} +.icon-radio-checked2:before { + content: "\ea55"; +} +.icon-radio-unchecked:before { + content: "\ea56"; +} +.icon-crop:before { + content: "\ea57"; +} +.icon-make-group:before { + content: "\ea58"; +} +.icon-ungroup:before { + content: "\ea59"; +} +.icon-scissors:before { + content: "\ea5a"; +} +.icon-filter:before { + content: "\ea5b"; +} +.icon-font:before { + content: "\ea5c"; +} +.icon-ligature:before { + content: "\ea5d"; +} +.icon-ligature2:before { + content: "\ea5e"; +} +.icon-text-height:before { + content: "\ea5f"; +} +.icon-text-width:before { + content: "\ea60"; +} +.icon-font-size:before { + content: "\ea61"; +} +.icon-bold:before { + content: "\ea62"; +} +.icon-underline:before { + content: "\ea63"; +} +.icon-italic:before { + content: "\ea64"; +} +.icon-strikethrough:before { + content: "\ea65"; +} +.icon-omega:before { + content: "\ea66"; +} +.icon-sigma:before { + content: "\ea67"; +} +.icon-page-break:before { + content: "\ea68"; +} +.icon-superscript:before { + content: "\ea69"; +} +.icon-subscript:before { + content: "\ea6a"; +} +.icon-superscript2:before { + content: "\ea6b"; +} +.icon-subscript2:before { + content: "\ea6c"; +} +.icon-text-color:before { + content: "\ea6d"; +} +.icon-pagebreak:before { + content: "\ea6e"; +} +.icon-clear-formatting:before { + content: "\ea6f"; +} +.icon-table:before { + content: "\ea70"; +} +.icon-table2:before { + content: "\ea71"; +} +.icon-insert-template:before { + content: "\ea72"; +} +.icon-pilcrow:before { + content: "\ea73"; +} +.icon-ltr:before { + content: "\ea74"; +} +.icon-rtl:before { + content: "\ea75"; +} +.icon-section:before { + content: "\ea76"; +} +.icon-paragraph-left:before { + content: "\ea77"; +} +.icon-paragraph-center:before { + content: "\ea78"; +} +.icon-paragraph-right:before { + content: "\ea79"; +} +.icon-paragraph-justify:before { + content: "\ea7a"; +} +.icon-indent-increase:before { + content: "\ea7b"; +} +.icon-indent-decrease:before { + content: "\ea7c"; +} +.icon-share:before { + content: "\ea7d"; +} +.icon-new-tab:before { + content: "\ea7e"; +} +.icon-embed:before { + content: "\ea7f"; +} +.icon-embed2:before { + content: "\ea80"; +} +.icon-terminal:before { + content: "\ea81"; +} +.icon-share2:before { + content: "\ea82"; +} +.icon-mail:before { + content: "\ea83"; +} +.icon-mail2:before { + content: "\ea84"; +} +.icon-mail3:before { + content: "\ea85"; +} +.icon-mail4:before { + content: "\ea86"; +} +.icon-amazon:before { + content: "\ea87"; +} +.icon-google:before { + content: "\ea88"; +} +.icon-google2:before { + content: "\ea89"; +} +.icon-google3:before { + content: "\ea8a"; +} +.icon-google-plus:before { + content: "\ea8b"; +} +.icon-google-plus2:before { + content: "\ea8c"; +} +.icon-google-plus3:before { + content: "\ea8d"; +} +.icon-hangouts:before { + content: "\ea8e"; +} +.icon-google-drive:before { + content: "\ea8f"; +} +.icon-facebook:before { + content: "\ea90"; +} +.icon-facebook2:before { + content: "\ea91"; +} +.icon-instagram:before { + content: "\ea92"; +} +.icon-whatsapp:before { + content: "\ea93"; +} +.icon-spotify:before { + content: "\ea94"; +} +.icon-telegram:before { + content: "\ea95"; +} +.icon-twitter:before { + content: "\ea96"; +} +.icon-vine:before { + content: "\ea97"; +} +.icon-vk:before { + content: "\ea98"; +} +.icon-renren:before { + content: "\ea99"; +} +.icon-sina-weibo:before { + content: "\ea9a"; +} +.icon-rss:before { + content: "\ea9b"; +} +.icon-rss2:before { + content: "\ea9c"; +} +.icon-youtube:before { + content: "\ea9d"; +} +.icon-youtube2:before { + content: "\ea9e"; +} +.icon-twitch:before { + content: "\ea9f"; +} +.icon-vimeo:before { + content: "\eaa0"; +} +.icon-vimeo2:before { + content: "\eaa1"; +} +.icon-lanyrd:before { + content: "\eaa2"; +} +.icon-flickr:before { + content: "\eaa3"; +} +.icon-flickr2:before { + content: "\eaa4"; +} +.icon-flickr3:before { + content: "\eaa5"; +} +.icon-flickr4:before { + content: "\eaa6"; +} +.icon-dribbble:before { + content: "\eaa7"; +} +.icon-behance:before { + content: "\eaa8"; +} +.icon-behance2:before { + content: "\eaa9"; +} +.icon-deviantart:before { + content: "\eaaa"; +} +.icon-500px:before { + content: "\eaab"; +} +.icon-steam:before { + content: "\eaac"; +} +.icon-steam2:before { + content: "\eaad"; +} +.icon-dropbox:before { + content: "\eaae"; +} +.icon-onedrive:before { + content: "\eaaf"; +} +.icon-github:before { + content: "\eab0"; +} +.icon-npm:before { + content: "\eab1"; +} +.icon-basecamp:before { + content: "\eab2"; +} +.icon-trello:before { + content: "\eab3"; +} +.icon-wordpress:before { + content: "\eab4"; +} +.icon-joomla:before { + content: "\eab5"; +} +.icon-ello:before { + content: "\eab6"; +} +.icon-blogger:before { + content: "\eab7"; +} +.icon-blogger2:before { + content: "\eab8"; +} +.icon-tumblr:before { + content: "\eab9"; +} +.icon-tumblr2:before { + content: "\eaba"; +} +.icon-yahoo:before { + content: "\eabb"; +} +.icon-yahoo2:before { + content: "\eabc"; +} +.icon-tux:before { + content: "\eabd"; +} +.icon-appleinc:before { + content: "\eabe"; +} +.icon-finder:before { + content: "\eabf"; +} +.icon-android:before { + content: "\eac0"; +} +.icon-windows:before { + content: "\eac1"; +} +.icon-windows8:before { + content: "\eac2"; +} +.icon-soundcloud:before { + content: "\eac3"; +} +.icon-soundcloud2:before { + content: "\eac4"; +} +.icon-skype:before { + content: "\eac5"; +} +.icon-reddit:before { + content: "\eac6"; +} +.icon-hackernews:before { + content: "\eac7"; +} +.icon-wikipedia:before { + content: "\eac8"; +} +.icon-linkedin:before { + content: "\eac9"; +} +.icon-linkedin2:before { + content: "\eaca"; +} +.icon-lastfm:before { + content: "\eacb"; +} +.icon-lastfm2:before { + content: "\eacc"; +} +.icon-delicious:before { + content: "\eacd"; +} +.icon-stumbleupon:before { + content: "\eace"; +} +.icon-stumbleupon2:before { + content: "\eacf"; +} +.icon-stackoverflow:before { + content: "\ead0"; +} +.icon-pinterest:before { + content: "\ead1"; +} +.icon-pinterest2:before { + content: "\ead2"; +} +.icon-xing:before { + content: "\ead3"; +} +.icon-xing2:before { + content: "\ead4"; +} +.icon-flattr:before { + content: "\ead5"; +} +.icon-foursquare:before { + content: "\ead6"; +} +.icon-yelp:before { + content: "\ead7"; +} +.icon-paypal:before { + content: "\ead8"; +} +.icon-chrome:before { + content: "\ead9"; +} +.icon-firefox:before { + content: "\eada"; +} +.icon-IE:before { + content: "\eadb"; +} +.icon-edge:before { + content: "\eadc"; +} +.icon-safari:before { + content: "\eadd"; +} +.icon-opera:before { + content: "\eade"; +} +.icon-file-pdf:before { + content: "\eadf"; +} +.icon-file-openoffice:before { + content: "\eae0"; +} +.icon-file-word:before { + content: "\eae1"; +} +.icon-file-excel:before { + content: "\eae2"; +} +.icon-libreoffice:before { + content: "\eae3"; +} +.icon-html-five:before { + content: "\eae4"; +} +.icon-html-five2:before { + content: "\eae5"; +} +.icon-css3:before { + content: "\eae6"; +} +.icon-git:before { + content: "\eae7"; +} +.icon-codepen:before { + content: "\eae8"; +} +.icon-svg:before { + content: "\eae9"; +} +.icon-IcoMoon:before { + content: "\eaea"; +} diff --git a/taoyao-client-web/src/assets/logo.svg b/taoyao-client-web/src/assets/logo.svg deleted file mode 100644 index bc826fe..0000000 --- a/taoyao-client-web/src/assets/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/taoyao-client-web/src/assets/main.css b/taoyao-client-web/src/assets/main.css index e8667cd..7dd1f29 100644 --- a/taoyao-client-web/src/assets/main.css +++ b/taoyao-client-web/src/assets/main.css @@ -1,10 +1,10 @@ -@import './base.css'; +@import "./base.css"; +@import "./font.taoyao.css"; #app { max-width: 1280px; margin: 0 auto; padding: 2rem; - font-weight: normal; } diff --git a/taoyao-client-web/src/components/Config.js b/taoyao-client-web/src/components/Config.js new file mode 100644 index 0000000..e69de29 diff --git a/taoyao-client-web/src/components/HelloWorld.vue b/taoyao-client-web/src/components/HelloWorld.vue deleted file mode 100644 index 0a0988b..0000000 --- a/taoyao-client-web/src/components/HelloWorld.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - - - diff --git a/taoyao-client-web/src/components/LocalClient.vue b/taoyao-client-web/src/components/LocalClient.vue new file mode 100644 index 0000000..84d30f5 --- /dev/null +++ b/taoyao-client-web/src/components/LocalClient.vue @@ -0,0 +1,7 @@ + + + + diff --git a/taoyao-client-web/src/components/RemoteClient.vue b/taoyao-client-web/src/components/RemoteClient.vue new file mode 100644 index 0000000..d84bf19 --- /dev/null +++ b/taoyao-client-web/src/components/RemoteClient.vue @@ -0,0 +1,7 @@ + + + + diff --git a/taoyao-client-web/src/components/Taoyao.js b/taoyao-client-web/src/components/Taoyao.js new file mode 100644 index 0000000..e69de29 diff --git a/taoyao-client-web/src/components/TheWelcome.vue b/taoyao-client-web/src/components/TheWelcome.vue deleted file mode 100644 index 5e64625..0000000 --- a/taoyao-client-web/src/components/TheWelcome.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - diff --git a/taoyao-client-web/src/components/WelcomeItem.vue b/taoyao-client-web/src/components/WelcomeItem.vue deleted file mode 100644 index ba0def3..0000000 --- a/taoyao-client-web/src/components/WelcomeItem.vue +++ /dev/null @@ -1,86 +0,0 @@ - - - diff --git a/taoyao-client-web/src/components/icons/IconCommunity.vue b/taoyao-client-web/src/components/icons/IconCommunity.vue deleted file mode 100644 index 2dc8b05..0000000 --- a/taoyao-client-web/src/components/icons/IconCommunity.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/taoyao-client-web/src/components/icons/IconDocumentation.vue b/taoyao-client-web/src/components/icons/IconDocumentation.vue deleted file mode 100644 index 6d4791c..0000000 --- a/taoyao-client-web/src/components/icons/IconDocumentation.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/taoyao-client-web/src/components/icons/IconEcosystem.vue b/taoyao-client-web/src/components/icons/IconEcosystem.vue deleted file mode 100644 index c3a4f07..0000000 --- a/taoyao-client-web/src/components/icons/IconEcosystem.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/taoyao-client-web/src/components/icons/IconSupport.vue b/taoyao-client-web/src/components/icons/IconSupport.vue deleted file mode 100644 index 7452834..0000000 --- a/taoyao-client-web/src/components/icons/IconSupport.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/taoyao-client-web/src/components/icons/IconTooling.vue b/taoyao-client-web/src/components/icons/IconTooling.vue deleted file mode 100644 index 660598d..0000000 --- a/taoyao-client-web/src/components/icons/IconTooling.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/taoyao-client-web/vite.config.js b/taoyao-client-web/vite.config.js index 80580b0..7486105 100644 --- a/taoyao-client-web/vite.config.js +++ b/taoyao-client-web/vite.config.js @@ -7,11 +7,11 @@ import vue from "@vitejs/plugin-vue"; export default defineConfig({ plugins: [vue()], server: { - host: "0.0.0.0" + host: "0.0.0.0", }, resolve: { alias: { "@": fileURLToPath(new URL("./src", import.meta.url)), }, - }, + } }); diff --git a/taoyao-media-server/src/Config.js b/taoyao-media-server/src/Config.js index 268f646..e0c2699 100644 --- a/taoyao-media-server/src/Config.js +++ b/taoyao-media-server/src/Config.js @@ -1,5 +1,5 @@ /** - * 配置 + * 服务配置 */ const os = require("os"); @@ -12,7 +12,7 @@ module.exports = { logLevel: 'DEBUG', // 信令服务 https: { - listenIp: "0.0.0.0", + listenIp: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", listenPort: process.env.HTTPS_LISTEN_PORT || 4443, // WebSocket连接密码 username: "taoyao", @@ -20,7 +20,7 @@ module.exports = { tls: { cert: process.env.HTTPS_CERT_PUBLIC_KEY || `${__dirname}/certs/publicKey.pem`, key: process.env.HTTPS_CERT_PRIVATE_KEY || `${__dirname}/certs/privateKey.pem`, - }, + } }, // Mediasoup mediasoup: { @@ -37,15 +37,15 @@ module.exports = { "svc", "dtls", "info", + "rtcp", "sctp", "srtp", - "rtcp", "score", "message", - "simulcast", + "simulcast" ], rtcMinPort: process.env.MEDIASOUP_MIN_PORT || 40000, - rtcMaxPort: process.env.MEDIASOUP_MAX_PORT || 49999, + rtcMaxPort: process.env.MEDIASOUP_MAX_PORT || 49999 }, // Router:https://mediasoup.org/documentation/v3/mediasoup/api/#RouterOptions routerOptions: { @@ -54,7 +54,7 @@ module.exports = { kind: "audio", mimeType: "audio/opus", clockRate: 48000, - channels: 2, + channels: 2 }, { kind: "video", @@ -62,7 +62,7 @@ module.exports = { clockRate: 90000, parameters: { "x-google-start-bitrate": 1000, - }, + } }, { kind: "video", @@ -70,8 +70,8 @@ module.exports = { clockRate: 90000, parameters: { "profile-id": 2, - "x-google-start-bitrate": 1000, - }, + "x-google-start-bitrate": 1000 + } }, { kind: "video", @@ -81,8 +81,8 @@ module.exports = { "packetization-mode": 1, "profile-level-id": "4d0032", "level-asymmetry-allowed": 1, - "x-google-start-bitrate": 1000, - }, + "x-google-start-bitrate": 1000 + } }, { kind: "video", @@ -92,10 +92,10 @@ module.exports = { "packetization-mode": 1, "profile-level-id": "42e01f", "level-asymmetry-allowed": 1, - "x-google-start-bitrate": 1000, - }, - }, - ], + "x-google-start-bitrate": 1000 + } + } + ] }, // WebRtcServer:https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcServerOptions webRtcServerOptions: { @@ -103,38 +103,42 @@ module.exports = { { protocol: "udp", ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP, port: 44444, + // 公网地址 + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP }, { protocol: "tcp", ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP, port: 44444, - }, - ], + // 公网地址 + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP + } + ] }, // WebRtcTransport:https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptions webRtcTransportOptions: { listenIps: [ { ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", - announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP, - }, + // 公网地址 + announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP + } ], initialAvailableOutgoingBitrate: 1000000, minimumAvailableOutgoingBitrate: 600000, maxSctpMessageSize: 262144, - maxIncomingBitrate: 1500000, + maxIncomingBitrate: 1500000 }, // PlainTransport:https://mediasoup.org/documentation/v3/mediasoup/api/#PlainTransportOptions plainTransportOptions: { listenIp: { ip: process.env.MEDIASOUP_LISTEN_IP || "0.0.0.0", + // 公网地址 announcedIp: process.env.MEDIASOUP_ANNOUNCED_IP, }, - maxSctpMessageSize: 262144, - }, + maxSctpMessageSize: 262144 + } }, wellcome: ` @@ -150,5 +154,5 @@ module.exports = {

taoyao-media-server

acgist

- `, + ` }; diff --git a/taoyao-media-server/src/Server.js b/taoyao-media-server/src/Server.js index 55c07df..63eddfa 100644 --- a/taoyao-media-server/src/Server.js +++ b/taoyao-media-server/src/Server.js @@ -5,7 +5,7 @@ const fs = require("fs"); const ws = require("ws"); const https = require("https"); -// const mediasoup = require("mediasoup"); +const mediasoup = require("mediasoup"); const config = require("./Config"); const Logger = require("./Logger"); const Signal = require("./Signal"); @@ -212,7 +212,7 @@ async function onmessage(message, session) { async function main() { logger.debug("DEBUG").info("INFO").warn("WARN").error("ERROR"); logger.info("开始启动:%s", config.name); - // await buildMediasoupWorker(); + await buildMediasoupWorker(); await buildSignalServer(); await buildCommandConsole(); await buildClientInterval(); diff --git a/taoyao-signal-server/README.md b/taoyao-signal-server/README.md index cb7ea64..8a5f76a 100644 --- a/taoyao-signal-server/README.md +++ b/taoyao-signal-server/README.md @@ -10,21 +10,27 @@ |taoyao-signal|信令|信令服务| |taoyao-server|服务|启动服务| +## 模式 + +### 直播模式 + +### 监控模式 + ### 会议模式 所有人员均能视频通话对讲 -### 对讲模式 +### 会议广播模式 -两个人员之间对讲 +会议模式中只能单人讲话 -### 广播模式 +### 会议对讲模式 -单个人员能够讲话并且能够听到其他人员讲话,其他人员之间不能讲话。 +会议模式中只能两个人员之间对讲 ### 本地视频模式 -使用本地文件作为音频视频信息 +使用本地文件作为音频视频来源 ## 模块关系 diff --git a/taoyao-signal-server/pom.xml b/taoyao-signal-server/pom.xml index a53d9a3..46e8ffb 100644 --- a/taoyao-signal-server/pom.xml +++ b/taoyao-signal-server/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.0 + 3.0.2 @@ -24,7 +24,6 @@ 17 1.18.24 - 6.18.0 2.0.0 1.5.3.Final 4.4 diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/config/SpringDocAutoConfiguration.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/config/SpringDocAutoConfiguration.java index 360b3a8..d2f6aa5 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/config/SpringDocAutoConfiguration.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/config/SpringDocAutoConfiguration.java @@ -38,11 +38,11 @@ public class SpringDocAutoConfiguration { private TaoyaoProperties taoyaoProperties; @Bean - public GroupedOpenApi meetingApi() { + public GroupedOpenApi roomApi() { return GroupedOpenApi.builder() - .group("meeting") - .displayName("会议") - .packagesToScan("com.acgist.taoyao.meeting") + .group("signal") + .displayName("信令") + .packagesToScan("com.acgist.taoyao.signal") .build(); } diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/MediaProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/MediaProperties.java index 16c546d..1f34570 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/MediaProperties.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/MediaProperties.java @@ -27,6 +27,11 @@ public class MediaProperties { */ @Schema(title = "视频配置", description = "视频配置") private MediaVideoProperties video; + /** + * 超清视频 + */ + @Schema(title = "超清视频", description = "超清视频") + private MediaVideoProperties mostVideo; /** * 高清视频 */ diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SecurityProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SecurityProperties.java index ddd557a..475a065 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SecurityProperties.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/SecurityProperties.java @@ -41,11 +41,4 @@ public class SecurityProperties { */ private String password; - /** - * @return 授权信息 - */ - public String getAuthorization() { - return this.username + ":" + this.password; - } - } diff --git a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/WebrtcProperties.java b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/WebrtcProperties.java index 50e5a21..0c491b8 100644 --- a/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/WebrtcProperties.java +++ b/taoyao-signal-server/taoyao-boot/src/main/java/com/acgist/taoyao/boot/property/WebrtcProperties.java @@ -1,5 +1,7 @@ package com.acgist.taoyao.boot.property; +import java.util.List; + import org.springframework.boot.context.properties.ConfigurationProperties; import io.swagger.v3.oas.annotations.media.Schema; @@ -69,6 +71,6 @@ public class WebrtcProperties { * Mediasoup配置 */ @Schema(title = "Mediasoup配置", description = "Mediasoup配置") - private MediasoupProperties mediasoup; + private List mediasoupList; } diff --git a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/interceptor/SecurityInterceptor.java b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/interceptor/SecurityInterceptor.java index 63c72c6..00b80e5 100644 --- a/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/interceptor/SecurityInterceptor.java +++ b/taoyao-signal-server/taoyao-server/src/main/java/com/acgist/taoyao/interceptor/SecurityInterceptor.java @@ -7,9 +7,11 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.util.AntPathMatcher; import com.acgist.taoyao.boot.interceptor.InterceptorAdapter; import com.acgist.taoyao.boot.property.SecurityProperties; +import com.acgist.taoyao.signal.service.SecurityService; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -23,6 +25,10 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SecurityInterceptor extends InterceptorAdapter { + private AntPathMatcher matcher = new AntPathMatcher(); + + @Autowired + private SecurityService securityService; @Autowired private SecurityProperties securityProperties; @@ -46,6 +52,9 @@ public class SecurityInterceptor extends InterceptorAdapter { if(this.permit(request) || this.authorization(request)) { return true; } + if(log.isInfoEnabled()) { + log.info("授权失败:{}", request.getRequestURL()); + } response.setStatus(HttpStatus.UNAUTHORIZED.value()); response.setHeader(HttpHeaders.WWW_AUTHENTICATE, "Basic Realm=\"" + this.securityProperties.getRealm() + "\""); return false; @@ -58,12 +67,12 @@ public class SecurityInterceptor extends InterceptorAdapter { */ private boolean permit(HttpServletRequest request) { final String uri = request.getRequestURI(); - if(ArrayUtils.isEmpty(this.securityProperties.getPermit())) { + final String[] permit = this.securityProperties.getPermit(); + if(ArrayUtils.isEmpty(permit)) { return false; } - for (String permit : this.securityProperties.getPermit()) { - if(StringUtils.startsWith(uri, permit)) { - log.debug("授权成功(许可请求):{}-{}", uri, permit); + for (String pattern : permit) { + if(this.matcher.match(pattern, uri)) { return true; } } @@ -76,7 +85,6 @@ public class SecurityInterceptor extends InterceptorAdapter { * @return 是否授权成功 */ private boolean authorization(HttpServletRequest request) { - final String uri = request.getRequestURI(); String authorization = request.getHeader(HttpHeaders.AUTHORIZATION); if(StringUtils.isEmpty(authorization)) { return false; @@ -86,11 +94,13 @@ public class SecurityInterceptor extends InterceptorAdapter { } authorization = authorization.substring(SecurityProperties.BASIC.length()).strip(); authorization = new String(Base64.getDecoder().decode(authorization)); - if(!authorization.equals(this.securityProperties.getAuthorization())) { + final int index = authorization.indexOf(':'); + if(index < 0) { return false; } - log.debug("授权成功(Basic):{}-{}", uri, authorization); - return true; + final String username = authorization.substring(0, index); + final String password = authorization.substring(index + 1); + return this.securityService.authenticate(username, password); } } diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application-dev.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application-dev.yml index e69de29..78ea350 100644 --- a/taoyao-signal-server/taoyao-server/src/main/resources/application-dev.yml +++ b/taoyao-signal-server/taoyao-server/src/main/resources/application-dev.yml @@ -0,0 +1,4 @@ +taoyao: + security: + permit: /v3/api-docs/**,/swagger-ui/**,/swagger-ui.html,/,/error,/index.html,/favicon.ico + \ No newline at end of file diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application-release.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application-release.yml index 62fcb53..e69de29 100644 --- a/taoyao-signal-server/taoyao-server/src/main/resources/application-release.yml +++ b/taoyao-signal-server/taoyao-server/src/main/resources/application-release.yml @@ -1,3 +0,0 @@ -taoyao: - security: - permit: /favicon.ico,/error diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml index 6be3678..28ed0fd 100644 --- a/taoyao-signal-server/taoyao-server/src/main/resources/application.yml +++ b/taoyao-signal-server/taoyao-server/src/main/resources/application.yml @@ -67,6 +67,12 @@ taoyao: bitrate: 1200 frame-rate: 24 resolution: 1920*1080 + # 超清视频 + most-video: + format: H264 + bitrate: 1200 + frame-rate: 24 + resolution: 1920*1080 # 高清视频 high-video: format: H264 @@ -87,18 +93,13 @@ taoyao: resolution: 640*480 # WebRTC配置 webrtc: - # 架构模式 - framework: MESH - # 媒体端口范围 - min-port: 40000 - max-port: 49999 - # 公共服务 + # STUN服务 stun: - stun:stun1.l.google.com:19302 - stun:stun2.l.google.com:19302 - stun:stun3.l.google.com:19302 - stun:stun4.l.google.com:19302 - # 自己搭建:coturn + # TURN服务:coturn turn: - turn:127.0.0.1:8888 - turn:127.0.0.1:8888 @@ -111,24 +112,35 @@ taoyao: schema: wss websocket: /websocket.signal # Mediasoup服务配置:可以部署多个简单实现负载均衡 - mediasoup: - host: 127.0.0.1 - #host: 192.168.8.110 - port: 4443 - schema: wss - websocket: /websocket.signal - username: taoyao - password: taoyao + mediasoup-list: + - host: 127.0.0.1 + #host: 192.168.8.110 + port: 4443 + schema: wss + websocket: /websocket.signal + username: taoyao + password: taoyao + - host: 127.0.0.1 + #host: 192.168.8.110 + port: 4443 + schema: wss + websocket: /websocket.signal + username: taoyao + password: taoyao + # 录像配置 record: storage: /data/record + # 安全配置 security: enabled: true realm: taoyao - permit: /v3/api-docs/,/swagger-ui/,/swagger-ui.html,/favicon.ico,/error + permit: /,/error,/index.html,/favicon.ico username: taoyao password: taoyao + # 定时任务 scheduled: session: 0 * * * * ? + # 集群节点 node-list: - host: localhost port: 8888 diff --git a/taoyao-signal-server/taoyao-server/src/main/resources/static/favicon.ico b/taoyao-signal-server/taoyao-server/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e7cf988d07ffe5c6b007459e6794f0d1f4e06368 GIT binary patch literal 16958 zcmeI4d+c3B5yvkAB9LeV1O-tL&>9hAj4^?jR1h&V5{wWrm>@oRDlrNaS_&dkT0sP* zvCs#|qx@PPmPcuM{CLQ#Ahy&}3YDf%ftEL=Ev1xkK0Uw5nY(w-IeYFszy9-MnsfKu zduC_nyJu&2W_EvVwKmg#!-u!@bGO#8{adXaTdmeGz4WKnnR@a2MjD&g6`&wE~m9Pz$w+;0l}@4PGWq_%nOe38rMicEN@{kl|tn>J5m z;fo^cly|UcuznV5!NSiw z{^dVJwmUNoYf7Jd_zaO>Trct;9UDzi)A;B8PvkpOGn-1m)D6#OI)1)&naG37dhdm% z@UK{vy_*l{8d`>lG5z%kBFEhzGPYmjoV#-V(X&Oy-7Rv$jUvPUmS!tQ^@%Khz59M> z0{^YLhU|P!jw8gsI`VASzuU=f-9`nt+%2$WF#lKeH zTTmJFYDr8tJq@L_Z%nk$aCdw#h!MH-(;~C z?tMX|4|M)a83%RnGxiR=i$)f%A~dJN3dAs^)___(#v_Y~yh4 zkFxo#syCXzPaEL;*>#=zov3qS8KvT%^His7*1TS@qgPY-k;Q!bg@`Sbt&J)8UtTS; zOTqen&oi{#JvE7c*=r(Op4R!EwpagP`5SQ^Q}DB{ny*1g8|LR7s&>~4HHrUt^&3sk z4+i~k)U|OftMEUuBFAd7$IQume7@t0!_zG_g@5H+B3lh${>nun=ii(6h3Wm!vQ90l z@Q3sLXU-F0{h#}6F8|1BopMuuX$t>YcjWq9Gf!l_`Ujzpbdau7A(i1@`l`qlBXha* z!STNdTde>F2imiD~~{O4)RXnIb3IByq!C5#uyA9yOlzd_g2j|VZ=q`AIkc8{&m zHh$T zw9Wf@vmoXwo=?=t?~bu85JiF?6MJ{cX!slE7Sr(X68 zcI)%b#ObDE4F3x%%dk^^`OhY)xb*fi<7mx0-?6=qjLGWlqj|4X>K4D{AQ+oqsG<`BA08hGis9$|`Mw%8JL9eT{Pj(F zy_ru`ac9rF!TKm#+&l_(;4l3=likgd;ITIx@~d0 zUUl%ZSD8xmXVW-~|I#q9rX z^^Z*_$|?+*r1npXjftP1d8PfC|CWk>)w(>!-D_NX9O~s2-TT}Sn9QbQ_*brK$Im`i zUGhG}NxCi;Q7V2P=8~JKMXY^mAtsem~x*!#+n{A|Jnp+A8&VZ>!aYL#o10d`(UZ8D%kUDA#{y@16Q~ zaTdp@2>$~0F^!*+yh%)dlT%dU)0vzL|Jlh^g`c?F>KBcnPO14XjB{_x$nxt<5q{p? zC;yPQO})B)09p`xn(b1W-I<0}`1f-$F8+003fFzc5V>KaBK$n(Jc{)_Nd6~MzJG432yg!?G;XI*+l*A9z~KYxDvxrj3S z2V9!rC&ncgUza$8VYn$-#}*H)dnT(4KRicX(=G#>NZD66`BwUKGCnpg!q53f;yd(a z52h|*cQ$WYA8;-$q$>PNUe^6S_2EngCFc?A(sMeNOb)(?Q4xOft=1+yb%}E*R-cl- zjLE6OPrKwxy)0r7pF>X7?dNWP{;q-8EruW8%;KC8Q&Oepe4Ile$LDnp_dSd|1wUsy z$ZL9eyQ&?OLow`y^=Q6PI5I=K^wZZ(IO2h==UNv&6e5N}1(dFpATtCwjABCKGDjhhmt}!3_H3~l+ z{{*>vjZgPAUR@*d%>kLF6D8*piNngME`G)sv4C%f`%j&lJ}1szoY(hp>30Wg19`E% z)))@XG}!)|*NOOzGn!RY7eDeCYq35c*KxA0733H<FToNJX z6O-|G3n$IYeSG7?M?89Zw&z+ju8f!G_)2wibH0a~!f!I4)_CEE)AF-urfZWW>n8Ir zF;cJ8G=9^E*cp3dE^G=r=aEjGRi00`_EXEj!f)-9gJ8dwd6G3b%te*;4QDV8nw0&G z5a*HXT${;mq8x1ep^n-e8)FgnSlDM`AIe|k_SrkYpR7BVhi#>N-_-b1blQ|W9zXed f;*p_r@i*VZwalrML-E>}m-7D^!29<@t_S`Pa1+=1 literal 0 HcmV?d00001 diff --git a/taoyao-signal-server/taoyao-signal/README.md b/taoyao-signal-server/taoyao-signal/README.md index 9bb9cc1..6e15dee 100644 --- a/taoyao-signal-server/taoyao-signal/README.md +++ b/taoyao-signal-server/taoyao-signal/README.md @@ -281,9 +281,9 @@ 响应所有终端状态列表 -## 会议信令(4000~4999) +## 房间信令(4000~4999) -### 创建会议信令(4000) +### 创建房间信令(4000) #### 消息主体 @@ -291,55 +291,55 @@ {} ---- { - "id": "会议标识" + "id": "房间标识" } ``` #### 消息流程:终端->服务端+)终端 -### 关闭会议信令(4001) +### 关闭房间信令(4001) 释放资源、广播广播 -### 进入会议信令(4002) +### 进入房间信令(4002) #### 消息主体 ``` # 请求 { - "id": "会议标识" + "id": "房间标识" } # 广播 { - "id": "会议标识", + "id": "房间标识", "sn": "终端标识" } ``` #### 消息流程:终端->服务端-)终端 -终端进入会议,广播通知其他终端。 +终端进入房间,广播通知其他终端。 -### 离开会议信令(4003) +### 离开房间信令(4003) 广播 ### 邀请终端信令(4004) -邀请终端进入会议,终端确认进入发送进入会议信令。 +邀请终端进入房间,终端确认进入发送进入房间信令。 ### 踢出终端信令(4005) 广播 -### 会议广播信令(4006) +### 房间广播信令(4006) -### 会议终端列表信令(4997) +### 房间终端列表信令(4997) -### 会议状态信令(4998) +### 房间状态信令(4998) -### 会议列表信令(4999) +### 房间列表信令(4999) ## 媒体信令(5000~5999) diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingListenerAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingListenerAdapter.java deleted file mode 100644 index 5dd27b8..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingListenerAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.acgist.taoyao.media.meeting; - -import org.springframework.beans.factory.annotation.Autowired; - -import com.acgist.taoyao.signal.event.ApplicationEventAdapter; -import com.acgist.taoyao.signal.listener.ApplicationListenerAdapter; - -/** - * 会议事件监听适配器 - * - * @param 事件泛型 - * - * @author acgist - */ -public abstract class MeetingListenerAdapter extends ApplicationListenerAdapter { - - @Autowired - protected MeetingManager meetingManager; - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingManager.java deleted file mode 100644 index 8f6667c..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/MeetingManager.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.acgist.taoyao.media.meeting; - -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -import org.springframework.beans.factory.annotation.Autowired; - -import com.acgist.taoyao.boot.annotation.Manager; -import com.acgist.taoyao.boot.service.IdService; - -import lombok.extern.slf4j.Slf4j; - -/** - * 会议管理 - * - * @author acgist - */ -@Slf4j -@Manager -public class MeetingManager { - - @Autowired - private IdService idService; - - /** - * 会议列表 - */ - private List meetings = new CopyOnWriteArrayList<>(); - - /** - * @return 所有会议列表 - */ - public List meetings() { - return this.meetings; - } - - /** - * @param id 会议标识 - * - * @return 会议信息 - */ - public Meeting meeting(String id) { - return this.meetings.stream() - .filter(v -> v.getId().equals(id)) - .findFirst() - .orElse(null); - } - - /** - * @param id 会议标识 - * - * @return 会议所有终端标识 - */ - public List sns(String id) { - final Meeting meeting = this.meeting(id); - return meeting == null ? List.of() : meeting.getSns(); - } - - /** - * 创建会议 - * - * @param sn 创建会议终端标识 - * - * @return 会议信息 - */ - public Meeting create(String sn) { - final Meeting meeting = new Meeting(); - meeting.setId(this.idService.buildIdToString()); - meeting.setSns(new CopyOnWriteArrayList<>()); - meeting.setCreator(sn); - meeting.addSn(sn); - this.meetings.add(meeting); - log.info("创建会议:{}", meeting.getId()); - return meeting; - } - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingCreateListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingCreateListener.java deleted file mode 100644 index d8e9a28..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingCreateListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.acgist.taoyao.media.meeting.listener; - -import java.util.Map; - -import com.acgist.taoyao.boot.annotation.EventListener; -import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.media.meeting.Meeting; -import com.acgist.taoyao.media.meeting.MeetingListenerAdapter; -import com.acgist.taoyao.signal.event.meeting.MeetingCreateEvent; - -/** - * 创建会议监听 - * - * @author acgist - */ -@EventListener -public class MeetingCreateListener extends MeetingListenerAdapter { - - @Override - public void onApplicationEvent(MeetingCreateEvent event) { - final Meeting meeting = this.meetingManager.create(event.getSn()); - final Message message = event.getMessage(); - message.setBody(Map.of("id", meeting.getId())); - this.clientSessionManager.broadcast(message); - } - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingEnterListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingEnterListener.java deleted file mode 100644 index 5d76e06..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/listener/MeetingEnterListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.acgist.taoyao.media.meeting.listener; - -import java.util.Map; - -import com.acgist.taoyao.boot.annotation.EventListener; -import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.boot.model.MessageCode; -import com.acgist.taoyao.boot.model.MessageCodeException; -import com.acgist.taoyao.media.meeting.Meeting; -import com.acgist.taoyao.media.meeting.MeetingListenerAdapter; -import com.acgist.taoyao.signal.event.meeting.MeetingEnterEvent; - -/** - * 进入会议监听 - * - * @author acgist - */ -@EventListener -public class MeetingEnterListener extends MeetingListenerAdapter { - - @Override - public void onApplicationEvent(MeetingEnterEvent event) { - final String sn = event.getSn(); - final String id = event.get("id"); - final Meeting meeting = this.meetingManager.meeting(id); - if(meeting == null) { - throw MessageCodeException.of(MessageCode.CODE_3400, "无效会议"); - } - meeting.addSn(sn); - final Message message = event.getMessage(); - message.setBody(Map.of( - "id", meeting.getId(), - "sn", sn - )); - // TODO:返回房间列表 - meeting.getSns().stream() - .filter(v -> !sn.equals(v)) - .forEach(v -> this.clientSessionManager.unicast(v, message)); - } - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClient.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClient.java index 0e6877f..2eb31a0 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClient.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClient.java @@ -22,6 +22,8 @@ import javax.net.ssl.X509TrustManager; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; import org.springframework.scheduling.TaskScheduler; import org.springframework.stereotype.Service; @@ -29,14 +31,12 @@ import com.acgist.taoyao.boot.model.Header; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.property.MediasoupProperties; import com.acgist.taoyao.boot.property.TaoyaoProperties; -import com.acgist.taoyao.boot.property.WebrtcProperties; import com.acgist.taoyao.boot.utils.JSONUtils; -import com.acgist.taoyao.mediasoup.protocol.ProtocolMediasoupAdapter; -import com.acgist.taoyao.mediasoup.protocol.client.AuthorizeProtocol; +import com.acgist.taoyao.mediasoup.protocol.AuthorizeProtocol; import com.acgist.taoyao.signal.protocol.Protocol; import com.acgist.taoyao.signal.protocol.ProtocolManager; +import com.acgist.taoyao.signal.protocol.ProtocolMediasoupAdapter; -import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; /** @@ -45,6 +45,7 @@ import lombok.extern.slf4j.Slf4j; * @author acgist */ @Slf4j +@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Service public class MediasoupClient { @@ -55,8 +56,6 @@ public class MediasoupClient { @Autowired private TaoyaoProperties taoyaoProperties; @Autowired - private WebrtcProperties webrtcProperties; - @Autowired private AuthorizeProtocol authorizeProtocol; /** @@ -81,9 +80,13 @@ public class MediasoupClient { */ private Map syncMessage = new ConcurrentHashMap<>(); - @PostConstruct - public void init() { - this.mediasoupProperties = this.webrtcProperties.getMediasoup(); + /** + * 初始化客户端 + * + * @param mediasoupProperties Mediasoup配置 + */ + public void init(MediasoupProperties mediasoupProperties) { + this.mediasoupProperties = mediasoupProperties; this.buildClient(); } @@ -147,6 +150,22 @@ public class MediasoupClient { return response; } + /** + * 打开通道 + */ + private void open(WebSocket webSocket) { + // 关闭旧的通道 + if(this.webSocket != null && !(this.webSocket.isInputClosed() && this.webSocket.isOutputClosed())) { + this.webSocket.abort(); + } + // 重置重试次数 + this.retry = 1; + // 设置新的通道 + this.webSocket = webSocket; + // 发送授权消息 + this.send(this.authorizeProtocol.build(this.mediasoupProperties)); + } + /** * 处理消息 * @@ -189,16 +208,7 @@ public class MediasoupClient { public void onOpen(WebSocket webSocket) { log.info("Mediasoup通道打开:{}", webSocket); Listener.super.onOpen(webSocket); - // 关闭旧的通道 - if(MediasoupClient.this.webSocket != null && !(MediasoupClient.this.webSocket.isInputClosed() && MediasoupClient.this.webSocket.isOutputClosed())) { - MediasoupClient.this.webSocket.abort(); - } - // 重置重试次数 - MediasoupClient.this.retry = 1; - // 设置新的通道 - MediasoupClient.this.webSocket = webSocket; - // 发送授权消息 - MediasoupClient.this.send(MediasoupClient.this.authorizeProtocol.build()); + MediasoupClient.this.open(webSocket); } @Override diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClientManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClientManager.java new file mode 100644 index 0000000..2f29c4f --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/MediasoupClientManager.java @@ -0,0 +1,44 @@ +package com.acgist.taoyao.mediasoup; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; + +import com.acgist.taoyao.boot.annotation.Manager; +import com.acgist.taoyao.boot.property.WebrtcProperties; + +import jakarta.annotation.PostConstruct; +import lombok.extern.slf4j.Slf4j; + +/** + * Mediasoup客户端管理 + * + * @author acgist + */ +@Slf4j +@Manager +public class MediasoupClientManager { + + @Autowired + private WebrtcProperties webrtcProperties; + @Autowired + private ApplicationContext applicationContext; + + /** + * Mediasoup客户端列表 + */ + private List clientList = new ArrayList<>(); + + @PostConstruct + public void init() { + this.webrtcProperties.getMediasoupList().forEach(v -> { + final MediasoupClient client = this.applicationContext.getBean(MediasoupClient.class); + client.init(v); + this.clientList.add(client); + log.info("新建MediasoupClient:{}-{}", v.getAddress(), client); + }); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Router.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Router.java new file mode 100644 index 0000000..ea9bc7f --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Router.java @@ -0,0 +1,33 @@ +package com.acgist.taoyao.mediasoup; + +import java.io.Closeable; +import java.util.List; + +import com.acgist.taoyao.signal.room.Room; + +import lombok.extern.slf4j.Slf4j; + +/** + * 路由 + * + * @author acgist + */ +@Slf4j +public class Router implements Closeable { + + /** + * 房间 + */ + private Room room; + /** + * 传输通道列表 + */ + private List transportList; + + @Override + public void close() { + log.info("关闭路由:{}", this.room.getId()); + this.transportList.forEach(Transport::close); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Stream.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Stream.java new file mode 100644 index 0000000..67cf05c --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Stream.java @@ -0,0 +1,52 @@ +package com.acgist.taoyao.mediasoup; + +import java.io.Closeable; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +/** + * 终端媒体流 + * + * @author acgist + */ +@Slf4j +@Getter +@Setter +public class Stream implements Closeable { + + /** + * 类型 + * + * @author acgist + */ + public enum Kind { + + /** + * 音频 + */ + AUDIO, + /** + * 视频 + */ + VIDEO; + + } + + /** + * 媒体流ID + */ + private String streamId; + /** + * 媒体流描述 + */ + private String description; + + @Override + public void close() { + log.info("关闭媒体:{}", this.streamId); + // TODO:发送 + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Transport.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Transport.java new file mode 100644 index 0000000..c4f4137 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/Transport.java @@ -0,0 +1,34 @@ +package com.acgist.taoyao.mediasoup; + +import java.io.Closeable; +import java.util.List; + +import com.acgist.taoyao.signal.client.ClientSession; + +/** + * 传输通道 + * + * @author acgist + */ +public class Transport implements Closeable { + + /** + * 终端 + */ + private ClientSession clientSession; + /** + * 生产者列表 + */ + private List producerList; + /** + * 消费者列表 + */ + private List consumerList; + + @Override + public void close() { + this.producerList.forEach(Stream::close); + this.consumerList.forEach(Stream::close); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/client/ClientStream.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/client/ClientStream.java deleted file mode 100644 index 655eaf4..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/client/ClientStream.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.acgist.taoyao.mediasoup.client; - -/** - * 终端媒体:producer、consumer - * - * @author acgist - */ -public class ClientStream { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ApplyNetworkThrottleProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ApplyNetworkThrottleProtocol.java new file mode 100644 index 0000000..3e7be30 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ApplyNetworkThrottleProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ApplyNetworkThrottleProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/client/AuthorizeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/AuthorizeProtocol.java similarity index 64% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/client/AuthorizeProtocol.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/AuthorizeProtocol.java index 6a2744c..aeb562c 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/client/AuthorizeProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/AuthorizeProtocol.java @@ -1,15 +1,12 @@ -package com.acgist.taoyao.mediasoup.protocol.client; +package com.acgist.taoyao.mediasoup.protocol; import java.net.http.WebSocket; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; - import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.property.MediasoupProperties; -import com.acgist.taoyao.boot.property.WebrtcProperties; -import com.acgist.taoyao.mediasoup.protocol.ProtocolMediasoupAdapter; +import com.acgist.taoyao.signal.protocol.ProtocolMediasoupAdapter; import lombok.extern.slf4j.Slf4j; @@ -24,16 +21,18 @@ public class AuthorizeProtocol extends ProtocolMediasoupAdapter { public static final Integer PID = 6000; - @Autowired - private WebrtcProperties webrtcProperties; - public AuthorizeProtocol() { super(PID, "Mediasoup终端授权信令"); } - @Override - public Message build() { - final MediasoupProperties mediasoup = this.webrtcProperties.getMediasoup(); + /** + * 创建信令消息 + * + * @param mediasoup Mediasoup配置 + * + * @return 信令消息 + */ + public Message build(MediasoupProperties mediasoup) { return super.build(Map.of( "username", mediasoup.getUsername(), "password", mediasoup.getPassword() diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ChangeDisplayNameProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ChangeDisplayNameProtocol.java new file mode 100644 index 0000000..2709281 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ChangeDisplayNameProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ChangeDisplayNameProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CloseProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CloseProducerProtocol.java new file mode 100644 index 0000000..a9c7ce8 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CloseProducerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class CloseProducerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ConnectWebRtcTransportProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ConnectWebRtcTransportProtocol.java new file mode 100644 index 0000000..528fed5 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ConnectWebRtcTransportProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ConnectWebRtcTransportProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CreateWebRtcTransportProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CreateWebRtcTransportProtocol.java new file mode 100644 index 0000000..4361b75 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/CreateWebRtcTransportProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class CreateWebRtcTransportProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetConsumerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetConsumerStatsProtocol.java new file mode 100644 index 0000000..4ffb921 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetConsumerStatsProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class GetConsumerStatsProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataConsumerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataConsumerStatsProtocol.java new file mode 100644 index 0000000..fc42014 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataConsumerStatsProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class GetDataConsumerStatsProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataProducerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataProducerStatsProtocol.java new file mode 100644 index 0000000..e417781 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetDataProducerStatsProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class GetDataProducerStatsProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetProducerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetProducerStatsProtocol.java new file mode 100644 index 0000000..e4a634c --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetProducerStatsProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class GetProducerStatsProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetTransportStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetTransportStatsProtocol.java new file mode 100644 index 0000000..9266934 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/GetTransportStatsProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class GetTransportStatsProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/NewPeerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/NewPeerProtocol.java new file mode 100644 index 0000000..b77f3d0 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/NewPeerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class NewPeerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseConsumerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseConsumerProtocol.java new file mode 100644 index 0000000..85468da --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseConsumerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class PauseConsumerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseProducerProtocol.java new file mode 100644 index 0000000..2d04561 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/PauseProducerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class PauseProducerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceDataProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceDataProtocol.java new file mode 100644 index 0000000..0b6edbc --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceDataProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ProduceDataProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceProtocol.java new file mode 100644 index 0000000..e542bd7 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProduceProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ProduceProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProducerScoreProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProducerScoreProtocol.java new file mode 100644 index 0000000..8dc8c69 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProducerScoreProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ProducerScoreProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RequestConsumerKeyFrameProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RequestConsumerKeyFrameProtocol.java new file mode 100644 index 0000000..d858452 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RequestConsumerKeyFrameProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class RequestConsumerKeyFrameProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResetNetworkThrottleProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResetNetworkThrottleProtocol.java new file mode 100644 index 0000000..78a6a3a --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResetNetworkThrottleProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ResetNetworkThrottleProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RestartIceProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RestartIceProtocol.java new file mode 100644 index 0000000..b917f5e --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/RestartIceProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class RestartIceProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeConsumerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeConsumerProtocol.java new file mode 100644 index 0000000..65d7953 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeConsumerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ResumeConsumerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeProducerProtocol.java new file mode 100644 index 0000000..c308e52 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ResumeProducerProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class ResumeProducerProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPreferredLayersProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPreferredLayersProtocol.java similarity index 50% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPreferredLayersProtocol.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPreferredLayersProtocol.java index aee56cf..87c59be 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPreferredLayersProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPreferredLayersProtocol.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.mediasoup.protocol.media; +package com.acgist.taoyao.mediasoup.protocol; public class SetConsumerPreferredLayersProtocol { diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPriorityProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPriorityProtocol.java new file mode 100644 index 0000000..618d9cc --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/SetConsumerPriorityProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class SetConsumerPriorityProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/VideoorientationchangeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/VideoorientationchangeProtocol.java new file mode 100644 index 0000000..0e8bb45 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/VideoorientationchangeProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.mediasoup.protocol; + +public class VideoorientationchangeProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ApplyNetworkThrottleProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ApplyNetworkThrottleProtocol.java deleted file mode 100644 index e24afa8..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ApplyNetworkThrottleProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ApplyNetworkThrottleProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ChangeDisplayNameProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ChangeDisplayNameProtocol.java deleted file mode 100644 index 975ef2f..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ChangeDisplayNameProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ChangeDisplayNameProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CloseProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CloseProducerProtocol.java deleted file mode 100644 index 86913fc..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CloseProducerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class CloseProducerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ConnectWebRtcTransportProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ConnectWebRtcTransportProtocol.java deleted file mode 100644 index 8f5bd83..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ConnectWebRtcTransportProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ConnectWebRtcTransportProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CreateWebRtcTransportProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CreateWebRtcTransportProtocol.java deleted file mode 100644 index 8cf3b22..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/CreateWebRtcTransportProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class CreateWebRtcTransportProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetConsumerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetConsumerStatsProtocol.java deleted file mode 100644 index c0e19a1..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetConsumerStatsProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class GetConsumerStatsProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataConsumerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataConsumerStatsProtocol.java deleted file mode 100644 index 10ba2af..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataConsumerStatsProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class GetDataConsumerStatsProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataProducerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataProducerStatsProtocol.java deleted file mode 100644 index 9f86633..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetDataProducerStatsProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class GetDataProducerStatsProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetProducerStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetProducerStatsProtocol.java deleted file mode 100644 index 7132837..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetProducerStatsProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class GetProducerStatsProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetTransportStatsProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetTransportStatsProtocol.java deleted file mode 100644 index 9c6d916..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/GetTransportStatsProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class GetTransportStatsProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/NewPeerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/NewPeerProtocol.java deleted file mode 100644 index 503b363..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/NewPeerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class NewPeerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseConsumerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseConsumerProtocol.java deleted file mode 100644 index 6643c12..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseConsumerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class PauseConsumerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseProducerProtocol.java deleted file mode 100644 index 0e5dcfb..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/PauseProducerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class PauseProducerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceDataProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceDataProtocol.java deleted file mode 100644 index fd59597..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceDataProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ProduceDataProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceProtocol.java deleted file mode 100644 index f0f8e44..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProduceProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ProduceProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProducerScoreProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProducerScoreProtocol.java deleted file mode 100644 index 06481ea..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ProducerScoreProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ProducerScoreProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RequestConsumerKeyFrameProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RequestConsumerKeyFrameProtocol.java deleted file mode 100644 index 5a1ec76..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RequestConsumerKeyFrameProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class RequestConsumerKeyFrameProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResetNetworkThrottleProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResetNetworkThrottleProtocol.java deleted file mode 100644 index 24b8f16..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResetNetworkThrottleProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ResetNetworkThrottleProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RestartIceProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RestartIceProtocol.java deleted file mode 100644 index b176c40..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/RestartIceProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class RestartIceProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeConsumerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeConsumerProtocol.java deleted file mode 100644 index 5bafa8b..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeConsumerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ResumeConsumerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeProducerProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeProducerProtocol.java deleted file mode 100644 index 8e7294d..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/ResumeProducerProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class ResumeProducerProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPriorityProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPriorityProtocol.java deleted file mode 100644 index 53ebe3d..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/SetConsumerPriorityProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class SetConsumerPriorityProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/VideoorientationchangeProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/VideoorientationchangeProtocol.java deleted file mode 100644 index bb1f123..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/media/VideoorientationchangeProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.mediasoup.protocol.media; - -public class VideoorientationchangeProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/router/Router.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/router/Router.java deleted file mode 100644 index 2618322..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/router/Router.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.acgist.taoyao.mediasoup.router; - -import java.util.List; - -import com.acgist.taoyao.mediasoup.transport.Transport; - -/** - * 路由 - * - * @author acgist - */ -public final class Router { - - /** - * 传输通道列表 - */ - private List transportList; - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/transport/Transport.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/transport/Transport.java deleted file mode 100644 index ff27f13..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/transport/Transport.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.acgist.taoyao.mediasoup.transport; - -import java.util.List; - -import com.acgist.taoyao.mediasoup.client.ClientStream; -import com.acgist.taoyao.signal.client.ClientSession; - -/** - * 传输通道 - * - * @author acgist - */ -public final class Transport { - - /** - * 终端 - */ - private ClientSession clientSession; - /** - * 生产者列表 - */ - private List producerList; - /** - * 消费者列表 - */ - private List consumerList; - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/controller/MeetingController.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java similarity index 57% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/controller/MeetingController.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java index 71f792f..7dfdce7 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/controller/MeetingController.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/controller/RoomController.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.media.meeting.controller; +package com.acgist.taoyao.signal.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -7,8 +7,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.media.meeting.Meeting; -import com.acgist.taoyao.media.meeting.MeetingManager; +import com.acgist.taoyao.signal.room.Room; +import com.acgist.taoyao.signal.room.RoomManager; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; @@ -17,35 +17,35 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; /** - * 会议 + * 房间 * * @author acgist */ -@Tag(name = "会议", description = "会议管理") +@Tag(name = "房间", description = "房间管理") @RestController -@RequestMapping("/meeting") -public class MeetingController { +@RequestMapping("/room") +public class RoomController { @Autowired - private MeetingManager meetingManager; + private RoomManager roomManager; - @Operation(summary = "会议列表", description = "会议列表") + @Operation(summary = "房间列表", description = "房间列表") @GetMapping("/list") - @ApiResponse(content = @Content(schema = @Schema(implementation = Meeting.class))) + @ApiResponse(content = @Content(schema = @Schema(implementation = Room.class))) public Message list() { - return Message.success(this.meetingManager.meetings()); + return Message.success(this.roomManager.roomList()); } - @Operation(summary = "会议状态", description = "会议状态") + @Operation(summary = "房间状态", description = "房间状态") @GetMapping("/status/{id}") public Message status(@PathVariable String id) { - return Message.success(this.meetingManager.meeting(id)); + return Message.success(this.roomManager.room(id)); } - @Operation(summary = "会议终端列表", description = "会议终端列表") + @Operation(summary = "房间终端列表", description = "房间终端列表") @GetMapping("/list/client/{id}") public Message listClient(@PathVariable String id) { - return Message.success(this.meetingManager.sns(id)); + return Message.success(this.roomManager.snList(id)); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingEnterEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java similarity index 61% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingEnterEvent.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java index 7ce5df1..9e24eeb 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingEnterEvent.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomCreateEvent.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.signal.event.meeting; +package com.acgist.taoyao.signal.event.room; import java.util.Map; @@ -10,17 +10,17 @@ import lombok.Getter; import lombok.Setter; /** - * 进入会议事件 + * 创建房间事件 * * @author acgist */ @Getter @Setter -public class MeetingEnterEvent extends ApplicationEventAdapter { +public class RoomCreateEvent extends ApplicationEventAdapter { private static final long serialVersionUID = 1L; - public MeetingEnterEvent(String sn, Map body, Message message, ClientSession session) { + public RoomCreateEvent(String sn, Map body, Message message, ClientSession session) { super(sn, body, message, session); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingCreateEvent.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java similarity index 61% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingCreateEvent.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java index 82949e1..2f06a77 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/meeting/MeetingCreateEvent.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/event/room/RoomEnterEvent.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.signal.event.meeting; +package com.acgist.taoyao.signal.event.room; import java.util.Map; @@ -10,17 +10,17 @@ import lombok.Getter; import lombok.Setter; /** - * 创建会议事件 + * 进入房间事件 * * @author acgist */ @Getter @Setter -public class MeetingCreateEvent extends ApplicationEventAdapter { +public class RoomEnterEvent extends ApplicationEventAdapter { private static final long serialVersionUID = 1L; - public MeetingCreateEvent(String sn, Map body, Message message, ClientSession session) { + public RoomEnterEvent(String sn, Map body, Message message, ClientSession session) { super(sn, body, message, session); } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/RoomListenerAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/RoomListenerAdapter.java new file mode 100644 index 0000000..deddcc6 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/RoomListenerAdapter.java @@ -0,0 +1,20 @@ +package com.acgist.taoyao.signal.listener; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.acgist.taoyao.signal.event.ApplicationEventAdapter; +import com.acgist.taoyao.signal.room.RoomManager; + +/** + * 房间事件监听适配器 + * + * @param 事件泛型 + * + * @author acgist + */ +public abstract class RoomListenerAdapter extends ApplicationListenerAdapter { + + @Autowired + protected RoomManager roomManager; + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/ClientCloseListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/ClientCloseListener.java index 48ea8ac..46cd2e5 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/ClientCloseListener.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/client/ClientCloseListener.java @@ -40,7 +40,7 @@ public class ClientCloseListener extends ApplicationListenerAdapter { + + @Override + public void onApplicationEvent(RoomCreateEvent event) { + final Room room = this.roomManager.create(event.getSn()); + final Message message = event.getMessage(); + message.setBody(Map.of("id", room.getId())); + this.clientSessionManager.broadcast(message); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java new file mode 100644 index 0000000..a502f46 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/listener/room/RoomEnterListener.java @@ -0,0 +1,41 @@ +package com.acgist.taoyao.signal.listener.room; + +import java.util.Map; + +import com.acgist.taoyao.boot.annotation.EventListener; +import com.acgist.taoyao.boot.model.Message; +import com.acgist.taoyao.boot.model.MessageCode; +import com.acgist.taoyao.boot.model.MessageCodeException; +import com.acgist.taoyao.signal.event.room.RoomEnterEvent; +import com.acgist.taoyao.signal.listener.RoomListenerAdapter; +import com.acgist.taoyao.signal.room.Room; + +/** + * 进入房间监听 + * + * @author acgist + */ +@EventListener +public class RoomEnterListener extends RoomListenerAdapter { + + @Override + public void onApplicationEvent(RoomEnterEvent event) { + final String sn = event.getSn(); + final String id = event.get("id"); + final Room room = this.roomManager.room(id); + if(room == null) { + throw MessageCodeException.of(MessageCode.CODE_3400, "无效房间"); + } + room.addSn(sn); + final Message message = event.getMessage(); + message.setBody(Map.of( + "id", room.getId(), + "sn", sn + )); + // TODO:返回房间列表 + room.getSnList().stream() + .filter(v -> !sn.equals(v)) + .forEach(v -> this.clientSessionManager.unicast(v, message)); + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/Protocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/Protocol.java index 9a06489..37b1325 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/Protocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/Protocol.java @@ -12,7 +12,7 @@ import com.acgist.taoyao.signal.event.ApplicationEventAdapter; * * 1000~1999:平台信令 * 2000~2999:终端信令 - * 3000~3999:会议信令 + * 3000~3999:房间信令 * 5000~5999:媒体信令 * 6000~6999:媒体信令(Mediasoup) * diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolJavaAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolJavaAdapter.java deleted file mode 100644 index a6c394f..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolJavaAdapter.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.acgist.taoyao.signal.protocol; - -import java.util.Map; - -import org.springframework.cglib.beans.BeanMap; - -import com.acgist.taoyao.boot.model.Message; -import com.acgist.taoyao.boot.model.MessageCodeException; -import com.acgist.taoyao.boot.utils.BeanUtils; -import com.acgist.taoyao.signal.client.ClientSession; - -/** - * Java主体信令适配器 - * - * @author acgist - */ -public abstract class ProtocolJavaAdapter extends ProtocolAdapter { - - /** - * 对象类型 - */ - private final Class clazz; - - protected ProtocolJavaAdapter(Integer pid, String name, Class clazz) { - super(pid, name); - this.clazz = clazz; - } - - @Override - public void execute(String sn, Message message, ClientSession session) { - final Object body = message.getBody(); - if(body instanceof Map map) { - final T t = BeanUtils.newInstance(this.clazz); - final BeanMap beanMap = BeanMap.create(t); - beanMap.putAll(map); - this.execute(sn, t, message, session); - } else { - throw MessageCodeException.of("信令主体类型错误:" + message); - } - } - - /** - * 处理信令消息 - * - * @param sn 终端标识 - * @param body 消息主体 - * @param message 信令消息 - * @param session 会话 - */ - public abstract void execute(String sn, T body, Message message, ClientSession session); - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProtocolMediasoupAdapter.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediasoupAdapter.java similarity index 89% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProtocolMediasoupAdapter.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediasoupAdapter.java index 02291b4..61031d0 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/mediasoup/protocol/ProtocolMediasoupAdapter.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/ProtocolMediasoupAdapter.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.mediasoup.protocol; +package com.acgist.taoyao.signal.protocol; import java.net.http.WebSocket; @@ -8,7 +8,6 @@ import org.springframework.context.annotation.Lazy; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.mediasoup.MediasoupClient; import com.acgist.taoyao.signal.client.ClientSession; -import com.acgist.taoyao.signal.protocol.ProtocolAdapter; /** * Mediasoup信令适配器 diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java index 6c42d6a..f69c0a5 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/client/ClientRegisterProtocol.java @@ -2,16 +2,15 @@ package com.acgist.taoyao.signal.protocol.client; import java.util.Map; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.boot.model.MessageCode; -import com.acgist.taoyao.boot.property.SecurityProperties; import com.acgist.taoyao.signal.client.ClientSession; import com.acgist.taoyao.signal.event.client.ClientRegisterEvent; import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter; +import com.acgist.taoyao.signal.service.SecurityService; import lombok.extern.slf4j.Slf4j; @@ -27,7 +26,7 @@ public class ClientRegisterProtocol extends ProtocolMapAdapter { public static final Integer PID = 2000; @Autowired - private SecurityProperties securityProperties; + private SecurityService securityService; public ClientRegisterProtocol() { super(PID, "终端注册信令"); @@ -38,11 +37,7 @@ public class ClientRegisterProtocol extends ProtocolMapAdapter { final String username = (String) body.get("username"); final String password = (String) body.get("password"); // 如果需要终端鉴权在此实现 - if( - Boolean.FALSE.equals(this.securityProperties.getEnabled()) || - StringUtils.equals(this.securityProperties.getUsername(), username) && - StringUtils.equals(this.securityProperties.getPassword(), password) - ) { + if(this.securityService.authenticate(username, password)) { log.info("终端注册:{}", sn); session.authorize(sn); message.setCode(MessageCode.CODE_0000); diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingClientListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingClientListProtocol.java deleted file mode 100644 index 289b02f..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingClientListProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingClientListProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCloseProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCloseProtocol.java deleted file mode 100644 index 5a028a8..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCloseProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingCloseProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingExpelProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingExpelProtocol.java deleted file mode 100644 index 0617b8b..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingExpelProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingExpelProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingInviteProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingInviteProtocol.java deleted file mode 100644 index 5e9d70e..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingInviteProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingInviteProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingLeaveProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingLeaveProtocol.java deleted file mode 100644 index 0844aba..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingLeaveProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingLeaveProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingListProtocol.java deleted file mode 100644 index 76adcf4..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingListProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingListProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingStatusProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingStatusProtocol.java deleted file mode 100644 index a7d6fd3..0000000 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingStatusProtocol.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.acgist.taoyao.signal.protocol.meeting; - -public class MeetingStatusProtocol { - -} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListProtocol.java new file mode 100644 index 0000000..f22db8b --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomClientListProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomClientListProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCloseProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCloseProtocol.java new file mode 100644 index 0000000..4e4e382 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCloseProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomCloseProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCreateProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java similarity index 55% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCreateProtocol.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java index d395cf6..5d0360b 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingCreateProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomCreateProtocol.java @@ -1,30 +1,30 @@ -package com.acgist.taoyao.signal.protocol.meeting; +package com.acgist.taoyao.signal.protocol.room; import java.util.Map; import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.signal.client.ClientSession; -import com.acgist.taoyao.signal.event.meeting.MeetingCreateEvent; +import com.acgist.taoyao.signal.event.room.RoomCreateEvent; import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter; /** - * 创建会议信令 + * 创建房间信令 * * @author acgist */ @Protocol -public class MeetingCreateProtocol extends ProtocolMapAdapter { +public class RoomCreateProtocol extends ProtocolMapAdapter { public static final Integer PID = 4000; - public MeetingCreateProtocol() { - super(PID, "创建会议信令"); + public RoomCreateProtocol() { + super(PID, "创建房间信令"); } @Override public void execute(String sn, Map body, Message message, ClientSession session) { - this.publishEvent(new MeetingCreateEvent(sn, body, message, session)); + this.publishEvent(new RoomCreateEvent(sn, body, message, session)); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingEnterProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java similarity index 55% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingEnterProtocol.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java index 87f3c06..1b05e6a 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/meeting/MeetingEnterProtocol.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomEnterProtocol.java @@ -1,30 +1,30 @@ -package com.acgist.taoyao.signal.protocol.meeting; +package com.acgist.taoyao.signal.protocol.room; import java.util.Map; import com.acgist.taoyao.boot.annotation.Protocol; import com.acgist.taoyao.boot.model.Message; import com.acgist.taoyao.signal.client.ClientSession; -import com.acgist.taoyao.signal.event.meeting.MeetingEnterEvent; +import com.acgist.taoyao.signal.event.room.RoomEnterEvent; import com.acgist.taoyao.signal.protocol.ProtocolMapAdapter; /** - * 进入会议信令 + * 进入房间信令 * * @author acgist */ @Protocol -public class MeetingEnterProtocol extends ProtocolMapAdapter { +public class RoomEnterProtocol extends ProtocolMapAdapter { public static final Integer PID = 4002; - public MeetingEnterProtocol() { - super(PID, "进入会议信令"); + public RoomEnterProtocol() { + super(PID, "进入房间信令"); } @Override public void execute(String sn, Map body, Message message, ClientSession session) { - this.publishEvent(new MeetingEnterEvent(sn, body, message, session)); + this.publishEvent(new RoomEnterEvent(sn, body, message, session)); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomExpelProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomExpelProtocol.java new file mode 100644 index 0000000..c706742 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomExpelProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomExpelProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomInviteProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomInviteProtocol.java new file mode 100644 index 0000000..0e3db77 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomInviteProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomInviteProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomLeaveProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomLeaveProtocol.java new file mode 100644 index 0000000..0d46b8b --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomLeaveProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomLeaveProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java new file mode 100644 index 0000000..e80a6c5 --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomListProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomListProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java new file mode 100644 index 0000000..a4ef99b --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/protocol/room/RoomStatusProtocol.java @@ -0,0 +1,5 @@ +package com.acgist.taoyao.signal.protocol.room; + +public class RoomStatusProtocol { + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/Meeting.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java similarity index 58% rename from taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/Meeting.java rename to taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java index de56d3a..a9b4775 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/media/meeting/Meeting.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/Room.java @@ -1,4 +1,4 @@ -package com.acgist.taoyao.media.meeting; +package com.acgist.taoyao.signal.room; import java.util.List; @@ -7,35 +7,35 @@ import lombok.Getter; import lombok.Setter; /** - * 会议 + * 房间 * * @author acgist */ @Getter @Setter -@Schema(title = "会议", description = "会议") -public class Meeting { +@Schema(title = "房间", description = "房间") +public class Room { /** - * 会议标识 + * 房间标识 */ - @Schema(title = "会议标识", description = "会议标识") + @Schema(title = "房间标识", description = "房间标识") private String id; /** - * 会议名称 + * 房间名称 */ - @Schema(title = "会议名称", description = "会议名称") + @Schema(title = "房间名称", description = "房间名称") private String name; /** - * 会议密码 + * 房间密码 */ - @Schema(title = "会议密码", description = "会议密码") + @Schema(title = "房间密码", description = "房间密码") private String password; /** * 终端会话标识列表 */ @Schema(title = "终端会话标识列表", description = "终端会话标识列表") - private List sns; + private List snList; /** * 创建终端标识 */ @@ -48,11 +48,11 @@ public class Meeting { * @param sn 终端会话标识 */ public void addSn(String sn) { - synchronized (this.sns) { - if(this.sns.contains(sn)) { + synchronized (this.snList) { + if(this.snList.contains(sn)) { return; } - this.sns.add(sn); + this.snList.add(sn); } } diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java new file mode 100644 index 0000000..772771b --- /dev/null +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/room/RoomManager.java @@ -0,0 +1,77 @@ +package com.acgist.taoyao.signal.room; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.acgist.taoyao.boot.annotation.Manager; +import com.acgist.taoyao.boot.service.IdService; + +import lombok.extern.slf4j.Slf4j; + +/** + * 房间管理 + * + * @author acgist + */ +@Slf4j +@Manager +public class RoomManager { + + @Autowired + private IdService idService; + + /** + * 房间列表 + */ + private List roomList = new CopyOnWriteArrayList<>(); + + /** + * @return 所有房间列表 + */ + public List roomList() { + return this.roomList; + } + + /** + * @param id 房间标识 + * + * @return 房间信息 + */ + public Room room(String id) { + return this.roomList.stream() + .filter(v -> v.getId().equals(id)) + .findFirst() + .orElse(null); + } + + /** + * @param id 房间标识 + * + * @return 房间所有终端标识 + */ + public List snList(String id) { + final Room room = this.room(id); + return room == null ? List.of() : room.getSnList(); + } + + /** + * 创建房间 + * + * @param sn 创建房间终端标识 + * + * @return 房间信息 + */ + public Room create(String sn) { + final Room room = new Room(); + room.setId(this.idService.buildIdToString()); + room.setSnList(new CopyOnWriteArrayList<>()); + room.setCreator(sn); + room.addSn(sn); + this.roomList.add(room); + log.info("创建房间:{}", room.getId()); + return room; + } + +} diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java index a70276b..a6dc928 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/SecurityService.java @@ -11,6 +11,16 @@ import com.acgist.taoyao.signal.protocol.Protocol; */ public interface SecurityService { + /** + * 鉴权 + * + * @param username 用户名称 + * @param password 用户密码 + * + * @return 是否成功 + */ + boolean authenticate(String username, String password); + /** * 鉴权 * diff --git a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java index 90d976c..5834e88 100644 --- a/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java +++ b/taoyao-signal-server/taoyao-signal/src/main/java/com/acgist/taoyao/signal/service/impl/SecurityServiceImpl.java @@ -1,13 +1,34 @@ package com.acgist.taoyao.signal.service.impl; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; + import com.acgist.taoyao.boot.model.Header; import com.acgist.taoyao.boot.model.Message; +import com.acgist.taoyao.boot.property.SecurityProperties; import com.acgist.taoyao.signal.client.ClientSession; import com.acgist.taoyao.signal.protocol.Protocol; import com.acgist.taoyao.signal.service.SecurityService; public class SecurityServiceImpl implements SecurityService { + @Autowired + private SecurityProperties securityProperties; + + @Override + public boolean authenticate(String username, String password) { + if( + Boolean.FALSE.equals(this.securityProperties.getEnabled()) || + ( + StringUtils.equals(this.securityProperties.getUsername(), username) && + StringUtils.equals(this.securityProperties.getPassword(), password) + ) + ) { + return true; + } + return false; + } + @Override public boolean authenticate(Message message, ClientSession session, Protocol protocol) { if(!session.authorized()) { @@ -15,13 +36,14 @@ public class SecurityServiceImpl implements SecurityService { } final Header header = message.getHeader(); final String sn = header.getSn(); + // 验证信令终端 if(!sn.equals(session.sn())) { return false; } + // 信令权限鉴定 if(!protocol.authenticate(message)) { return false; } - // 更多 return true; }