Como Configurar um Servidor NGINX RTMP para Transmissão

O seu livestream está travando toda hora? Se sim, você precisará encontrar uma maneira confiável de hospedar o seu stream. Mas se você não pode pagar por opções caras, não se preocupe! O NGINX RTMP vai salvar o dia. O NGINX RTMP é um módulo open-source confiável, então você sabe o que isso significa – é GRATUITO!

Neste tutorial, você aprenderá como configurar um servidor NGINX RTMP para que você possa estabelecer um livestream confiável com o seu site.

Pronto? Continue lendo e comece a configurar um livestream!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter o seguinte:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • NGINX instalado no servidor Linux.
  • A non-root user with sudo privileges.
  • Recursos mínimos necessários para executar um servidor de livestream – 2 GB de RAM, 2 núcleos de CPU e 20 GB de HDD.

Estes valores são apenas sugestões. Os valores exatos dependem das suas necessidades de tráfego reais. Quanto mais tráfego você tiver, mais servidores potentes você precisará para hospedar e transmitir seu vídeo ao vivo. Em um ambiente de desenvolvimento, um servidor NGINX RTMP com 2 CPUs e 2 GB de RAM é suficiente para teste.

Configurando um Servidor RTMP

Agora que os pré-requisitos estão resolvidos, você pode prosseguir com a instalação e configuração do seu servidor RTMP. Primeiro, você vai instalar um módulo NGINX para converter seu servidor NGINX em um servidor RTMP e, em seguida, configurar o arquivo de configuração do NGINX para habilitar transmissões ao vivo para os usuários.

1. Abra seu terminal e execute o comando apt update para atualizar todos os seus pacotes. Este comando sincroniza seu banco de dados de pacotes com o último banco de dados do Ubuntu.

sudo apt update -y
Updating all your packages

2. Em seguida, execute o seguinte comando para instalar um servidor RTMP no seu servidor Linux.

O módulo libnginx-mod-rtmp é um módulo NGINX que converte seu servidor NGINX em um servidor RTMP. Este módulo permite que o NGINX se comunique com o player Adobe Flash para que você possa transmitir seu vídeo ou áudio ao vivo, e é oficialmente suportado pela equipe de desenvolvimento.

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. Abra o arquivo /etc/nginx/nginx.conf no seu editor favorito para configurar seu programa de transmissão ao vivo RTMP. O arquivo nginx.conf é um arquivo de configuração do NGINX, que contém várias diretivas ou blocos para definir o comportamento do serviço NGINX.

4. Por fim, preencha o arquivo nginx.conf com o seguinte código, salve as alterações e saia do editor.

O código abaixo instrui o NGINX a atuar como um servidor RTMP e habilita transmissões ao vivo para seus usuários.

# Este bloco de código indica para o NGINX agir como um servidor RTMP.
rtmp {
		server {
		# Configura a porta em que o servidor irá escutar.
    listen 1935;
				# O tamanho de cada pedaço de dados que será enviado.
				# O Flash Player irá travar se o pedaço for muito pequeno, 
				# o que pode causar uma condição de subfluxo de buffer.
        chunk_size 4096;
				# Os endereços IP autorizados a publicar conteúdo no servidor.
				# Permite apenas o localhost a publicar conteúdo no NGINX RTMP.
				allow publish 127.0.0.1;
				# Nega a publicação para todos os outros.
				deny publish all;
				# Define uma aplicação nomeada "live"
        application live {
				# Indica ao NGINX para habilitar transmissões ao vivo para seus usuários.
						live on;
				# Esta linha indica ao NGINX para desativar a gravação. Se esta linha não estiver incluída, 
				# o NGINX continuará gravando e salvando sua transmissão permanentemente no disco.
						record off;
				}
		}
}

Assegurando a Rede Configurando um Firewall

Você já configurou seu servidor NGINX RTMP, mas precisará proteger sua rede e controlar o fluxo de tráfego. Como? Configurando um firewall, o Uncomplicated Firewall (UFW), que é o firewall padrão no Ubuntu.

