Menggunakan desktop sebagai webcam palsu di linux

48

Saya ingin membuat streaming langsung (jendela pada) desktop linux saya menggunakan situs streaming gratis, menggunakan video yang diambil sebagai webcam palsu. Ada banyak alat untuk ini di windows. ffmpeg memungkinkan saya untuk mengambil input pada jendela tertentu, tetapi saya tidak dapat menemukan cara untuk output video ke perangkat bergaya webcam palsu yang dapat digunakan oleh flash.

Adakah yang bisa merekomendasikan metode (atau perangkat lunak) untuk melakukan ini?

bkconrad
sumber
Semuanya keren sampai Anda mengatakan "perangkat bergaya webcam palsu yang dapat digunakan oleh flash".
Ignacio Vazquez-Abrams
Saya tidak yakin apa yang Anda maksud? Dengan perangkat "webcam-style" yang saya maksudkan adalah file perangkat palsu / dev / videoN, atau yang serupa. Saya menganggap ini adalah bagaimana video yang diambil akan dapat digunakan oleh flash.
bkconrad
Persis. Itu sulit.
Ignacio Vazquez-Abrams

Jawaban:

51

Anda dapat menginstal v4l2loopback . Ini adalah modul kernel yang mensimulasikan webcam. Muat dengan:

modprobe v4l2loopback

Maka Anda perlu mengirim aliran video ke perangkat / dev / video0 menggunakan program seperti ffmpeg. Untuk menangkap desktop dan meneruskannya ke / dev / video0 dengan ffmpeg, Anda dapat menggunakan baris perintah berikut:

ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -f v4l2 /dev/video0

Ubah nilai -r dari 15 menjadi sesuatu yang lain jika Anda menginginkan frame rate yang berbeda. Resolusi dipilih dalam parameter -s. Jika Anda ingin menentukan offset dari sudut kiri atas layar, berikan dalam parameter -i dalam bentuk "-i: 0,0 + x, y", di mana x dan y masing-masing merupakan offset horizontal dan vertikal.

Víctor Fernández
sumber
5
Gambar Anda mungkin dicerminkan, maksud saya dapatkan flip horisontal tergantung pada ffmpeg build Anda . Gunakan filter video -vf hflip . Jika Anda sudah menggunakan satu vf, letakkan di dalam tanda kutip dan dipisahkan dengan koma, seperti -vf 'hflip, skala = 640: 360'.
Marcelo Teixeira Ruggeri
3
Saya mendapatkan beberapa kesalahan dengan ini [x11grab @ 0x24013c0] Stream #0: not enough frames to estimate rate; consider increasing probesize, [v4l2 @ 0x2409520] ioctl(VIDIOC_G_FMT): Invalid argumentdanCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Lotus
1
Saya mendapatkan output yang sama persis seperti @Lotus dengan ffmpeg 3.1.4. Apakah ada codec atau paket khusus yang diminta di samping v4l2loopback dan ffmpeg?
cguenther
1
@ Lotus saya berhasil mengatasi masalah, ketika saya menggunakan perangkat / dev / video lain. Anda harus memastikan untuk menggunakan perangkat video v4l2 (yang dalam kasus saya adalah / dev / video1). Offset dapat disebabkan oleh perangkat webcam nyata yang sudah ada menggunakan / dev / video0.
cguenther
2
@ Lotus Pastikan bahwa perintah modprobe (sebagai root atau dengan sudo) telah dijalankan sebelum Anda memulai browser chrome Anda. Periksa apakah modul dimuat dengan benar dengan <code> lsmod | grep v4l2loopback </code>.
cguenther
7

Gunakan v4l2loopback dengan mplayer .

  1. Unduh,
  2. kompilasi ( makedan su -c 'make install'),
  3. muat modul dengan su -c 'modprobe v4l2loopback',
  4. kemudian ubah satu baris dalam file examples/yuv4mpeg_to_v4l2.cdari folder sumber v4l2loopback dari

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    untuk

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. dan lakukan makedi folder ini.

  6. Kemudian jalankan dari examplesdirektori seperti ini:

    mkfifo /tmp/pipe  # only needed once, as long as you do not delete the file /tmp/pipe
    ./yuv4mpeg_to_v4l2 < /tmp/pipe &
    mplayer movie.mp4 -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
    

    tempat Anda mengganti movie.mp4dengan nama file video Anda. Dan ganti /dev/video0dengan perangkat loopback Anda.

