43

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

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

4 ответа4

47

Вы можете установить 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+x, y», где x и y - горизонтальное и вертикальное смещение соответственно.

6

Используйте v4l2loopback с mplayer.

  1. Загрузить,
  2. скомпилируйте его (make и su -c 'make install'),
  3. загрузить модуль с помощью команды su -c 'modprobe v4l2loopback' ,
  4. затем измените одну строку в файле examples/yuv4mpeg_to_v4l2.c 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 может воспроизводить любые веб-потоки, любые видеофайлы, даже со стандартного ввода! Я только что проверил это с файлом из 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 перенаправляет свой вывод на стандартный вывод. Так что-то вроде:

./yuv4mpeg_to_v4l2 < /tmp/pipe &
fmpeg -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

2

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .