Linux серверы потокового вещания

Как настроить сервер потокового видео с помощью Nginx-RTMP на Ubuntu 22.04

RTMP , также называемый «протоколом обмена сообщениями в реальном времени», является технологией передачи данных, которая поддерживает потоковое онлайн-видео. Она используется для передачи видеофайлов от кодера на платформу онлайн-видеохостинга. RTMP использует TCP для передачи данных и использует трехстороннее рукопожатие при передаче данных. RTMP используется во многих различных типах медиа, включая прямые телевизионные трансляции, потоковое видео и услуги интернет-телефонии.

Функции

  • Производите высококачественное видео в прямом эфире без буферизации
  • Простота установки и настройки.
  • Совместимость с большинством программ и видеосервисов прямого эфира.

Установка веб-сервера Nginx

Перед началом работы на вашем сервере должен быть установлен веб-сервер Nginx. Если он не установлен, вы можете установить его с помощью следующей команды.

После установки пакета Nginx запустите службу Nginx и включите ее запуск при перезагрузке системы.

systemctl start nginxsystemctl enable nginx

Вы можете проверить состояние службы Nginx следующей командой.

Вы получите следующее сообщение.

? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-01-09 14:54:55 UTC; 28s ago Docs: man:nginx(8) Process: 43294 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS) Main PID: 43005 (nginx) Tasks: 3 (limit: 4575) Memory: 8.5M CPU: 35ms CGroup: /system.slice/nginx.service ??43005 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" ??43295 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ??43296 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" Jan 09 14:54:55 vultr systemd[1]: Starting A high performance web server and a reverse proxy server. Jan 09 14:54:55 vultr systemd[1]: Started A high performance web server and a reverse proxy server. Jan 09 14:55:04 vultr systemd[1]: Reloading A high performance web server and a reverse proxy server. Jan 09 14:55:04 vultr systemd[1]: Reloaded A high performance web server and a reverse proxy server.

Установка и настройка

По умолчанию пакет Nginx- RTMP включен в репозиторий Ubuntu по умолчанию. Вы можете установить его следующей командой.

apt install libnginx-mod-rtmp -y

После установки пакета Nginx- RTMP отредактируйте основной конфигурационный файл Nginx и определите ваш поток.

Читайте также:  Apache ant установка linux

Добавьте следующие строки в конец файла:

Сохраните и закройте файл, затем проверьте Nginx на наличие ошибок конфигурации с помощью следующей команды.

Вы должны увидеть следующий результат.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Наконец, перезапустите службу Nginx, чтобы применить изменения.

На данный момент Nginx- RTMP установлен и слушает порт 1935. Вы можете проверить это следующей командой.

Вы должны увидеть следующий результат.

LISTEN 0 511 0.0.0.0:1935 0.0.0.0:* users:(("nginx",pid=43388,fd=8),("nginx",pid=43387,fd=8),("nginx",pid=43386,fd=8))

Отправка видео на RTMP -сервер

Следующим шагом вам нужно загрузить пример видео с YouTube и отправить его на ваш RTMP -сервер с помощью FFmpeg.

Сначала установите пакет youtube-dl ad FFmpeg с помощью следующей команды.

apt install python3-pip ffmpeg -ypip install youtube-dl

Следующая команда: загрузите любое видео с YouTube с помощью инструмента командной строки youtube-dl.

youtube-dl https://www.youtube.com/watch?v=oNEwEQ0uU1Y

Когда видео загружено в вашу систему, вы можете отправить его на RTMP -сервер с помощью команды FFmpeg.

ffmpeg -re -i "How to Install Ubuntu 22.04 LTS-oNEwEQ0uU1Y.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://your-server-ip/live/stream &

На этом этапе ваше загруженное видео отправляется на rtmp://your-server-ip/live/stream

Передача видео на VLC Player

В этом разделе мы покажем вам, как передавать видео с RTMP -сервера на плеер VLC .

Сначала войдите в систему рабочего стола и откройте плеер VLC . Затем нажмите на Media => Open Network Stream. Вы должны увидеть следующий экран.

Определите URL вашего RTMP сервера и нажмите на кнопку Play. Если все работает, вы должны увидеть видео на следующем экране.

Настройка статистики

На данном этапе ваш RTMP -сервер установлен и работает. Теперь вам нужно настроить страницу статистики RTMP для мониторинга потокового вещания.

Настройка

Сначала создайте каталог для сохранения файла статистики RTMP с помощью следующей команды.

Затем скопируйте файл RTMP stat в созданный каталог.

cp /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl /var/www/html/rtmp/stat.xsl

Далее отредактируйте файл конфигурации виртуального хоста Nginx по умолчанию.

nano /etc/nginx/sites-available/default

Удалите все строки по умолчанию и добавьте следующее:

