我想使用一个免费的流媒体站点,将捕获的视频用作假冒的网络摄像头,对linux桌面(窗口上)进行实时流传输。Windows上有许多用于此目的的工具。ffmpeg允许我在特定窗口上捕获输入,但是我找不到将视频输出到可通过Flash使用的假冒网络摄像头式设备的方法。
谁能推荐这样做的方法(或软件)?
我想使用一个免费的流媒体站点,将捕获的视频用作假冒的网络摄像头,对linux桌面(窗口上)进行实时流传输。Windows上有许多用于此目的的工具。ffmpeg允许我在特定窗口上捕获输入,但是我找不到将视频输出到可通过Flash使用的假冒网络摄像头式设备的方法。
谁能推荐这样做的方法(或软件)?
Answers:
您可以安装v4l2loopback。它是模拟网络摄像头的内核模块。加载:
modprobe v4l2loopback
然后,您需要使用类似ffmpeg的程序将视频流发送到设备/ dev / video0。为了捕获桌面并使用ffmpeg将其转发到/ dev / video0,可以使用以下命令行:
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参数:-i:0.0 + x,y,其中x和y分别是水平和垂直偏移量。
[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
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 &
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
?
您正在使用什么发行版?我在Arch下的WebCamStudio与基于Livestream的基于Web的“工作室”相结合取得了成功。自从我使用它已经有一段时间了。
您到底想做什么?用x11grab编译的ffmpeg可以记录桌面。我在将其推向Ustream方面取得的成功有限,但是又有一段时间了,我认为我正在做的事情不再起作用。
如果您只想流式传输文件而不是台式机(我想说的是“窗口”,意思是“ VLC”),那么我可以为您指明正确的方向,以便与Livestream一起使用(也许Ustream)。我很笨拙地想出如何通过实验来做到这一点。这并不理想,但是可以与Livestream一起使用。
Justin.tv也具有可以从VLC流到其服务的脚本。
http://apiwiki.justin.tv/mediawiki/index.php/Linux_Broadcasting_API
首先,appear.in可能会毫不费力地满足您的要求(与我无关):http ://appear.in/
其次,您可以使用最近添加了Linux支持(!)的OBS流式传输到Twitch或其他服务:https : //obsproject.com/
OBS还解决了在Ubuntu上进行屏幕捕获时混合系统声音和音频输入的更艰巨的问题(universe
到目前为止,我在仓库中找不到任何解决方案)。
我没有任何很棒的unix-y解决方案。但是那些在现实世界中为我工作。