我想使用免费的流媒体网站对我的 Linux 桌面上的窗口进行直播,并将捕获的视频用作虚假的网络摄像头。Windows 上有许多工具可用于此目的。ffmpeg 允许我捕获特定窗口上的输入,但我找不到将视频输出到 Flash 可使用的虚假网络摄像头式设备的方法。
有人可以推荐一种方法(或软件)来做到这一点吗?
答案1
您可以安装v4l2loopback。这是一个模拟网络摄像头的内核模块。使用以下命令加载它:
modprobe v4l2loopback
然后,您需要使用 ffmpeg 之类的程序将视频流发送到设备/dev/videoN
(其中N
是与新创建的设备相对应的编号 - 可能是最高编号)。为了捕获桌面并将其转发到/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
下载它,
编译它(
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
您可以放置一个(代表 stdin)来代替 $TS -
。在 mplayer 前面放置 ffmpeg 命令,将其输出重定向到 stdout。因此类似于:
./yuv4mpeg_to_v4l2 < /tmp/pipe &
ffmpeg -someOptions ... -o - | mplayer - -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe
没有测试最后一个,因为你没有告诉你的 ffmpeg 命令是什么样的。
答案3
你使用的是哪个发行版?我曾成功使用过 Arch 下的 WebCamStudio 和 Livestream 基于 Web 的“工作室”。不过,我已经有一段时间没用它了。
你到底想做什么?使用 x11grab 编译的 ffmpeg 可以录制桌面。我将其推送到 Ustream 时取得了有限的成功,但时间已经过去了一段时间,我认为我所做的不再有效。
如果您只想传输文件而不是桌面(我想当您说“窗口”时,您指的是“VLC”),我可以为您指明正确的方向,以便使用 Livestream(也许是 Ustream)来实现这一点。我正在笨拙地通过实验弄清楚如何做到这一点。虽然不是特别好,但可以与 Livestream 配合使用。
Justin.tv 也有可以从 VLC 流式传输到其服务的脚本。
http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API
答案4
首先,appear.in 可能会毫不费力地完成您想要做的事情(我没有附属关系):http://appear.in/
其次,您可以使用 OBS 流式传输到 Twitch 或其他服务,OBS 最近添加了 Linux 支持(!):https://obsproject.com/
universe
OBS 还解决了在 Ubuntu 上进行屏幕捕获时混合系统声音和音频输入这一更困难的问题(到目前为止,我发现 repo中的任何内容都无法解决这个问题)。
我没有任何出色的 unix-y 解决方案。但这些在现实世界中对我有用。