Se você colocar seu servidor NGINX RTMP atrás de um firewall, precisará permitir que a porta do servidor NGINX RTMP esteja aberta. Como você configurou seu servidor NGINX RTMP para escutar na porta 1935, você permitirá que esta porta passe pelo seu firewall.

1. Execute o seguinte comando para adicionar uma regra de firewall que abre a porta 1935 no seu firewall. Esta regra de firewall permite que a porta do seu servidor NGINX RTMP 1935 seja acessível para todas as solicitações de entrada e saída.

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. Em seguida, execute o seguinte comando para desativar e reativar seu firewall. Este comando basicamente reinicia o firewall para que quaisquer alterações no firewall tenham efeito.

sudo ufw disable && sudo ufw enable

3. Por fim, execute o comando abaixo para verificar o status do seu firewall e verificar se a porta 1935 é acessível de todos os endereços IP (Anywhere).

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

Transmissão de Vídeo usando FFmpeg

Seu servidor NFINX RTMP está agora ativo, então é hora de usar o FFmpeg para criar um vídeo de exemplo e transmiti-lo através do seu servidor NGINX RTMP. FFmpeg é uma solução completa para gravar, converter e transmitir áudio e vídeo em muitas aplicações diferentes como VLC, OMXPlayer, VobSub, e assim por diante.

Você estará testando a transmissão de vídeo em seu servidor e pode usar qualquer vídeo que seja pequeno em tamanho para transmitir.

1. Execute o comando apt install abaixo para instalar as dependências necessárias para o correto funcionamento do FFmpeg.

O comando abaixo instala o seguinte:

  • libpcre3 – Uma biblioteca regex usada pela caixa de ferramentas FFmpeg para ajudar na análise e compilação de expressões regulares.
  • libpcre3-dev – Este pacote contém os cabeçalhos de desenvolvimento do pacote libpcre3.
  • libssl-dev – A biblioteca criptográfica OpenSSL usada para criar conexões SSL/TLS em seu servidor RTMP.
  • zlib1g-dev: A biblioteca zlib é uma biblioteca de compressão e descompressão que acelera a transferência de arquivos de áudio e vídeo pela Internet.
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. Em seguida, execute o seguinte comando para instalar o ffmpeg no seu servidor.

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. Por fim, execute o comando ffmpeg para realizar o seguinte e criar uma nova transmissão ao vivo:

  • Leia a entrada (re) do arquivo de origem (i) na taxa de quadros original. Certifique-se de substituir video.mp4 pelo caminho e nome do seu vídeo.
  • Copie o formato do vídeo textualmente (c:v copy) e codifique o áudio com o codec AAC (c:a aac).
  • Defina a taxa de amostragem de áudio para 44100 Hz (ar 44100). Se a taxa de amostragem do seu vídeo for inferior a esse valor (44100 Hz), o FFmpeg realiza interpolação para aumentar a taxa de amostragem.
  • Defina os canais de áudio para um canal (mono) (ac 1), e o formato de vídeo que o FFmpeg irá transmitir (-f flv).
  • Configure seu programa de transmissão RTMP (rtmp://localhost/live/streamname.flv) que você configurou na seção “Configurando um Servidor RTMP” (passo quatro). Você pode alterar streamname.flv para qualquer nome de sua preferência.
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

Como você vê abaixo, o comando ffmpeg imprime o quadro por segundo que detecta, a taxa de bits, e o fps da transmissão ao vivo RTMP recém-criada.

Viewing the RTMP Live Stream Data

Conclusão

Neste tutorial, você aprendeu como configurar seu servidor RTMP NGINX e habilitar transmissões ao vivo em seu servidor, modificando o arquivo de configuração do NGINX. Você também abordou a configuração de uma transmissão ao vivo de vídeo usando a ferramenta FFmpeg por meio do seu servidor RTMP NGINX.

Você acabou de perceber que configurar uma transmissão ao vivo não precisa custar cada centavo. Neste ponto, por que não integrar sua transmissão em sua página da web usando o elemento HTML5 <video>? Ou configurar um OBS Studio para sua transmissão RTMP?

Source:
https://adamtheautomator.com/nginx-rtmp/