Hostwinds Tutoriels

Résultats de recherche pour:


Table des matières


Qu'est-ce que RTMP?
Installation
Installer les dépendances
Télécharger des logiciels
Compiler le logiciel
Configuration
Applications multiples
Autorisations
Recodage
Pousser vers d'autres services
HLS
Lecture HLS
SSL
Autres configurations
Diffusion

Diffusion en direct depuis un VPS avec Nginx + RTMP

Mots clés: VPS 

Qu'est-ce que RTMP?
Installation
Installer les dépendances
Télécharger des logiciels
Compiler le logiciel
Configuration
Applications multiples
Autorisations
Recodage
Pousser vers d'autres services
HLS
Lecture HLS
SSL
Autres configurations
Diffusion

Si vous souhaitez qu'un serveur agisse comme un relais pour que vous puissiez flux à plusieurs services à la fois, reproduire votre flux vidéo dans différents formats, résolutions ou débits, ou à diffuser des vidéos préenregistrées, une bonne méthode Pour ce faire, c'est avec un serveur exécutant NGinx compilé avec le Module RTMP.

Le streaming en direct utilise beaucoup de bande passante. La bande passante exacte utilise sur le nombre de flux, ainsi que leur débit binaire.

La réduction du débit du bit du codage vidéo peut réduire votre utilisation de la bande passante au coût de la qualité vidéo.

Qu'est-ce que RTMP?

RTMP signifie Protocole de messagerie en temps réel et est une manière courante et standardisée de nombreux services (tels que YouTube, Twitch, etc.) utilisent, ou au moins proposent, pour diffuser des vidéos en ligne.

Installation

Ce guide utilise CentOS 7 comme système d'exploitation du serveur.

Nginx + RTMP peut être configuré sur d'autres distributions Linux et suit les mêmes instructions, à l'aide des autres distributions 'Gestionnaire de packages et des chemins de fichiers par défaut.

Installer les dépendances

Mettez à jour votre système

yum update -y

Installer les outils de développement CentOS

yum groupinstall -y 'Development Tools

Installer le référentiel EPEL

yum install -y epel-release

Installer les dépendances

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

Ajouter la clé GPG ffmpeg et installer 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

Télécharger des logiciels

Créer ou accéder à un répertoire de travail

cd /usr/local/src/

Obtenez la dernière version de Nginx sur ici

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

Cloner le module Nginx RTMP depuis ici

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

Supprimer les fichiers tar inutiles

rm -f *.tar.gz

Compiler le logiciel

Déplacez-vous dans votre dossier Nginx téléchargé

cd nginx-1.17.0/

Exécutez le script de configuration pour ajouter SSL et le module RTMP
Mettez à jour le chemin du fichier --Add-Module si nécessaire pour indiquer où vous avez cloné le module NGinx-RTMP

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

Compiler Nginx

make

Installez Nginx

make install

Démarrez et activez Nginx

systemctl start nginx
systemctl enable nginx

Configuration

Pour configurer le service RTMP, vous devez ajouter une section RTMP à votre fichier de configuration NGinx, qui devrait être /etc/nginx/nginx.conf par défaut.

Ajoutez une section RTMP au fichier conf comme suit:

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
    }
}
}

Dans cette configuration, nous avons dit au serveur d'écouter toutes les demandes du port 1935 (le port par défaut pour RTMP) et de spécifier une application appelée "Live" pour accepter nos flux.

Cette configuration est suffisante pour que le serveur accepte un flux, mais vous pouvez définir d'autres configurations pour des fonctionnalités supplémentaires.

Ensuite, lorsque vous diffusez, vous allez définir votre destination comme RTMP: // Server_Address / Application, où Server_Address est votre adresse IP ou de domaine de votre serveur, et l'application est le nom de l'application que vous avez configuré dans la configuration NGinx ("Live" dans cet exemple).

Exemple: rtmp: //127.0.0.1/live

Applications multiples

Dans le bloc Server {} Block, vous pouvez configurer autant d'applications que vous le souhaitez. La seule restriction en place est que chaque application doit avoir un nom unique.

Autorisations

Vous pouvez spécifier des autorisations pour ce que IPS peut diffuser sur le serveur et ce que IPS peut lire le flux de ce serveur.

Pour ajouter une règle d'autorisations, ajoutez une ligne sur le serveur {} ou une application {} Block dans le format suivant:

Utiliser "Autoriser" ou "Denier" Spécifie si la règle permet ou nie la connexion à partir de la source spécifiée.

Utilisation de "Publier" Spécifie que l'emplacement source peut diffuser sur ce serveur.Utilisation de "Play" Spécifie que l'emplacement source peut lire un flux à partir de ce serveur.

L'utilisation de «tout» comme l'emplacement agit comme une prise de capture pour toute adresse reliée à ce serveur.Sinon, vous pouvez définir une adresse IP spécifique.

Mettre la règle de permission dans le serveur {} Block rend la décision globale dans toutes les applications. Mettre la règle d'autorisation dans une application {} Block applique la règle à cette application uniquement.

Exemples:

Autorisez 127.0.0.1 à diffuser sur ce serveur, mais refusez toute autre source:

allow publish 127.0.0.1;
deny publish all;

Autoriser la lecture de toutes les sources sauf 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Recodage

Vous pouvez utiliser une instruction Exec à partir d'une application {} Block pour exécuter une commande. En utilisant cette méthode, vous pouvez transmettre le flux RTMP reçu à un processeur vidéo, tel que FFMPEG, pour codage.

