Hostwinds Tutoriais

Resultados da busca por:


Índice


O que é RTMP?
Instalação
Instalar Dependências
Baixar software
Compile Software
Configuração
Aplicativos múltiplos
Permissões
Recodificação
Empurrando para outros serviços
HLS
Reprodução HLS
SSL
Outras Configurações
Transmissão

Transmissão ao vivo de um VPS com Nginx + RTMP

Tag: VPS 

O que é RTMP?
Instalação
Instalar Dependências
Baixar software
Compile Software
Configuração
Aplicativos múltiplos
Permissões
Recodificação
Empurrando para outros serviços
HLS
Reprodução HLS
SSL
Outras Configurações
Transmissão

Se você deseja que um servidor atue como um relé para você ser capaz de transmitir para vários serviços de uma só vez, codifique novamente seu fluxo de vídeo em diferentes formatos, resoluções ou bits de bits, ou para fluir de vídeos pré-gravados, um bom método para fazer isso é com um servidor que executa o Nginx compilado com o Módulo RTMP.

Streaming ao vivo usa muita largura de banda. A largura de banda exata usa no número de fluxos, bem como sua taxa de bits.

Reduzir a taxa de bits da codificação de vídeo pode reduzir seu uso de largura de banda ao custo de qualidade de vídeo.

O que é RTMP?

RTMP significa Protocolo de Mensagens em Tempo Real e é uma forma comum e padronizada que muitos serviços (como YouTube, Twitch, etc.) usam, ou pelo menos oferecem, para transmitir vídeo online.

Instalação

Este guia usa CentOS 7 como sistema operacional do servidor.

O NginX + RTMP pode ser configurado em outras distribuições do Linux e segue as mesmas instruções, usando o gerenciador de pacotes de outros distribuições e os caminhos do arquivo padrão.

Instalar Dependências

Atualize seu sistema

yum update -y

Instale ferramentas de desenvolvimento CentOS

yum groupinstall -y 'Development Tools

Instale o repositório EPEL

yum install -y epel-release

Instale dependências

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

Adicione a chave GPG ffmpeg e instale o 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

Baixar software

Crie ou vá para um diretório de trabalho

cd /usr/local/src/

Obtenha a versão mais recente do Nginx em aqui

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

Clone o módulo Nginx RTMP de aqui

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

Remover arquivos tar desnecessários

rm -f *.tar.gz

Compile Software

Mova para a pasta Nginx baixada

cd nginx-1.17.0/

Execute o script de configuração para adicionar SSL e o módulo RTMP
Atualize o caminho do arquivo --add-módulo conforme necessário para apontar para onde você clonou o módulo NginX-RTMP

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

Compilar Nginx

make

Instale o Nginx

make install

Inicie e habilite o Nginx

systemctl start nginx
systemctl enable nginx

Configuração

Para configurar o serviço RTMP, você precisa adicionar uma seção RTMP ao seu arquivo de configuração NGINX, que deve ser /etc/nginx/nginx.conf por padrão.

Adicione uma seção RTMP ao arquivo conf da seguinte maneira:

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

Nessa configuração, dissemos ao servidor para ouvir quaisquer solicitações na porta 1935 (a porta padrão para RTMP) e especificou um aplicativo chamado "Live" para aceitar nossos fluxos.

Essa configuração é suficiente para que o servidor aceite um fluxo, mas existem outras configurações que você pode definir para funcionalidade adicional.

Em seguida, quando você flui, você definirá seu destino como RTMP: // server_address / aplicativo, onde server_address é o endereço de domínio ou o aplicativo do seu servidor, e o aplicativo é o nome do aplicativo que você configurou na configuração Nginx ("ao vivo" neste exemplo.).

Exemplo: rtmp: //127.0.0.1/live

Aplicativos múltiplos

Dentro do servidor {} block, você pode configurar quantas aplicações quiser. A única restrição no lugar é que cada aplicativo deve ter um nome exclusivo.

Permissões

Você pode especificar permissões para o que o IPS pode transmitir para o servidor e o que IPs pode reproduzir o fluxo desse servidor.

Para adicionar uma regra de permissões, adicione uma linha dentro do servidor {} ou um bloco de aplicativo {} no seguinte formato:

Usando "Permitir" ou "Negar" Especifica se a regra permite ou nega a conexão da fonte especificada.

Usando "Publish" especifica que o local de origem pode transmitir para este servidor.Usando "Play" Especifica que o local de origem pode reproduzir um fluxo deste servidor.

Usando "All" como o local atua como uma captura - tudo para qualquer endereço conectando a este servidor.Caso contrário, você pode definir um endereço IP específico.

Colocar a regra de permissão no bloco do servidor {} faz a decisão global em todos os aplicativos. Colocar a regra de permissão em um bloco de aplicativo {} aplica a regra a apenas essa aplicação.

Exemplos:

Permita que 127.0.0.1 seja transmitido para este servidor, mas negue qualquer outra fonte:

allow publish 127.0.0.1;
deny publish all;

Permitir a reprodução para todas as fontes, exceto 127.0.0.1:

allow play all;
deny play 127.0.0.1;

Recodificação

