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

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

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Nginx-http-flv-модуль

Сервер потокового мультимедиа на основе nginx-rtmp-module.

中文说明.

Пожертвуйте, если вам нравится этот модуль. Большое спасибо!

reward_qrcode_winshining

Авторы

  • Игорь Сысоев, создатель NGINX.
  • Роман Арутюнян, создавший nginx-rtmp-module.
  • Вкладчики, подробности см. в AUTHORS.

Функции

Все функции, предоставляемые nginx-rtmp-модулем, а также:

Функции nginx-http-flv-модуль nginx-rtmp-модуль Примечания
HTTP-FLV (для воспроизведения) x Поддерживаются HTTPS-FLV и фрагментированный ответ
Кэш GOP x
Виртуальный хост x
Опустить директиву listen См. примечания Должна быть хотя бы одна директива listen
Поддержка аудио только для RTMP/HTTP-FLV См. примечания Не будет работать, если wait_video или wait_key включено
Однотрековая поддержка HLS x
Поддержка reuseport x
Таймер для журнала доступа x
Статистика в стиле JSON x
Статистические данные для записей x
Независимость от порядка байтов См. примечания Частично поддерживается в ветке big-endian

Совместимость

Версия [NGINX] должна быть равна или выше 1.2.6, совместимость с другими версиями неизвестна.

Поддерживаемые системы

  • Linux (рекомендуется) / FreeBSD / MacOS / Windows (ограниченно).

Поддерживаемые проигрыватели

Примечание

  • Официально Adobe прекратит поддержку [Flash Player] после 31 декабря 2020 года. Подробнее см. на странице Adobe Flash Player EOL General Information Page. Плагины, использующие Flash Player, перестанут работать после того, как основные браузеры удалят Flash Player.

  • [flv.js] может работать только с браузерами, поддерживающими [Media Source Extensions].

Необходимые условия

  • GNU make для активации компилятора в Unix-подобных системах для компиляции программного обеспечения.
  • GCC для компиляции в Unix-подобных системах или MSVC для компиляции в Windows.
  • GDB для отладки в Unix-подобных системах.
  • [FFmpeg] или [OBS] для публикации медиапотоков.
  • [VLC] (рекомендуется) или... Перевод текста на русский язык:

flv.js (рекомендуется) для воспроизведения медиапотоков.

  • PCRE для NGINX, если нужны регулярные выражения.

  • OpenSSL для NGINX, если нужен защищённый доступ.

  • zlib для NGINX, если нужно сжатие.

Сборка

Примечание

nginx-http-flv-module имеет все функции, которые предоставляет nginx-rtmp-module, поэтому НЕ компилируйте nginx-http-flv-модуль вместе с nginx-rtmp-модулем.

На Windows

Для получения подробной информации о шагах сборки обратитесь к Building nginx on the Win32 platform with Visual C, и не забудьте добавить --add-module=/path/to/nginx-http-flv-module в шаге «Запустить скрипт настройки».

Примечание

Если используются компиляторы, которые не поддерживают x64 идеально, например VS2010, убедитесь, что используются настройки по умолчанию (тип целевой машины — x86).

В Unix-подобных системах

Скачайте NGINX и nginx-http-flv-модуль.

Распакуйте их.

Перейдите в исходный каталог NGINX и выполните следующее:

Скомпилируйте модуль в NGINX:

./configure --add-module=/путь/к/nginx-http-flv-модулю
make
make install

или

Скомпилируйте модуль как динамический модуль:

./configure --add-dynamic-module=/путь/к/nginx-http-flv-модулю
make
make install

Примечание

Если модуль скомпилирован как динамический, версия [NGINX] должна быть равна или больше 1.9.11.

Использование

Подробности использования nginx-rtmp-модуля см. в README.md.

Публикация

Для простоты транскодирование не используется (поэтому используется -c copy):

ffmpeg -re -i MEDIA_FILE_NAME -c copy -f flv rtmp://example.com[:port]/appname/streamname

Примечание

Некоторые устаревшие версии FFmpeg не поддерживают опцию -c copy, вместо этого можно использовать опции -vcodec copy -acodec copy.

appname используется для сопоставления блока приложения в блоке rtmp (подробности см. ниже).

streamname можно указать по желанию, но его нельзя опускать.

По умолчанию порт для RTMP1935, если использовались другие порты, необходимо указать :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 используется для соответствия блоков местоположения в блоке http (подробнее см. ниже).

