É possível que dois processos acessem a webcam ao mesmo tempo?


14

Gostaria de tentar usar o Cheese no Hangouts do Google+ e configurações semelhantes e gostaria de saber se é possível que a webcam seja usada por dois processos para ter acesso à webcam ao mesmo tempo. Ainda não tentei, mas antes de fazê-lo, pensei em perguntar.

Então é possível?

Respostas:


6

Bem, eu apenas tentei. Resultados interessantes.

Eu tenho skype e queijo e brinquedos e hangouts na webcam (que funcionam todos) e os experimentei juntos.

Resultados:

Você não pode usar a mesma webcam em duas coisas ao mesmo tempo.

Queijo (funcionando) + Brinquedo para webcam (não está funcionando) + Skype (pequeno, canto superior direito. Não está funcionando).

insira a descrição da imagem aqui

Você pode usar 2 webcams em 2 coisas. (Queijo + Brinquedo Webcam).

insira a descrição da imagem aqui

Hangouts (não está funcionando) + queijo (funcionando)

insira a descrição da imagem aqui

Hangouts (trabalhando por conta própria).

insira a descrição da imagem aqui

Queijo quebrado quando abri o Hangouts primeiro. Ele fez o mesmo com os outros, mas minha internet é muito lenta para carregar todas as capturas de tela (e duvido que você aprecie mais de 30 capturas de tela) ...

insira a descrição da imagem aqui

Eu até tentei fazer um link simbólico /dev/video0e salvá-lo /devcomo video2. Isso não funcionou.

Também não consigo executar 2 processos de queijo de uma só vez.

Se necessário, aconselho a tela cheia e a gravação de 2 telas. Duvido que funcionaria para o que você quer.


Obrigado! Isso é conciso e me diz o que preciso saber. Jardim agradável btw! A recompensa será concedida quando o tempo limite expirar (faltam 21 horas). Então eu vou excluir este comentário.
RolandiXor

@Mew Essa foi a minha última tentativa de fazê-la funcionar :)
Tim

@ Tim A próxima resposta é exatamente o que você está procurando se veio aqui porque precisa de uma maneira de fazer isso.
Isiah Meadows

1
@impinball não, apenas achei uma pergunta interessante!
Tim

14

Felizmente agora, sim!

Atualmente, existe um projeto no GitHub que pode mostrar não apenas dois, mas um número infinito (limitado apenas pela capacidade do sistema) de dispositivos de vídeo de uma única fonte.

O projeto é chamado v4l2loopback. (Verifique o link e role para baixo para ver o README para obter instruções.)

Você pode instalar v4l2loopbackclonando seu GitHub e executando estes comandos:

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Exemplos

Para obter exemplos de como usá-lo com o GStreamer, FFmpeg, MPlayer e Skype, consulte seu pequeno wiki . Espero que você possa encontrar as configurações corretas para atender às suas necessidades.

Desfrute de ajustes ao redor!


1
Dispositivos virtuais é uma das áreas em que o Linux (e * nix, por sinal) brilha. É mais complicado no Windows escrever um teeutilitário básico que não espera stdinterminar de alimentá-lo. Eu não ficaria surpreso se isso realmente usar um equivalente binário teecom suporte mais escalável sob o capô.
Isiah Meadows

Embora isso responda à pergunta, seria preferível incluir partes do link aqui e fornecer o link para referência, para que tenhamos alguns exemplos - por exemplo, faça 2 dispositivos a partir de 1. Quais são as opções para isso? E é possível (como dito nos requisitos do OP) usar com os hangouts do Google? Também testei com o Skype e parece que não funciona. Estamos agora não versão 4.3 4.0 ...
Tim

2
Vou ter que verificar isso quando meu outro sistema voltar. Provavelmente darei uma recompensa adicional.
RolandiXor

3
Agora isso faz parte do ubuntu - não há necessidade de git.
Nbubis

Na verdade, esta é agora embalado para Ubuntu / Debian como v4l2loopback-utils Não há necessidade de auto compilar este
Arnaud Jeansen

3

Baseado na resposta do @The Eye

Instalei os pacotes gstreamer pela primeira vez no Ubuntu 18.04 https://gstreamer.freedesktop.org/documentation/installing/on-linux.html

$ git clone https://github.com/umlaeute/v4l2loopback.git
$ cd v4l2loopback
$ make
$ sudo make install

Recebi uma mensagem de aviso, como aqui no Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (mas isso não me impediu de carregar o driver v4l2loopback)

$ sudo depmod -a

Eu só tenho uma webcam no meu laptop / dev / video0 e queria obter 2 fluxos do mesmo hardware. Com base em https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Agora deveria haver /dev/video1e /dev/video2criado assumindo que /dev/video0era o único dispositivo de vídeo.

Agora eu corro o seguinte em uma janela do terminal

gst-launch-1.0 v4l2src device=/dev/video0 ! tee name=t ! queue ! v4l2sink device=/dev/video1 t. ! queue ! v4l2sink device=/dev/video2

Eu abro mais 2 abas

Na primeira aba

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Na segunda aba

gst-launch-1.0 v4l2src device=/dev/video2 ! videoconvert ! ximagesink

Agora deve-se ver 2 transmissões de vídeo

ATUALIZAR

Mesmo se eu usar o mesmo /dev/video1dispositivo várias vezes, tudo isso me dará muitos fluxos. exemplo.

Na primeira aba

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Na segunda aba

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

Na terceira guia

gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! ximagesink

me dá três fluxos.


BTW se uma webcam possui dispositivos de áudio de filtro depois de áudio usando o comando pactl list | grep -A2 'Source #', em seguida, usar esse dispositivo na seguinte pipeline (pode executar várias instâncias do gasoduto também)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
enthusiasticgeek

Isso funciona muito melhor do que a solução FFmpeg como eu não poderia obter FFmpeg para copiar h264 sem decodificá-lo o que resultou em ele sempre usando o CPU mesmo quando ninguém estava escutando
Fabian N.

2

A resposta é não, talvez ... A Biblioteca, "Video 4 Linux", detecta se um dispositivo está sendo usado e não será iniciado. Contudo; se você deseja baixar o libv4l-dev e editá-lo manualmente, você pode editar o código para se livrar dessa verificação e apenas recompilá-la. Eu imagino que você poderia fazer isso funcionar, mas seria extremamente instável. Pode valer a pena conferir embora.

TLDR: Tudo é possível se você é um programador com alguma graxa de cotovelo à mão. Não quer ir tão longe? Então não; não é possível.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.