ठीक है, अगर आप अपने क्लाइंट को mjpeg स्ट्रीम देखना चाहते हैं, तो आपको संपूर्ण http प्रतिक्रिया भेजनी होगी।
HTTP/1.1 200 OK
Content-Type: multipart/x-mixed-replace; boundary=myboundary
--myboundary
Content-Type: image/jpeg
Content-length: 12345
[image 1 encoded jpeg data]
--myboundary
Content-Type: image/jpeg
Content-length: 45678
[image 2 encoded jpeg data]
...
नोट:: Ergousha के रूप में एक जवाब में कहा, आप सामग्री-लंबाई क्षेत्र के बाद एक खाली पंक्ति होना आवश्यक है ब्राउज़र या वीएलसी मीडिया प्लेयर की तरह की तरह HTTP ग्राहक एक mjpeg धारा है कि तरह लग रहा है की जरूरत है।
वैसे, क्यों अपने क्लाइंट को सीधे mjpeg स्ट्रीम पर रीडायरेक्ट नहीं करें?
उदाहरण के लिए आप http://ipcam/mjpg/video.mjpg एक्सिस आईपी कैमरे का उपयोग कर सकते हैं।
यदि आपको केवल HTTP के माध्यम से छवि की आवश्यकता है, तो आपको सही शीर्षलेख और MIME सामग्री-प्रकार छवि/जेपीईजी सेट करना होगा। छवि को डीकोड करने के लिए, आपको बाइट डेटा प्राप्त करना होगा और आपको जेपीईजी एन्कोडिंग मिल जाएगी। फिर आपको एक विशिष्ट प्रारूप में एक छवि प्राप्त करने के लिए जेपीईजी को डीकोड करना होगा (कुछ ऐसा लगता है जैसे yuv420p मुझे लगता है)। मैंने अपने आईपी कैमरे पर जांच की है, और इसकी स्ट्रीम बेस 64 एन्कोडेड नहीं है जो मुझे लगता है।
अपनी ज़रूरतों को पूरा करें, मैं और अधिक मदद करने की कोशिश करूंगा।
my2c
संपादित करें:
client : connect to proxy,
get example.com/camera1.mjpg,
while not the end
recv
yourproxy : wait connection
connect to camera,
get 10.0.0.123/camera1.mjpg
while not the end
recv buffer
copy buffer
send buffer to client
कहना है कि है कि आप अपने ग्राहक के लिए सही हेडर भेजना चाहिए:
ठीक है, मैं आप की तरह कुछ करने लगता है। यह सुनिश्चित करने के लिए कि पैकेट पर जासूसी करने के लिए वायरसहार्क जैसे टूल का उपयोग करें और सुनिश्चित करें कि आपके क्लाइंट ने एचटीटीपी जीईटी जारी करने के बाद आपको सही एमजेपीईजी स्ट्रीम भेज दिया है (जैसा कि मैंने अपनी पोस्ट की शुरुआत में वर्णन किया है ...)
m2c
जो वही है जो मैं करना चाहता हूं। मैं उपयोगकर्ता को सीधे mjpeg स्ट्रीम पर रीडायरेक्ट नहीं कर सकता क्योंकि मेरा एप्लिकेशन रिवर्स प्रॉक्सी के रूप में काम कर रहा है। तो मुझे कैमरे से स्ट्रीम प्राप्त करने की आवश्यकता है और फिर इसे मेरे आवेदन में एक यूआरएल के जवाब के रूप में भेज दें। तो HTTP क्लाइंट http://example.com/camera1 पर कॉल करता है।mjpg मेरा सर्वर अनुरोध को पार करता है और http1//10.1.1.240/mjpg/video.mjpg पर कैमरा 1 को कॉल करता है, फिर मुझे क्लाइंट को प्रतिक्रिया स्ट्रीम करने की आवश्यकता होती है। तो यह वह जगह है जहां मुझे यह पता लगाने में कठिनाई हो रही है कि क्लाइंट को एमजीजीपी को वापस कैसे स्ट्रीम किया जाए। –
अपनी कठिनाइयों के बारे में अधिक सटीक बनें। अपने कोड स्निपेट को देखते हुए, ऐसा लगता है कि आप प्रतिक्रिया का केवल एक हिस्सा पढ़ते हैं। HTTP/MJPEG के साथ आपको लगातार टीसीपी पैकेट पढ़ने और उन्हें भेजने के लिए, इसलिए मेरे उत्तर में छद्म कोड है। मुझे लगता है कि GetByteArrayFromStream कॉल आंशिक रूप से डेटा को पढ़ता है, इसलिए आप अपने क्लाइंट को केवल आंशिक डेटा भेजते हैं। जब तक यह बंद नहीं हो जाता तब तक आपको टीसीपी चैनल पर पढ़ना होगा! जांचें कि आप क्या प्राप्त करते हैं/वायरसहार्क के साथ आप क्या भेजते हैं, आपके पास जमीन की सच्चाई होगी। अगर मैं आपकी समस्या को गलत समझता हूं, तो इसे सटीक करें, कृपया ... – neuro
हां, मुझे पूरा यकीन है कि हमें थोड़ा गहराई से जाना होगा और 'टीसीपी क्लाइंट' जैसे कम सार तत्वों का उपयोग करना होगा। मैं वर्तमान में @ arri.me जैसा ही काम करने की कोशिश कर रहा हूं! –