2014-10-04 8 views
5

से एच 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 एफपीएस पर प्राप्त कर सकता हूं।

मैं जानना चाहता हूं कि सी ++ या सी ++ में विकसित दूसरी लाइब्रेरी का उपयोग करके मैं वीडियो कैसे पढ़ सकता हूं?

उत्तर

0

व्यक्तिगत रूप से, मेरा सुझाव है कि आप आईपी कैमरों से आरटीएसपी स्ट्रीम पढ़ने के लिए ffmpeg का उपयोग करें, और फिर ffmpeg से डीकोडेड बफर से पढ़ने के लिए ओपनसीवी का उपयोग करें। F.2peg H.264 डिकोडिंग की ओर बहुत अच्छा अनुकूलन है, प्रदर्शन एक महत्वपूर्ण मुद्दा नहीं होना चाहिए।

आप सत्यापित करने के लिए इस सही ढंग से काम कर सकते हैं कि ffmpeg बाइनरी उपयोग कर सकते हैं:

ffmpeg -i "rtsp://root:[email protected]/stream/profile1=u" -vcodec copy -acodec none test.mp4 

test.mp4 सफलतापूर्वक खेला जा सकता है, तो यह निश्चित रूप से ठीक हैं आप अपने प्रोजेक्ट में ffmpeg libs को एकीकृत करने के लिए है।

शुभकामनाएं!

+0

आपके उत्तर के लिए धन्यवाद। 15 एफपीएस पर वीडियो को सफलतापूर्वक रिकॉर्ड करने में सक्षम होने के बावजूद, यह समाधान मेरे उद्देश्यों के अनुरूप नहीं है, क्योंकि आपके उदाहरण में ffmpeg सिर्फ वीडियो को डीकोडिंग के बिना फ़ाइल में कॉपी करता है और मेरे मामले में मुझे रीयल-टाइम में डीकोड करने की आवश्यकता होती है। –

+0

हां, मैं समझता हूं कि आपको फ्रेम निकालने और प्रत्येक फ्रेम पर प्रसंस्करण करने की आवश्यकता है।Ffmpeg उदाहरण एक परीक्षण है कि इनपुट सिग्नल प्रोसेसिंग के लिए सही है या साथ ही ffmpeg का उपयोग करके सही तरीके से संसाधित किया जा सकता है। जैसा कि आपने सत्यापित किया है, अब आप ffmpeg पुस्तकालयों को संकलित करना शुरू कर सकते हैं, और कोड का उपयोग करके मैन्युअल रूप से फ्रेम को डीकोड करने के लिए ffmpeg lib का उपयोग कर सकते हैं, और फ़्रेम डेटा डिकोडिंग पाइपलाइन में आपके लिए उपलब्ध होगा। इंटरनेट पर विभिन्न ffmpeg विकासशील मैनुअल उपलब्ध हैं। – JasonYang

+0

मैंने पहले से ही कोशिश की है, लेकिन समस्या बनी हुई है क्योंकि मैं अतीत में केवल 2 सेकंड के फ्रेम तक पहुंच सकता हूं (मुझे लगता है कि यह ffmpeg के बफर आकार से संबंधित है)। क्या आप रीयल-टाइम डिकोडिंग को बनाए रखते हुए इस बफर के आकार को कम करने के कुछ तरीके जानते हैं? मैंने पहले से ही वेब की खोज की है लेकिन मुझे कोई समाधान नहीं मिला। फिर से धन्यवाद –

0

आप ffmpeg का उपयोग करके प्रत्येक फ्रेम को भी संसाधित कर सकते हैं। आपको अपनी आवश्यकता के अनुसार अपना खुद का फ़िल्टर बनाना होगा। https://trac.ffmpeg.org/wiki/FilteringGuide

4

मैं इसी तरह के मुद्दों से जूझ रहा था और सोचता हूं कि मैंने ओपनसीवी के साथ libVLC का उपयोग करके अपनी कुछ समस्याओं का समाधान किया है। एफएफएमपीईजी को H264 को ठीक से डीकोड करने के मुद्दे नहीं लगते थे, साथ ही नए संस्करण (2.4.11) में पहले से ही एफएफएमपीईजी के लिए टीसीपी फिक्स होना प्रतीत होता था। वैसे भी, मैं विंडोज 7 और 8.1 पर एमएस विजुअल स्टूडियो का उपयोग करता हूं।

विवरण यहां दिए गए हैं: http://answers.opencv.org/question/65932

संबंधित मुद्दे