Використання робочого столу як підробленої веб-камери на Linux


47

Я хочу зробити прямий потік (вікна на) мого робочого столу Linux, використовуючи безкоштовний веб-сайт потокової передачі, використовуючи відзняте відео як фальшиву веб-камеру. Для цього існує багато інструментів для вікон. ffmpeg дозволяє мені робити вхід у певному вікні, але я не можу знайти спосіб вивести відео на підроблений пристрій у стилі веб-камери, який можна використовувати спалахом.

Хтось може порекомендувати метод (або програмне забезпечення) для цього?


Це все було просто, поки ви не сказали "підроблений пристрій у стилі веб-камери, який може бути використаний спалахом".
Ігнасіо Васкес-Абрамс

Я не впевнений, що ти маєш на увазі? Під приладом "веб-камери" я мав на увазі щось на кшталт підробленого файлу пристрою / dev / videoN або щось подібне. Я припускаю, що саме таким чином зроблене відео було б корисним спалахом.
bkconrad

Саме так. Це важко.
Ігнасіо Васкес-Абрамс

Відповіді:


51

Ви можете встановити v4l2loopback . Це модуль ядра, який імітує веб-камеру. Завантажте його за допомогою:

modprobe v4l2loopback

Потім вам потрібно надіслати відеопотік на пристрій / dev / video0 за допомогою програми типу ffmpeg. Для того, щоб захопити робочий стіл і переслати його в / dev / video0 за допомогою ffmpeg, ви можете скористатися наступним командним рядком:

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

Змініть значення -r з 15 на щось інше, якщо ви хочете іншу частоту кадрів. Роздільна здатність вибирається в параметрі -s. Якщо ви хочете вказати зміщення у верхньому лівому куті екрана, переведіть його у параметрі -i у формі "-i: 0,0 + х, у", де х і у - горизонтальне та вертикальне зміщення відповідно.


5
Ваше зображення може бути дзеркальним, я маю на увазі отримати горизонтальний фліп залежно від вашої збірки ffmpeg . Використовуйте відеофільтр -vf hflip . Якщо ви вже використовуєте один vf, покладіть їх всередині лапок і розділіть їх комою, наприклад -vf 'hflip, scale = 640: 360'.
Марсело Тейшейра Руджері

3
Я отримую кілька помилок з цим [x11grab @ 0x24013c0] Stream #0: not enough frames to estimate rate; consider increasing probesize, [v4l2 @ 0x2409520] ioctl(VIDIOC_G_FMT): Invalid argumentіCould not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Лотос

1
Я отримую такі самі результати, як @Lotus з ffmpeg 3.1.4. Чи є v4l2loopback та ffmpeg якісь спеціальні кодеки чи пакети, що вимагаються?
cguenther

1
@Lotus Мені вдалося усунути проблему, коли я використовую інший / dev / video-пристрій. Ви повинні переконатися у використанні відеопристрою v4l2 (у моєму випадку / dev / video1). Зсув може спричинити вже наявний реальний пристрій веб-камери за допомогою / dev / video0.
cguenther

2
@Lotus Переконайтеся, що команда modprobe (як root або з sudo) була запущена, перш ніж запускати браузер Chrome. Перевірте, чи правильно завантажений модуль з <code> lsmod | grep v4l2loopback </code>.
cguenther

6

Використовуйте v4l2loopback з mplayer .

  1. Завантажте його,
  2. складіть його ( makeі su -c 'make install'),
  3. завантажте модуль su -c 'modprobe v4l2loopback',
  4. потім змініть один рядок у файлі examples/yuv4mpeg_to_v4l2.cвихідної папки v4l2loopback

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
    

    до

    v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
    
  5. і робити makeв цій папці.

  6. Потім запустіть його з examplesкаталогу так:

    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
    

    де ви замінюєте movie.mp4ім'я вашого відеофайлу. І замініть /dev/video0своїм пристроєм петлі.

MPlayer здатний відтворювати будь-які веб-потоки, всі види відеофайлів, навіть із stdin! Я щойно перевірив його з файлу з http://www.tagesschau.de, який є німецьким новинним сайтом.

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

Замість $ TS ви можете поставити -(що означає stdin). А перед mplayer ваша команда ffmpeg перенаправляє свій вихід на stdout. Тож щось на кшталт:

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

Не перевіряли останній, бо ви не розповіли, як виглядає ваша команда ffmpeg.


Будь ласка, допоможіть: ./yuv4mpeg_to_v4l2 < /dev/video0 &веде до ./yuv4mpeg_to_v4l2: : missing YUV4MPEG2 header. Як замінити /tmp/pipeна /dev/video0?
користувач123456

3

Який дистрибутив ви використовуєте? Я мав успіх з WebCamStudio під Arch у поєднанні з "студією" на базі Livestream. Минуло небагато часу, оскільки я ним користувався.

http://www.ws4gl.org/

Що ви намагаєтеся робити саме? ffmpeg, складений з x11grab, може записувати робочий стіл. Я мав обмежений успіх, підштовхуючи це до Ustream, але знову минув час, і я думаю, що те, що я робив, більше не працюватиме.

Якщо ви просто хочете передавати файл, а не ваш робочий стіл (я думаю, коли ви говорите: "Вікно", ви маєте на увазі "VLC"), я можу вказати вам у правильному напрямку, щоб отримати роботу з Livestream (можливо Ustream). Я незграбно розгадую, як це зробити за допомогою експериментів. Це не фантастично, але працює з Livestream.

У Justin.tv є сценарії, які також можуть передавати з VLC на свою службу.

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


О, вау, це дуже цікаво. Я намагаюся в прямому ефірі деяких ігор. Я вже знаю, як зафіксувати відеофайл з ffmpeg, мені цікаво, чи можу я відкрити цей самий файл у vlc і якось передати його так, як це написано. Дякуємо за інформацію.
bkconrad

Веб- сайт ws4gl.org видається дуже застарілим, і всі посилання вказують на машину Wayback. Думаю, остання версія доступна на сайті sourceforge.net/projects/webcamstudio
Denilson Sá Maia

"WEBCAMSTUDIO НЕ БІЛЬШЕ ПОДАЄТЬСЯ": /
Рафаель

2

По-перше, мабуть, я думаю, що ви не бажаєте (я не пов'язаний з цим): http://appear.in/

По-друге, ви можете передавати трансляцію до Twitch або інших служб за допомогою OBS, які нещодавно додали підтримку Linux (!): Https://obsproject.com/

OBS також вирішує набагато складнішу проблему з приглушенням звукового та аудіосигналу системи під час захоплення екрана на Ubuntu (не вирішується нічим в universeрепо, що я знайшов до цього часу).

У мене немає ніяких дивовижних рішень unix-y. Але ті працювали на мене в реальному світі.


Студія OBS на Debian: tracker.debian.org/pkg/obs-studio
myrdd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.