Использование рабочего стола в качестве поддельной веб-камеры на Linux

Использование рабочего стола в качестве поддельной веб-камеры на Linux

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

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

решение1

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

modprobe v4l2loopback

Затем вам нужно отправить видеопоток на устройство /dev/videoN(где N- номер, который соответствует только что созданному устройству - вероятно, самый большой номер) с помощью программы типа ffmpeg. Для того, чтобы захватить рабочий стол и переслать его /dev/videoNс помощью ffmpeg, вы можете использовать следующую командную строку:

ffmpeg -probesize 100M -framerate 15 -f x11grab -video_size 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/videoN

Измените значение -framerateс 15 на другое, если вам нужна другая частота кадров.

Разрешение выбирается в -video_sizeпараметре. Если вы хотите указать смещение от верхнего левого угла экрана, передайте его в параметре -i в форме -i :0.0+x,y, где x и y — горизонтальное и вертикальное смещение соответственно.

решение2

Использовать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;
  1. и сделать makeв этой папке.

  2. Затем запустите его из 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 &
ffmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe

Последний вариант не проверял, так как вы не указали, как выглядит ваша команда ffmpeg.

решение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

решение4

Во-первых, appear.in, вероятно, сделает то, что вам нужно, без каких-либо проблем (я не аффилирован):http://appear.in/

Во-вторых, вы можете транслировать на Twitch или другие сервисы, используя OBS, в который недавно добавили поддержку Linux(!):https://obsproject.com/

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

У меня нет крутых unix-решений. Но они работали у меня в реальном мире.

Связанный контент