Порт по умолчанию для HTTP80, если использовались другие порты, необходимо указать :port.

Порт по умолчанию для RTMP1935, если использовались другие порты, port=xxx должен быть указан.

Значение app (appname) используется для сопоставления блока приложений, но если запрошенное app появляется в нескольких блоках сервера и эти блоки имеют одинаковую конфигурацию адреса и порта, имя хоста, соответствующее директиве server_name, будет дополнительно использоваться для идентификации запрошенного блока приложения, в противном случае будет сопоставлен первый.

Значение stream (streamname) используется для сопоставления имени опубликованного потока.

Пример

Предположим, что директива listen, указанная в блоке http, выглядит следующим образом:

http {
    ...
    server {
        listen 8080; #не порт по умолчанию 80
        ...

        location /live {
            flv_live on;
        }
    }
}

И директива listen, указанная в блоке rtmp, выглядит так:

rtmp {
    ...
    server { Слушайте 1985; #нестандартный порт 1935
        ...

        приложение myapp {
            в прямом эфире;
        }
    }
}

И имя опубликованного потока — mystream, тогда URL воспроизведения на основе HTTP:

http://example.com:8080/live?port=1985&app=myapp&stream=mystream

Примечание

Поскольку некоторые проигрыватели не поддерживают HTTP-передачу по частям, в этом случае лучше указать chunked_transfer_encoding off; там, где указано flv_live on;, иначе воспроизведение не удастся.

через RTMP

rtmp://example.com[:port]/appname/streamname

через 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, см. домен Unix socket на Windows 10 для получения дополнительной информации.

Лучше указать директиву worker_processes как 1, потому что ngx_rtmp_stat_module может не получить статистику от указанного рабочего процесса в многопроцессорном режиме, так как HTTP-запросы случайным образом распределяются между рабочими процессами. У ngx_rtmp_control_module та же проблема. Проблему можно оптимизировать с помощью этого патча per-worker-listener.

Кроме того, функция vhost работает нормально в однопроцессном режиме, но ещё не идеальна в многопроцессном, ожидая исправления. Например, следующая конфигурация подходит для многопроцессного режима:

rtmp {
    ...
    server {
        слушать 1935;
        имя_сервера domain_name;

        применение myapp {
            ...
        }
    }
}

В то время как следующая конфигурация не работает должным образом для запросов воспроизведения, направленных на второй server (независимо от того, является ли порт 1935 или нет) рабочих процессов, не являющихся издателями:

rtmp {
    ...
    сервер {
        слушай 1935;
        имя_сервера 1st_domain_name;

        применение myapp {
            ...
        }
    }

    сервер {
        слушай 1945;
        имя_сервера 2nd_domain_name;

        применение myapp {
            ...
        }
    }
}

Если NGINX работает в многопроцессорном режиме и опция сокета SO_REUSEPORT поддерживается платформой, добавление опции reuseport к директиве listen решит проблему «грохочущего стада».

rtmp {
    ...

    server {
        слушай 1935 reuseport;
        ...
    }
}

Пример конфигурации

worker_processes  1; #должно быть 1 для Windows, поскольку она не поддерживает сокет домена Unix
#worker_processes  авто; #из версий 1.3.8 и 1.2.5

#worker_cpu_affinity  0001 0010 0100 1000; #доступно только на FreeBSD и Linux
#worker_cpu_affinity  авто; #с версии 1.9.10

error_log журналы/ошибка.журнал ошибка;

#если модуль скомпилирован как динамический модуль и функции, связанные с 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;

    сервер {
        слушай       80;

        местоположение / {
            корень   /var/www;
            индекс  index.html index.htm;
        }

        error_page 500 502 503 504 /50x.html;

location = /50x.html { root html; }

location /live { flv_live on; #открыть потоковую передачу FLV в реальном времени (подписка) 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; #интервал, используемый модулем журнала для регистрации в access.log, очень полезен для отладки log_size 1m; #размер буфера, используемый модулем журнала для регистрации в access.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 )

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

Введение

Медиастриминговый сервер на основе nginx-rtmp-module. Имеет все функции nginx-rtmp-модуля, а также поддерживает HTTP-FLV, кэш GOP и VHOST (один IP для нескольких доменных имён). Развернуть Свернуть
BSD-2-Clause
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
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