Справка
Проверка архитектуры 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
Как повысить качество видео/демонстрации экрана
| Разрешение |
Пиксели |
FPS |
Кодек |
Рекомендуемый битрейт |
Высокое качество |
Максимальное качество |
| 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
Пример
Когда вам нужно использовать 720p + 60fps + стратегию высокой точности
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# Функция: Проверка существования команды
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 " другие: 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 "Установка LiveKit Server на macOS..."
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 "Установка LiveKit Server на Linux..."
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# Функция: Получить 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# Функция: Загрузить образ VoceSpace
155pull_vocespace_image() {
156 echo "=========================================="
157 echo "Загрузка образа VoceSpace Docker"
158 echo "=========================================="
159
160 IMAGE=$(get_docker_image)
161 echo "Загрузка образа: $IMAGE"
162
163 docker pull "$IMAGE"
164 echo "✅ Образ успешно загружен"
165}
166
167# Функция: Запустить контейнер VoceSpace
168start_vocespace_container() {
169 echo "=========================================="
170 echo "Запуск контейнера VoceSpace"
171 echo "=========================================="
172
173 IMAGE=$(get_docker_image)
174 CONTAINER_NAME="vocespace"
175
176 # Построить аргументы переменных окружения
177 ENV_ARGS=()
178
179 # Добавить пользовательские переменные окружения
180 for env_var in "${CUSTOM_ENV_VARS[@]}"; do
181 ENV_ARGS+=("-e" "$env_var")
182 echo "Установка переменной окружения: $env_var"
183 done
184
185 # Проверить, существует ли контейнер
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# Функция: Запустить 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# Функция: Показать статус
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# Главная функция
288main() {
289 # Разбор аргументов командной строки
290 parse_args "$@"
291
292 echo "Начало процесса развертывания..."
293
294 # Показать информацию о конфигурации
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 # Проверка Docker
306 if ! check_docker; then
307 exit 1
308 fi
309
310 # Установка LiveKit Server
311 if ! install_livekit; then
312 echo "❌ Не удалось установить LiveKit Server"
313 exit 1
314 fi
315
316 # Загрузка образа Docker
317 if ! pull_vocespace_image; then
318 echo "❌ Не удалось загрузить образ Docker"
319 exit 1
320 fi
321
322 # Запуск контейнера
323 if ! start_vocespace_container; then
324 echo "❌ Не удалось запустить контейнер"
325 exit 1
326 fi
327
328 # Запуск 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 # Показать статус
339 show_status
340
341 echo ""
342 echo "==========================================="
343 echo "🎉 Развертывание завершено!"
344 echo "==========================================="
345 echo "Откройте http://localhost:3000 в браузере"
346 echo "Если возникли проблемы, проверьте соответствующие файлы логов"
347}
348
349# Запустить главную функцию
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
Добавление зеркал репозиториев
- Tencent:
https://mirror.ccs.tencentyun.com
- USTC:
https://docker.mirrors.ustc.edu.cn
- Alibaba: см. Консоль -> Поиск -> Сервис контейнерных образов 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)