2008-10-19 5 views
25

में एक एमजेपीईजी वीडियो स्ट्रीम बनाना मेरे पास एक दूरस्थ वीडियो स्रोत से मेरे डेटाबेस में छवियों को जेपीईजी छवियों के रूप में प्रति सेकंड लगभग 5 फ्रेम पर भेजा जा रहा है। मैं यह समझने की कोशिश कर रहा हूं कि उन छवियों को वीडियो प्रारूप में कैसे प्राप्त करें ताकि मैं सिल्वरलाइट पर एक लाइव वीडियो फ़ीड स्ट्रीम कर सकूं।सी #

ऐसा लगता है कि एमजेपीईजी स्ट्रीम बनाने के लिए मुझे लगता है लेकिन मुझे कुछ समस्याएं हैं। सबसे पहले मैं एक HTTP अनुरोध के माध्यम से स्ट्रीम करने की कोशिश कर रहा था इसलिए मेरे पास सॉकेट के साथ सौदा नहीं था लेकिन शायद यह मेरा कोड तोड़ रहा है।

अगर मैं क्यूटी से मेरी स्ट्रीम में सर्फ की कोशिश मैं एक वीडियो त्रुटि मिलती है, मीडिया प्लेयर पहली फ्रेम छवि दिखाता और सिल्वरलाइट :)

दुर्घटनाओं यहाँ है कोड धाराओं कि - के बाद से मैं इस तरह से कर सकते हैं इस्तेमाल किया सामग्री प्रकार केवल एक बार भेजा जाए जब मुझे पता चले कि यह आदर्श नहीं है और मूल कारण हो सकता है। सभी छवियां LINQ2SQL ऑब्जेक्ट के माध्यम से आ रही हैं।

मैंने पहले ही सिल्वरलाइट में छवि नियंत्रण के छवि स्रोत को अपडेट करने का प्रयास किया था लेकिन झिलमिलाहट स्वीकार्य नहीं है। अगर सिल्वरलाइट एमजेपीईजी का समर्थन नहीं करता है तो कोई भी बिंदु जारी नहीं है लेकिन ऐसा लगता है कि ऐसा करता है। मेरे पास H.264 फ्रेम आने की पहुंच है लेकिन यह MP4 के माध्यम से अधिक जटिल लग रहा था।

Response.Clear(); 
    Response.ContentType = "multipart/x-mixed-replace; boundary=--myboundary"; 
    ASCIIEncoding ae = new ASCIIEncoding(); 
    HCData data = new HCData(); 
    var videos = (from v in data.Videos 
       select v).Take(50); // sample the first 50 frames 
    foreach (Video frame in videos) 
    { 
     byte[] boundary = ae.GetBytes("\r\n--myboundary\r\nContent-Type: image/jpeg\r\nContent-Length:" + frame.VideoData.ToArray().Length + "\r\n\r\n"); 
     var mem = new MemoryStream(boundary); 
     mem.WriteTo(Response.OutputStream); 
     mem = new MemoryStream(frame.VideoData.ToArray()); 
     mem.WriteTo(Response.OutputStream); 
     Response.Flush(); 
     Thread.Sleep(200); 
    } 

धन्यवाद!

संपादित करें: मेरे पास फ़ायरफ़ॉक्स में स्ट्रीम स्ट्रीम है इसलिए यदि मैं पृष्ठ पर सर्फ करता हूं तो मुझे वीडियो दिखाई देता है! लेकिन कुछ और प्रारूप स्वीकार नहीं करता है। आईई, एसएल, मीडिया प्लेयर नहीं - कुछ भी नहीं।

+0

क्या आपने कभी यह हल किया है? –

+0

इस विधि का उपयोग नहीं कर रहा है - मैं बस ब्राउज़र में जेएस का उपयोग करके पृष्ठभूमि छवि लोडिंग कर रहा हूं और फिर छवियों को जितनी जल्दी हो सके स्विच कर रहा हूं। ठीक काम किया – typemismatch

+0

आपके पास मूलभूत बातें हैं, यहां एक कार्यान्वयन है @ https://net7mma.codeplex.com/SourceControl/latest – Jay

