ভিডিও লুপব্যাক ডিভাইস ব্যবহার করে একটি ওয়েবক্যাম নকল?


16

আমি একটি Google+ হ্যাঙ্গআউটে আমার ওয়েবক্যাম উত্স হিসাবে একটি লুপযুক্ত ভিডিও ক্লিপটি ব্যবহার করতে চাই। আমি v4l2loopback ইনস্টল করেছি এবং একটি ভিডিও লুপব্যাক ডিভাইস তৈরি করেছি । তবে আমি কীভাবে ডিভাইসে ভিডিও ফ্রেম লিখতে পারি তা বুঝতে পারি নি। প্রদত্ত উদাহরণটি হ'ল:

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

তাই জিএসটি-লঞ্চের জন্য ম্যানুয়াল পৃষ্ঠাটি পড়ার পরে এবং কী চলছে তা বোঝার চেষ্টা করার পরে, আমি আমার দুর্বল চেষ্টা করেছি:

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, এবং একটি এমপি 4 পাত্রে (এটি ইউটিউব থেকে) একটি h264 ভিডিও ব্যবহার করার চেষ্টা করছি।

উত্তর:


12

gst-launchManpages আমাদের বলে যে, আমরা প্রথম ভিডিও ডিকোড করতে হবে, এবং তা করার সহজতম উপায়টি হ'ল এই মত হল:

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

gst-launchরুট হিসাবে চালানোর প্রয়োজন হয় না, এবং [location]খুব আপেক্ষিক হতে পারে!


11

এমপ্লেয়ারের সাথে কেবল v4l2loopback ব্যবহার করুন ।

  1. এটি ডাউনলোড করুন,
  2. এটি সংকলন করুন ( makeএবং 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আপনার লুপব্যাক ডিভাইসটি প্রতিস্থাপন করুন ।

এমপ্লেয়ার যেকোন ওয়েব স্ট্রিম, সব ধরণের ভিডিও ফাইল এবং এগুলি খেলতে সক্ষম। আমি কেবল এটি 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.pixel formt = V4L2_PIX_FMT_YVU420 পরিবর্তন করতে বলে; ঠিক একই জিনিস তাই এর মানে কি কোনও পরিবর্তন প্রয়োজন?
kkron

2
@ কেক্রন: চরিত্র অনুসারে দুটি রেখার (আগে এবং পরে) চরিত্রের তুলনা করুন এবং আপনি পার্থক্যটি লক্ষ্য করবেন। ;-) ইঙ্গিত: YUV এবং YVU।
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.