রাস্পবেরি ক্যাম থেকে H.264 স্ট্রিম করার আধুনিক উপায়


16

আমি পাই বি + এবং পাই ক্যামেরা পেয়েছি এবং এখন ক্যামেরা থেকে আমার হোম সার্ভারে H.264 এনকোডযুক্ত ভিডিওটি প্রবাহিত করতে সবচেয়ে দক্ষ (নিম্ন সিপিইউ) এবং সর্বনিম্ন-ল্যাটেনসি কনফিগারেশনটি সন্ধান করার চেষ্টা করছি।

আমি নিম্নলিখিতটি পড়েছি:

  1. http://pi.gbaman.info/?p=150

  2. http://blog.tkjelectronics.dk/2013/06/how-to-stream-video-and-audio-from-a-raspberry-pi-with-no-latency/comment-page-1/#comments

  3. http://www.raspberrypi.org/forums/viewtopic.php?p=464522

(সমস্ত লিঙ্ক gstreamer-1.0 ব্যবহার করে deb http://vontaene.de/raspbian-updates/ . main।)

বিগত বছরগুলিতে এ বিষয়ে অনেক কিছু করা হয়েছে।

মূলত, আমাদের আউটপুটটি পাইপ করতে raspividহয়েছিল gst-launch-1.0(লিঙ্ক 1 দেখুন)।

তারপরে (লিঙ্ক 2) সরকারী ভি 4 এল 2 ড্রাইভার তৈরি করা হয়েছিল যা এখন মানসম্পন্ন, এবং এটি কেবল পাইপ ছাড়াই সরাসরি জিস্ট্রেমার ব্যবহার করে ডেটা পেতে সক্ষম করে (বিশেষত টাওল্ফের পোস্টটি দেখুন »শনিবার 07 ডিসেম্বর, 2013 3:34 pm লিঙ্কে 2):

প্রেরক (পাই): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000

রিসিভার: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false

আমি যদি সঠিকভাবে বুঝতে পারি তবে, দুটি উপায়ই H264 ডিকোডিংয়ের জন্য জিপিইউ ব্যবহার করে তবে পরবর্তী প্রক্রিয়াটির মধ্যে কোনও পাইপ না থাকার কারণে কার্নেলের মধ্য দিয়ে আরও একবার যাওয়ার প্রয়োজন হয় না কারণ এটি কিছুটা মুর দক্ষ।


এখন আমি এই সম্পর্কে কিছু প্রশ্ন আছে।

  1. দ্বিতীয়টি কি এখনও দক্ষতার সাথে ক্যামেরা থেকে H264 পাওয়ার সবচেয়ে সাম্প্রতিকতম উপায়? আমি সম্পর্কে পড়েছি gst-omx, যা জাস্ট্রিমার পাইপলাইনগুলিকে পছন্দ করে ... video/x-raw ! omxh264enc ! ...। এটি কি কেবল ব্যবহারের চেয়ে আলাদা কিছু করে video/x-h264, বা এটি আরও কার্যকর হতে পারে? পার্থক্য কি?

  2. আমি video/x-h264 ...পাইপলাইনটি ব্যবহার করার সময় gstreamer এনকোডিং প্লাগইনটি আসলে কীভাবে ব্যবহার করা যায় তা আমি কীভাবে জানতে পারি ? অন্যান্য পাইপলাইন অংশের তুলনায় এটি কেবল আমার যে ফর্ম্যাটটি চান তা সুনির্দিষ্ট করে বলে মনে হচ্ছে, যেখানে আমি স্পষ্টতই (কোড) উপাদানটির (যেমন h264parseবা fpsdisplaysink) নামকরণ করেছি ।

  3. ইন লিংক 1 এই উত্তর Mikael Lepistö উল্লেখ "আমি পাশ স্ট্রিমিং থেকে এক অপ্রয়োজনীয় ফিল্টার পাস মুছে" , যার অর্থ তিনি কেটে gdppayএবং gdpdepay। তারা কি করে? কেন তাদের প্রয়োজন? আমি কি সত্যিই সেগুলি খুলে ফেলতে পারি?

  4. তিনি আরও উল্লেখ করেছেন যে প্রাপ্তির দিকের caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"প্যারামিটার নির্দিষ্ট করে udpsrcতিনি স্ট্রিমের মাঝামাঝি স্ট্রিমিং শুরু / পুনরায় শুরু করতে সক্ষম। এই ক্যাপগুলি কী অর্জন করে, এই নির্দিষ্ট পছন্দগুলি কেন, সেগুলি সম্পর্কে আমি আরও কোথায় পড়তে পারি?

  5. আমি যখন 3 এবং 4 প্রশ্নের পরামর্শ অনুসারে কাজ করি (তখন যোগ করে দেওয়া এবং capsছেড়ে দেওয়া ) তারপরে আমার ভিডিওর প্রচ্ছন্নতা আরও খারাপ হয়ে যায় (এবং মনে হচ্ছে, সময়ের সাথে সাথে এই বিলম্বতা আরও বেড়ে যায়, এবং কয়েক মিনিটের পরে ভিডিওটি বন্ধ হয়ে যায়)! কেন হতে পারে? আমি মূল কমান্ডটি দিয়ে যে বিলম্ব করেছি তা পেতে চাই, তবে যে কোনও সময় প্রবাহে যোগ দিতে সক্ষম হওয়ার বৈশিষ্ট্যটিও রয়েছে।gdppaygdpdepay

  6. আমি পড়েছি যে আরটিএসপি + আরটিপি সাধারণত টিসিপি এবং ইউডিপির সংমিশ্রণ ব্যবহার করে: নিয়ন্ত্রণ বার্তা এবং অন্যান্য জিনিসগুলি যাতে হারিয়ে না যায় সেজন্য TCP এবং প্রকৃত ভিডিও ডেটা সংক্রমণের জন্য ইউডিপি। উপরের সেটআপগুলিতে, আমি আসলে এটি ব্যবহার করছি, বা আমি কেবল ইউডিপি ব্যবহার করছি? Gstreamer এই যত্ন নেয় কিনা তা আমার কাছে কিছুটা অস্বচ্ছ।

আমি এই প্রশ্নের একটিও উত্তর যে কোনও উত্তর প্রশংসা করব!


|এই প্রসঙ্গে পাইপ ব্যবহার করা যে কোনও সমস্যা তৈরি করে এই ধারণাটি বিএসের একটি অবিশ্বাস্য টুকরো আপনি কি কোনও raspivid | cvlcপদ্ধতি ব্যবহার করে দেখেছেন? এটির সাথে খেলতে আমার খুব বেশি বা বেশি সময় ক্যামেরা লাগেনি, তবে এটি ব্যবহার করে কোনও একটি http প্রবাহ তৈরি করতে (অন্য প্রান্তে লিনাক্সে দেখা যায় vlc) / ঠিক আছে বলে মনে হচ্ছে।
গোল্ডিলকস

@goldilocks আমি বলছি না যে নল একটি "বিষয়" ঠিক এটি প্রয়োজন নেই এবং কিছু উপরি আছে, ঠিক cat file | grep ...পরিবর্তে grep ... file। পাইপটি কার্নেলের কাছে এবং অনুলিপি করার জন্য আরও একটি স্তর যুক্ত করে, যা সহজেই পরিমাপযোগ্য, বিশেষত লো মেমরি ব্যান্ডউইথথৃত ডিভাইসে। যদি gstreamer সরাসরি ডিভাইস ফাইল থেকে পড়তে পারেন তবে কেন এটি ব্যবহার করবেন না? আপনার raspivid | cvlcপরামর্শ সম্পর্কে : আমি জাস্ট্রিমার ভিত্তিক সমাধানটিতে স্যুইচ করার আগে আমি এটি ব্যবহার করছিলাম, এটি জিস্ট্রেমারের চেয়ে 3 সেকেন্ড বেশি বিলম্বিত হয়েছে (কেন জানি না)।
এনএইচ 2

হ্যাঁ এতে অবশ্যই কিছুটা বিলম্ব হয়েছে। পাইপ ডাব্লুআরটি, "প্রসঙ্গ" সম্পর্কে আমার বক্তব্যটি হ'ল এটি সম্ভবত এখানে বাধা হতে পারে না - নেটওয়ার্ক I / O এর আকার কমিয়ে দেওয়া ইত্যাদি হতে পারে আপনি ঠিক বলেছেন, যদিও এটি সিপিইউতে কিছুটা যুক্ত করতে পারে সময়। শুধু আমি খুব বেশি বাজি চাই; পুরো রেজোলিউশনে cvlcএটি চালানো, ~ 45% ব্যবহার করে, তবে কেবল সেই ডাটা হারে পাইপের মধ্য দিয়ে দৌড়ানো (আবার মনে রাখবেন, পাইপটি এটি কমিয়ে দিচ্ছে না ) সবেই সুইটি সরাবে, আমার ধারণা। <5% পছন্দ করুন। আপনি যদি যথাসম্ভব দক্ষতার সাথে এটি করতে চান তবে এটি সম্পূর্ণ তুচ্ছ নয় ...
গোল্ডিলকস

... আমি চাই না যে এটি পড়ার জন্য অন্য কেউ এই ধারণাটি পান যে এখানে পাইপ ব্যবহার করা বিলম্বিত সমস্যা বা অন্যান্য সমস্যার জন্য দায়ী হতে পারে। এটি একটি লাল রঙের হেরিং। অথবা আমি ভুল হতে পারি;)
স্বর্ণলোকস

