Czy możliwe są dwa procesy dostępu do kamery jednocześnie?

14

Chciałbym spróbować użyć Cheese w Google+ Hangouts i podobnych konfiguracjach, i chcę wiedzieć, czy możliwe jest korzystanie z kamery przez dwa procesy w tym samym czasie. Nie próbowałem tego jeszcze, ale pomyślałem, że zapytam.

Czy to możliwe?

RolandiXor
źródło

Odpowiedzi:

6

Właśnie próbowałem. Ciekawe wyniki.

Mam skype, ser i zabawkę z kamery internetowej oraz spotkania (które działają) i wypróbowałem je razem.

Wyniki:

Nie możesz używać tej samej kamery na dwóch rzeczach jednocześnie.

Ser (pracujący) + zabawka kamery internetowej (nie działa) + Skype (mały, prawy górny. Nie działa).

wprowadź opis zdjęcia tutaj

Możesz korzystać z 2 kamer internetowych na 2 rzeczach. (Ser + zabawka kamery internetowej).

wprowadź opis zdjęcia tutaj

Hangouty (nie działa) + ser (działa)

wprowadź opis zdjęcia tutaj

Hangouty (działające samodzielnie).

wprowadź opis zdjęcia tutaj

Ser złamany, gdy pierwszy raz otworzyłem Hangouts. To samo zrobiło z innymi, ale mój internet jest zbyt wolny, aby przesyłać każdy zrzut ekranu (i wątpię, czy docenisz ponad 30 zrzutów ekranu) ...

wprowadź opis zdjęcia tutaj

Próbowałem nawet utworzyć symboliczny link /dev/video0i zapisać go /devjako video2. To nie zadziałało.

Nie mogę również uruchomić 2 procesów serowych jednocześnie.

Gdybyś musiał, radziłbym zrobić to na pełnym ekranie i nagrać 2 ekrany. Wątpię, czy to zadziałałoby na to, czego chcesz.

Tim
źródło
Dzięki! Jest to zwięzłe i mówi mi, co muszę wiedzieć. Ładny ogród btw! Nagroda zostanie przyznana po upływie limitu czasu (pozostało 21 godzin). Następnie usunę ten komentarz.
RolandiXor
@Mew To była moja ostatnia próba uruchomienia go :)
Tim
@Tim Następna odpowiedź jest dokładnie tym, czego szukasz, jeśli tu przyszedłeś, ponieważ potrzebujesz sposobu, aby to zrobić.
Isiah Meadows
1
@impinball nope, właśnie znalazłem interesujące pytanie!
Tim
14

Na szczęście teraz TAK!

Obecnie na GitHub istnieje projekt, który może pokazywać nie tylko dwa, ale nieskończoną (ograniczoną tylko pojemnością systemu) liczbę urządzeń wideo z jednego źródła.

Projekt nazywa się v4l2loopback. (Sprawdź link i przewiń w dół, aby wyświetlić README, aby uzyskać instrukcje.)

Możesz zainstalować v4l2loopback, klonując GitHub i uruchamiając następujące polecenia:

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

Przykłady

Aby dowiedzieć się, jak używać go z GStreamer, FFmpeg, MPlayer i Skype, sprawdź ich małą wiki . Mamy nadzieję, że znajdziesz odpowiednie ustawienia odpowiadające Twoim potrzebom.

Życzymy udoskonalania!

Oko
źródło
1
Urządzenia wirtualne to jeden z obszarów, w którym świeci Linux (i * nix, jeśli o to chodzi). Bardziej skomplikowane jest w Windows nawet napisanie podstawowego teenarzędzia, które nie czeka na stdindokończenie karmienia. Nie zdziwiłbym się, gdyby faktycznie używał binarnego odpowiednika teez bardziej skalowalnym wsparciem pod maską.
Isiah Meadows
Chociaż to odpowiada na pytanie, lepiej byłoby dołączyć tutaj fragment linku i podać link w celach informacyjnych, abyśmy mieli kilka przykładów - np. Wykonaj 2 urządzenia z 1. Jakie są opcje? I czy można (jak stwierdzono w wymaganiach PO) korzystać z Hangoutów Google? Właśnie przetestowałem go ze Skype'em i wydaje się, że nie działa. Jesteśmy teraz w wersji 4.3, a nie 4.0 ...
Tim
2
Będę musiał to sprawdzić, kiedy mój drugi system wróci. Prawdopodobnie dam dodatkową nagrodę.
RolandiXor
3
To jest teraz właściwie część Ubuntu - nie ma potrzeby git.
nbubis,
Rzeczywiście, jest to teraz spakowane dla Ubuntu / Debian jako v4l2loopback-utils Nie ma potrzeby samodzielnego kompilowania tego
Arnaud Jeansen
3

Na podstawie odpowiedzi @The Eye

Najpierw zainstalowałem pakiety gstreamer na 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

Otrzymałem komunikat ostrzegawczy, jak tutaj na Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (ale nie powstrzymało mnie to przed załadowaniem sterownika v4l2loopback)

$ sudo depmod -a

Mam tylko 1 kamerę internetową na moim laptopie / dev / video0 i chciałem uzyskać 2 strumienie z tego samego sprzętu. Na podstawie https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Powinny istnieć /dev/video1i /dev/video2tworzone, zakładając, że /dev/video0było jedynym urządzeniem wideo.

Teraz uruchamiam następujące w jednym oknie terminala

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

Otwieram jeszcze 2 zakładki

W pierwszej zakładce

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

W drugiej zakładce

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

Teraz powinieneś zobaczyć 2 strumienie wideo

AKTUALIZACJA

Nawet jeśli używam tego samego /dev/video1urządzenia wiele razy, to wszystko daje mi tyle strumieni. przykład.

W pierwszej zakładce

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

W drugiej zakładce

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

W trzeciej zakładce

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

daje mi trzy strumienie.

entuzjastyczny
źródło
BTW, jeśli kamera internetowa ma dźwięk, to odfiltruj urządzenia audio za pomocą polecenia, pactl list | grep -A2 'Source #'a następnie użyj tego urządzenia w następującym potoku (może również uruchamiać wiele wystąpień potoku)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
entuzjastycznie
Działa to znacznie lepiej niż rozwiązanie FFmpeg, ponieważ nie mogłem zmusić FFmpeg do skopiowania h264 bez dekodowania, co spowodowało, że zawsze korzystał z procesora, nawet gdy nikt nie słuchał
Fabian N.,
2

Odpowiedź brzmi „nie”, może… Biblioteka „Video 4 Linux” wykrywa, czy urządzenie jest używane i nie inicjuje się. Jednak; jeśli chcesz pobrać libv4l-dev i edytować go ręcznie, możesz edytować kod, aby pozbyć się tego sprawdzenia, a następnie po prostu go ponownie skompilować. Wyobrażam sobie, że można to uruchomić, ale byłoby to bardzo niestabilne. Może warto jednak to sprawdzić.

TLDR: Wszystko jest możliwe, jeśli jesteś programistą z przydatnym smarem łokciowym. Nie chcesz iść tak daleko? W takim razie nie; to nie jest możliwe.

Akiva
źródło