Construindo sua própria pipeline de transmissão de vídeo ao vivo: Guia prático de FFmpeg×MediaMTX

Problema: A câmera fala via RTSP, mas o navegador não consegue ouvir.

Suponha que você queira exibir imagens ao vivo de câmeras de segurança ou dispositivos IoT em um aplicativo da Web. A maioria das câmeras transmite via RTSP (Real Time Streaming Protocol). No entanto, os navegadores deixaram de suportar RTSP desde a década de 2010. Em outras palavras, o problema fundamental é que a “linguagem que a câmera está falando” e a “linguagem que o navegador consegue entender” são diferentes.

O responsável por esta tradução é o FFmpeg (a faca suíça para processamento de vídeo) e o MediaMTX (servidor de conversão de protocolo). Combinando estes dois, é possível montar um pipeline de streaming de baixa latência em nível profissional.

Explicação das Ferramentas

FFmpeg: a varinha mágica para converter qualquer formato de vídeo

Fluxo de processamento do FFmpeg:

  • Demultiplexação: separação de vídeo e áudio de um container
  • Decodificar: converter dados comprimidos em quadros brutos
  • Filtragem: aplicação de escalonamento, correção de cores, etc.
  • Codificação: Compactação em H.264 ou VP9
  • Multiplex: Empacotamento no contêiner de saída

Para aplicações de streaming, o FFmpeg atua como motor de entrada. Captura vídeo de webcams ou arquivos, codifica de forma eficiente e envia para o servidor via RTSP ou RTMP.

MediaMTX: Hub de protocolo compatível com múltiplos clientes

FFmpeg tem uma única saída, mas o MediaMTX pode transmitir simultaneamente para vários clientes. Além disso:

  • Recepção via RTSP/RTMP/WebRTC/HLS
  • Reempacotamento para clientes diferentes
  • Converter RTSP para WebRTC (reproduzível no navegador)
  • Autenticação, balanceamento de carga, gestão de clientes

Com apenas um único binário e um arquivo de configuração YAML, é possível lidar com cenários complexos que antes exigiam múltiplos servidores dedicados.

Passos de Implementação

Passo 1: Instale a ferramenta

Ubuntu/Debian:

sudo apt update sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree make -j$(nproc) sudo make install

macOS:

brew install ffmpeg

Windows: Baixar de gydan.dev → Descompactar em C:\ffmpeg → Adicionar ao PATH do sistema

MediaMTX v1.15.0 também instalado (fácil com um único binário).

Passo 2: Transmitir o arquivo de vídeo

criar mediamtx.yml:

caminhos: test_video: fonte: editor

Iniciar MediaMTX:

mediamtx mediamtx.yml

Envio de vídeo via RTSP com FFmpeg:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re: Manutenção da taxa de quadros (essencial para streaming ao vivo) -preset fast: equilíbrio da velocidade de codificação

Verifique no VLC Media Player: Media → Abrir Fluxo de Rede → rtsp://localhost:8554/test_video

Passo 3: Transmitir ao vivo com a webcam

Windows:

ffmpeg -f dshow -rtbufsize 100M -i video=“Integrated Webcam” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

Linux:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatency é o ponto. Otimização de streaming em tempo real.

Passo 4: Reprodução no navegador (WebRTC)

Atualizar mediamtx.yml:

webrtc: sim webrtcAddress: :8889 webrtcEncryption: não webrtcAllowOrigin: '*'

caminhos: webcam: fonte: editor

Reinicie o MediaMTX e abra http://localhost:8889 no navegador → a transmissão ao vivo será exibida no navegador.

Fluxo de Dados

  1. Webcam → Geração de frames ao vivo
  2. FFmpeg → Codificação em H.264 e envio RTSP
  3. MediaMTX → Recepção RTSP e conversão WebRTC
  4. Navegador → Reprodução em tempo real com WebRTC

MediaMTX não re-encoda. Apenas embala o fluxo H.264 em contêineres de diferentes protocolos. Portanto, realiza baixa latência.

Resumo desta vez

Pipeline básico concluído:

  • FFmpeg e MediaMTX já instalados
  • Confirmação de streaming de arquivo de vídeo e webcam
  • Reprodução bem-sucedida no navegador via WebRTC

Apenas há desafios na operação real:

  • Sem autenticação e segurança
  • funciona apenas em localhost
  • Suporte para câmeras IP reais não
  • Sem tratamento de erros

Na Parte 2, avançamos para a adição de autenticação, conexão de câmeras IP e compatibilidade com a Internet.

Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • Comentar
  • Republicar
  • Partilhar
Comentar
Adicionar um comentário
Adicionar um comentário
Nenhum comentário
  • Fixar