BLOG | NGINX

Habilitando streaming de vídeo para aprendizagem remota com NGINX e NGINX Plus

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Nina Forsyth
Nina Forsyth
Publicado em 16 de abril de 2020

Fiquei emocionado quando a F5 anunciou a compra da NGINX há um ano, porque, como um usuário antigo da F5, eu sabia que a NGINX seria a escolha perfeita. Esse sentimento foi confirmado quando, em uma de nossas primeiras reuniões conjuntas, os funcionários da NGINX discutiram algo profundamente importante para mim: seu comprometimento com a “comunidade”. Desde que entrei para a equipe NGINX como gerente de produto, tive o prazer de ver esse comprometimento em ação e pude trabalhar mais profundamente com a comunidade.

A comunidade NGINX está se unindo durante a pandemia de COVID-19

Aqueles de nós que trabalham com código aberto normalmente usam “comunidade” para descrever pessoas que apoiam um projeto de código aberto enviando código. Embora importantes, eles são apenas uma pequena parte da comunidade NGINX. Quem são, então, os outros membros da comunidade? Também valorizamos aqueles que:

  • Use o NGINX nos projetos que você compartilha no GitHub
  • Confie no NGINX para entregar sites, aplicativos e APIs com segurança aos seus usuários
  • Escreva posts de blog sobre a instalação e uso do NGINX
  • Ajude os usuários do NGINX em fóruns públicos

Nos últimos meses, os membros da comunidade NGINX realmente se uniram para apoiar uns aos outros e às muitas organizações que lutam para manter as operações durante a pandemia da COVID-19. Muitos de vocês sinalizaram sites que podem se beneficiar do software NGINX ou até mesmo doaram tempo e experiência sobre como ajustar o NGINX para obter desempenho ideal. Em um esforço para fazer a nossa parte, publicamos Recursos gratuitos para sites afetados pela COVID-19 e ficamos animados em ver a comunidade se unir em torno de novos usuários do NGINX.

Como parte de nossos esforços para ajudar organizações a lidar com o aumento do tráfego e adicionar novas funcionalidades, estamos fornecendo até cinco instâncias gratuitas do NGINX Plus para organizações na linha de frente da pandemia. Isso incluiu provedores médicos, repartições governamentais e – mais relevante para este blog – escolas, universidades e organizações sem fins lucrativos focadas em educação. Detectamos um caso de uso de tendência entre essas organizações que provavelmente não irá surpreendê-lo: streaming de vídeo !

Com escolas ao redor do mundo fechando suas portas e implementando rapidamente o ensino à distância, esperamos que o uso de streaming de vídeo aumente exponencialmente nas próximas semanas e meses. No restante deste blog, explico como você pode usar o NGINX Open Source e o NGINX Plus para permitir streaming de vídeo estável, seguro e escalável.

Um grande agradecimento ao arquiteto de soluções técnicas da NGINX, James Jones, por gravar vídeos de demonstração para acompanhar este blog!

Transmissão de vídeo ao vivo e armazenamento de vídeos com NGINX Open Source

Nossa solução para streaming de vídeo aproveita o módulo Real‑Time Messaging Protocol (RTMP) para NGINX. Neste vídeo, James passa pelo processo passo a passo:

Para que você não precise fazer anotações enquanto assiste à demonstração do James, capturamos todos os comandos e configurações nas seções a seguir.

Uma nota importante: Não se esqueça da segurança!

As configurações do NGINX apresentadas neste blog não incluem medidas de segurança para restringir quem pode assistir ao seu fluxo de vídeo. Há várias maneiras de proteger seus streams com o aplicativo front-end que seus espectadores usam para assistir ao vídeo, como permitir o acesso somente de determinados endereços IP ou exigir que os espectadores se autentiquem.

Instalando as ferramentas de construção

Antes de compilar o NGINX, você precisa ter algumas ferramentas básicas de compilação instaladas: autoconf , gcc , git e make . Para baixá-los e instalá-los, execute o comando para seu sistema operacional (se não estiver incluído aqui, consulte a documentação do fornecedor do sistema operacional).

  • Para Debian e Ubuntu:

    $ sudo apt update $ sudo apt install build-essential git
  • Para CentOS, Oracle Linux e RHEL:

    $ sudo yum update $ sudo yum groupinstall "Ferramentas de desenvolvimento" $ sudo yum install git

Instalando Dependências

A compilação do NGINX também requer diversas dependências: Expressões regulares compatíveis com Perl (PCRE), OpenSSL e zlib para compactação.

Instalando dependências com um gerenciador de pacotes

A maneira mais fácil de baixar e instalar as dependências é com um gerenciador de pacotes. Execute o comando para seu sistema operacional (se não estiver incluído aqui, consulte a documentação do fornecedor do sistema operacional).

  • Para Debian e Ubuntu:

    $ sudo apt instalar libpcre3-dev libssl-dev zlib1g-dev
  • Para CentOS, Oracle Linux e RHEL:

    $ sudo yum groupinstall pcre-devel zlib-devel openssl-devel

Instalando dependências da fonte

Se você quiser compilar e instalar as dependências a partir do código-fonte, veja nossas instruções .

Compilando NGINX com o módulo RTMP

Para concluir a compilação, clone os repositórios do GitHub para RTMP e NGINX, execute o comando NGINX configure e, em seguida, compile o NGINX.

$ cd /caminho/para/diretório/de/construção $ git clone https://github.com/arut/nginx-rtmp-module.git $ git clone https://github.com/nginx/nginx.git $ cd nginx $ ./auto/configure --add-module=../nginx-rtmp-module $ make $ sudo make install

Configurando o NGINX

