Transmitindo vídeo de eventos ao vivo via Internet com GNU/Linux
Neste artigo o portal Viva O Linux irá proporcionar conceitos para transmissão de áudio e vídeo ao vivo via Internet, usando um servidor Linux. Acredito que, com este documento, falta de conhecimento não será argumento para a não transmissão ao vivo de eventos open-source (palestras, congressos, install fests e outros).
[ Hits: 197.497 ]
Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 03/06/2005 | Blog: http://assuntonerd.com.br
ffserver: configurando o padrão de vídeo a ser transmitido
Inicialmente vamos aprender a criar o arquivo ffserver.conf . Este arquivo
é utilizado para definir os parâmetros do vídeo a ser transmitido (como o codec,
por exemplo). Logo abaixo teremos um exemplo da estrutura do arquivo ffserver.conf:
# Porta de conexão com o servidor
Port 8090
# Endereços válido para o servidor
BindAddress 0.0.0.0
# Número máximo de clientes conectados
MaxClients 1000
# Banda máxima a ser consumida pelos cliente em kbits/sec
MaxBandwidth 1000
# Apague esta linha se desejar iniciar o ffserver como um daemon
NoDaemon
##############################################
# Definições de atributos do arquivo de transmissão do vídeo vivo
<Feed feed1.ffm>
# Definição do nome do arquivo, localização e tamanho
File /tmp/feed1.ffm
FileMaxSize 200K
# Apenas a conexão localhost é aceita
ACL allow 127.0.0.1
</Feed>
##############################################
# Agora vamos definir o tipo, codec e outros parâmetros
<Stream test1.mpg>
# Definição da chamada
Feed feed1.ffm
# Formato do vídeo
Format mpeg
# Taxa de transmissão de audio
AudioBitRate 32
# Propriedade do canal de audio : 1 = mono, 2 = stereo
AudioChannels 1
# Freqüência do audio
AudioSampleRate 44100
# Taxa de transmissão do vídeo
VideoBitRate 64
# Taxa de tamanho do Buffer
VideoBufferSize 40
# Number of frames per second
VideoFrameRate 3
# Resolução do vídeo
VideoSize 160x128
# Parâmetro para sincronização na transmissão do vídeo
VideoGopSize 12
# Desliga o audio
NoAudio
# Desliga o video
#NoVideo
</Stream>
Abaixo alguns exemplos de configuração para os padrões de transmissão:
# Single quadro JPEG
<Stream test.jpg>
Feed feed1.ffm
Format jpeg
VideoFrameRate 2
VideoIntraOnly
VideoSize 352x240
NoAudio
</Stream>
# Em Flash
<Stream test.swf>
Feed feed1.ffm
Format swf
VideoFrameRate 2
VideoIntraOnly
NoAudio
</Stream>
# ASF compatível com Windows
<Stream test.asf>
Feed feed1.ffm
Format asf
VideoFrameRate 15
VideoSize 352x240
VideoBitRate 256
VideoBufferSize 40
VideoGopSize 30
AudioBitRate 64
StartSendOnKey
</Stream>
# MP3 audio
<Stream test.mp3>
Feed feed1.ffm
Format mp2
AudioCodec mp3
AudioBitRate 64
AudioChannels 1
AudioSampleRate 44100
NoVideo
</Stream>
# Real audio (apenas para 32 kbits de audio)
<Stream test.ra>
Feed feed1.ffm
Format rm
AudioBitRate 32
NoVideo
NoAudio
</Stream>
# Real Video
<Stream test.rm>
Feed feed1.ffm
Format rm
AudioBitRate 32
VideoBitRate 128
VideoFrameRate 25
VideoGopSize 25
NoAudio
</Stream>
# MPEG1 VCD compatible (media qualidade)
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 15
VideoSize 320x240
VideoBitRate 800
VideoGopSize 30
AudioChannels 2
AudioSampleRate 44100
AudioBitRate 128
AudioCodec mp3
StartSendOnKey
</Stream>
# DivX - AVI (baixa qualidade)
<Stream test.avi>
Feed feed1.ffm
Format avi
VideoCodec mpeg4
VideoFrameRate 10
VideoSize 320x240
VideoGopSize 20
AudioChannels 2
AudioSampleRate 44100
AudioBitRate 128
AudioCodec mp3
StartSendOnKey
</Stream>
# DivX - AVI (alta qualidade)
<Stream test.avi>
Feed feed1.ffm
Format avi
VideoCodec mpeg4 ## odivx divx4
VideoFrameRate 25
VideoSize 320x240
VideoBitRate 300
VideoGopSize 30
AudioChannels 2
AudioSampleRate 44100
AudioBitRate 128
AudioCodec mp3
StartSendOnKey
</Stream>
No link abaixo você encontra um modelo para transmitir no padrão MPEG1:
Port 8090
BindAddress 0.0.0.0
MaxClients 3
MaxBandwidth 1000
CustomLog -
NoDaemon
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 200K
ACL allow 127.0.0.1
</Feed>
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 3
VideoSize 160x128
VideoBitRate 256
VideoGopSize 12
NoAudio
</Stream>
Página anterior Próxima página
Páginas do artigo
1.
Introdução
2.
Download e instalação
3.
Conceitos de funcionalidade
4. ffserver: configurando o padrão de vídeo a ser transmitido
5.
Executando o pacote como um daemon
6.
Colocando no ar o servidor de vídeo
Outros artigos deste autor
Acessibilidade: Movimentos do mouse com a face (eViacam)
Torne o seu servidor um mirror de atualização do Antivírus AVG (revisão)
SIAGES: Uma oportunidade de negócio com software livre
Impressione seus amigos com o Tux bonitinho no login modo console
PEAGLE: Serviço Web de busca indexada em seu servidor local
Leitura recomendada
Enfeite o LILO com uma imagem de seu gosto
Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam
Uma pequena jóia sobre ilusionismo visual
Criando Wallpapers para KDE 4
XaraLX - Uma poderosa ferramenta para webmasters
Comentários
Cabelo, como sempre trazendo novidades legais e úteis!
Parabéns!
[]'s
Alan Cota.
É entre estas e outras que o linux mostra a sua força e evolução!
Valeu Cabelo....parabéns!
e para usuarios debian:
apt-get install ffmpeg
[]'s
Giovanni Victorette
Mensagem
É entre estas e outras que o linux mostra a sua força e evolução!
Valeu Cabelo....parabéns!
e para usuarios debian:
apt-get install ffmpeg
[]'s
Giovanni Victorette
Gostaria de saber porque o pessoal gosta tanto do tema do Mac OS X?
:)
Parabéns Cabelo!
Belo artigo!
Flowz!
Mensagem
Gostaria de saber porque o pessoal gosta tanto do tema do Mac OS X?
:)
Parabéns Cabelo!
Belo artigo!
Flowz!
Nota deeeeeeeeezzzzzzzzzzzzzzzzzzzzzz!
:)
Alessandro
Mensagem
Nota deeeeeeeeezzzzzzzzzzzzzzzzzzzzzz!
:)
Alessandro
Interessante! Mas não consegui --confesso que não insisti-- colocar o ffmpeg para apontar para minha placa de captura (V4L2) cuja entrada (input) é '2'. Por exemplo, no 'mplayer' ficaria:
$ mplayer tv:// -tv driver=v4l2:input=2
Qual o equivalente ao 'input' no ffmpeg?
Mensagem
Interessante! Mas não consegui --confesso que não insisti-- colocar o ffmpeg para apontar para minha placa de captura (V4L2) cuja entrada (input) é '2'. Por exemplo, no 'mplayer' ficaria:
$ mplayer tv:// -tv driver=v4l2:input=2
Qual o equivalente ao 'input' no ffmpeg?
De: Thomas T. Soares
Assunto: Não consigo postar comentário
Sobre este artigo:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2699
Mesmo tendo me registrado, não consigo postar o seguinte comentário:
-------
Os codecs usados no ffmpeg não são Livres. Sugiro fortemente usar o Theora, único codec Livre para video.
Foi o que usamos para transmitir o FISL 6.0.
Mensagem
De: Thomas T. Soares
Assunto: Não consigo postar comentário
Sobre este artigo:
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2699
Mesmo tendo me registrado, não consigo postar o seguinte comentário:
-------
Os codecs usados no ffmpeg não são Livres. Sugiro fortemente usar o Theora, único codec Livre para video.
Foi o que usamos para transmitir o FISL 6.0.
Boa cabelo !!!
Muito bom o artigo e agora eu vou testar essa parada com minha DC10+ da Pinnacle, creio eu que deva funcionar...
Mensagem
Boa cabelo !!!
Muito bom o artigo e agora eu vou testar essa parada com minha DC10+ da Pinnacle, creio eu que deva funcionar...
Alguem sabe qual o consumo de banda para conseguir uma reprodução satisfatória?
Mensagem
Alguem sabe qual o consumo de banda para conseguir uma reprodução satisfatória?
Oi eu vi sim mais ou menos 60Kbps por usuário.....
Mas isso depende das conf que vc determina no arquivo...
Mensagem
Oi eu vi sim mais ou menos 60Kbps por usuário.....
Mas isso depende das conf que vc determina no arquivo...
muito legal utilíssmo!!!
Mensagem
muito legal utilíssmo!!!
cabelo fiz com minha web cam ficou do [*****]
mais com a placa de tv a imagem nao apareceu
ficou quadrinhos
Mensagem
cabelo fiz com minha web cam ficou do caralho
mais com a placa de tv a imagem nao apareceu
ficou quadrinhos
So queria acrecentar uma 2 observações... comigo o comando
ffmpeg http://localhost:8090/feed1.ffm
não funcionou e a entrada
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 3
VideoSize 320x240
VideoBitRate 256
VideoGopSize 12
NoAudio
</Stream>
também não funcionou, mas eu descobri que era pq minha web cam não suportava uma resolução diferente de 176x144 então o que eu fi foi mudar a entrada para
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 3
VideoSize 176x144
VideoBitRate 256
VideoGopSize 12
NoAudio
</Stream>
foi necessário também especificar para o ffmpeg o formato do stream...
ffmpeg -s 176x144 -f mpeg http://localhost:8090/feed1.ffm
so postei isso aki pq levei um tempão para decobrir isso, tava quase desistindo... talvez ajude alguem :)
Mensagem
So queria acrecentar uma 2 observações... comigo o comando
ffmpeg http://localhost:8090/feed1.ffm
não funcionou e a entrada
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 3
VideoSize 320x240
VideoBitRate 256
VideoGopSize 12
NoAudio
</Stream>
também não funcionou, mas eu descobri que era pq minha web cam não suportava uma resolução diferente de 176x144 então o que eu fi foi mudar a entrada para
<Stream test.mpg>
Feed feed1.ffm
Format mpeg
VideoFrameRate 3
VideoSize 176x144
VideoBitRate 256
VideoGopSize 12
NoAudio
</Stream>
foi necessário também especificar para o ffmpeg o formato do stream...
ffmpeg -s 176x144 -f mpeg http://localhost:8090/feed1.ffm
so postei isso aki pq levei um tempão para decobrir isso, tava quase desistindo... talvez ajude alguem :)
Eu preciso de um vide sobre linux até segunda feira.
Mensagem
Eu preciso de um vide sobre linux até segunda feira.
o meu fica uma tela azul -.-
eh uma placa de cameras com 4 entradas, alguém tem idéia de como especificar cara uma e para capturar
Mensagem
o meu fica uma tela azul -.-
eh uma placa de cameras com 4 entradas, alguém tem idéia de como especificar cara uma e para capturar
Tudo bem cabelo?
Olha só cara queria saber se dá para colocar um video que está no meu hd? se sim onde especifico o caminho do video?
Valeu brother!!!!
Mensagem
Tudo bem cabelo?
Olha só cara queria saber se dá para colocar um video que está no meu hd? se sim onde especifico o caminho do video?
Valeu brother!!!!
olá cabelo, cara estou ansioso em ver esse ótimo tutorial rodar na minha maquina, não sei porque não funfou.
veja o ffserver starta legal mas.....
o ffmpeg apresenta.
kurumin@kurumin:~$ ffserver -f /etc/ffserver.conf
kurumin@kurumin:~$ ffmpeg http://localhost:8090/feed1.ffm
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib --incdir=${prefix}/include/ffmpeg --enable-shared --enable-libmp3lame --enable-gpl --enable-libfaad --mandir=${prefix}/share/man --enable-libvorbis --enable-pthreads --enable-libfaac --enable-xvid --enable-libdts --enable-amr_nb --enable-amr_wb --enable-pp --enable-libogg --enable-libgsm --enable-x264 --enable-liba52 --enable-libtheora --extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc
libavutil version: 49.3.0
libavcodec version: 51.38.0
libavformat version: 51.10.0
built on Mar 12 2007 17:49:03, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
127.0.0.1 - - [Mon Apr 2 22:56:09 2007] "GET /feed1.ffm HTTP/1.1" 200 4165
127.0.0.1 - - [Mon Apr 2 22:56:09 2007] "GET /feed1.ffm HTTP/1.1" 200 4165
Must supply at least one input file
127.0.0.1 - - [Mon Apr 2 22:56:10 2007] "POST /feed1.ffm HTTP/1.1" 200 0
kurumin@kurumin:~$
cara por favor me dá uma dica do que pode ser.
uso o kuruma 7 final
preciso aplicar isso porque estarei transmitindo um grande evento pela internet, cara preciso fazer isso no linux.
valeu cara
Mensagem
olá cabelo, cara estou ansioso em ver esse ótimo tutorial rodar na minha maquina, não sei porque não funfou.
veja o ffserver starta legal mas.....
o ffmpeg apresenta.
kurumin@kurumin:~$ ffserver -f /etc/ffserver.conf
kurumin@kurumin:~$ ffmpeg http://localhost:8090/feed1.ffm
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --prefix=/usr --libdir=${prefix}/lib --shlibdir=${prefix}/lib --incdir=${prefix}/include/ffmpeg --enable-shared --enable-libmp3lame --enable-gpl --enable-libfaad --mandir=${prefix}/share/man --enable-libvorbis --enable-pthreads --enable-libfaac --enable-xvid --enable-libdts --enable-amr_nb --enable-amr_wb --enable-pp --enable-libogg --enable-libgsm --enable-x264 --enable-liba52 --enable-libtheora --extra-cflags=-Wall -g -fPIC -DPIC --cc=ccache cc
libavutil version: 49.3.0
libavcodec version: 51.38.0
libavformat version: 51.10.0
built on Mar 12 2007 17:49:03, gcc: 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
127.0.0.1 - - [Mon Apr 2 22:56:09 2007] "GET /feed1.ffm HTTP/1.1" 200 4165
127.0.0.1 - - [Mon Apr 2 22:56:09 2007] "GET /feed1.ffm HTTP/1.1" 200 4165
Must supply at least one input file
127.0.0.1 - - [Mon Apr 2 22:56:10 2007] "POST /feed1.ffm HTTP/1.1" 200 0
kurumin@kurumin:~$
cara por favor me dá uma dica do que pode ser.
uso o kuruma 7 final
preciso aplicar isso porque estarei transmitindo um grande evento pela internet, cara preciso fazer isso no linux.
valeu cara
kramba... mto bom.. eu ficava preso ao windows utilizando o software Pico2000, gostei mess..
Apesar que andei analizando e encontrei ótimos recursos com a câmera IP..
valewss
Mensagem
kramba... mto bom.. eu ficava preso ao windows utilizando o software Pico2000, gostei mess..
Apesar que andei analizando e encontrei ótimos recursos com a câmera IP..
valewss
E ai cabelo.
Seu artigo é muito bom. Vc esta de parabens.
Por a caso vc ja viu o VLS é do Projeto VideoLAN?
Eu estou com problemas em instalar e configurar ele.
Se por a caso vc viu ele por favor da uma ajuda de como posso utilizar ele.
Um forte abraço e valew
Mensagem
E ai cabelo.
Seu artigo é muito bom. Vc esta de parabens.
Por a caso vc ja viu o VLS é do Projeto VideoLAN?
Eu estou com problemas em instalar e configurar ele.
Se por a caso vc viu ele por favor da uma ajuda de como posso utilizar ele.
Um forte abraço e valew
Cabelo,
estou precisando retransmitir o sinal que irei receber de um servidor de stream de video,
vc pode me dar alguma dica?
Atenciosamente,
Leonardo.
Mensagem
Cabelo,
estou precisando retransmitir o sinal que irei receber de um servidor de stream de video,
vc pode me dar alguma dica?
Atenciosamente,
Leonardo.
Muito bom post. Gostei.
Sabe me dizer se é possível com isso fazer transmissão ao vivo. E gravar o video que esta sendo transmitido?
Lucien
Mensagem
Muito bom post. Gostei.
Sabe me dizer se é possível com isso fazer transmissão ao vivo. E gravar o video que esta sendo transmitido?
Lucien
Alguem ja se deparou como seguinte problema ou tentar iniciar o ffserver:
bind(port 8090): Address family not supported by protocol
estou usando a distribuição Voyage.
Mensagem
Alguem ja se deparou como seguinte problema ou tentar iniciar o ffserver:
bind(port 8090): Address family not supported by protocol
estou usando a distribuição Voyage.
Galera, tb estou com o seguinte erro:
http://localhost:8090/feed1.ffm: I/O error occurred
Usually that means that input file is truncated and/or corrupted.
linha de comando que estou executando:
ffserver -f ffserver.conf & ffmpeg -v 2 -r 5 -s 640x480 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm
Mensagem
Galera, tb estou com o seguinte erro:
http://localhost:8090/feed1.ffm: I/O error occurred
Usually that means that input file is truncated and/or corrupted.
linha de comando que estou executando:
ffserver -f ffserver.conf & ffmpeg -v 2 -r 5 -s 640x480 -f video4linux2 -i /dev/video0 http://localhost:8090/feed1.ffm
Galera, seguinte... Conforme eu tinha postado ai os meus erros, depois de garimpar bastante achei a solução:
Seguinte tive que alterar o arquivo ffserver.c na linha
localizar a linha: my_http_addr.sin_port = htons(val);
abaixo desta linha adicionar a seguinte linha de comado:
my_http_addr.sin_family = AF_INET;
Feito isto recompilar o programa e instalar.
isto resolve o problema de protocolo
O outro problema é pq o server nao estava iniciado.
Fonte:
http://www.linuxquestions.org/questions/linux-software-2/bind-port-8090-invalid-argument-error-in-ff...
Mensagem
Galera, seguinte... Conforme eu tinha postado ai os meus erros, depois de garimpar bastante achei a solução:
Seguinte tive que alterar o arquivo ffserver.c na linha
localizar a linha: my_http_addr.sin_port = htons(val);
abaixo desta linha adicionar a seguinte linha de comado:
my_http_addr.sin_family = AF_INET;
Feito isto recompilar o programa e instalar.
isto resolve o problema de protocolo
O outro problema é pq o server nao estava iniciado.
Fonte: http://www.linuxquestions.org/questions/linux-software-2/bind-port-8090-invalid-argument-error-in-ffserver-patch-found-910731/
Boa Noite a todos!
Achei interessante o seu artigo, mas não instalei porque eu fiquei com uma dúvida quanto transmissão ao vivo. Tem como usá-lo para transmitir direto no youtube?
Pergunto isso porque no link
https://support.google.com/youtube/answer/2907883 necessita de um codificador de transmissão ao vivo, porém, na lista deles não tem opção para linux, para androide sim (chegou perto rsrs).
Desde já eu agradeço mais uma vez ao Viva o Linux mais uma vez e também ao Cabelo pelo post!
Mensagem
Boa Noite a todos!
Achei interessante o seu artigo, mas não instalei porque eu fiquei com uma dúvida quanto transmissão ao vivo. Tem como usá-lo para transmitir direto no youtube?
Pergunto isso porque no link https://support.google.com/youtube/answer/2907883 necessita de um codificador de transmissão ao vivo, porém, na lista deles não tem opção para linux, para androide sim (chegou perto rsrs).
Desde já eu agradeço mais uma vez ao Viva o Linux mais uma vez e também ao Cabelo pelo post!
[24] Comentário enviado por rjsamir em 20/02/2016 - 21:33h
Boa Noite a todos!
Achei interessante o seu artigo, mas não instalei porque eu fiquei com uma dúvida quanto transmissão ao vivo. Tem como usá-lo para transmitir direto no youtube?
Pergunto isso porque no link
https://support.google.com/youtube/answer/2907883 necessita de um codificador de transmissão ao vivo, porém, na lista deles não tem opção para linux, para androide sim (chegou perto rsrs).
Desde já eu agradeço mais uma vez ao Viva o Linux mais uma vez e também ao Cabelo pelo post!
O Open Broadcaster Software tem para Linux.
Mensagem
[quote]
[24] Comentário enviado por rjsamir em 20/02/2016 - 21:33h
Boa Noite a todos!
Achei interessante o seu artigo, mas não instalei porque eu fiquei com uma dúvida quanto transmissão ao vivo. Tem como usá-lo para transmitir direto no youtube?
Pergunto isso porque no link https://support.google.com/youtube/answer/2907883 necessita de um codificador de transmissão ao vivo, porém, na lista deles não tem opção para linux, para androide sim (chegou perto rsrs).
Desde já eu agradeço mais uma vez ao Viva o Linux mais uma vez e também ao Cabelo pelo post!
[/quote]
O Open Broadcaster Software tem para Linux.
Contribuir com comentário
Enviar