2014-09-25 9 views
8

प्रदर्शित करता है मैं अपने ज्ञान को साझा करना चाहता हूं जो मैंने इसके बारे में कुछ दिनों में किया था। इसके बारे में बहुत कुछ नहीं है।कैसे AVSampleBufferDisplayLayer H.264

मैं अभी भी ध्वनि के बारे में चिंतित हूं। टिप्पणियों और सुझावों का स्वागत है। ;-)

उत्तर

11

यहां मेरे कोड स्निपेट्स। पहले सेट अप के समय घोषित यह

@property (nonatomic, retain) AVSampleBufferDisplayLayer *videoLayer; 

वीडियो परत

self.videoLayer = [[AVSampleBufferDisplayLayer alloc] init]; 
self.videoLayer.bounds = self.bounds; 
self.videoLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); 
self.videoLayer.videoGravity = AVLayerVideoGravityResizeAspect; 
self.videoLayer.backgroundColor = [[UIColor greenColor] CGColor]; 

//set Timebase 
CMTimebaseRef controlTimebase; 
CMTimebaseCreateWithMasterClock(CFAllocatorGetDefault(), CMClockGetHostTimeClock(), &controlTimebase); 

self.videoLayer.controlTimebase = controlTimebase; 
CMTimebaseSetTime(self.videoLayer.controlTimebase, CMTimeMake(5, 1)); 
CMTimebaseSetRate(self.videoLayer.controlTimebase, 1.0); 

// connecting the videolayer with the view 

[[self layer] addSublayer:_videoLayer]; 

अधिक जानकारी के लिए परत

__block AVAssetReaderTrackOutput *outVideo = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:video outputSettings:dic]; 

if([assetReaderVideo startReading]) 
{ 
    [_videoLayer requestMediaDataWhenReadyOnQueue: assetQueue usingBlock: ^{ 
     while([_videoLayer isReadyForMoreMediaData]) 
     { 
      CMSampleBufferRef *sampleVideo = [outVideo copyNextSampleBuffer]; 

      [_videoLayer enqueueSampleBuffer:sampleVideo.data]; 
     } 
    }]; 
} 

करने के लिए वीडियो डेटा प्रदान: WWDC 2014 में सत्र 513 बहुत जानकारीपूर्ण है।

+0

इस उत्तर में कोड के एक स्वैच्छिक अनुपलब्ध है, जैसा कि अगले उत्तर से संकेत दिया गया है। जैसा कि है, यह किसी के लिए काम नहीं करेगा। –

+0

न केवल कोड गायब है, लेकिन यह गलत है। CMSampleBuffer के लिए कोई डेटा प्रॉपर्टी नहीं है, इसलिए sampleBuffer.data को कोई समझ नहीं आता है। –

+0

डेटा को पढ़ने वाले आउटविडियो के माध्यम से दूसरे स्निपेट में डेटा प्रदान किया जाता है। आपको डब्ल्यूडब्ल्यूडीसी सत्र 513/2014 पहले देखना चाहिए ... – Karsten

2

मैं इसका प्रयास कर रहा हूं लेकिन यह पता लगा रहा हूं कि AVSampleBufferDisplay Layer पर कोई छवि नहीं है।

मैं एक कच्चे बाइट धारा से NALUnits बना सकते हैं और IDR गुजरती हैं और का उपयोग कर गैर IDR स्लाइस:

if ([avLayer isReadyForMoreMediaData]) { 
     [avLayer enqueueSampleBuffer:sampleBuffer]; 
} 

कोई त्रुटि स्थिति EnqueueSampleBuffer से लौटे तो जहां यह जा रहा है पता लगाने के लिए मुश्किल हो सकता है है गलत।

+0

विवरण के लिए डब्ल्यूडब्ल्यूडीसी 2014 से सत्र 513 बेहतर चेकआउट करें। समस्या के रूप में CMSampleBufferRef प्रदान करने की समस्या है। – Karsten

+0

आप मेरे द्वारा प्रदान किए गए स्रोत कोड पर एक नज़र डाल सकते हैं। [एक नज़र डालें] (http://stackoverflow.com/questions/25980070/how-to-use-avsamplebufferdisplaylayer-in-ios-8-for-rtp-h264-streams-with-gstream) – Zappel

+0

मुझे कुछ सफलता मिली AVSampleBufferDisplayLayer, क्या किसी ने प्लेबैक में किसी भी प्रकार का जिटर अनुभव किया है (आमतौर पर जब एक आईफ्रेम आता है)? मैंने चिकनी प्लेबैक के लिए बफर के साथ प्रयोग किया है लेकिन बहुत अधिक सफलता नहीं मिली है। मैंने नमूनाबफर में टाइमिंगइन्फो का उपयोग करने के लिए प्रेजेंटेशनटाइमस्टैम्प के समान बिंदु पर खेलने के लिए भी कोशिश की है, जबकि 'कन्डीडिस्प्ले तुरंत' को गलत पर सेट करना होगा। – Md1079

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