MPlayer dapat memainkan streaming web apa pun, semua jenis file video, bahkan dari stdin! Saya baru saja mengujinya dengan file dari http://www.tagesschau.de yang merupakan situs berita Jerman.

TS=$(wget "http://www.tagesschau.de/multimedia/video/" -q -O - | grep --regexp='http.*\.webm"' | sed -e 's%.*href="%%' -e 's%\.webm".*%\.webm%')
./yuv4mpeg_to_v4l2 < /tmp/pipe &
mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Alih-alih $ TS Anda bisa meletakkan -(yang merupakan singkatan dari stdin). Dan di depan mplayer, perintah ffmpeg Anda mengarahkan ulang outputnya ke stdout. Jadi sesuatu seperti:

./yuv4mpeg_to_v4l2 < /tmp/pipe &
fmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Tidak menguji yang terakhir, karena Anda tidak tahu seperti apa perintah ffmpeg Anda.

erik
sumber
Tolong bantu: ./yuv4mpeg_to_v4l2 < /dev/video0 &mengarah ke ./yuv4mpeg_to_v4l2: : missing YUV4MPEG2 header. Bagaimana cara mengganti /tmp/pipedengan /dev/video0?
user123456
3

Distro apa yang Anda gunakan? Saya sudah sukses dengan WebCamStudio di bawah Arch dikombinasikan dengan "studio" berbasis web Livestream. Sudah agak lama sejak saya menggunakannya.

http://www.ws4gl.org/

Apa yang sebenarnya ingin Anda lakukan? ffmpeg yang dikompilasi dengan x11grab dapat merekam desktop. Saya memiliki keberhasilan yang terbatas untuk mendorong hal itu ke Ustream, tetapi sekali lagi sudah lama dan saya pikir apa yang saya lakukan tidak akan berhasil lagi.

Jika Anda hanya ingin melakukan streaming file daripada desktop Anda (saya berpikir ketika Anda mengatakan, "Sebuah jendela," maksud Anda, "VLC"), saya bisa mengarahkan Anda ke arah yang benar untuk membuatnya bekerja dengan Livestream (mungkin Ustream). Dengan kikuk mencari tahu bagaimana melakukan ini melalui eksperimen. Itu tidak fantastis tetapi bekerja dengan Livestream.

Justin.tv memiliki skrip yang dapat streaming dari VLC ke layanan mereka, juga.

http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API

Mike Mitchell
sumber
Oh wow ini sangat menarik. Saya mencoba streaming gameplay langsung dari beberapa game. Saya sudah tahu cara menangkap file video dari ffmpeg, saya bertanya-tanya apakah saya bisa membuka file yang sama di vlc dan entah bagaimana mengalirkannya saat sedang ditulis. Terimakasih atas infonya.
bkconrad
Situs web ws4gl.org tampaknya sangat ketinggalan zaman, dan semua tautan mengarah ke Wayback Machine. Saya kira versi terbaru tersedia di sourceforge.net/projects/webcamstudio
Denilson Sá Maia
"WEBCAMSTUDIO ADALAH LEBIH BANYAK DIJAMIN": /
Raphael
2

Pertama ,erge.in mungkin melakukan apa yang Anda inginkan tanpa kerumitan (saya tidak berafiliasi): http://appear.in/

Kedua, Anda dapat melakukan streaming ke Twitch atau layanan lain menggunakan OBS, yang baru-baru ini menambahkan dukungan linux (!): Https://obsproject.com/

OBS juga memecahkan masalah yang jauh lebih sulit dari muxing suara sistem dan input audio saat menangkap layar di Ubuntu (tidak dipecahkan oleh apa pun di universerepo yang saya temukan sejauh ini).

Saya tidak punya solusi unix-y yang mengagumkan. Tetapi itu berhasil bagi saya di dunia nyata.

bkconrad
sumber
OBS Studio pada Debian: tracker.debian.org/pkg/obs-studio
myrdd