Intereting Posts
NSAttributedString पर पृष्ठभूमि रंग बदल रहा है Xcode 8: प्रत्येक स्कीम के लिए अलग-अलग एंटाइटेलमेंट त्रुटियां पैदा कर रहा है कस्टम वर्ग ऑब्जेक्ट को एनएसडीटा में परिवर्तित करना मैं विशेष रूप से एक विशेष UITextField के लिए रिटर्न कुंजी को प्रोग्राम कैसे सेट करूं? नोटिफिकेशन विजेट से डिवाइस लॉक होने पर पता लगाना UICollectionView में कॉलआउट कॉपी करें इन-हाउस आईओएस एप्लिकेशन को मैनिफेस्ट के साथ वायरलेस रूप से स्थापित करें। प्लिस्ट आईओएस 8 के साथ अब काम नहीं करता है नियंत्रक में प्रोग्रामेटिक रूप से दृढ़ दृश्य बनाम कमजोर उप-दृश्य बनाना आईओएस में पृष्ठभूमि के रूप में वीडियो के लिए सबसे प्रभावी तरीका objc_sync_enter / objc_sync_exit DISPATCH_QUEUE_PRIORITY_LOW के साथ काम नहीं कर रहा है मैं UITableView / UIScrollView की पूरी सामग्री का UIImage कैद कैसे कर सकता हूं और इसे एक आईओएस डिवाइस पर काम कर सकता हूं कस्टम आईओएस पुश अधिसूचना ध्वनि NSDateFormatter अभी भी गलत प्रारूप के बजाय पार्सिंग है एक्सकोड 6.1 / सेगमेंटेशन गलती में 6.0.1 स्विफ्ट प्रोजेक्ट का संग्रह नहीं किया जा सकता: 11 क्या UViewController पर एक UITableViewController का उपयोग करने के लिए कोई लाभ है जो कि tableview प्रतिनिधि और डेटा स्रोत विधियों को लागू करता है?

AVSampleBufferDisplayLayer AVCaptureVideoDataOutput प्रतिनिधि से लिया CMSampleBuffers दिखाना बंद क्यों करता है?

मैं कुछ CMSampleBuffer को AVSampleBufferDisplayLayer के साथ प्रदर्शित करना चाहता हूं, लेकिन यह पहला नमूना दिखाने के बाद फ्रीज करता है।

मैं AVCaptureVideoDataOutputSampleBuffer प्रतिनिधि से नमूना बफर प्राप्त करता हूं:

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { CFRetain(sampleBuffer); [self imageToBuffer:sampleBuffer]; CFRelease(sampleBuffer); } 

उन्हें एक सदिश में डाल दिया

 -(void) imageToBuffer: (CMSampleBufferRef )source{ //buffers is defined as: std::vector<CMSampleBufferRef> buffers; CMSampleBufferRef newRef; CMSampleBufferCreateCopy(kCFAllocatorDefault, source, &newRef); buffers.push_back(newRef); } 

फिर उन्हें AVSampleBufferDisplayLayer (एक अन्य ViewController में) के माध्यम से दिखाने का प्रयास करें

 AVSampleBufferDisplayLayer * displayLayer = [[AVSampleBufferDisplayLayer alloc] init]; displayLayer.bounds = self.view.bounds; displayLayer.position = CGPointMake(CGRectGetMidX(self.displayOnMe.bounds), CGRectGetMidY(self.displayOnMe.bounds)); displayLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; displayLayer.backgroundColor = [[UIColor greenColor] CGColor]; [self.view.layer addSublayer:displayLayer]; self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; dispatch_queue_t queue = dispatch_queue_create("My queue", DISPATCH_QUEUE_SERIAL); [displayLayer setNeedsDisplay]; [displayLayer requestMediaDataWhenReadyOnQueue:queue usingBlock:^{ while ([displayLayer isReadyForMoreMediaData]) { if (samplesKey < buffers.size()) { CMSampleBufferRef buf = buffers[samplesKey]; [displayLayer enqueueSampleBuffer:buffers[samplesKey]]; samplesKey++; }else { [displayLayer stopRequestingMediaData]; break; } } }]; 

लेकिन यह पहले नमूने को दिखाता है तो जमा देता है, और कुछ भी नहीं करता है।

और मेरे वीडियो डेटा आउटपुट सेटिंग्स इस प्रकार हैं:

 //set up our output self.videoDataOutput = [[AVCaptureVideoDataOutput alloc] init]; dispatch_queue_t queue = dispatch_queue_create("VideoQueue", DISPATCH_QUEUE_SERIAL); [_videoDataOutput setSampleBufferDelegate:self queue:queue]; [_videoDataOutput setVideoSettings:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:kCVPixelFormatType_32BGRA],(id)kCVPixelBufferPixelFormatTypeKey, nil]]; 

Solutions Collecting From Web of "AVSampleBufferDisplayLayer AVCaptureVideoDataOutput प्रतिनिधि से लिया CMSampleBuffers दिखाना बंद क्यों करता है?"

मैं इसी समस्या में इसी संदर्भ में आया, जो कि AVCaptureVideoDataOutput से आउटपुट लेने की कोशिश करता है और इसे AVSampleDisplay परत में प्रदर्शित करता है।

यदि आपके फ्रेम प्रदर्शन क्रम में बाहर आते हैं, तो ठीक बहुत आसान है, बस CMSampleBufferRef पर तत्काल ध्वज प्रदर्शित करें

प्रतिनिधि द्वारा वापस नमूना बफर प्राप्त करें और फिर …

 CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES); CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0); CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue); 