এটি যদি আপনার পরে দক্ষতা হয় তবে আপনি নির্দিষ্ট রেজোলিউশন / ফ্রেম রেটে বিভিন্ন পদ্ধতির জন্য পর্যবেক্ষিত মোট সিপিইউ ব্যবহার অন্তর্ভুক্ত করতে চাইতে পারেন। কেবলমাত্র আমি চেষ্টা করেছি raspivid | cvlcএটির একটি এবং এটি 40-50%। লোকেরা কোনও প্রশ্নের পক্ষে আরও ভাল প্রতিক্রিয়া জানাতে পারে যা একটি নির্দিষ্ট চিত্রের উন্নতি করতে তাদেরকে চ্যালেঞ্জ জানায়। এখনই আপনি কেন অনেক কিছু জিজ্ঞাসা করছেন, কেন প্রতিটি কারণ তাত্পর্যপূর্ণ তা ব্যাখ্যা না করেই।
গোল্ডিলকস

উত্তর:


8

বিকল্পগুলি:

  1. raspivid -t 0 -o - | nc -k -l 1234

  2. raspivid -t 0 -o - | cvlc stream:///dev/stdin --sout "#rtp{sdp=rtsp://:1234/}" :demux=h264

  3. cvlc v4l2:///dev/video0 --v4l2-chroma h264 --sout '#rtp{sdp=rtsp://:8554/}'

  4. raspivid -t 0 -o - | gst-launch-1.0 fdsrc ! h264parse ! rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=SERVER_IP port=1234

  5. gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=SERVER_IP port=1234

  6. uv4l --driver raspicam

  7. picam --alsadev hw:1,0

