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?

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.


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!


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.