उत्तर

0

सबसे पहले, फ़ाइलों को अलग करने के लिए अपने mjpeg फ्रेम लिखें। इसके बाद आपको इन्हें फोटोशॉप में खोलने में सक्षम होना चाहिए (यह स्वतंत्र रूप से सत्यापित करेगा कि आप स्ट्रीम को सही ढंग से पार्स कर रहे हैं)। यदि यह विफल हो जाता है, तो शर्त है कि आपके पास अपने छवि डेटा में एम्बेड किए गए HTTP शीर्षलेख हैं।

+0

हां मैंने ऐसा किया है - छवियों को वीडियो से स्वतंत्र अन्य चीज़ों के लिए उपयोग किया जाता है, इसलिए मैं उन्हें देख सकता हूं और वे अच्छे लगते हैं। – typemismatch

+0

क्या इसका मतलब है कि आपने अपने प्रोग्राम द्वारा संभाले जाने के बाद फ्रेम को देखा है? – junkforce

+0

हां - मैं फ़ायरफ़ॉक्स में भी काम कर रहा हूं और मैं सही वीडियो देख सकता हूं लेकिन हां, मैंने छवियों को डिस्क पर एकल जेपीजी फाइलों के रूप में भी लिखा है और वे ठीक हैं। – typemismatch

0

क्या आपने नेट पर मौजूद विभिन्न वेब कैम सेटअप देखे हैं? उनमें से बहुत से झिलमिलाहट के बिना कुछ प्रकार के कम res अद्यतन करते हैं। आपको अपनी समस्या के अतिरिक्त संकेतों के लिए इन प्रकार की साइटों को इंजीनियर करने में सक्षम होना चाहिए।

कुछ साइटें एक जीआईएफ एनीमेशन बनाती हैं, शायद यह एक विकल्प है ताकि उपयोगकर्ता पिछले मिनट या तो देख सकें।

1

मैं एमजेपीईजी स्ट्रीमिंग में एक विशेषज्ञ होने से बहुत दूर हूं, लेकिन स्रोतफर्ज पर mjpg-streamer के स्रोत को देखकर मुझे लगता है कि आपको प्रत्येक फ्रेम को अलग से भेजना चाहिए, उनमें से प्रत्येक के पहले और बाद में सीमा लिखना चाहिए। आपको निश्चित रूप से समापन सीमा में सामग्री-प्रकार नहीं लिखना चाहिए।

2

मैंने बहुत समय पहले एमजेपीईजी (3-4 साल पहले) किया था और मैं अपने सिर को खरोंच कर रहा हूं और विवरण याद रखने की कोशिश कर रहा हूं और मैं बस नहीं कर सकता। लेकिन, यदि यह संभव है, तो मैं कुछ प्रकार की वेबसाइट ढूंढने का सुझाव दूंगा जो एमजेपीईजी सामग्री को स्ट्रीम करता है और वायरशर्क/ईथरियल को फायर करता है और देखता है कि आप तार पर क्या प्राप्त करते हैं। मेरा अनुमान है कि आप कुछ आवश्यक HTTP शीर्षलेख खो रहे हैं कि फ़ायरफ़ॉक्स के बारे में और अधिक क्षमा करने वाला है।

यदि आपको इंटरनेट पर नमूना एमजेपीईजी स्ट्रीम नहीं मिल रहा है, तो बहुत से वेब कैम में सॉफ़्टवेयर होता है जो आपको एक एमजेपीईजी स्ट्रीम देता है। जिस ऐप पर मैंने काम किया था वह कई सुरक्षा कैमरों के लिए एक कंसोल था, इसलिए मुझे पता है कि सभी प्रकार के कैमरों के लिए एक आम कार्यान्वयन है (यदि वे एक वेब इंटरफेस का समर्थन करते हैं)।

0

आपके संपादन के बारे में: एमजेपीईजी फ़ायरफ़ॉक्स और सफारी द्वारा समर्थित है। हालांकि अन्य अनुप्रयोग, एक्सप्लोरर या सिल्वरलाइट की तरह नहीं हैं, इसके आधार पर आप इसके साथ क्या कर रहे हैं।