2010-10-19 16 views
29

मै मैक पर चल रहे ऐप में एक आईफोन कैमरा से वीडियो स्ट्रीम करना चाहता हूं। वीडियो चैट की तरह सॉर्टा सोचें, लेकिन डिवाइस से एक रिसीवर ऐप तक केवल एक ही तरीका (और यह वीडियो चैट नहीं है)।स्ट्रीमिंग आईफोन वीडियो कैमरा डेटा को कंप्यूटर पर सर्वश्रेष्ठ तकनीक कौन सी तकनीक है?

मेरे बुनियादी समझ अब तक:

  1. आपने किसी फ़ाइल का सहेजे बिना 'जी' वीडियो कैमरा डेटा प्राप्त करने के AVFoundation के उपयोग कर सकते हैं, लेकिन यह असंपीड़ित डेटा है और इस तरह मैं अपने दम पर संपीड़न को संभालने के लिए होगा ।
  2. नेटवर्क स्थान पर भेजने के लिए AVCaptureOutput समर्थन में कोई भी निर्मित नहीं है, मुझे अपने आप को इस बिट को बाहर करना होगा।

क्या मैं उपरोक्त के बारे में सही हूं या क्या मैं पहले से ही ऑफ-ट्रैक हूं?

Apple Tech Q&A 1702 व्यक्तिगत फ्रेम को छवियों के रूप में सहेजने पर कुछ जानकारी प्रदान करता है - क्या यह इस बारे में जाने का सबसे अच्छा तरीका है? बस 30fps को बचाने और फिर कुछ को ffmpeg को संपीड़ित करने के लिए?

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

+2

हाय.क्या आपने इस कार्यक्षमता को लागू किया है? कृपया इसे यहां उत्तर दें या मुझे मेरे प्रोजेक्ट – Ramz

+0

में ऐसा करने के लिए कुछ लिंक दें, क्या आप http://stackoverflow.com/questions/40079842/ios- घुमाएं-फ़िल्टर-वीडियो-स्ट्रीम-इन-आईओएस या अपने कामकाजी नमूना कोड के साथ मेरी मदद कर सकते हैं :) –

उत्तर

19

यह आपके लक्षित रिज़ॉल्यूशन पर निर्भर करता है और आप किस प्रकार के फ्रेम दर प्रदर्शन को लक्षित कर रहे हैं।

एक अमूर्त दृष्टिकोण से, मेरे पास शायद AVCaptureOutput से बफर भरने के लिए एक कैप्चर थ्रेड होगा, और एक पूर्ववर्ती निर्दिष्ट मेजबान को प्रत्येक x में बफर (यदि आवश्यक हो तो गद्देदार) भेजने और पुन: उत्पन्न करने के लिए एक संचार थ्रेड होगा मिलीसेकंड।

प्रारंभिक डेटा स्थानांतरण पूरा करने के बाद, मैं सबसे कम रिज़ॉल्यूशन पर 15fps प्राप्त करने पर काम करता हूं, और संचार धागा संचारित होने से पहले बफर ओवरफ़्लो तक काम करता है, जिसके लिए संतुलन छवि संकल्प, बफर आकार (संभवतः पर निर्भर जीएसएम, और जल्द ही सीडीएमए फ्रेम आकार होने के लिए), और अंत में अधिकतम दर जिस पर आप उस बफर को प्रेषित कर सकते हैं।

+0

मैं ऑडियो और वीडियो फ्रेम दोनों को कैसे प्रेषित कर सकता हूं? –

24

कच्चे संपीड़ित फ्रेम को कैप्चर करने के लिए आप AVCaptureVideoDataOutput और sampleBufferDelegate का उपयोग कर सकते हैं, तो आपको बस उन्हें नेटवर्क पर स्ट्रीम करने की आवश्यकता है। AVFoundation स्थानीय वीडियो फ़ाइलों में फ़्रेम को एन्कोड करने के लिए एक एपीआई प्रदान करता है, लेकिन नेटवर्क पर स्ट्रीमिंग के लिए कोई भी प्रदान नहीं करता है। आपकी सबसे अच्छी शर्त एक लाइब्रेरी ढूंढना है जो नेटवर्क पर कच्चे फ्रेम को स्ट्रीम करती है। मैं ffmpeg के साथ शुरू होगा; मेरा मानना ​​है कि libavformat RTSP का समर्थन करता है, ffserver कोड को देखो।

ध्यान दें कि आपको संकुचित फ्रेम देने के लिए AVCaptureVideoDataOutput कॉन्फ़िगर करना चाहिए, इसलिए आप हार्डवेयर एन्कोडिंग के लाभ के बिना कच्चे वीडियो फ्रेम को संपीड़ित करने से बचें।

+0

इनमें से दोनों अच्छे सहायक उत्तर थे। फैसला करना मुश्किल था। धन्यवाद! – Hunter

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