Hostwinds Учебники

Результаты поиска для:


Содержание


Что такое RTMP?
Установка
Установить зависимости
Загрузить программное обеспечение
Скомпилировать программное обеспечение
Конфигурация
Несколько приложений
Разрешения
Перекодирование
Переход к другим службам
HLS
Воспроизведение HLS
SSL
Прочие конфигурации
Потоковое

Прямая трансляция с VPS с Nginx + RTMP

Теги: VPS 

Что такое RTMP?
Установка
Установить зависимости
Загрузить программное обеспечение
Скомпилировать программное обеспечение
Конфигурация
Несколько приложений
Разрешения
Перекодирование
Переход к другим службам
HLS
Воспроизведение HLS
SSL
Прочие конфигурации
Потоковое

Независимо от того, хотите ли вы, чтобы сервер действовал в качестве реле для вас, чтобы иметь возможность сразу повторно трансмировать в нескольких службах, перенесите свой видео в разные форматы, резолюции или битрейты или для потока от предварительно записанных видео, хороший метод Для этого с сервером работает nginx скомпилирован с Модуль RTMP.

Живая трансляция использует много пропускной способности. Точная пропускная способность использует на количество потоков, а также их битрейт.

Уменьшение битрейта кодирования видео может снизить использование пропускной способности на стоимость качества видео.

Что такое RTMP?

RTMP означает Протокол обмена сообщениями в реальном времени и является распространенным стандартизированным способом, которым многие сервисы (такие как YouTube, Twitch и т. д.) используют или, по крайней мере, предлагают транслировать видео в Интернете.

Установка

В этом руководстве в качестве операционной системы сервера используется CentOS 7.

NGINX + RTMP можно настроить в других дистрибутивах Linux и следует за теми же инструкциями, используя менеджер по пакету других дистрибутивов и путей файлов по умолчанию.

Установить зависимости

Обновите вашу систему

yum update -y

Установите инструменты разработки CentOS

yum groupinstall -y 'Development Tools

Установить репозиторий EPEL

yum install -y epel-release

Установить зависимости

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel PCRE-devel GeoIP GeoIP-devel

Добавьте ключ GPG ffmpeg и установите ffmpeg

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

Загрузить программное обеспечение

Создать или перейти в рабочий каталог

cd /usr/local/src/

Загрузите последнюю версию Nginx из Вот

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

Клонируйте модуль Nginx RTMP из Вот

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

Удалите ненужные файлы tar

rm -f *.tar.gz

Скомпилировать программное обеспечение

Перейдите в загруженную папку Nginx

cd nginx-1.17.0/

Запустите сценарий конфигурации, чтобы добавить SSL и модуль RTMP.
Обновите пункт файла-модуля ADDD по мере необходимости, чтобы указать, где вы клонировали модуль NGINX-RTMP

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

Скомпилируйте Nginx

make

Установить Nginx

make install

Запустите и включите Nginx

systemctl start nginx
systemctl enable nginx

Конфигурация

Чтобы настроить службу RTMP, вам необходимо добавить раздел RTMP в свой файл конфигурации NGINX, который должен быть по умолчанию, должен быть /etc/nginx/nginx.conf.

Добавьте раздел RTMP в файл conf следующим образом:

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

В этой конфигурации мы сказали серверу прослушивать любые запросы на порт 1935 (порт по умолчанию для RTMP) и указал приложение, называемое «Live», чтобы принять наши потоки.

Этой конфигурации достаточно, чтобы сервер принимал поток, но есть и другие конфигурации, которые вы можете установить для дополнительных функций.

Затем, когда вы будете транслироваться, вы устанавливаете пункт назначения в виде RTMP: // Server_address / Application, где Server_address - это IP-адрес домена вашего сервера, и приложение - это имя приложения, которое вы настроили в конфигурации NGINIX («Live» в этом примере в этом примере.).

Пример: rtmp: //127.0.0.1/live

Несколько приложений

В блоке сервера {} вы можете настроить столько приложений, сколько вы хотите. Единственное ограничение на месте состоит в том, что каждое приложение должно иметь уникальное имя.

Разрешения

Вы можете указать разрешения для того, что IPS может транслироваться на сервере, и что IPS может воспроизводить поток с этого сервера.

Чтобы добавить правило разрешений, добавьте строку в блоке сервера {}, либо блок приложения {} в следующем формате:

Использование «Разрешить» или «deny» указывает, позволяет ли правило или отрицает соединение из указанного источника.

Использование «Публикация» указывает, что местоположение источника может поток на этот сервер.Использование «Play» указывает, что местоположение источника может воспроизводить поток с этого сервера.

Используя «все», поскольку местоположение действует как улов для любого адреса, подключающегося к этому серверу.В противном случае вы можете установить определенный IP-адрес.

Установка правила разрешения на блоке сервера {} делает постановление глобальной во всем приложениям. Установка правила разрешений в блоке Application {} применяет правило только к этому приложению.

Примеры:

Разрешить 127.0.0.1 потоковую передачу на этот сервер, но запретить любые другие источники:

allow publish 127.0.0.1;
deny publish all;

Разрешить воспроизведение для всех источников, кроме 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Перекодирование

