비디오 루프백 장치를 사용하여 웹캠을 가짜?


16

Google+ 행 아웃에서 루프 된 비디오 클립을 웹캠 소스로 사용하고 싶습니다. v4l2loopback을 설치하고 비디오 루프백 장치를 만들었습니다 . 그러나 비디오 프레임을 장치에 쓰는 방법을 알지 못했습니다. 주어진 는 다음과 같습니다.

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, 320x240 및 mp4 컨테이너 (Youtube에서 제공)에서 h264 비디오를 사용하려고하는 클립.

답변:


12

gst-launch맨은 우리가 처음 비디오를 디코딩해야하고, 그렇게 할 수있는 가장 쉬운 방법은 다음과 같은 것을 우리에게 알려줍니다 :

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

gst-launch루트로 실행할 필요가 없으며 [location]상대도 될 수 있습니다!


11

mplayer와 함께 v4l2loopback을 사용 하십시오 .

  1. 다운로드 해,
  2. 컴파일하고 ( makeand su -c 'make install')
  3. 함께 모듈을로드 su -c 'modprobe v4l2loopback',
  4. 그런 다음 examples/yuv4mpeg_to_v4l2.cv4l2loopback 소스 폴더 의 파일에서 한 줄 을

    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'$(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

이 답변은 v.fmt.pix.pixelformat = V4L2_PIX_FMT_YVU420; 정확히 같은 것으로 변경이 필요하지 않다는 것을 의미합니까?
kkron

2
@kkron : 문자별로 두 줄 (전후)을 비교하면 차이를 알 수 있습니다. ;-) 힌트 : YUV 및 YVU.
erik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.