使用video环回设备假冒网络摄像头?

我想在Google+环聊中使用循环video剪辑作为我的网络摄像头来源。 我安装了v4l2loopback并创建了一个video环回设备 。 但我还没弄清楚如何将video帧写入设备。 给出的例子是:

gst-launch videotestsrc ! v4l2sink device=/dev/video1 

因此,在阅读gst-launch的手册页并尝试了解发生了什么后,我做了一个微弱的尝试:

 sudo gst-launch-0.10 filesrc location=/home/briankb/Videos/darthvaderdancing.mp4 ! v4l2sink device=/dev/video0 

结果导致:

 Setting pipeline to PAUSED ... libv4l2: error getting pixformat: Invalid argument Pipeline is PREROLLING ... Pipeline is PREROLLED ... Setting pipeline to PLAYING ... (gst-launch-0.10:12622): GStreamer-CRITICAL **: gst_caps_get_structure: assertion `GST_IS_CAPS (caps)' failed New clock: GstSystemClock (gst-launch-0.10:12622): GStreamer-CRITICAL **: gst_structure_get_name: assertion `structure != NULL' failed Caught SIGSEGV accessing address (nil) #0 0x00007fc1890f0b03 in poll () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x00007fc18962bff6 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #2 0x00007fc18962c45a in g_main_loop_run () #3 0x00007fc189b5c4cb in gst_bus_poll () #4 0x0000000000404587 in ?? () #5 0x0000000000403c34 in ?? () #6 0x00007fc18902b76d in __libc_start_main () #7 0x00000000004043bd in ?? () #8 0x00007fff88253ed8 in ?? () #9 0x000000000000001c in ?? () #10 0x0000000000000006 in ?? () #11 0x00007fff882548c4 in ?? () #12 0x00007fff882548d4 in ?? () #13 0x00007fff882548dc in ?? () #14 0x00007fff88254904 in ?? () #15 0x00007fff88254906 in ?? () #16 0x00007fff8825490f in ?? () #17 0x0000000000000000 in ?? () Spinning. Please run 'gdb gst-launch 12622' to continue debugging, Ctrl-C to quit, or Ctrl-\ to dump core. 

剪辑我试图使用29.97 fps,320×240和mp4容器(来自Youtube)的h264video。

gst-launch手册告诉我们,我们需要先解码video,最简单的方法是:

 gst-launch-0.10 filesrc location=[location] ! decodebin ! v4l2sink device=/dev/video0 

gst-launch不需要以root身份运行, [location]也可以是相对的!

只需使用v4l2loopback和mplayer 。

  1. 下载它,
  2. 编译它( makesu -c 'make install' ),
  3. 使用su -c 'modprobe v4l2loopback'加载模块,
  4. 然后更改v4l2loopback源文件夹的文件examples/yuv4mpeg_to_v4l2.c中的一行

     v.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420; 

     v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420; 
  5. 并在此文件夹中生成。

  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替换为video文件的名称。 并将/dev/video0替换为您的环回设备。

MPlayer能够播放任何网络流,各种video文件等。 我刚用http://www.tagesschau.de的一个文件对它进行了测试,这是一个德国新闻网站。

 TS=$(wget 'http://www.tagesschau.de'$(wget http://www.tagesschau.de -q -O - | grep 'Letzte Sendung' | sed -e 's%.*href="%%' -e 's%".*%%') -q -O - | grep '\.webm\.webm' | sed -e 's%.*href="%%' -e 's%\.webm\.webm".*%.webm.webm%') ./yuv4mpeg_to_v4l2 < /tmp/pipe & mplayer $TS -vf scale=480:360 -vo yuv4mpeg:file=/tmp/pipe