Mungkinkah dua proses mengakses webcam pada saat yang sama?

14

Saya ingin mencoba menggunakan Keju di Google+ Hangouts, dan konfigurasi serupa, dan saya ingin tahu apakah webcam dapat digunakan oleh dua proses untuk memiliki akses ke webcam pada saat yang sama. Saya belum mencobanya, tetapi sebelum saya melakukannya, saya pikir saya akan bertanya.

Jadi, apakah mungkin?

RolandiXor
sumber

Jawaban:

6

Yah saya baru mencoba. Hasil yang menarik.

Saya punya skype, keju, mainan webcam, dan hangout (yang semuanya berfungsi) dan mencobanya bersama-sama.

Hasil:

Anda tidak dapat menggunakan webcam yang sama pada 2 hal sekaligus.

Keju (Bekerja) + Mainan Webcam (Tidak berfungsi) + Skype (Kecil, kanan atas. Tidak berfungsi).

masukkan deskripsi gambar di sini

Anda dapat menggunakan 2 webcam pada 2 hal. (Keju + Mainan Webcam).

masukkan deskripsi gambar di sini

Hangouts (Tidak berfungsi) + Keju (Bekerja)

masukkan deskripsi gambar di sini

Hangouts (Mengerjakan sendiri).

masukkan deskripsi gambar di sini

Keju rusak saat saya membuka Hangouts terlebih dahulu. Itu melakukan hal yang sama dengan yang lain, tetapi internet saya terlalu lambat untuk mengunggah setiap tangkapan layar tunggal (dan saya ragu Anda akan menghargai 30+ tangkapan layar) ...

masukkan deskripsi gambar di sini

Saya bahkan mencoba membuat tautan simbolis /dev/video0dan menyimpannya /devsebagai video2. Itu tidak berhasil.

Saya juga tidak bisa menjalankan 2 proses keju sekaligus.

Jika Anda harus, saya akan menyarankan membuatnya layar penuh dan melakukan 2 rekaman layar. Saya ragu itu akan bekerja untuk apa yang Anda inginkan.

Tim
sumber
Terima kasih! Ini singkat dan memberi tahu saya apa yang perlu saya ketahui. Taman yang bagus btw! Hadiah akan diberikan ketika batas waktu berakhir (21 jam lagi). Maka saya akan menghapus komentar ini.
RolandiXor
@Mew Itu adalah upaya terakhir saya untuk membuatnya bekerja :)
Tim
@ Tim Jawaban berikutnya adalah apa yang Anda cari jika Anda datang ke sini karena Anda perlu cara untuk melakukan itu.
Isiah Meadows
1
@impinball nggak, hanya menemukan itu pertanyaan yang menarik!
Tim
14

Syukurlah, sekarang, YA!

Saat ini ada proyek di GitHub yang dapat menunjukkan tidak hanya dua, tetapi jumlah perangkat video tak terbatas (hanya berdasarkan kapasitas sistem) dari satu sumber.

Proyek ini disebut v4l2loopback. (Periksa tautan dan gulir ke bawah untuk melihat instruksi README.)

Anda dapat menginstal v4l2loopbackdengan kloning GitHub-nya dan menjalankan perintah-perintah ini:

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

Contohnya

Untuk sampel tentang cara menggunakannya dengan GStreamer, FFmpeg, MPlayer, dan Skype, periksa wiki kecil mereka . Semoga Anda dapat menemukan pengaturan yang tepat sesuai dengan kebutuhan Anda.

Selamat menikmati!

Mata
sumber
1
Perangkat virtual adalah salah satu area di mana Linux (dan * nix, dalam hal ini) bersinar. Lebih rumit pada Windows untuk menulis teeutilitas dasar yang tidak menunggu untuk stdinmenyelesaikannya. Saya tidak akan terkejut jika ini benar-benar menggunakan setara biner teedengan dukungan yang lebih scalable di bawah tenda.
Isiah Meadows
Meskipun ini menjawab pertanyaan, akan lebih baik untuk memasukkan bagian dari tautan di sini, dan memberikan tautan untuk referensi, sehingga kami memiliki beberapa contoh - misalnya membuat 2 perangkat dari 1. Apa saja pilihan untuk itu? Dan apakah mungkin (seperti yang disebutkan dalam persyaratan OP) untuk digunakan dengan hangout Google? Saya juga baru saja mengujinya dengan Skype dan sepertinya tidak berhasil. Kita sekarang versi 4.3 bukan 4.0 ...
Tim
2
Saya harus memeriksa ini ketika sistem saya yang lain kembali. Saya mungkin akan memberikan hadiah tambahan.
RolandiXor
3
Ini sekarang sebenarnya bagian dari ubuntu - tidak perlu git.
nbubis
Memang, ini sekarang dikemas untuk Ubuntu / Debian sebagai v4l2loopback-utils Tidak perlu mengkompilasi sendiri ini
Arnaud Jeansen
3

Berdasarkan jawaban @The Eye

Saya pertama kali menginstal paket gstreamer di 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

Saya mendapat pesan peringatan seperti di sini di Ubuntu 18.04 LTS https://github.com/umlaeute/v4l2loopback/issues/139 (tapi itu tidak mencegah saya memuat driver v4l2loopback)

$ sudo depmod -a

Saya hanya memiliki 1 webcam di laptop / dev / video0 dan saya ingin mendapatkan 2 stream dari perangkat keras yang sama. Berdasarkan pada https://github.com/umlaeute/v4l2loopback/blob/master/README.md

$ modprobe v4l2loopback devices=2

Seharusnya sekarang ada /dev/video1dan /dev/video2dibuat dengan anggapan /dev/video0satu-satunya perangkat video.

Sekarang saya menjalankan yang berikut dalam satu jendela terminal

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

Saya membuka 2 tab lagi

Di tab pertama

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

Di tab kedua

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

Sekarang kita akan melihat 2 stream video

MEMPERBARUI

Bahkan jika saya menggunakan /dev/video1perangkat yang sama beberapa kali semuanya memberi saya banyak aliran. contoh.

Di tab pertama

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

Di tab kedua

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

Di tab ketiga

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

memberi saya tiga aliran.

antusiasme
sumber
BTW jika webcam seseorang memiliki audio kemudian filter perangkat audio menggunakan perintah pactl list | grep -A2 'Source #'kemudian gunakan perangkat itu dalam pipa berikut (dapat menjalankan beberapa contoh pipa juga)gst-launch-1.0 pulsesrc device=alsa_input.<name of device> ! autoaudiosink
antusias
Ini bekerja jauh lebih baik daripada solusi FFmpeg karena saya tidak bisa mendapatkan FFmpeg untuk menyalin h264 tanpa mendekodekannya yang membuatnya selalu menggunakan CPU bahkan ketika tidak ada yang mendengarkan
Fabian N.
2

Jawabannya adalah tidak dengan mungkin ... Perpustakaan, "Video 4 Linux" mendeteksi apakah suatu perangkat sedang digunakan, dan tidak akan dimulai. Namun; jika Anda ingin mengunduh libv4l-dev dan mengeditnya secara manual, Anda dapat mengedit kode untuk menghilangkan pemeriksaan ini dan kemudian hanya mengkompilasi ulang. Saya membayangkan Anda bisa membuatnya bekerja, tetapi itu akan sangat tidak stabil. Mungkin perlu dicoba.

TLDR: Apa pun mungkin terjadi jika Anda seorang programmer dengan sedikit minyak siku. Tidak ingin sejauh itu? Maka tidak; itu tidak mungkin.

Akiva
sumber