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?
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?
Odpowiedzi:
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).
Możesz korzystać z 2 kamer internetowych na 2 rzeczach. (Ser + zabawka kamery internetowej).
Hangouty (nie działa) + ser (działa)
Hangouty (działające samodzielnie).
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) ...
Próbowałem nawet utworzyć symboliczny link /dev/video0
i zapisać go /dev
jako 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.
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
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!
tee
narzędzia, które nie czeka na stdin
dokończenie karmienia. Nie zdziwiłbym się, gdyby faktycznie używał binarnego odpowiednika tee
z bardziej skalowalnym wsparciem pod maską.
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/video1
i /dev/video2
tworzone, zakładając, że /dev/video0
był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/video1
urzą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.
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
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.