Вы можете использовать оператор EXEC из блока {} {}, чтобы выполнить команду. Используя этот метод, вы можете пройти полученный поток RTMP в видеопроцессор, такой как FFMPEG, для кодирования.

Пример: Закодируйте полученный поток в формат mp4 и сохраните его как файл

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

Переход к другим службам

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

Например, вы можете добавить следующее утверждение на любое блок {}, чтобы протолкнуть полученный поток, используя один из их поглощать адреса (В этом случае адрес Сиэтл). Просто замените {Stream_key} с помощью ключа Twitch Stream.

push rtmp://live-sea.twitch.tv/app/{stream_key};

Вы можете сделать то же самое для любой другой платформы, которая предлагает RTMP Ingest Addrames, которые вы можете транслировать, и может даже перечислить несколько выпускных операторов, чтобы позволить потоковую передачу на несколько платформ сразу.

HLS

HLS, или HTTP Live Streaming, является довольно популярным форматом для потокового видео над протоколами HTTP и HTTPS, что делает его значительно легче встроить поток на веб-страницу.

Чтобы включить HLS, просто добавьте следующие операторы в любой из блоков {} вашего приложения.

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

Затем убедитесь, что каталог HLS_PATH существует, запустив команду:

mkdir -p /mnt/has/live

Вы можете изменить / mnt / hls / $ приложение в любой путь к папке, который вы хотите.$ Приложение будет заменено на имя приложения (в этом случае, «Live»).
Это будет место, где будут сохранены файлы HLS .m3u8.

Вы также можете настроить значения hls_fragement и hls_playlist_length, чтобы удовлетворить ваши потребности.
2s и 4s - это значения, которые мы нашли, чтобы работать лучшее при потоковой передаче с интервалом 2-секундного ключевого кадра.

Затем вам также необходимо добавить блок HTTP {} в конфигурацию Nginx. Этот блок должен быть блоком верхнего уровня, на том же уровне, что и существующий блок RTMP {}. Этот новый блок должен быть следующим:

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        add\_header 'Access-Control-Allow-Origin' '\*' always;
        add\_header 'Access-Control-Expose-Headers' 'Content-Length';

        # Allow CORS preflight requests
        if ($request\_method = 'OPTIONS') {
            add\_header 'Access-Control-Allow-Origin' '\*';
            add\_header 'Access-Control-Max-Age' 1728000;
            add\_header 'Content-Type' 'text/plain charset=UTF-8';
            add\_header 'Content-Length' 0;
            return 204;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

Вы можете изменить порты, перечисленные в прослушивании к заявлениям в любой порт, который вы хотите служить видео. Если вы измените порт вдали от стандартных портов HTTP / S (80 и 443), вам нужно будет указать порт после адреса сервера в следующем формате: http: // {server_address}: {port}.

Пример: http://example.com:8080/

После этого сохранения этих изменений в файл конфигурации NGINX перезапустите Nginx, запустив команду:

systemctl restart nginx

Воспроизведение HLS

При включенном HLS вы теперь можете встраивать поток на свои веб-страницы с помощью любого видеоплеера, поддерживающего воспроизведение HLS, например Video.JS или PlayerJS.

Вы предоставите свой игрок с адресом источника в следующем формате:

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

{Server_address} будет вашим IP или домен вашего сервера, {app_name} будет именем блока приложения {}, которое вы передаете, и {secret_key} будет секретным ключом, который вы устанавливаете в ваше потоковое программное обеспечение (например, ).

Пример:

http://example.com/live/secret_key.m3u8

SSL

Вы также можете служить HL через HTTPS. Для этого необходимо предоставить сертификат SSL и закрытый ключ в блоке сервера {} со следующими утверждениями:

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

Сертификат должен быть для домена, который вы указали в операторе Server_Name.

Затем вам также необходимо редактировать / добавить заявления по слушанию, чтобы прослушать порта 443 (порт HTTPS) и при желании насильника использования SSL. Высказывания слушания для этого должны быть следующими:

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

Если у вас нет сертификата SSL для вашего домена, вы можете использовать Давайте ширина для получения бесплатного сертификата.

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

Есть множество других конфигурационных операторов, которые вы можете добавить, чтобы расширить функциональность модуля RTMP конфигурации Nginx.

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

Потоковое

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

Чтобы поток на свой сервер, все, что вам нужно сделать, это установить место назначения потока в качестве адреса вашего сервера с именем приложения и установить закрытый ключ.Формат для адреса сервера должен быть следующим:

RTMP://{server_address}/{app_name}

{Server_address} - ваш IP или домен, который вы установили, чтобы указать на этот сервер.{app_name} - это имя блока приложения {}, которое вы установили в конфигурации Nginx.После нашего примера конфигурация сверху, имя приложения будет «жить».

Предоставление уникального секретного ключа гарантирует, что поток уникален, даже если другие источники передаются в то же приложение.

После приведенного выше примера поток будет жить в RTMP: //example.com/Live/secret_key, который вы можете забрать, используя любую видео, которая может открыть поток RTMP, например, VLC.

Написано Hostwinds Team  /  Июнь 18, 2019