iphone ios 视频特效 将图像插入到视频中(转)
2011-08-31 11:49
351 查看
如果对av foundation 不熟悉得话,建议先看看wwdc 2010 关于av foundation得讲座。http://blog.csdn.net/linzhiji/article/details/6752722
- (CVPixelBufferRef) pixelBufferFromCGImage: (CGImageRef) image andSize:(CGSize) size { NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey, [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey, nil]; CVPixelBufferRef pxbuffer = NULL; CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, size.width, size.height, kCVPixelFormatType_32ARGB, (CFDictionaryRef) options, &pxbuffer); NSParameterAssert(status == kCVReturnSuccess && pxbuffer != NULL); CVPixelBufferLockBaseAddress(pxbuffer, 0); void *pxdata = CVPixelBufferGetBaseAddress(pxbuffer); NSParameterAssert(pxdata != NULL); CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(pxdata, size.width, size.height, 8, 4*size.width, rgbColorSpace, kCGImageAlphaNoneSkipFirst); NSParameterAssert(context); CGContextConcatCTM(context, CGAffineTransformMakeRotation(0)); CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image)), image); CGColorSpaceRelease(rgbColorSpace); CGContextRelease(context); CVPixelBufferUnlockBaseAddress(pxbuffer, 0); return pxbuffer; }
- (void) writeImages:(NSArray *)imagesArray ToMovieAtPath:(NSString *) path withSize:(CGSize) size inDuration:(float)duration byFPS:(int32_t)fps{ //Wire the writer: NSError *error = nil; AVAssetWriter *videoWriter = [[[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie error:&error] autorelease]; NSParameterAssert(videoWriter); NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys: AVVideoCodecH264, AVVideoCodecKey, [NSNumber numberWithInt:size.width], AVVideoWidthKey, [NSNumber numberWithInt:size.height], AVVideoHeightKey, nil]; AVAssetWriterInput* videoWriterInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoSettings] retain]; AVAssetWriterInputPixelBufferAdaptor *adaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:videoWriterInput sourcePixelBufferAttributes:nil]; NSParameterAssert(videoWriterInput); NSParameterAssert([videoWriter canAddInput:videoWriterInput]); [videoWriter addInput:videoWriterInput]; //Start a session: [videoWriter startWriting]; [videoWriter startSessionAtSourceTime:kCMTimeZero]; //Write some samples: CVPixelBufferRef buffer = NULL; int frameCount = 0; int imagesCount = [imagesArray count]; float averageTime = duration/imagesCount; int averageFrame = (int)(averageTime * fps); for(UIImage * img in imagesArray) { buffer = [self pixelBufferFromCGImage:[img CGImage] andSize:size]; BOOL append_ok = NO; int j = 0; while (!append_ok && j < 30) { if (adaptor.assetWriterInput.readyForMoreMediaData) { printf("appending %d attemp %d\n", frameCount, j); CMTime frameTime = CMTimeMake(frameCount,(int32_t) fps); float frameSeconds = CMTimeGetSeconds(frameTime); NSLog(@"frameCount:%d,kRecordingFPS:%d,frameSeconds:%f",frameCount,fps,frameSeconds); append_ok = [adaptor appendPixelBuffer:buffer withPresentationTime:frameTime]; if(buffer) [NSThread sleepForTimeInterval:0.05]; } else { printf("adaptor not ready %d, %d\n", frameCount, j); [NSThread sleepForTimeInterval:0.1]; } j++; } if (!append_ok) { printf("error appending image %d times %d\n", frameCount, j); } frameCount = frameCount + averageFrame; } //Finish the session: [videoWriterInput markAsFinished]; [videoWriter finishWriting]; NSLog(@"finishWriting"); }
相关文章推荐
- iphone ios 视频特效 将图像插入到视频中(转)
- iphone ios 视频特效,视频合成
- iphone ios 图像/视频处理
- iphone ios 图像/视频处理
- iphone ios 音频添加,合成,替换到视频(里的音轨)
- iphone ios取出视频的每一帧图片(关键帧,AVAssetImageGenerator)
- iOS开发--iPhone图像存储的几种类…
- 【无限互联】iOS开发视频教程—1.iPhone开发概述——必看
- iPhone与iPad开发实战——iOS 经典应用剖析--实战视频
- iphone ios取出视频的每一帧图片(关键帧,AVAssetImageGenerator)
- UIImagePickerController 图像选取器--在iPhone中调用照相机、照片库—IOS开发
- [iOS] iphone检测耳机插入/拔出
- 【无限互联】iOS开发视频教程—2.1 iPhone开发之开发工具安装及介绍
- iOS超全开源框架、项目和学习资料汇总--数据库、缓存处理、图像浏览、摄像照相视频音频篇
- iOS 视频格式获取第一帧图像
- iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像
- iphone ios 音频添加,合成,替换到视频(里的音轨)
- ios根据视频地址获取某一帧的图像
- 【备忘】IOS(iPhone)开发中级视频教程下载
- iOS 获取视频的任意一帧图像