2011-01-26 16 views
5

मुझे छवि पर कुछ ओपनसीवी छवि प्रसंस्करण करने के लिए, एक नेटवर्क कैमरे से लाइव एमजेपीईजी फुटेज भेज रहा है जो एक http स्ट्रीम तक पहुंचने और पढ़ने की जरूरत है।सी ++ के भीतर एमजेपीईजी HTTP स्ट्रीम का विश्लेषण कैसे करें?

मैं वीएलसी के माध्यम से कैमरे के फुटेज तक पहुंच सकता हूं, या बस क्रोम या फ़ायरफ़ॉक्स में यूआरएल पर जाकर। लेकिन जब मैं सर्वर लगातार निरंतर फ़ीड भेज रहा हूं, तो मैं प्रोग्रामेटिक रूप से http सर्वर तक कैसे पहुंच सकता हूं और प्रत्येक फ्रेम को अलग कर सकता हूं?

डेटा को केवल HTTP स्वरूपक और जेपीईजी डेटा के बीच लूपिंग के रूप में स्वरूपित किया जाता है। एकमात्र तरीका यह है कि मैं इस बारे में सोचने के बारे में सोच सकता हूं किसी भी तरह से सर्वर से अनुरोध भेज रहा है, डेटा को पार्स कर रहा है, और हेडर को वास्तविक जेपीईजी डेटा से अलग कर रहा है, और बदले में, इसे opencv में पास कर रहा है।

हालांकि, यह बहुत ही दृढ़ता से लगता है और मुझे पूरा यकीन नहीं है कि मैं कहां से शुरू करूंगा। क्या आप लोग जानते हैं कि वहां कोई पुस्तकालय हैं या सिर्फ एक आसान दृष्टिकोण है जो मैं देख रहा हूं, जिससे यह सब आसान हो सकता है?

बहुत बहुत धन्यवाद

उत्तर

5

HTTP डाउनलोड के लिए, आप Libcurl लाइब्रेरी का उपयोग कर सकते हैं।

AFAIK MJPEG प्रारूप एक मानकीकृत प्रारूप नहीं है। इसका वास्तविक बाइट प्रारूप कार्यान्वयन द्वारा भिन्न होता है। लेकिन मूल रूप से जेपीईजी फ़ाइल के साथ delimiters के साथ concatenation। यदि आप एक हेक्स संपादक के साथ बाइट्स देखते हैं तो आप आसानी से प्रत्येक जेपीईजी फ़ाइल को अलग कर सकते हैं।

उदाहरण के लिए, ffmpeg के mjpeg उत्पादन नीचे की तरह संरचित है:

0xff 0xd8 // start of jpeg 
{ ... } // jpeg body 
0xff 0xd9 // end of jpeg 
... 
0xff 0xd8 // start of jpeg 
{ ... } // jpeg body 
0xff 0xd9 // end of jpeg 
... 
+0

https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure – user1742529

1

इस पेज में:

http://thistleshrub.net/www/index.php?controller=posts&action=show&id=2012-05-13DisplayingStreamedMJPEGinJava.txt

जावा के साथ एक MJPEG स्ट्रीम पार्स, मैं दोषरहित जावा में जो परिणाम के साथ इस कार्यान्वित ।

आप सी के साथ उपयोग करने के लिए ++ आप कुछ बातें याद किया लगता है की कोशिश करते हैं: सॉकेट कनेक्शन के टूटने और कैनवास प्रस्तुत करना, libcurl http अनुरोध करने के लिए एक अच्छा विकल्प हो रहा है, लेकिन अभी भी कैनवास लापता, आप भरमार या क्यूटी की तरह कुछ का उपयोग कर सकते हैं।

मैंने कुछ मंचों में पढ़ा है कि ओपनसीवी प्रकार एमजेपीईजी स्ट्रीमर के इनपुट स्ट्रीम को पढ़ सकता है, लेकिन ऐसा लगता है कि उन्हें ओपनसीवी का नवीनतम संस्करण होना चाहिए (स्क्रैच से ओपनसीवी संकलित करना मुश्किल है)।

मुझे आशा है कि यह सहायता होगी।

+0

मैं अपनी साइट को नया यूआरएल अपडेट कर रहा हूं http://thistleshrub.net/www/index.php?controller=posts&action=show&id=2012- 05-13DisplayingStreamedMJPEGinJava.txt – shrub34