帮助

查看自己的linux架构

VoceSpace含有两种镜像:

  • amd: privoce/vocespace:latest
  • arm: privoce/vocespace:latest_arm

所以您需要知道自己当前的服务器架构进行选择

1. 使用 uname 命令

uname 命令可以显示系统的内核信息,包括硬件架构。

运行以下命令:

1uname -m
  • 如果输出为 x86_64,则表示系统是基于 AMD64 或 Intel64 架构(通常称为 x86_64)。
  • 如果输出为 aarch64arm64,则表示系统是基于 ARM64 架构。
  • 如果输出为 armv7l 或类似内容,则表示系统是基于 ARMv7 架构。

2. 使用 arch 命令

arch 命令也可以显示系统的架构类型。

运行以下命令:

1arch
  • 如果输出为 x86_64,则表示系统是基于 AMD64 或 Intel64 架构。
  • 如果输出为 aarch64arm64,则表示系统是基于 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

说明

  • 推荐码率:适合日常直播、会议、低延迟推流。

  • 高质量码率:适合 YouTube 上传或录播,兼顾质量与文件大小。

  • 极致码率:用于高质量保留或专业场景,如素材采集、视频剪辑源。

  • 编码器说明

    • H.264:兼容性最好,硬件支持广泛。

    • VP9:Google 推出,YouTube 广泛采用,效率略高于 H.264。

    • AV1:下一代高压缩比编码格式,文件更小,但编码耗时较长。

对应启动参数

  • 分辨率: NEXT_PUBLIC_RESOLUTION
  • 码率: NEXT_PUBLIC_MAXBITRATE
  • 帧率: NEXT_PUBLIC_MAXFRAMERATE
  • 策略: NEXT_PUBLIC_PRIORITY
    • high
    • medium
    • low
    • very-low

例子

当您需要使用720p + 60帧 + 高精度策略时

1bash ./local_deploy.sh \
2-e NEXT_PUBLIC_RESOLUTION=720p \
3-e NEXT_PUBLIC_MAXFRAMERATE=60 \
4-e NEXT_PUBLIC_PRIORITY=high

本地部署脚本

Linux/macOS
Windows
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

因此我们推荐您购买地区:

  1. 中国香港
  2. 日本
  3. 韩国
  4. 新加坡
  5. 欧美国家

Docker 常用指令

查看镜像

1docker image ls
2# 或使用
3docker images

查看所有容器

1docker ps -a

查看正在运行的容器

1docker ps

关闭容器

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)