Você pode configurar o NGINX para transmitir vídeo usando um ou ambos os protocolos HTTP Live Streaming (HLS) e Dynamic Adaptive Streaming over HTTP (DASH). Os protocolos oferecem a mesma funcionalidade, então escolher entre eles é realmente uma questão de preferência. Se você não estiver familiarizado com eles, veja HLS vs DASH no blog Vidbeo.

Configuração HLS

Para HLS, a configuração é a seguinte. Na demonstração (no momento 5:10), James explica o propósito dessas diretrizes.

rtmp { servidor { 
ouvir 1935; 
aplicação ao vivo { 
ao vivo em; 
intercalar em;

hls em; 
caminho_hls /tmp/hls; 
fragmento_hls 15s; 
} 
} 
} 

http { 
tipo_padrão aplicação/fluxo-octeto;

servidor { 
ouvir 80; 
localização /tv { 
raiz /tmp/hls; 
} 
}

tipos {
aplicação/vnd.apple.mpegurl m3u8;
vídeo/mp2t ts;
texto/html html;
} 
}

Configuração DASH

Para DASH, a configuração é a seguinte. Na demonstração, James combina HLS e DASH em uma única configuração, já que muitas diretivas são as mesmas para ambos os protocolos.

rtmp { servidor { 
ouvir 1935; 
aplicação ao vivo { 
ao vivo em; 
traço em; 
caminho_do_traço /tmp/traço; 
fragmento_do_traço 15s; 
} 
} 
} 

http { 
servidor { 
ouvir 80; 
localização /tv { 
raiz /tmp/traço; 
} 
}

tipos {
texto/html html;
aplicação/traço+xml mpd;
} 
}

Validando a configuração e iniciando o NGINX

É sempre uma boa ideia validar sua configuração NGINX para garantir que não haja erros sintáticos. Execute este comando:

$ sudo nginx -t nginx: a sintaxe do arquivo de configuração filename está ok nginx: o teste do arquivo de configuração filename foi bem-sucedido

Em seguida, execute este comando para iniciar o NGINX:

$ sudo nginx

Testando os métodos de reprodução

Inicie sua transmissão de vídeo. O OBS Studio é uma ferramenta de código aberto comumente usada que permite que você faça transmissões ao vivo da sua estação de trabalho para o seu servidor NGINX configurando um servidor RTMP personalizado. Configure o OBS para transmitir para rtmp:// NGINX_server /tv/tv2 , onde NGINX_server é o endereço IP ou nome do host do seu servidor NGINX. Nenhuma chave de transmissão é necessária.

James não usa o OBS na demonstração porque ele está transmitindo vídeo de um arquivo em vez de ao vivo. Ele inicia a transmissão de vídeo (às 9h30) executando o script stream.sh , que tem este conteúdo:

ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbb

O vídeo que ele está transmitindo (especificado com o argumento -I ) é o vídeo de código aberto do Big Buck Bunny do blender.org . Para detalhes sobre os outros argumentos, consulte a documentação do ffmpeg .

Depois que o vídeo estiver sendo transmitido, você pode testar se o NGINX está servindo-o corretamente usando os protocolos que você configurou. James abre três instâncias do media player VLC e acessa a URL apropriada para cada método de reprodução. Nas URLs, NGINX_server é o endereço IP ou nome do host do seu servidor NGINX:

  • RTMP – rtmp:// NGINX_server /live/bbb
  • HLS – http:// NGINX_server /live/bbb.m3u8
  • DASH – http:// NGINX_server /live/bbb.mpd

Melhorando a experiência do usuário com o NGINX Plus

Se você estiver criando uma videoteca ou um curso, pode precisar de recursos além do que é possível com o NGINX Open Source. O NGINX Plus inclui recursos estendidos para melhorar o desempenho e a experiência do usuário final com módulos pré-criados. Você pode:

  • Suporte a uma escala maior armazenando vídeos em cache
  • Fornecer serviços de vídeo sob demanda (VOD)
  • Gerencie seus custos e capacidade de streaming limitando a largura de banda

Durante a pandemia da COVID-19, a NGINX está fornecendo uma licença gratuita de um ano para até cinco instâncias do NGINX Plus para organizações nos setores de educação, governo público e sem fins lucrativos (sujeito a revisão e aprovação). Para obter detalhes, consulte Recursos gratuitos para sites afetados pela COVID‑19 .

Para incorporar o módulo RTMP ao NGINX Plus, carregue-o dinamicamente. Consulte o Guia de administração do NGINX Plus .

Nesta segunda demonstração, James mostra como é fácil configurar o NGINX Plus como um balanceador de carga para três servidores de vídeo, usando Ansible e Terraform:

Para acessar os arquivos que James usa na segunda demonstração, consulte seu repositório no GitHub .

Estamos juntos nisso

Se você estiver tendo problemas para implementar streaming de vídeo ou qualquer outro caso de uso, estamos aqui para ajudar! Os funcionários e a comunidade da NGINX estão monitorando o canal da NGINX no Stack Overflow1 e responder a perguntas e solicitações o mais rápido possível.

Se você trabalha para uma organização na linha de frente da pandemia e tem necessidades avançadas, pode se qualificar para as licenças NGINX Plus mencionadas acima, bem como para um nível mais alto do F5 DNS Load Balancer Cloud Service. Veja Recursos gratuitos para sites afetados pela COVID‑19 para mais detalhes.

Confira também o blog para um resumo de maneiras fáceis de melhorar o desempenho do site com recursos gratuitos do NGINX e F5.



1O Stack Overflow é um site de terceiros e não é afiliado ao F5. Inc. A F5 e suas afiliadas se isentam de qualquer responsabilidade pelo conteúdo (incluindo informações gerais e soluções propostas para perguntas) publicado no Stack Overflow ou em qualquer outro site de terceiros.


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."