我正在創建一個應用程序,我們可以在imageView中使用我們的手指進行繪製,同時我們也可以記錄屏幕。 到目前爲止,我已經完成了這些功能,但問題在於視頻錄製完成後,如果我們播放錄製的視頻,手指圖形在視頻中不平滑。iOS繪圖屏幕視頻拍攝不流暢
我沒有使用opengl,圖形在UIImageView上,每0.01秒我們從UIImageView捕獲圖像,並將像素緩衝區追加到AVAssetWriterInputPixelBufferAdaptor對象。
這裏是我用於轉換的UIImage到緩衝器
- (CVPixelBufferRef) pixelBufferFromCGImage:(CGImageRef) image {
CGSize frameSize = CGSizeMake(976, 667);
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
[NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
nil];
CVPixelBufferRef pxbuffer = NULL;
CVPixelBufferCreate(kCFAllocatorDefault, frameSize.width,
frameSize.height, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options,
&pxbuffer);
CVPixelBufferLockBaseAddress(pxbuffer, 0);
void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer);
CGColorSpaceRef rgbColorSpace = CGImageGetColorSpace(image);
CGContextRef context = CGBitmapContextCreate(pxdata, frameSize.width,
frameSize.height, 8, 4*frameSize.width, rgbColorSpace,
kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);
CGContextRelease(context);
CVPixelBufferUnlockBaseAddress(pxbuffer, 0);
return pxbuffer;
}
以下方法在0.01秒一個時間間隔調用代碼
CVPixelBufferRef pixelBufferX = (CVPixelBufferRef)[self pixelBufferFromCGImage:theIM];
bValue = [self.avAdaptor appendPixelBuffer:pixelBufferX withPresentationTime:presentTime];
任何一個可以引導用於視頻採集的改進?
在此先感謝
感謝您的回放,我用CADisplayLink而不是NSTimer嘗試過,但沒有運氣,仍然存在問題。我已經處理了CVPixelBufferCreate的發佈版,我沒有包括有問題的一段代碼。 – Raj 2013-03-20 13:44:09
'CADisplayLink'只有在畫面以精確的屏幕刷新率進入時(即它們也作爲CADisplayLink的一部分進行處理),纔會對您有所幫助。 – 2013-03-20 15:21:49