বিবেচনা করার বিষয়গুলি

  • বিলম্বিতা [এমএস] (ক্লায়েন্টকে সার্ভারের চেয়ে আরও এফপিএস চাইতে)
  • সিপিইউ অলস [%] (দ্বারা পরিমাপ করা top -d 10)
  • সিপিইউ 1 ক্লায়েন্ট [%]
  • র‌্যাম [এমবি] (আরইএস)
  • একই এনকোডিং সেটিংস
  • একই বৈশিষ্ট্য
    • শ্রুতি
    • না.দয়া করে পুনঃসংযোগ
    • ওএস স্বতন্ত্র ক্লায়েন্ট (vlc, webrtc, ইত্যাদি)

তুলনা:

            1    2    3    4    5    6    7
latency     2000 5000 ?    ?    ?    ?    1300
CPU         ?    1.4  ?    ?    ?    ?    ?
CPU 1       ?    1.8  ?    ?    ?    ?    ?
RAM         ?    14   ?    ?    ?    ?    ?
encoding    ?    ?    ?    ?    ?    ?    ?
audio       n    ?    ?    ?    ?    y    ?
reconnect   y    y    ?    ?    ?    y    ?
any OS      n    y    ?    ?    ?    y    ?
latency fps ?    ?    ?    ?    ?    ?    ?

1
এই টেবিলের সমস্ত মান " ?" কেন?
লারস্কে

@ অ্যালারসস কারণ কেউ এই 'সম্প্রদায় উইকিতে' ডেটা পরীক্ষা করতে এবং পূরণ করতে আগ্রহী নয়
ব্যবহারকারী ১১৩৩7575৫

6

শুধুমাত্র একটি ব্রাউজারে H264 স্ট্রিম করতে আধুনিক উপায় সঙ্গে UV4L : কোন লেটেন্সি, কোন কনফিগারেশন, ঐচ্ছিক অডিও-র সাথে, ঐচ্ছিক দ্বিমুখী অডিও / ভিডিও। কোনও ম্যাজিক জিস্ট্রিমার সস নেই, তবুও এর ব্যবহার বাড়ানো সম্ভব।