server < listen 8080; server_name _; # rtmp stat location /stat < rtmp_stat all; rtmp_stat_stylesheet stat.xsl; >location /stat.xsl < root /var/www/html/rtmp; ># rtmp control location /control < rtmp_control all; >>

Сохраните и закройте файл, когда закончите. Затем перезапустите службу Nginx, чтобы применить изменения.

Читайте также:  View file contents linux

Проверка

Сейчас откройте веб-браузер и зайдите на страницу статистики RTMP , используя URL http://your-server-ip:8080/stat. Вы должны увидеть статистику RTMP на следующем экране.

Вам нужно будет обновлять страницу каждый раз, когда вы транслируете видео, и наблюдать, как меняется статистика потока.

Заключение

В этой заметке рассказывается о том, как настроить сервер потокового видео с помощью Nginx- RTMP на Ubuntu 22.04. Мы также протестировали RTMP -сервер через плеер VLC . Теперь вы можете передавать любое видео на RTMP -сервер и получать доступ к нему с помощью любого поддерживаемого медиаплеера. Не стесняйтесь спрашивать меня, если у вас есть какие-либо вопросы.

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Источник

Запускаем свой RTMP сервер для стриминга

Иногда YouTube или Twitch не подходят как стриминговая платформа — скажем, если вы пилите портал с вебинарами или контентом 18+, нарушаете авторские права или хотите максимально отгородить свою трансляцию от остального интернета. У них есть много альтернатив как в виде сервисов (те же минусы, недостаток контроля и непредсказуемая политика), так и в виде self-hosted решений. Проблема опенсорсных стриминговых проектов в том, что все они начинаются с крохотной связки из пары технологий, а затем отчаянно пытаются вырасти в сервис, добавляя сложные веб-интерфейсы, чаты, библиотеки стримов и в конечном счёте отдаляясь от исходной цели: дать миру инструмент, который по понятному мануалу позволит запустить свой сервер трансляций. Что с ним будет дальше, в какие системы будет встроена эта картинка — это только ваше личное дело, а самописный аналог твича с лагающими и отваливающимися сервисами и периодически валящимся билдом не нужен никому, кроме его разработчиков. Поэтому в этой статье мы разберём минимальную цепочку действий для запуска своего RTMP-сервера с плеером.

Структура

Здесь всё просто: за приём и кодировку потока из OBS отвечает RTMP модуль Nginx’a. Сконвертированный поток он выставляет наружу, где его подбирает HLS (HTTP Live Streaming) клиент в браузере и выдаёт уже готовую картинку в плеере.

Читайте также:  Kali linux open source

Установка

При выборе сервера упор стоит обратить внимание на процессор. Я взял эпичный сервер с двумя ядрами и пробовал наращивать битрейт, чтобы определить граничные условия — на 11-12k нагрузка стала болтаться в районе 96-100%, так что для обработки действительно тяжёлого потока лучше взять мощности с запасом:

Нам понадобится Docker для установки контейнеризованного nginx-rtmp с FFmpeg и любой веб-сервер (включая тот же Nginx) для раздачи страницы с плеером. Я ставил на Ubuntu 20.04:

$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common \ nginx $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io 

Запускаем контейнер c проброшенными портами:

docker run -d -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp

Затем в OBS на клиенте указываем наш сервер с произвольным ключом потока (ключ = индентификатор стрима):

Теперь можно запустить трансляцию и удостовериться что поток пошёл, например, в демке hls.js или в любом другом плеере HLS.

Осталось настроить сервер. В nginx.conf укажите путь до вашей страницы:

В index.html просто скопипастим код из примера hls.js:

   -->  

Теперь на 8080 порту нашего сервера раздаётся жутковатый мультик про зайца:

Остаётся только изменить путь на http://server_ip:8080/live/stream-key.m3u8 и идти смотреть трансляцию!

Нагрузку в реальном времени можно проверять командой docker stats:

Заключение

Размещая стриминговый клиент на своём сервере важно помнить, что весь трафик со всех зрителей будет проходить прямо через него — значит, если одновременный онлайн у вас будет больше 1-2 человек, стоит изучать способы распределения нагрузки (ведь транскодирвоание ощутимо давит и на CPU). Для запуска полноценного кластера есть энтерпрайзное (но опенсорсное) решение — SRS aka Simple Realtime Server (GitHub, 10k звёзд, огромная вики, сложная архитектура). В него стоит вникать, если вам стримы нужны для решения настоящих задач, а не чтобы поиграться с приватным видеопотоком.

На правах рекламы

Серверы в аренду для любых задач — это про наши эпичные! Все серверы защищены от DDoS-атак, автоматическая установка множества ОС или использование своего образа ISO. Лучше один раз попробовать!

Источник

Оцените статью
Adblock
detector