
Я хочу сделать прямую трансляцию (окна) моего рабочего стола 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.
Загрузить,
скомпилируйте его (
make
иsu -c 'make install'
),загрузите модуль с помощью
su -c 'modprobe v4l2loopback'
,затем измените одну строку в файле
examples/yuv4mpeg_to_v4l2.c
исходной папки v4l2loopback сv.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420;
к
v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420;
и сделать
make
в этой папке.Затем запустите его из
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. Хотя прошло уже некоторое время с тех пор, как я им пользовался.
Что именно вы пытаетесь сделать? 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-решений. Но они работали у меня в реальном мире.