Você pode usar uma instrução EXEC de dentro de um aplicativo {} block para executar um comando. Usando este método, você pode passar o fluxo RTMP recebido para um processador de vídeo, como FFMPEG, para codificação.

Exemplo: Codifique o fluxo recebido em um formato mp4 e salve-o como um arquivo

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

Empurrando para outros serviços

Você pode empurrar o fluxo de um aplicativo para outro receptor simplesmente usando a instrução Push.

Por exemplo, você pode adicionar a seguinte instrução a qualquer aplicativo {} block para empurrar o fluxo recebido para se contorcer, usando um dos seus endereços de ingestão (Neste caso, o endereço de Seattle). Basta substituir {stream_key} com sua chave de fluxo de contração.

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

Você pode fazer o mesmo para qualquer outra plataforma que ofereça endereços de ingestão RTMP que você pode transmitir e pode até mesmo listar várias instruções de push para permitir a transmissão de várias plataformas de uma só vez.

HLS

HLS, ou HTTP Live Streaming, é um formato bastante popular para transmitir vídeo sobre os protocolos HTTP e HTTPS, tornando-o significativamente mais fácil incorporar o fluxo em uma página da Web.

Para habilitar o HLS, basta adicionar as seguintes instruções a qualquer um dos blocos {} do seu aplicativo.

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

Em seguida, certifique-se de que o diretório hls_path exista executando o comando:

mkdir -p /mnt/has/live

Você pode alterar / mnt / hls / $ app para qualquer caminho de pasta que você deseja.$ app será substituído pelo nome do aplicativo (neste caso, "ao vivo").
Este será o local onde os arquivos HLS .m3u8 serão salvos.

Você também pode ajustar os valores HLS_FRAGEMO e hls_playlist_length para atender às suas necessidades.
2s e 4s são os valores que encontramos para funcionar o melhor quando transmitindo com um intervalo de dois segundos de chave.

Então você também precisa adicionar um bloco http {} à sua configuração Nginx. Este bloco deve ser um bloco de nível superior, no mesmo nível do bloco RTMP {} existente. Este novo bloco deve ser o seguinte:

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

Você pode alterar as portas listadas na escuta de instruções em qualquer porta que você deseja atender o vídeo. Se você alterar a porta longe das portas HTTP / S padrão (80 e 443), precisará especificar a porta após o endereço do servidor no seguinte formato: http: // {server_address}: {port}.

Exemplo: http://example.com:8080/

Depois, salvando essas alterações no seu arquivo de configuração Nginx, reinicie o NginX executando o comando:

systemctl restart nginx

Reprodução HLS

Com HLS habilitado, agora você pode incorporar o fluxo em suas páginas da web usando qualquer player de vídeo que suporte a reprodução HLS, como Video.JS ou PlayerJS.

Você fornecerá ao seu player com o endereço de origem no seguinte formato:

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

{server_address} será o seu IP ou domínio do seu servidor, {app_name} será o nome do aplicativo {} block que você está streaming para, e {secret_key} será a chave secreta que você definiu no seu software de streaming (como Obs ).

Exemplo:

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

SSL

Você pode servir HLS sobre HTTPS também. Para fazer isso, você precisa fornecer um certificado SSL e chave privada no bloco do servidor {} com as seguintes instruções:

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

O certificado deve ser para o domínio que você especificou na instrução Server_Name.

Você também precisará editar / adicionar as instruções Ouvir para ouvir na porta 443 (a porta HTTPS) e opcionalmente forçar o uso de SSL. As instruções da escuta para isso devem ser as seguintes:

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

Se você não tiver um certificado SSL para o seu domínio, você pode usar Vamos criptografar para receber um certificado gratuito.

Outras Configurações

Existem muitas outras instruções de configuração que você pode adicionar para expandir a funcionalidade do módulo RTMP da configuração Nginx.

A documentação completa sobre o que você pode adicionar e configurar pode ser encontrada aqui.

Transmissão

Depois de configurar seu servidor, você pode transmitir de qualquer software de streaming de vídeo que suporta streaming para um endereço RTMP.Você pode considerar usar OBS Como muito poderoso, tem suporte plugin, é popular com uma grande comunidade e está aberto.

Para transmitir para o seu servidor, tudo o que você precisa fazer é definir o destino do fluxo como endereço do seu servidor, com o nome do aplicativo e definir uma chave privada.O formato para o endereço do servidor deve ser o seguinte:

RTMP://{server_address}/{app_name}

{server_address} é o seu IP ou um domínio que você definiu para apontar para este servidor.{app_name} é o nome do aplicativo {} bloco que você definiu na configuração do Nginx.Após a nossa configuração de exemplo acima, esse nome de aplicativo seria "ao vivo".

Fornecer uma chave secreta exclusiva garantirá que o fluxo seja único, mesmo que outras fontes estiverem transmitidas para o mesmo aplicativo.

Seguindo o exemplo acima, o fluxo será então ao vivo no RTMP: //example.com/live/secret_key, que você pode pegar usando qualquer reprodução de vídeo que possa abrir um fluxo de RTMP, como VLC.

Escrito por Hostwinds Team  /  Junho 18, 2019