যেহেতু আমি আমার সার্ভার এবং সম্ভাব্য স্মার্টফোনগুলিতে প্রবাহিত করতে চাই, তাই ব্রাউজারে স্ট্রিমিংয়ের প্রয়োজন হয় না। এছাড়াও, ব্রাউজার এতে অতিরিক্ত বিধিনিষেধ আরোপ করতে পারে (যেমন কোনও আরটিএসপি নয়, সম্ভাব্য কোনও টিসিপি না দেওয়া যদি না আপনি ওয়েবআরটিসিটি ব্যবহার করেন তবে তা স্পষ্টভাবে)। তবে ইউভি 4 এল এখনও আশাব্যঞ্জক দেখাচ্ছে। আপনি কী এমন কোনও জায়গায় লিঙ্ক করতে পারবেন যেখানে আমি এটি ব্যবহার করতে পারি / নেটওয়ার্কে স্ট্রিমিংয়ের জন্য এটি থেকে ডেটা বের করতে পারি?
nh2

পবিত্র গরু, আমি মনে করি আমি উদাহরণ পৃষ্ঠাটি পেয়েছি ... এই জিনিসটি সবকিছু করতে সক্ষম হবে বলে মনে হচ্ছে ! আরটিএমপি, আরটিএসপি, এইচটিটিপিএস স্ট্রিমিং, ওয়েবআরটিসি, "রিয়েল-টাইম অবজেক্ট ডিটেকশন অ্যান্ড অবজেক্ট ট্র্যাকিং + ফেস ডিটেকশন" - কী খবর ?? প্রতিটি সহজ কমান্ড লাইন পতাকা আছে uv4l? আমার gstreamer পাইপলাইন এখন বেশ পুরানো দেখাচ্ছে! বিলম্বতা কেমন তা পরীক্ষা করতে অপেক্ষা করতে পারছি না!
nh2

1
ওহ না, এটি বন্ধ উত্স :( এটি আমার মনে থাকা হোম নজরদারি ব্যবহারের জন্য এটি অযোগ্য করে
তোলে

এটি ওয়েবআরটিসি, দ্বি-মুখী ওয়েবআরটিসি সমর্থন করে। বিলম্বিতা হ'ল 200 মিলিয়ন অডিও / ভিডিও, অডিও সম্ভবত কম
প্রিন্সিস

@ এনএইচ 2, লিঙ্কটি নষ্ট হয়ে গেছে বলে মনে হচ্ছে, উদাহরণ পৃষ্ঠার জন্য আপনার কোনও আপডেটেড অবস্থান আছে?
পুনিত সনি

1

1.) h264es নেটওয়ার্ক জুড়ে স্ট্রিমিং (কেবলমাত্র নমুনা)

সার্ভারে:

raspivid -v -a 524 -a 4 -a "rpi-0 %Y-%m-%d %X" -fps 15 -n -md 2 -ih -t 0 -l -o tcp://0.0.0.0:5001

ক্লায়েন্টে:

mplayer -nostop-xscreensaver -nolirc -fps 15 -vo xv -vf rotate=2,screenshot -xy 1200 -demuxer h264es ffmpeg://tcp://<rpi-ip-address>:5001

২) এমজেপেইগটি নেটওয়ার্ক জুড়ে স্ট্রিমিং করছে (কেবলমাত্র নমুনা)

সার্ভারে:

/usr/local/bin/mjpg_streamer -o output_http.so -w ./www -i input_raspicam.so -x 1920 -y 1440 -fps 3

ক্লায়েন্টে:

mplayer -nostop-xscreensaver -nolirc -fps 15 -vo xv -vf rotate=2,screenshot -xy 1200 -demuxer lavf http://<rpi-ip-address>:8080/?action=stream

এটি সমস্ত এমনকি একটি RPi জিরো ডব্লুতেও কাজ করে (সার্ভার হিসাবে কনফিগার করা)


আরে, আপনার উত্তর দেওয়ার জন্য ধন্যবাদ, এর sample onlyঅর্থ কী?
এনএইচ 2

আমি বলতে চেয়েছিলাম 'এটি কেবল উদাহরণ'। আপনি এটি আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে পারেন।
স্পার্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.