Skip to content

Пряма трансляція з авторизацією за допомогою Nginx-RTMP

Вирішив погратися з трансляцією відео через власний сервер. Серед наявних рішень я спочатку розглядав можливість встановлення додаткового програмного забезпечення на кшталт Owncast та rtsp-simple-server, але в результаті вирішив просто довстановити модуль rtmp до nginx. До того ж, мені не потрібен вебінтерфейс для переглядання трансляції.

Отже, передусім встановлюємо пакети nginx-full та модуль rtmp:

root@vps-00001:~# apt-get install nginx-full libnginx-mod-rtmp
...

Наступним кроком відкриваємо у своєму улюбленому текстовому редакторі файл /etc/nginx/nginx.conf та додаємо туди конфігурацію двох примітивних віртуальних веб серверів для перевірки авторизації, а також додаємо налаштування RTMP серверу:

 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 	include /etc/nginx/conf.d/*.conf;
 	include /etc/nginx/sites-enabled/*;

	server {
		listen localhost:9999;
		location /rtmp-auth-on-publish {
			if ($arg_access_token = "publishonlySECRETpassword") {
				return 201;
			}
			return 404;
		}
	}

	server {
		listen localhost:9090;
		location /rtmp-auth-on-play {
			if ($arg_access_token = "watchonlySECRETpassword") {
				return 201;
			}
			return 404;
		}
	}
}

 # RTMP configuration
 rtmp {
     server {
         listen 1935;
         ping 30s;
         notify_method get;
         chunk_size 4000;

         application stream {
             on_publish http://localhost:9999/rtmp-auth-on-publish;
             on_play http://localhost:9090/rtmp-auth-on-play;
             live on;
             meta copy;
             record off;
         }
     }
}

 #mail {

Зверніть увагу на рядки 78 та 88, замість publishonlySECRETpassword та watchonlySECRETpassword ви повинні вказати свої паролі. Рекомендую згенерувати нові з допомогою random.org/passwords.

Далі перевіряємо, що файл налаштувань nginx не містить помилок:

root@vps-00001:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

І якщо все гаразд, даємо nginx команду перечитати налаштування:

root@vps-00001:~# service nginx reload

На цьому з налаштуванням nginx завершено, настав час перевірити чи все працює. Візьмемо для прикладу якийсь файл з відео та за допомогою ffmpeg розпочнемо трансляцію на сервер:

$ ffmpeg -re -i ~/Videos/AntiTrust.avi \
  -vcodec libx264 -preset fast -crf 30 \
  -acodec aac -ab 128k -ar 44100 -strict experimental \
  -f flv rtmp://142.250.201.206/stream/test?access_token=publishonlySECRETpassword

Зверніть увагу на те, що замість ip адреси 142.250.201.206 ви повинні вказати адрес свого серверу і свій новий згенерований пароль. До речі, у прикладі вище в посиланні вказана назва трансляції test, тобто ви можете запускати безліч трансляцій з різними назвами.

Отже, якщо ffmpeg не видав помилки, переходимо до завершальної частини - перевірки трансляції. Відкриваємо посилання на трансляцію з відповідним паролем, наприклад, в плеєрі vlc та перевіряємо чи є картинка та звук:

$ vlc rtmp://142.250.201.206/stream/test?access_token=watchonlySECRETpassword

Можна також одночасно транслювати відео з вебкамери та переглядати зі звуком локально. Це може бути корисним, коли ви, наприклад, захочете транслювати музику зі свого вінілового програвача:

$ ffmpeg -re -f v4l2 -i /dev/video0 \
  -f alsa -i default -acodec libmp3lame \
  -map 0 -c:v libx264 -preset ultrafast -crf 23 \
  -map 1:0 -c:a aac \
  -f tee "[f=flv]rtmp://142.250.201.206/stream/test?access_token=publishonlySECRETpassword|[f=nut]pipe:" \
  | ffplay -

Але замість alsa -i default потрібно буде вказати який самий вхідний канал використовувати для вхідного звукового потоку.

Корисне

  1. GRUB2: Перезавантажити систему у іншу ОС з меню завантаження
  2. Емулятор груп в Mastodon та Pleroma
  3. Оновлення BIOS на HP ProBook 440 G7
  4. Завантажуємо внутрішні посилання для списку доменів з Common Crawl API
  5. Розбиваємо файл на декілька інших файлів за фільтром
  6. Пошук по історії bash за допомогою курсорних клавіш
  7. Імплементація unix socket клієнта до плеєра MOC