Usando o desktop como webcam falsa no linux

38

Eu quero fazer uma transmissão ao vivo de (uma janela sobre) 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 permite capturar entradas em uma janela específica, mas não consigo encontrar uma maneira de enviar o vídeo para um dispositivo no estilo da webcam, que pode ser usado pelo flash.

Alguém pode recomendar um método (ou software) para fazer isso?

    
por bkconrad 13.04.2012 / 05:00

4 respostas

42

Você pode instalar v4l2loopback . É um módulo do kernel que simula uma webcam. Carregue com:

modprobe v4l2loopback

Então você precisa enviar o fluxo de vídeo para o dispositivo / dev / video0 usando um programa como o ffmpeg. Para capturar a área de trabalho e encaminhá-la para / dev / video0 com o ffmpeg, você pode usar a seguinte linha de comando:

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

Altere o valor de -r de 15 para outra coisa, se desejar uma taxa de quadros diferente. A resolução é escolhida no parâmetro -s. Se você quiser 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.

    
por 06.02.2014 / 12:06
6

Use v4l2loopback com o mplayer .

  1. Faça o download,
  2. compila ( make e su -c 'make install' ),
  3. carregue o módulo com su -c 'modprobe v4l2loopback' ,
  4. em seguida, altere uma linha no arquivo examples/yuv4mpeg_to_v4l2.c da pasta de origem v4l2loopback de

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    para

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. e faça make nesta pasta.

  6. Em seguida, execute-o no diretório examples da seguinte forma:

    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 webstreams, todo tipo de arquivos de vídeo, até mesmo de stdin! Acabei de testá-lo com um arquivo do link que é 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 &
fmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Não testou o último, porque você não contou como seu comando ffmpeg se parece.

    
por 26.02.2013 / 12:11
3

Qual distro você está usando? Eu tive sucesso com WebCamStudio sob Arch combinado com o "estúdio" baseado na web Livestream. Já faz um tempo desde que eu usei isso.

link

O que você está tentando fazer exatamente? O ffmpeg compilado com o x11grab pode gravar a área de trabalho. Eu tive sucesso limitado empurrando isso para o Ustream, mas novamente já faz um tempo e eu acho que o que eu estava fazendo não funciona mais.

Se você quiser apenas transmitir um arquivo em vez de sua área de trabalho (estou pensando quando você diz "Uma janela", "VLC"), posso apontar a direção certa para que ele funcione Livestream (talvez Ustream). Eu estou desajeitadamente descobrindo como fazer isso através da experimentação. Não é fantástico, mas funciona com o Livestream.

O Justin.tv tem scripts que podem transmitir do VLC para o serviço deles também.

link

    
por 13.04.2012 / 07:13
2

Primeiro, o appear.in provavelmente faz o que você quer sem problemas (eu não sou afiliado): link

Em segundo lugar, você pode transmitir para o Twitch ou outros serviços usando o OBS, que recentemente adicionou suporte linux (!): link

O OBS também resolve o problema muito mais difícil de entrada de áudio e som do sistema muxing durante a captura de tela no Ubuntu (não resolvido por nada no universe repo que eu encontrei até agora).

Eu não tenho nenhuma solução unix-y incrível. Mas aqueles funcionaram para mim no mundo real.

    
por 08.06.2015 / 23:27