यदि आपके फ़्रेम एन्कोडर ऑर्डर में प्रदर्शित होते हैं (ऑर्डर प्रदर्शित नहीं करते हैं), तो CMSampleBuffer पर टाइम स्टैम्प को शून्य पक्षपाती होने की आवश्यकता है और इस तरह पुनरारंभ होता है कि पहली फ्रेम टाइमस्टैम्प समय 0 के बराबर हो।

  double pts = CMTimeGetSeconds(CMSampleBufferGetPresentationTimeStamp(sampleBuffer)); // ptsStart is equal to the first frames presentationTimeStamp so playback starts from time 0. CMTime presentationTimeStamp = CMTimeMake((pts-ptsStart)*1000000,1000000); CMSampleBufferSetOutputPresentationTimeStamp(sampleBuffer, presentationTimeStamp); 

अद्यतन करें:

मैं ऐसी स्थिति में गया जहां कुछ वीडियो अभी भी आसानी से नहीं खेल रहे थे जब मैंने शून्य पूर्वाग्रह विधि का इस्तेमाल किया और मैंने आगे की जांच की। सही जवाब पीटीएस का प्रयोग पहले फ्रेम से करते हुए लगता है जो आप खेलते हैं

मेरा जवाब यहां है, लेकिन मैं इसे यहां पोस्ट भी कर दूंगा।

दर सेट करें जिस पर AVSampleBufferDisplayLayer नमूना बफ़र्स प्रदान करता है

टाइमबेस को पहले फ्रेम के प्रस्तुतीकरण समय स्टैंप (पीटी) में सेट करना होगा, जिसे आप डीकोड करना चाहते हैं। मैं पहले फ्रेम के अंक को 0 के बाद के सभी अंकों से आरंभिक अंक घटाकर 0 से टाइमबेस को सेट करके अनुक्रमणित कर रहा था। जो भी कारण से, कुछ वीडियो के साथ काम नहीं किया।

आप ऐसा कुछ चाहते हैं (डिकोड करने के लिए कॉल करने से पहले कहा जाता है):

 CMTimebaseRef controlTimebase; CMTimebaseCreateWithMasterClock( CFAllocatorGetDefault(), CMClockGetHostTimeClock(), &controlTimebase ); displayLayer.controlTimebase = controlTimebase; // Set the timebase to the initial pts here CMTimebaseSetTime(displayLayer.controlTimebase, CMTimeMake(ptsInitial, 1)); CMTimebaseSetRate(displayLayer.controlTimebase, 1.0); 

CMSampleBuffer के लिए PTS सेट करें …

 CMSampleBufferSetOutputPresentationTimeStamp(sampleBuffer, presentationTimeStamp); 

और शायद यह सुनिश्चित करें कि प्रदर्शन तुरंत सेट नहीं है ….

 CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanFalse); 

यह WWDC 2014 सत्र 513 में बहुत संक्षिप्त रूप से कवर किया गया है।