1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/winshining-nginx-http-flv-module

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.CN.md 13 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 24.11.2024 20:47 6745d27

Компиляция модуля в NGINX

  1. Для компиляции модуля:

    • Выполните команду: ./configure --add-module=/path/to/nginx-http-flv-module.
    • Затем выполните команду: make.
    • После этого выполните команду: make install.
  2. Для компиляции динамического модуля:

    • Выполните команду: ./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-FLV способ: http://example.com[:port]/dir?[port=xxx&]app=appname&stream=streamname.
  • Примечание: при использовании команды ffplay для воспроизведения потока из командной строки необходимо заключить URL в кавычки, иначе параметры в URL будут проигнорированы (некоторые менее интеллектуальные оболочки могут интерпретировать & как «запуск в фоновом режиме»).
  • При использовании flv.js для воспроизведения потока убедитесь, что поток закодирован правильно, так как flv.js поддерживает только видео с кодировкой H.264 и аудио с кодировкой AAC/MP3.

Параметр 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:

  • HLS: http://example.com[:port]/dir/streamname.m3u8.
  • DASH: http://example.com[:port]/dir/streamname.mpd.

Пример изображения

RTMP (JW Player) & HTTP-FLV (VLC):

RTMP & HTTP-FLV.

HTTP-FLV (flv.js):

HTTP-FLV.

Конфигурация 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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/winshining-nginx-http-flv-module.git
git@api.gitlife.ru:oschina-mirror/winshining-nginx-http-flv-module.git
oschina-mirror
winshining-nginx-http-flv-module
winshining-nginx-http-flv-module
master