From 1d8507862bb44f58a4a0296b221519d0be66542a Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Tue, 23 May 2023 19:56:16 +0800 Subject: [PATCH] [+] Docker --- README.md | 8 ++ docs/Docker.md | 73 +++++++++++++++++++ taoyao-signal-server/docs/bin/startup.sh | 19 ++--- taoyao-signal-server/docs/bin/wait.sh | 5 +- .../java/com/acgist/taoyao/rtp/RtpTest.java | 7 ++ 5 files changed, 101 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 4f93d4e..fa78a6f 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,14 @@ > 注意:Web终端不支持同时进入多个视频房间,安卓终端支持同时进入多个视频房间。 +## Docker + +``` +acgist/taoyao-client-web +acgist/taoyao-client-media +acgist/taoyao-signal-server +``` + ## 证书 本地开发测试安装`docs/certs`中的`ca.crt`证书到`受信任的根证书颁发机构` diff --git a/docs/Docker.md b/docs/Docker.md index e69de29..5881278 100644 --- a/docs/Docker.md +++ b/docs/Docker.md @@ -0,0 +1,73 @@ +# Docker + +## 镜像 + +``` +# Web +docker pull acgist/taoyao-client-web:1.0.0 +docker run --name="taoyao-client-web" -d acgist/taoyao-client-web:1.0.0 +docker run --name="taoyao-client-web" -d -p 0.0.0.0:8443:8443 acgist/taoyao-client-web:1.0.0 +docker run --name="taoyao-client-web" -it acgist/taoyao-client-web:1.0.0 /bin/bash +docker exec -it acgist/taoyao-client-web:1.0.0 /bin/bash + +# 媒体服务 +docker pull acgist/taoyao-client-media:1.0.0 +docker run --name="taoyao-client-media" -d acgist/taoyao-client-media:1.0.0 +docker run --name="taoyao-client-media" -it acgist/taoyao-client-media:1.0.0 /bin/bash +docker exec -it acgist/taoyao-client-media:1.0.0 /bin/bash + +# 信令服务 +docker pull acgist/taoyao-signal-server:1.0.0 +docker run --name="taoyao-signal-server" -d acgist/taoyao-signal-server:1.0.0 +docker run --name="taoyao-signal-server" -d -p 0.0.0.0:8888:8888 -p 0.0.0.0:9999:9999 acgist/taoyao-signal-server:1.0.0 +docker run --name="taoyao-signal-server" -it acgist/taoyao-signal-server:1.0.0 /bin/bash +docker exec -it acgist/taoyao-signal-server:1.0.0 /bin/bash +``` + +## 制作 + +``` +# Web +docker image build -t acgist/taoyao-client-web:1.0.0 . +docker push acgist/taoyao-client-web:1.0.0 + +# 媒体服务 +docker image build -t acgist/taoyao-client-media:1.0.0 . +docker push acgist/taoyao-client-media:1.0.0 + +# 信令服务 +docker image build -t acgist/taoyao-signal-server:1.0.0 . +docker push acgist/taoyao-signal-server:1.0.0 +``` + +## Dockerfile + +### Web + +``` +FROM node:18.16.0 +EXPOSE 8443/tcp +COPY taoyao-client-web /data/taoyao/taoyao-client-web +WORKDIR /data/taoyao/taoyao-client-web +CMD npm run dev +``` + +### 媒体服务 + +``` +FROM node:18.16.0 +COPY taoyao-client-media /data/taoyao/taoyao-client-media +WORKDIR /data/taoyao/taoyao-client-media +CMD npm run dev +``` + +### 信令服务 + +``` +FROM openjdk:17.0.2-jdk +EXPOSE 8888/tcp +EXPOSE 9999/tcp +COPY taoyao-signal-server /data/taoyao/taoyao-signal-server +WORKDIR /data/taoyao/taoyao-signal-server +CMD ./deploy/bin/startup.sh +``` diff --git a/taoyao-signal-server/docs/bin/startup.sh b/taoyao-signal-server/docs/bin/startup.sh index ed209cd..e8f8312 100644 --- a/taoyao-signal-server/docs/bin/startup.sh +++ b/taoyao-signal-server/docs/bin/startup.sh @@ -6,16 +6,17 @@ base=${bin%/*} cd $base echo "启动目录:$base" -# Java运行环境 -JAVA=$(which java) -if [ -z "$JAVA" ] ; then - echo "必须安装${java.version}+JDK" - exit 1 -fi - # 结束任务 if [ ! -f "/.dockerenv" ]; then - sh bin/stop.sh + # Java运行环境 + JAVA=$(which java) + if [ -z "$JAVA" ] ; then + echo "必须安装${java.version}+JDK" + exit 1 + fi + bash bin/stop.sh +else + JAVA="java" fi # 启动参数 @@ -38,7 +39,7 @@ fi # 等待任务 if [ ! -f "/.dockerenv" ]; then - sh bin/wait.sh + bash bin/wait.sh else echo -e "\033[32m启动成功:${project.artifactId}-${project.version}\033[0m" fi diff --git a/taoyao-signal-server/docs/bin/wait.sh b/taoyao-signal-server/docs/bin/wait.sh index 5ab2530..e2d4ef9 100644 --- a/taoyao-signal-server/docs/bin/wait.sh +++ b/taoyao-signal-server/docs/bin/wait.sh @@ -6,6 +6,7 @@ sleep 1 # 等待任务 startTime=$(date +%s) processId=$(ps -aux | grep "${project.artifactId}" | grep java | awk '{print $2}') +processPortNumber=0 if [ ! -z "$processId" ]; then waitIndex=0 processPortNumber=$(netstat -anop | grep $processId | grep LISTEN | wc -l) @@ -23,9 +24,9 @@ if [ ! -z "$processId" ]; then done echo "" fi -if [ "$processPortNumber" -lt 1 ]; then +if [ $processPortNumber -lt 1 ]; then echo -e "\033[31m启动失败:${project.artifactId}-${project.version}\033[0m" - sh bin/stop.sh + bash bin/stop.sh exit 0 else finishTime=$(date +%s) diff --git a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/rtp/RtpTest.java b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/rtp/RtpTest.java index 0feee5e..1b2544e 100644 --- a/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/rtp/RtpTest.java +++ b/taoyao-signal-server/taoyao-server/src/test/java/com/acgist/taoyao/rtp/RtpTest.java @@ -89,6 +89,13 @@ public class RtpTest { // ffmpeg不支持rtcpMux // ffmpeg -re -i video.mp4 -c:v libvpx -map 0:0 -f tee "[select=v:f=rtp:ssrc=123123:payload_type=102]rtp://192.168.1.110:40793?rtcpport=47218" // ffmpeg -re -i video.mp4 -c:v vp8 -map 0:0 -f tee "[select=v:f=rtp:ssrc=123123:payload_type=102]rtp://192.168.1.110:40793?rtcpport=47218" + // 音频视频同时传输 +// ffmpeg -re -i video.mp4 -c:v copy -an -f rtp rtp://192.168.8.122:6666 -c:a copy -vn -f rtp rtp://192.168.8.122:7777 -sdp_file taoyao.sdp +// ffplay -protocol_whitelist "file,rtp,udp" -i taoyao.sdp +// ffmpeg -protocol_whitelist "file,rtp,udp" -i taoyao.sdp taoyao.mp4 + // 混音 +// ffmpeg -re -i video.mp4 -i music.mp3 -map 0 -vn -c:a copy -f rtp rtp://192.168.8.122:6666 -map 0 -an -c:v copy -f rtp rtp://192.168.8.122:7777 -map 1 -c:a aac -f rtp rtp://192.168.8.122:8888 -sdp_file taoyao.sdp +// ffmpeg -protocol_whitelist "file,rtp,udp" -i taoyao.sdp -filter_complex "[0:0]aresample=8000[a0];[0:2]aresample=8000[a2];[a0][a2]amix=inputs=2" taoyao.mp4 final Scanner scanner = new Scanner(System.in); do { if(StringUtils.isEmpty(line)) {