Transmissão ao vivo usando FFMPEG

6

Esta é uma pergunta simples, mas não consigo encontrar a resposta. Eu preciso transmitir de um dispositivo de captura para um servidor e, em seguida, ter o FFMPEG no servidor recodificar o fluxo adequado para HLS.

Mas como faço isso? Eu olhei para Flash Media Live Encoder e VLC e ffserver, mas não consigo realmente entender como isso deve funcionar. Basicamente, parece-me que eu preciso de um programa para enviar para um servidor, que aceita o fluxo (e talvez alguma autenticação de usuário) e, em seguida, torna o fluxo disponível para uso. Eu já tenho um sistema que leva arquivos e codifica-os para HLS, então eu posso apenas como ponto de entrada de parâmetro para este aplicativo no servidor local para tomar o fluxo e iniciar a codificação.

editar: é apenas o passo a aceitar, por ex. uma conexão rtmp e disponibilizá-la para o FFMPEG no mesmo servidor. Eu estava esperando que, por exemplo ffserver poderia fazer isso, mas eu não penso assim.

    
por Luuk D. Jansen 15.03.2013 / 19:53

3 respostas

3

Me deparei com um servidor de streaming chamado crtmpserver (ou rtmpd), que parece pequeno, mas faz exatamente o que eu quero com algumas pequenas alterações o código.

    
por 16.03.2013 / 20:10
3

talvez este exemplo de trabalho possa ajudá-lo um pouco mais.

Transmite uma transmissão ao vivo (webcam) via vlc para uma página da Web em hls. A webcam pode ser usada por qualquer outro dispositivo de transmissão ao vivo ou cartão de captura. A página da Web usa os recursos de streaming específicos do HTML5.

cvlc v4l2:// :v4l2-vdev="/dev/video0" --sout '#transcode{vcodec=h264,vb=512,scale=1,acodec=none,venc=x264{aud,profile=high,level=60,keyint=15,bframes=0,ref=1,nocabac}}:duplicate{dst=std{access=livehttp{seglen=10,delsegs=true,numsegs=5,index=/var/www/live/mystream.m3u8,index-url=http://"HereyourwebserverIP"/live/mystream-########.ts},mux=ts{use-key-frames},dst=/var/www/live/mystream-########.ts},dst=std{access=http,mux=ts,dst=:8082/video.mp4}}' &

A linha de comando gera dois fluxos de saída, um HLS para streaming por meio de uma página da Web e um fluxo MP4, que pode ser acessado diretamente por um reprodutor VLC na mesma rede.

Basta definir os diretórios adequados e colocar os endereços IP do servidor da web reais.

Para o servidor da Web, usei uma configuração padrão do lighttpd e criei o arquivo index.html com a seguinte definição de fluxo HTML 5:

<!DOCTYPE html>
<html>
<head>
    <title>Live Cam</title>
</head>

<body>
    <div id="player">
        <video autoplay="true" controls="controls" width="640" height="480">
            <source src="http://"HereyourwebserverIP"/live/mystream.m3u8" type="application/x-mpegURL" />
            Your browser does not support HTML5 streaming!
        </video>
    </div>
</body>
</html

Conecte sua webcam, crie o arquivo index.html, reinicie seu servidor da Web e execute a linha de comando (como usuário normal). Tudo funciona, você pode acessar sua fonte de streaming em todos os dispositivos.

Eu tentei fazer o mesmo com ffmpeg (segmento e hls) com e sem ffserver e até com avconv e avserver, mas até agora sem sucesso.

    
por 29.04.2013 / 22:12
2

Você pode ler este guia que é muito útil aprender a trabalhar com o FFmpeg. Na minha opinião, você deve ser capaz de criar uma boa solução usando esse guia, porque quase todos os aspectos do FFmpeg que você precisa estão lá. Além disso, dividir seu projeto em pequenas partes é um grande passo. Basta tentar obter um fluxo do seu dispositivo primeiro e depois tentar visualizá-lo com o VLC (que também está usando o FFmpeg). Então você pode trabalhar no servidor para transmitir seu fluxo. Boa sorte!

    
por 15.03.2013 / 22:32

Tags