帮助
查看自己的linux架构
VoceSpace含有两种镜像:
- amd:
privoce/vocespace:latest
- arm:
privoce/vocespace:latest_arm
所以您需要知道自己当前的服务器架构进行选择
1. 使用 uname
命令
uname
命令可以显示系统的内核信息,包括硬件架构。
运行以下命令:
- 如果输出为
x86_64
,则表示系统是基于 AMD64 或 Intel64 架构(通常称为 x86_64)。
- 如果输出为
aarch64
或 arm64
,则表示系统是基于 ARM64 架构。
- 如果输出为
armv7l
或类似内容,则表示系统是基于 ARMv7 架构。
2. 使用 arch
命令
arch
命令也可以显示系统的架构类型。
运行以下命令:
- 如果输出为
x86_64
,则表示系统是基于 AMD64 或 Intel64 架构。
- 如果输出为
aarch64
或 arm64
,则表示系统是基于 ARM64 架构。
- 如果输出为
armv7l
或类似内容,则表示系统是基于 ARMv7 架构。
如何获取key和secret
1docker pull livekit/generate
2docker run --rm -it -v$PWD:/output livekit/generate
通过livekit/generate
你会得到一个livekit.yaml
文件,这个文件就是你的livekit-server的配置文件,key和secret就会生成在其中
如何提高视频/屏幕分享的质量
分辨率 |
像素 |
帧率 |
编码器 |
推荐码率 |
高质量码率 |
极致码率 |
540p (qHD) |
960×540 |
30fps |
H.264 |
800 Kbps |
1 Mbps |
1.5 Mbps |
|
|
|
VP9 |
600 Kbps |
800 Kbps |
1.2 Mbps |
|
|
|
AV1 |
400 Kbps |
700 Kbps |
1 Mbps |
720p (HD) |
1280×720 |
30fps |
H.264 |
1.5 Mbps |
2 Mbps |
2.5 Mbps |
|
|
60fps |
H.264 |
2.5 Mbps |
3.5 Mbps |
4 Mbps |
|
|
|
VP9 |
1.2 Mbps |
1.8 Mbps |
2.2 Mbps |
|
|
|
AV1 |
1 Mbps |
1.5 Mbps |
2 Mbps |
1080p (Full HD) |
1920×1080 |
30fps |
H.264 |
3 Mbps |
4.5 Mbps |
6 Mbps |
|
|
60fps |
H.264 |
4.5 Mbps |
6 Mbps |
8 Mbps |
|
|
|
VP9 |
2.5 Mbps |
4 Mbps |
5 Mbps |
|
|
|
AV1 |
1.8 Mbps |
3 Mbps |
4 Mbps |
1440p (2K/QHD) |
2560×1440 |
30fps |
H.264 |
6 Mbps |
8 Mbps |
10 Mbps |
|
|
60fps |
H.264 |
8 Mbps |
10 Mbps |
14 Mbps |
|
|
|
VP9 |
4.5 Mbps |
7 Mbps |
9 Mbps |
|
|
|
AV1 |
3.5 Mbps |
5 Mbps |
7 Mbps |
2160p (4K/UHD) |
3840×2160 |
30fps |
H.264 |
10 Mbps |
14 Mbps |
20 Mbps |
|
|
60fps |
H.264 |
15 Mbps |
20 Mbps |
25 Mbps |
|
|
|
VP9 |
8 Mbps |
12 Mbps |
18 Mbps |
|
|
|
AV1 |
6 Mbps |
10 Mbps |
14 Mbps |
说明
对应启动参数
- 分辨率:
NEXT_PUBLIC_RESOLUTION
- 码率:
NEXT_PUBLIC_MAXBITRATE
- 帧率:
NEXT_PUBLIC_MAXFRAMERATE
- 策略:
NEXT_PUBLIC_PRIORITY
例子
当您需要使用720p + 60帧 + 高精度策略时
1bash ./local_deploy.sh \
2-e NEXT_PUBLIC_RESOLUTION=720p \
3-e NEXT_PUBLIC_MAXFRAMERATE=60 \
4-e NEXT_PUBLIC_PRIORITY=high
本地部署脚本
1#!/bin/bash
2
3# VoceSpace 本地部署自动化脚本
4# 适用于 macOS 和 Linux 系统
5
6set -e # 遇到错误时退出
7
8# 默认环境变量
9CUSTOM_ENV_VARS=()
10
11# 显示使用帮助
12show_help() {
13echo "================================================"
14echo "VoceSpace 本地部署自动化脚本"
15echo "================================================"
16echo ""
17echo "用法:$0 [选项]"
18echo ""
19echo "选项:"
20echo " -e, --env KEY=VALUE 设置自定义环境变量"
21echo " -h, --help 显示此帮助信息"
22echo ""
23echo "示例:"
24echo " $0 -e NEXT_PUBLIC_RESOLUTION=4k
25echo " $0 -e NEXT_PUBLIC_RESOLUTION=1080p"
26echo " $0 -e NEXT_PUBLIC_RESOLUTION=4k -e CUSTOM_VAR=value"
27echo " $0 -e NEXT_PUBLIC_MAXBITRATE=8000 -e NEXT_PUBLIC_RESOLUTION=720p"
28echo ""
29echo "常用环境变量:
30echo " - NEXT_PUBLIC_RESOLUTION:设置分辨率(4k、2k、1080p、720p、480p)"
31echo " - NEXT_PUBLIC_MAXBITRATE:设置最大比特率"
32echo " - NEXT_PUBLIC_MAXFRAMERATE:设置最大帧率"
33echo " - NEXT_PUBLIC_PRIORITY:设置优先级"
34echo ""
35}
36
37# 解析命令行参数
38parse_args() {
39 while [[ $# -gt 0 ]]; do
40 case $1 in
41 -e|--env)
42 CUSTOM_ENV_VARS+=("$2")
43 shift 2
44 ;;
45 -h|--help)
46 show_help
47 exit 0
48 ;;
49 *)
50 echo "❌ 未知参数: $1"
51 echo "使用 $0 --help 查看使用信息"
52 exit 1
53 ;;
54 esac
55 done
56}
57
58echo "=========================================="
59echo "VoceSpace 本地部署自动化脚本"
60echo "=========================================="
61
62# 检测操作系统
63OS=$(uname -s)
64ARCH=$(uname -m)
65
66echo "操作系统: $OS"
67echo "架构: $ARCH"
68
69# Function: Check if a command exists
70check_command() {
71 if ! command -v "$1" &> /dev/null; then
72 echo "❌ $1 未安装"
73 return 1
74 else
75 echo "✅ $1 已安装"
76 return 0
77 fi
78}
79
80#功能:检查Docker是否安装
81check_docker() {
82 if check_command docker; then
83 echo "Docker版本: $(docker --version)"
84 return 0
85 else
86 echo "❌ Docker未安装,请先安装Docker"
87 echo "请访问以下链接安装Docker:"
88 case $OS in
89 "Darwin")
90 echo " macOS: https://docs.docker.com/desktop/install/mac-install/"
91 ;;
92 "Linux")
93 echo " Linux: https://docs.docker.com/engine/install/"
94 ;;
95 *)
96 echo " other: https://docs.docker.com/get-docker/"
97 ;;
98 esac
99 return 1
100 fi
101}
102
103# 安装 LiveKit Server
104install_livekit() {
105 echo "=========================================="
106 echo "安装 LiveKit Server"
107 echo "=========================================="
108
109 if check_command livekit-server; then
110 echo "LiveKit Server 已安装"
111 return 0
112 fi
113
114 case $OS in
115 "Darwin")
116 echo "在 macOS 上安装 LiveKit Server..."
117 if check_command brew; then
118 brew update && brew install livekit
119 else
120 echo "❌ Homebrew 未安装,请先安装 Homebrew 或手动安装 LiveKit Server"
121 echo "Homebrew 安装命令: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
122 return 1
123 fi
124 ;;
125 "Linux")
126 echo "在 Linux 上安装 LiveKit Server..."
127 curl -sSL https://get.livekit.io | bash
128 ;;
129 *)
130 echo "❌ 不支持的操作系统: $OS"
131 echo "请手动安装 LiveKit Server: https://github.com/livekit/livekit/releases"
132 return 1
133 ;;
134 esac
135}
136
137# Function: 获取 Docker 镜像
138get_docker_image() {
139 case $ARCH in
140 "x86_64"|"amd64")
141 echo "privoce/vocespace:latest"
142 ;;
143 "arm64"|"aarch64")
144 echo "privoce/vocespace:latest_arm"
145 ;;
146 *)
147 echo "❌ 不支持的架构: $ARCH"
148 echo "支持的架构: x86_64, amd64, arm64, aarch64"
149 exit 1
150 ;;
151 esac
152}
153
154# Function: 拉取 VoceSpace image
155pull_vocespace_image() {
156 echo "=========================================="
157 echo "拉取 VoceSpace Docker image"
158 echo "=========================================="
159
160 IMAGE=$(get_docker_image)
161 echo "拉取镜像: $IMAGE"
162
163 docker pull "$IMAGE"
164 echo "✅ 镜像拉取成功"
165}
166
167# Function: 启动 VoceSpace 容器
168start_vocespace_container() {
169 echo "=========================================="
170 echo "启动 VoceSpace 容器"
171 echo "=========================================="
172
173 IMAGE=$(get_docker_image)
174 CONTAINER_NAME="vocespace"
175
176 # Build environment variable arguments
177 ENV_ARGS=()
178
179 # Add custom environment variables
180 for env_var in "${CUSTOM_ENV_VARS[@]}"; do
181 ENV_ARGS+=("-e" "$env_var")
182 echo "设置环境变量: $env_var"
183 done
184
185 # Check if the container already exists
186 if docker ps -a --format "table {{.Names}}" | grep -q "^$CONTAINER_NAME$"; then
187 echo "检测到现有容器 $CONTAINER_NAME"
188 read -p "是否要停止并删除现有容器? (y/n): " -n 1 -r
189 echo
190 if [[ $REPLY =~ ^[Yy]$ ]]; then
191 echo "停止并删除现有容器..."
192 docker stop "$CONTAINER_NAME" 2>/dev/null || true
193 docker rm "$CONTAINER_NAME" 2>/dev/null || true
194 else
195 echo "操作已取消"
196 return 1
197 fi
198 fi
199
200 echo "启动新容器..."
201 if [[ ${#ENV_ARGS[@]} -gt 0 ]]; then
202 echo "使用环境变量: ${ENV_ARGS[*]}"
203 docker run -d \
204 -p 3000:3000 \
205 --name "$CONTAINER_NAME" \
206 "${ENV_ARGS[@]}" \
207 "$IMAGE"
208 else
209 docker run -d \
210 -p 3000:3000 \
211 --name "$CONTAINER_NAME" \
212 "$IMAGE"
213 fi
214
215 echo "✅ VoceSpace 容器已启动"
216 echo "容器名称: $CONTAINER_NAME"
217 echo "访问 URL: http://localhost:3000"
218}
219
220# Function: 启动 LiveKit Server
221start_livekit_server() {
222 echo "=========================================="
223 echo "启动 LiveKit Server"
224 echo "=========================================="
225
226 echo "检查 LiveKit Server 是否正在运行..."
227 if pgrep -f "livekit-server" > /dev/null; then
228 echo "⚠️ LiveKit Server 已在运行"
229 read -p "是否要重启 LiveKit Server? (y/n): " -n 1 -r
230 echo
231 if [[ $REPLY =~ ^[Yy]$ ]]; then
232 echo "停止现有的 LiveKit Server..."
233 pkill -f "livekit-server" || true
234 sleep 2
235 else
236 echo "保持现有的 LiveKit Server 运行"
237 return 0
238 fi
239 fi
240
241 echo "启动 LiveKit Server..."
242 echo "注意: LiveKit Server 将在后台运行"
243 echo "要停止它,请使用: pkill -f livekit-server"
244
245 nohup livekit-server --dev --bind 0.0.0.0 > livekit-server.log 2>&1 &
246
247 sleep 3
248
249 if pgrep -f "livekit-server" > /dev/null; then
250 echo "✅ LiveKit Server 启动成功"
251 echo "日志文件: $(pwd)/livekit-server.log"
252 else
253 echo "❌ LiveKit Server 启动失败"
254 echo "请检查日志文件: $(pwd)/livekit-server.log"
255 return 1
256 fi
257}
258
259# Function: Show Status
260show_status() {
261 echo "=========================================="
262 echo "当前状态"
263 echo "=========================================="
264
265 echo "Docker 容器状态:"
266 docker ps --filter "name=vocespace" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
267
268 echo ""
269 echo "LiveKit Server 状态:"
270 if pgrep -f "livekit-server" > /dev/null; then
271 echo "✅ LiveKit Server 已在运行"
272 else
273 echo "❌ LiveKit Server 未在运行"
274 fi
275
276 echo ""
277 echo "=========================================="
278 echo "访问信息"
279 echo "=========================================="
280 echo "VoceSpace App: http://localhost:3000"
281 echo "LiveKit Server: ws://localhost:7880"
282 echo ""
283 echo "要查看容器日志: docker logs vocespace"
284 echo "要查看 LiveKit 日志: tail -f livekit-server.log"
285}
286
287# Main function
288main() {
289 # Parse command line arguments
290 parse_args "$@"
291
292 echo "启动部署过程..."
293
294 # Show configuration information
295 if [[ ${#CUSTOM_ENV_VARS[@]} -gt 0 ]]; then
296 echo "=========================================="
297 echo "配置文件信息"
298 echo "=========================================="
299 for env_var in "${CUSTOM_ENV_VARS[@]}"; do
300 echo "环境变量: $env_var"
301 done
302 echo ""
303 fi
304
305 # Check Docker
306 if ! check_docker; then
307 exit 1
308 fi
309
310 # Install LiveKit Server
311 if ! install_livekit; then
312 echo "❌ LiveKit Server 安装失败"
313 exit 1
314 fi
315
316 # Pull Docker image
317 if ! pull_vocespace_image; then
318 echo "❌ Docker 镜像拉取失败"
319 exit 1
320 fi
321
322 # Start container
323 if ! start_vocespace_container; then
324 echo "❌ 容器启动失败"
325 exit 1
326 fi
327
328 # Start LiveKit Server
329 if ! start_livekit_server; then
330 echo "❌ LiveKit Server 启动失败"
331 exit 1
332 fi
333
334 echo ""
335 echo "等待服务启动..."
336 sleep 5
337
338 # Show status
339 show_status
340
341 echo ""
342 echo "==========================================="
343 echo "🎉 部署完成!"
344 echo "==========================================="
345 echo "请在浏览器中访问 http://localhost:3000"
346 echo "如果您遇到任何问题,请查看相关日志文件"
347}
348
349# Run main function
350main "$@"
Docker 网络连接超时
👍 选择使用中国国内镜像
AMD64
1docker pull crpi-0u8xaje6k9g42uky.cn-hangzhou.personal.cr.aliyuncs.com/vocespace/vocespace:latest
ARM64
1docker pull crpi-0u8xaje6k9g42uky.cn-hangzhou.personal.cr.aliyuncs.com/vocespace/vocespace:latest_arm
配置Docker
国内用户可能会遇到Docker Hub访问连接超时的问题,请按照以下内容进行配置。
创建daemon.json
1sudo mkdir -p /etc/docker
2sudo touch /etc/docker/daemon.json
添加仓库镜像
- 腾讯:
https://mirror.ccs.tencentyun.com
- 科大:
https://docker.mirrors.ustc.edu.cn
- 阿里: 见 控制台 -> 搜索 -> 镜像容器服务ACR -> 镜像工具 -> 镜像加速
1sudo tee /etc/docker/daemon.json <<-'EOF'
2{
3 "registry-mirrors": ["https://mirror.ccs.tencentyun.com", "https://docker.mirrors.ustc.edu.cn"]
4}
5EOF
重启docker
1sudo systemctl daemon-reload
2sudo systemctl restart docker
更换服务器
在中国国内,即使服务器拥有公网 IP,也可能无法流畅访问 Docker Hub、GitHub 等外网服务。这主要是由于网络环境的复杂性以及相关政策的限制。以下是可能的原因及解决方法:
常见原因
- DNS 解析问题:默认的 DNS 服务器可能无法正确解析 Docker Hub 或 GitHub 的域名
- 网络限制:某些网络环境(如运营商网络、企业内网)可能会限制或屏蔽对特定外网服务的访问
- 防火墙或安全策略:服务器的防火墙或安全组规则可能阻止了对特定服务的访问
- GFW 影响:在国内,部分外网服务可能受到 GFW 的限制
TIP
因此我们推荐您购买地区:
- 中国香港
- 日本
- 韩国
- 新加坡
- 欧美国家
Docker 常用指令
查看镜像
1docker image ls
2# 或使用
3docker images
查看所有容器
查看正在运行的容器
关闭容器
1docker stop container_name_or_id
杀死容器 (强制关闭)
1docker kill container_name_or_id
删除容器
1docker rm container_name_or_id
2
3# 删除已经停止的容器
4docker container prune
5# 删除所有,包括正在运行的
6docker rm -f $(docker ps -aq)
删除镜像
1docker rmi image_name_or_id
2
3# 删除所有
4docker rmi -f $(docker images -q)