Transmissão de Vídeo Local com FFmpeg e Nginx em Página Web

Este guia detalha o processo de configuração de um ambiente de transmissão de vídeo local no Windows, utilizando FFmpeg para codificar e enviar um fluxo de vídeo e Nginx com o módulo RTMP para servir esse conteúdo para uma página web local. O objetivo é permitir a reprodução de um vídeo armazenado localmente em um navegador via protocolo HTTP-FLV.

Configuração do Nginx para RTMP e HTTP-FLV

Para iniciar, é necessário um servidor Nginx compilado com o módulo RTMP. Recomenda-se baixar uma versão pré-compilada que inclua este módulo (por exemplo, nginx-rtmp-module). Após o download, descompacte o arquivo em um diretório de sua escolha, como D:\nginx. A estrutura de diretórios e a localização são cruciais para evitar problemas de caminho.

Abra o arquivo de configuração principal do Nginx, localizado em conf/nginx.conf, e adicione as seguintes seções ou verifique se elas estão presentes e configuradas corretamente. Estas linhas definem os blocos para o serviço RTMP e o servidor HTTP para servir o stream FLV.


rtmp {
    server {
        listen 1935;  # Porta RTMP padrão
        chunk_size 4096;

        application live {
            live on;
            # Habilita o módulo http-flv
            # flv_live_buffer_size 1M; # Opcional: buffer para live FLV
            # flv_max_frames_per_packet 1; # Opcional: otimização para latência
        }
    }
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080; # Porta HTTP para o player web
        server_name  localhost;

        location /live {
            # Habilita o servidor FLV para o caminho /live
            flv_live on;
            chunked_transfer_encoding on; # Essencial para streaming ao vivo
            add_header Access-Control-Allow-Origin *; # Para acesso CORS em páginas HTML
        }
    }
}

Após modificar o arquivo, salve-o e inicie o Nginx executando nginx.exe na pasta principal. Verifique o log de erros em logs/error.log se encontrar problemas.

Transmissão de Vídeo com FFmpeg

Instalação do FFmpeg

O FFmpeg é a ferramenta essencail para codificação e transmissão de vídeo. Baixe a versão mais recente do site oficial do FFmpeg. Após o download, descompacte-o e adicione o diretório bin do FFmpeg ao PATH do sistema. Isso permitirá que você execute os comandos do FFmpeg a partir de qualquer diretório no terminal. Certifique-se de que o caminho de instalação não contenha caracteres especiais ou espaços para evitar potenciais erros.

Comando de Transmissão

Com o FFmpeg configurado, abra o Prompt de Comando (CMD) e execute o seguinte comando. Este exemplo fará a transmissão de um arquivo MP4 local em loop infinito para o servidor Nginx RTMP.


ffmpeg -re -stream_loop -1 -i "C:\caminho\para\seu\video.mp4" -c:v libx264 -preset veryfast -c:a aac -f flv rtmp://localhost/live/meu_fluxo

Este comando configura o FFmpeg para:

  • -re: Ler a entrada na taxa de quadros nativa.
  • -stream_loop -1: Repetir o vídeo de entrada indefinidamente.
  • -i "C:\caminho\para\seu\video.mp4": Especificar o arquivo de vídeo local como entrada. Substitua pelo caminho real do seu vídeo. É crucial que o caminho do arquivo e o nome não contenham espaços, ou, se contiverem, que sejam usados entre aspas.
  • -c:v libx264: Utilizar o codec de vídeo H.264 para a saída.
  • -preset veryfast: Definir uma predefinição de codificação rápida, equilibrando velocidade e qualidade.
  • -c:a aac: Utilizar o codec de áudio AAC para a saída.
  • -f flv: Forçar o formato de saída para FLV (Flash Video), que é compatível com RTMP.
  • rtmp://localhost/live/meu_fluxo: O endereço de destino do fluxo RTMP, onde localhost é o servidor, live é o nome da aplicação RTMP configurada no Nginx, e meu_fluxo é o nome do fluxo específico.

Ao executar o comando, o terminal exibirá informações sobre o progresso da codificação e transmissão. Se não houver mensagens de erro e a saída continuar a mostrar estatísticas de quadros e tempo, a transmissão está ocorrendo com sucesso.

Verificando o Fluxo de Vídeo

Reprodução via VLC Media Player (RTMP)

Para confirmar que o fluxo RTMP está ativo, você pode usar o VLC Media Player. No VLC, vá em "Mídia" > "Abrir Fluxo de Rede..." e insira o endereço RTMP: rtmp://localhost/live/meu_fluxo. Se o vídeo começar a ser reproduzido, isso indica que o FFmpeg está enviando o fluxo corretamente para o Nginx.

Reprodução via VLC Media Player (HTTP-FLV)

De forma similar, você pode testar o fluxo HTTP-FLV. No VLC, use a mesma opção "Abrir Fluxo de Rede..." e insira o URL: http://localhost:8080/live?stream=meu_fluxo.flv. A reprodução bem-sucedida aqui confirma que o Nginx está servindo o fluxo HTTP-FLV corretamente a partir da configuração do módulo RTMP.

Reprodução em Página Web com Tag <video>

Finalmente, para visualizar o vídeo em um navegador, crie um arquivo HTML (por exemplo, player.html) com o seguinte conteúdo:



<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Player de Vídeo FLV Local</title>
    <style>
        body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; min-height: 100vh; margin: 0; background-color: #f0f0f0; }
        .video-container { background-color: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); text-align: center; }
        video { max-width: 100%; height: auto; border: 1px solid #ccc; }
        h1 { color: #333; }
    </style>
</head>
<body>
    <div class="video-container">
        <h1>Meu Fluxo de Vídeo Local</h1>
        <video width="720" height="480" controls autoplay>
            <source src="http://localhost:8080/live?stream=meu_fluxo.flv" type="video/x-flv">
            Seu navegador não suporta a tag de vídeo FLV.
        </video>
        <p>Visualizando o fluxo HTTP-FLV de rtmp://localhost/live/meu_fluxo.</p>
    </div>
</body>
</html>

Salve o arquivo e abra-o com seu navegador preferido. Se tudo estiver configurado corretamente, o vídeo local transimtido pelo FFmpeg e servido pelo Nginx será reproduzido na página web.

Tags: FFmpeg nginx RTMP HTTP-FLV Video Streaming

Publicado em 6-26 16:03