Exemple: Encodez le flux reçu au format mp4 et enregistrez-le sous forme de fichier

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

Pousser vers d'autres services

Vous pouvez appuyer sur le flux d'une application à un autre récepteur simplement en utilisant l'instruction PUSH.

Par exemple, vous pouvez ajouter la déclaration suivante à n'importe quelle application {} Block pour appuyer sur le flux reçu à Twitch, en utilisant l'un de leurs ingérer des adresses (Dans ce cas, l'adresse de Seattle). Il suffit de remplacer {stream_key} avec votre clé de streamwilch.

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

Vous pouvez faire la même chose pour toute autre plate-forme proposée aux adresses INGEST RTMP que vous pouvez diffuser et peut même répertorier plusieurs instructions push pour permettre la diffusion en continu sur plusieurs plates-formes à la fois essentiellement.

HLS

HLS, ou Diffusion HTTP en direct, est un format assez populaire pour diffuser la vidéo sur les protocoles HTTP et HTTPS, ce qui facilite considérablement l'intégration du flux dans une page Web.

Pour activer HLS, ajoutez simplement les instructions suivantes à l'un de vos blocs {} d'application.

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

Assurez-vous ensuite que le répertoire HLS_PATH existe en exécutant la commande:

mkdir -p /mnt/has/live

Vous pouvez modifier / mnt / hls / $ application sur n'importe quel chemin de dossier souhaité.$ L'application sera remplacée par le nom de l'application (dans ce cas, "Live").
Ce sera l'emplacement dans lequel les fichiers HLS .m3u8 seront enregistrés.

Vous pouvez également ajuster les valeurs HLS_FRAGE et HLS_PLAYLIST_LONGT_LUGTY pour répondre à vos besoins.
Les 2s et les 4s sont les valeurs que nous avons trouvées pour travailler le meilleur lors de la diffusion en continu avec un intervalle de 2 secondes.

Ensuite, vous devez également ajouter un bloc HTTP {} à votre configuration NGinx. Ce bloc doit être un bloc de niveau supérieur, au même niveau que le bloc RTMP {} existant. Ce nouveau bloc devrait être comme suit:

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;
    }
}
}

Vous pouvez modifier les ports répertoriés dans l'écoute des instructions à tout port que vous souhaitez servir la vidéo. Si vous modifiez le port à l'écart des ports Standard HTTP / S (80 et 443), vous devez spécifier le port après l'adresse du serveur dans le format suivant: http: // {serveur_address}: {port}.

Exemple: http://example.com:8080/

Ensuite, enregistrez ces modifications apportées à votre fichier de configuration Nginx, redémarrez NGinx en exécutant la commande:

systemctl restart nginx

Lecture HLS

Avec HLS activé, vous pouvez désormais intégrer le flux dans vos pages Web à l'aide de n'importe quel lecteur vidéo prenant en charge la lecture HLS, tel que Video.JS ou JoueurJS.

Vous fournirez votre joueur avec l'adresse source du format suivant:

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

{Server_Address} sera votre adresse IP ou votre domaine de votre serveur, {APP_NAME} sera le nom de l'application {} Block que vous diffusez sur et {Secret_Key} sera la touche Secret que vous définis dans votre logiciel de diffusion en streaming (telle que OBS ).

Exemple:

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

SSL

Vous pouvez également servir HLS sur HTTPS. Pour ce faire, vous devez fournir un certificat SSL et une clé privée dans le bloc Server {} avec les affirmations suivantes:

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

Le certificat doit être destiné au domaine que vous avez spécifié dans la relève Server_Name.

Vous devrez alors également modifier / ajouter les instructions d'écoute pour écouter sur le port 443 (le port HTTPS) et la force d'utilisation éventuellement à la force de SSL. Les déclarations d'écoute pour cela devrait être la suivante:

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

Si vous ne disposez pas d'un certificat SSL pour votre domaine, vous pouvez utiliser Cryptons de recevoir un certificat gratuit.

Autres configurations

Il existe de nombreuses autres instructions de configuration que vous pouvez ajouter pour étendre les fonctionnalités du module RTMP de la configuration Nginx.

La documentation complète de ce que vous pouvez ajouter et configurer peut être trouvée ici.

Diffusion

Une fois que vous avez configuré votre serveur, vous pouvez diffuser de n'importe quel logiciel de diffusion vidéo Streaming Streaming à une adresse RTMP.Vous pouvez envisager d'utiliser OBS Comme très puissant, le soutien du plug-in est populaire auprès d'une grande communauté et est ouvert.

Pour diffuser sur votre serveur, tout ce que vous avez à faire est de définir la destination du flux comme adresse de votre serveur, avec le nom de l'application et définir une clé privée.Le format de l'adresse du serveur doit être le suivant:

RTMP://{server_address}/{app_name}

{Server_Address} est votre adresse IP ou un domaine que vous avez défini sur le point sur ce serveur.{nom_name} est le nom du bloc Application {} que vous avez défini dans la configuration NGinx.Après notre exemple de configuration d'en haut, ce nom d'application serait "en direct".

Fournir une clé secrète unique garantira que le flux est unique, même si d'autres sources sont diffusées vers la même application.

Suite à l'exemple ci-dessus, le flux sera alors en direct à la RTMP: //example.com/live/secret_key, que vous pouvez récupérer à l'aide de n'importe quelle lecture vidéo pouvant ouvrir un flux RTMP, tel que VLC.

Écrit par Hostwinds Team  /  juin 18, 2019