2015-03-27 14 views
10

yılında CMSampleBufferRef Kamera verilerinin güncel yakalanan zaman damgası almak ve i CMSampleBufferRef yakalamak için Ben geliştirilen ve bir dosyaya kamera verilerini yakalanan saklanacağı iOS uygulama iOS

(void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

kullanılmış ve bu kodlar nasıl H264 biçimine ve çerçeveler AVAssetWriter kullanılarak bir dosyaya kaydedilir.

http://www.gdcl.co.uk//2013/02/20/iOS-Video-Encoding.html

Şimdi ben yeni bir film dosyası oluşturmak için kaydedilen video karelerinin damgası almak istiyorum, ben yaptım gelmiş bunun için

:

ben bu uygulamayı oluşturmak için örnek kaynak kodunu takip dosyayı bulmak ve dosyayı

okumak için AVAssestReader oluşturmak aşağıdaki şeyler

1) 10

yazdırılan değer bana yanlış zaman damgası verir ve çerçevenin yakalanan zamanını almam gerekir. i bağlantıyı izleyerek okumak ettik

çerçeve yakalanan zaman damgası almak için herhangi bir yolu var mı

,

o zaman damgası almak için ancak düzgün How to set timestamp of CMSampleBuffer for AVWriter writing

güncelleme yukarıdaki sorumu ayrıntılı değil okuduğum

Bir dosyaya yazmadan önce örnek zaman damgası, bana farklı bir değer verdi, dosya için okumaya çalıştıktan sonra bana bir xxxxx değeri (33333.23232)

verdi ??

+0

@ fireclaw48 Bu bağlantıyı buldum, ama uygun bir cevap vermiyor, bu yeni zaman damgasını ayarlamak olduğunu düşünüyorum –

+0

Aynı sorunu aldım, cevabı aldın mı? –

cevap

2

Dosya zaman damgaları, dosyanın başlangıcına göre oldukları için yakalama zaman damgalarına göre farklıdır. Bu da istediğiniz yakalama damgaları demektir, eksi ilk çerçevenin damgası yakalanan:

CMTime firstCaptureFrameTimeStamp = // the first capture timestamp you see 
CMTime presentationTimeStamp = CMTimeAdd(CMSampleBufferGetPresentationTimeStamp(buffer), firstCaptureFrameTimeStamp); 

: dosyadan okurken

presentationTimeStamp = fileFramePresentationTime + firstFrameCaptureTime 

Yani, bu istediğiniz yakalama damgası hesaplamak gerekir Uygulamanızın lansmanları arasında bu hesaplamayı yaparsanız, CMTimeCopyAsDictionary ve CMTimeMakeFromDictionary ile yapabileceğiniz ilk kare yakalama zamanını serileştirmeniz ve bunlardan vazgeçmeniz gerekir.

AVAssetWriter ürününün metadata özelliği aracılığıyla çıktı dosyasında saklayabilirsiniz.

+0

Cevabınız için teşekkür ederim, bunu kontrol edecek, zaman damgası gerçek zaman damgasına eşit değil, bu değeri yazdım ve web –

+1

iyi soru ile aynı değil, neden zaman damgası yakaladığından emin değilim ' t yakalamaya başladığınız zamana göre (neden _they_ 0'da başlamıyor). –

+0

zaten orada kamera delege yönteminden gerçek zaman damgasına alırken sunum zaman damgasıyla bağlantı kurabilirim, ?? bunun için bir harita kullanmak zorunda mıyım?ama bu bir kaynak atığı gibi görünüyor –