2013-06-10 8 views
6

मैं निम्नलिखित का उपयोग कर रहा वीडियो नमूना बफर प्राप्त करने के लिए:हम आईफोन कैमरा से H.264 एन्कोडेड वीडियो स्ट्रीम कैसे प्राप्त कर सकते हैं?

- (void) writeSampleBufferStream:(CMSampleBufferRef)sampleBuffer ofType:(NSString *)mediaType 

अब मेरे सवाल h.264 मैं कैसे प्राप्त कर सकते हैं ऊपर से sampleBuffer इनकोडिंग कि NSData है। कृपया सुझाव दे। 2017

उत्तर

5

अद्यतन:

आप VideoToolbox API का उपयोग करके अब वीडियो और ऑडियो स्ट्रीमिंग कर सकते हैं। प्रलेखन यहां पढ़ें: VTCompressionSession

मूल जवाब (2013 से):

लघु: आप नहीं, नमूना बफर आपको प्राप्त असम्पीडित है सकते हैं।

तरीके हार्डवेयर त्वरित h264 संपीड़न प्राप्त करने के लिए:

तुम दोनों एक फ़ाइल पर लिखने, एक पाइप के लिए लिख एनकोडर अद्यतन के रूप में काम नहीं करता है देख सकते हैं फ्रेम या जीओपी के बाद हेडर जानकारी पूरी तरह से लिखी गई है। इसलिए जब आप एन्कोडर इसे लिखते हैं तो बेहतर फ़ाइल को स्पर्श न करें क्योंकि यह यादृच्छिक रूप से हेडर जानकारी को फिर से लिखता है। इस हेडर जानकारी के बिना वीडियो फ़ाइल बजाने योग्य नहीं होगी (यह आकार फ़ील्ड को अपडेट करती है, इसलिए लिखा गया पहला हेडर कहता है कि फ़ाइल 0 बाइट्स है)। सीधे स्मृति क्षेत्र में लिखना वर्तमान में समर्थित नहीं है। लेकिन आप इनकोडिंग वीडियो फ़ाइल को खोलने और धारा demux ( के बाद एनकोडर निश्चित रूप से फ़ाइल बंद कर दिया है) h264 डेटा को पाने के लिए कर सकते हैं

7

आप केवल या तो BGRA या YUV रंग स्वरूपों में कच्चे वीडियो चित्र AVFoundation से। हालांकि, जब तुम AVAssetWriter के माध्यम से एक mp4 करने के लिए उन फ्रेम लिखते हैं, वे H264 एन्कोडिंग का उपयोग इनकोडिंग किया जाएगा।

कि कैसे करना है पर कोड के साथ एक अच्छा उदाहरण RosyWriter

ध्यान दें कि प्रत्येक AVAssetWriter लिखने के बाद, आपको पता चलेगा कि एक पूरा H264 एनएएल एक mp4 के लिए लिखा गया था। आप कोड है कि AVAssetWriter द्वारा प्रत्येक लिखने, जो आपको एक H264 इनकोडिंग फ्रेम पर पहुँच प्रदान करने जा रहा है के बाद एक पूरी H264 एनएएल पढ़ता लिख ​​सकते हैं। सभ्य गति के साथ इसे सही करने में थोड़ा सा समय लग सकता है, लेकिन यह करने योग्य है (मैंने इसे सफलतापूर्वक किया)।

वैसे, इन एन्कोडेड वीडियो फ्रेम को सफलतापूर्वक डीकोड करने के लिए, आपको H264 SPS और PPS जानकारी की आवश्यकता होगी जो mp4 फ़ाइल में किसी भिन्न स्थान पर स्थित है। मेरे मामले में, मैं वास्तव में कुछ परीक्षण mp4 फ़ाइलों को बना देता हूं, और फिर मैन्युअल रूप से उन निकाले जाते हैं। चूंकि वे परिवर्तित नहीं होते हैं, जब तक आप H264 एन्कोडेड चश्मे को नहीं बदलते, आप उन्हें अपने कोड में उपयोग कर सकते हैं।

SPS values for H 264 stream in iPhone को मेरी पोस्ट की जाँच करें एसपीएस/पी पी एस मैं अपने कोड में प्रयुक्त किया है देखने के लिए।

बस एक अंतिम ध्यान दें, मेरे मामले में मैं डिकोडिंग/देखने के लिए एक और समाप्ति बिंदु को h264 इनकोडिंग फ्रेम स्ट्रीम करने के लिए था, तो मेरे कोड को यह तेजी से करना पड़ा।मेरे मामले में, यह अपेक्षाकृत तेज़ था; लेकिन आखिरकार मैंने एन्कोडिंग/डिकोडिंग के लिए वीपी 8 पर स्विच किया क्योंकि यह तेज़ तरीका था क्योंकि फाइल पढ़ने/लिखने के बिना सब कुछ स्मृति में किया गया था।

शुभकामनाएं, और उम्मीद है कि यह जानकारी मदद करता है।

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