से एच 264 स्ट्रीम पढ़ें वर्तमान में, मैं अपने कैनन वीबी-एच 710 एफ कैमरे से एक वीडियो पढ़ने के लिए ओपनसीवी का उपयोग करने की कोशिश कर रहा हूं।आईपी कैमरा
समाधान 1:
इस प्रयोजन के लिए मैं दो अलग अलग समाधान की कोशिश की RTSP पता
VideoCapture cam ("rtsp://root:[email protected]/stream/profile1=u");
while(true)
cam >> frame;
से धारा इस मामले मैं opencv उपयोग कर रहा हूँ में पढ़ें सीधे एक धारा H264 में से एन्कोड से पढ़ने के लिए (प्रोफाइल 1), हालांकि यह http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/ की रिपोर्ट की गई एक ही समस्या उत्पन्न करता है जैसा कि पिछले प्रश्न में सुझाया गया है, मैंने ओपनसीवी स्थापना में एफएफएमपीईजी समर्थन को अक्षम करने का प्रयास किया, जिसने एच 264 डिकोडिंग त्रुटियों को हल किया लेकिन अन्य समस्या उठाई। ओपनसीवी के साथ स्ट्रीम तक पहुंचने पर, gstreame द्वारा समर्थित, हमेशा एक बड़ी देरी जुड़ी होती है। इस समाधान के साथ मैं 15 एफपीएस प्राप्त करता हूं लेकिन मुझे 5 सेकंड की देरी है, जो स्वीकार्य नहीं है क्योंकि मुझे वास्तविक समय आवेदन की आवश्यकता है।
समाधान 2: http पते से फ्रेम पढ़ें जबकि (सही) { STARTTIME = System.currentTimeMillis();
URL url = new URL("h t t p://[IP]/-wvhttp-01-/image.cgi");
URLConnection con = url.openConnection();
BufferedImage image = ImageIO.read(con.getInputStream());
showImage(image);
estimatedTime=System.currentTimeMillis()-startTime;
System.out.println(estimatedTime);
Thread.sleep(5);
}
यह रणनीति बस कैमरे द्वारा प्रदान किए गए यूआरएल से फ्रेम को पकड़ती है। कोड जावा में है लेकिन कर्ल लाइब्रेरी के साथ परिणाम सी ++ में समान हैं। यह समाधान पहले समाधान की देरी से बचाता है हालांकि प्रत्येक फ्रेम को पकड़ने के लिए 100 एमएस से थोड़ा अधिक समय लगता है, जिसका अर्थ है कि मैं केवल औसत 10 एफपीएस पर प्राप्त कर सकता हूं।
मैं जानना चाहता हूं कि सी ++ या सी ++ में विकसित दूसरी लाइब्रेरी का उपयोग करके मैं वीडियो कैसे पढ़ सकता हूं?
आपके उत्तर के लिए धन्यवाद। 15 एफपीएस पर वीडियो को सफलतापूर्वक रिकॉर्ड करने में सक्षम होने के बावजूद, यह समाधान मेरे उद्देश्यों के अनुरूप नहीं है, क्योंकि आपके उदाहरण में ffmpeg सिर्फ वीडियो को डीकोडिंग के बिना फ़ाइल में कॉपी करता है और मेरे मामले में मुझे रीयल-टाइम में डीकोड करने की आवश्यकता होती है। –
हां, मैं समझता हूं कि आपको फ्रेम निकालने और प्रत्येक फ्रेम पर प्रसंस्करण करने की आवश्यकता है।Ffmpeg उदाहरण एक परीक्षण है कि इनपुट सिग्नल प्रोसेसिंग के लिए सही है या साथ ही ffmpeg का उपयोग करके सही तरीके से संसाधित किया जा सकता है। जैसा कि आपने सत्यापित किया है, अब आप ffmpeg पुस्तकालयों को संकलित करना शुरू कर सकते हैं, और कोड का उपयोग करके मैन्युअल रूप से फ्रेम को डीकोड करने के लिए ffmpeg lib का उपयोग कर सकते हैं, और फ़्रेम डेटा डिकोडिंग पाइपलाइन में आपके लिए उपलब्ध होगा। इंटरनेट पर विभिन्न ffmpeg विकासशील मैनुअल उपलब्ध हैं। – JasonYang
मैंने पहले से ही कोशिश की है, लेकिन समस्या बनी हुई है क्योंकि मैं अतीत में केवल 2 सेकंड के फ्रेम तक पहुंच सकता हूं (मुझे लगता है कि यह ffmpeg के बफर आकार से संबंधित है)। क्या आप रीयल-टाइम डिकोडिंग को बनाए रखते हुए इस बफर के आकार को कम करने के कुछ तरीके जानते हैं? मैंने पहले से ही वेब की खोज की है लेकिन मुझे कोई समाधान नहीं मिला। फिर से धन्यवाद –