
Quero fazer uma transmissão ao vivo (de uma janela) do meu desktop Linux usando um site de streaming gratuito, usando o vídeo capturado como uma webcam falsa. Existem muitas ferramentas para isso no Windows. O ffmpeg me permite capturar a entrada em uma janela específica, mas não consigo encontrar uma maneira de enviar o vídeo para um dispositivo falso tipo webcam utilizável por flash.
Alguém pode recomendar um método (ou software) para fazer isso?
Responder1
Você pode instalarloopback v4l2. É um módulo do kernel que simula uma webcam. Carregue-o com:
modprobe v4l2loopback
Então você precisa enviar o stream de vídeo para o dispositivo /dev/videoN
(onde N
está o número que corresponde ao dispositivo recém-criado - provavelmente o número mais alto) usando um programa como o ffmpeg. Para capturar a área de trabalho e encaminhá-la /dev/videoN
com o ffmpeg, você pode usar a seguinte linha de comando:
ffmpeg -probesize 100M -framerate 15 -f x11grab -video_size 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/videoN
Altere o valor de -framerate
15 para outro valor se desejar uma taxa de quadros diferente.
A resolução é escolhida no -video_size
parâmetro. Se você deseja especificar um deslocamento do canto superior esquerdo da tela, passe-o no parâmetro -i no formato -i :0.0+x,y
, onde x e y são o deslocamento horizontal e vertical respectivamente.
Responder2
Baixe,
compilá-lo (
make
esu -c 'make install'
),carregue o módulo com
su -c 'modprobe v4l2loopback'
,em seguida, altere uma linha no arquivo
examples/yuv4mpeg_to_v4l2.c
da pasta de origem v4l2loopback dev.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
para
v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
e faça
make
nesta pasta.Em seguida, execute-o no
examples
diretório assim:mkfifo /tmp/pipe # only needed once, as long as you do not delete the file /tmp/pipe ./yuv4mpeg_to_v4l2 < /tmp/pipe & mplayer movie.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
onde você substitui movie.mp4
pelo nome do seu arquivo de vídeo. E substitua /dev/video0
pelo seu dispositivo de loopback.
O MPlayer é capaz de reproduzir qualquer webstream, todos os tipos de arquivos de vídeo, até mesmo do stdin! Acabei de testar com um arquivo dehttp://www.tagesschau.deque é um site de notícias alemão.
TS=$(wget "http://www.tagesschau.de/multimedia/video/" -q -O - | grep --regexp='http.*\.webm"' | sed -e 's%.*href="%%' -e 's%\.webm".*%\.webm%')
./yuv4mpeg_to_v4l2 < /tmp/pipe &
mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
Em vez do $TS você poderia colocar um -
(que significa stdin). E na frente do mplayer seu comando ffmpeg redirecionando sua saída para stdout. Então, algo como:
./yuv4mpeg_to_v4l2 < /tmp/pipe &
ffmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
Não testei o último, porque você não contou como é o seu comando ffmpeg.
Responder3
Qual distro você está usando? Tive sucesso com o WebCamStudio no Arch combinado com o "estúdio" baseado na web Livestream. Já faz um tempinho que não o uso.
O que você está tentando fazer exatamente? ffmpeg compilado com x11grab pode gravar a área de trabalho. Tive um sucesso limitado ao levar isso para o Ustream, mas, novamente, já faz um tempo e acho que o que estava fazendo não funcionará mais.
Se você deseja apenas transmitir um arquivo em vez de sua área de trabalho (estou pensando que quando você diz "Uma janela", você quer dizer "VLC"), posso apontar a direção certa para fazer isso funcionar com o Livestream (talvez Ustream). Estou desajeitadamente descobrindo como fazer isso por meio de experimentação. Não é fantástico, mas funciona com Livestream.
Justin.tv também possui scripts que podem transmitir do VLC para seu serviço.
http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API
Responder4
Primeiro, apareça.in provavelmente faz o que você deseja sem complicações (não sou afiliado):http://aparece.in/
Em segundo lugar, você pode transmitir para o Twitch ou outros serviços usando o OBS, que recentemente adicionou suporte ao Linux (!):https://obsproject.com/
OBS também resolve o problema muito mais difícil de mixar o som do sistema e a entrada de áudio durante a captura de tela no Ubuntu (não resolvido por nada no universe
repositório que encontrei até agora).
Não tenho nenhuma solução unix-y incrível. Mas isso funcionou para mim no mundo real.