Компиляция модуля в NGINX
Для компиляции модуля:
./configure --add-module=/path/to/nginx-http-flv-module
.make
.make install
.Для компиляции динамического модуля:
./configure --add-dynamic-module=/path/to/nginx-http-flv-module
.make
.make install
.Примечание: Если вы компилируете динамический модуль, версия NGINX должна быть 1.9.11 или выше.
Использование
Для получения подробной информации о том, как использовать nginx-rtmp-module, обратитесь к файлу README.md на GitHub.
Публикация
Чтобы упростить процесс, не используйте перекодировку:
ffmpeg -re -i MEDIA_FILE_NAME -c copy -f flv rtmp://example.com[:port]/appname/streamname
Примечание: Некоторые старые версии FFmpeg могут не поддерживать опцию -c copy
, в этом случае можно использовать опции -vcodec copy -acodec copy
.
Значение appname используется для сопоставления блока application в конфигурации rtmp. Значение streamname может быть любым, но оно не должно быть пустым.
Порт по умолчанию для RTMP — 1935, если вы хотите использовать другой порт, укажите :port
.
Воспроизведение
http://example.com[:port]/dir?[port=xxx&]app=appname&stream=streamname
.Параметр dir используется для соответствия блоку location в HTTP конфигурации. Порт по умолчанию для HTTP — 80, если используется другой порт, необходимо указать :port
. Порт по умолчанию для RTMP — 1935, если используется другой порт, необходимо указать port=xxx
.
Значение параметра app (appname) используется для сопоставления блока приложения, но если запрос app появляется в нескольких блоках server и эти блоки server имеют одинаковую конфигурацию адреса и порта, то необходимо также использовать параметр server_name для различения запросов, в противном случае будет сопоставлен первый блок приложения.
Значение параметра stream (streamname) используется для сопоставления опубликованного потока.
Пример:
Предположим, что в блоке http конфигурация listen имеет значение:
http {
...
server {
listen 8080; #не порт по умолчанию 80
...
location /live {
flv_live on;
}
}
}
В блоке rtmp конфигурация listen имеет значение:
rtmp {
...
server {
listen 1985; #не порт по умолчанию 1935
...
application myapp {
live on;
}
}
}
И имя опубликованного потока — mystream, тогда URL для воспроизведения через HTTP будет:
http://example.com:8080/live?port=1985&app=myapp&stream=mystream
Примечание: некоторые проигрыватели не поддерживают передачу блоков HTTP, в этом случае рекомендуется указать chunked_transfer_encoding off в указанном местоположении, чтобы избежать проблем с воспроизведением.
Способ RTMP: rtmp://example.com[:port]/appname/streamname
.
Способы HLS и DASH:
http://example.com[:port]/dir/streamname.m3u8
.http://example.com[:port]/dir/streamname.mpd
.Пример изображения
RTMP (JW Player) & HTTP-FLV (VLC):
.
HTTP-FLV (flv.js):
.
Конфигурация nginx.conf
Обратите внимание, что параметры rtmp_auto_push, rtmp_auto_push_reconnect и rtmp_socket_dir не работают в Windows, за исключением Windows 10 версии 17063 и более поздних версий, поскольку многопроцессный режим relay требует поддержки Unix domain socket. Рекомендуется установить worker_processes равным 1, так как в многопроцессном режиме ngx_rtmp_stat_module и ngx_rtmp_control_module могут неправильно получать статистические данные от указанного рабочего процесса. Эту проблему можно решить с помощью патча per-worker-listener. Кроме того, функция vhost работает без проблем в однопроцессном режиме, но ещё не полностью реализована в многопроцессном режиме. Например, следующая конфигурация работает без проблем в многопроцессном режиме:
rtmp {
...
server {
listen 1935;
server_name domain_name;
application myapp {
...
}
}
}
А следующая конфигурация может вызвать проблемы, когда издатель публикует медиапоток на втором сервере, а запрос на воспроизведение обращается к рабочему процессу, отличному от процесса издателя:
rtmp {
...
server {
listen 1935;
server_name 1st_domain_name;
application myapp {
...
}
}
server {
listen 1945;
server_name 2nd_domain_name;
application myapp {
...
}
}
}
Если NGINX работает в многопроцессном режиме и платформа поддерживает опцию SO_REUSEPORT для сокетов, то добавление опции reuseport после listen может помочь решить проблему с всплеском трафика. ### Конфигурация
worker_processes 1; #При работе на Windows устанавливается значение 1, поскольку Windows не поддерживает Unix domain socket
#worker_processes auto; #1.3.8 и 1.2.5, а также более поздние версии
#worker_cpu_affinity 0001 0010 0100 1000; #Только для FreeBSD и Linux
#worker_cpu_affinity auto; #1.9.10 и более поздние версии
error_log logs/error.log error;
#Если этот модуль скомпилирован как динамический модуль и требуется использовать возможности, связанные с RTMP, необходимо указать следующие параметры конфигурации, и они должны быть расположены перед конфигурацией events, иначе NGINX не загрузит этот модуль при запуске или загрузка завершится неудачно
#load_module modules/ngx_http_flv_live_module.so;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
server {
listen 80;
location / {
root /var/www;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /live {
flv_live on; #Включить функцию воспроизведения FLV-потока в реальном времени через HTTP
chunked_transfer_encoding on; #Поддержка ответа способом 'Transfer-Encoding: chunked'
add_header 'Access-Control-Allow-Origin' '*'; #Добавить дополнительный заголовок HTTP
add_header 'Access-Control-Allow-Credentials' 'true'; #Добавить дополнительный заголовок HTTP
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header 'Cache-Control' 'no-cache';
}
location /dash {
root /tmp;
add_header 'Cache-Control' 'no-cache';
}
location /stat {
#Конфигурация для статистики потоковой передачи и записи
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /var/www/rtmp; #Указать расположение stat.xsl
}
#Если требуется статистика в формате JSON, не нужно указывать stat.xsl, но необходимо указать новый параметр конфигурации rtmp_stat_format
#location /stat {
# rtmp_stat all;
# rtmp_stat_format json;
#}
location /control {
rtmp_control all; #Конфигурация модуля управления RTMP
}
}
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp {
out_queue 4096;
out_cork 8;
max_streams 128;
timeout 15s;
drop_idle_publisher 15s;
log_interval 5s; #Интервал времени, в течение которого модуль log записывает журналы в access.log, что полезно для отладки
log_size 1m; #Размер буфера, используемого модулем log для записи журналов
server {
listen 1935;
server_name www.test.*; #Используется для суффикса виртуального хоста
application myapp {
live on;
gop_cache on; #Включение кэша GOP для уменьшения задержки при первом кадре
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
application dash {
live on;
dash on;
dash_path /tmp/dash;
}
}
server {
listen 1935;
server_name *.test.com; #Используется для префикса виртуального хоста
application myapp {
live on;
gop_cache on; #Включение кэша GOP для уменьшения задержки при первом кадре
}
}
server {
listen 1935;
server_name www.test.com; #Точное соответствие имени виртуального хоста
application myapp {
live on;
gop_cache on; #Включение кэша GOP для уменьшения задержки при первом кадре
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )