ios 图片转视频

转自:http://blog.iosxcode4.com/archives/160

用到的FrameWork有:

MediaPlayer.framework,QuartzCore.framework,CoreVideoframework,CoreMedia.framework,AVFoundation.framework

代码如下:

- (CVPixelBufferRef
)pixelBufferFromCGImage:(CGImageRef)image size:(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,
kCGImageAlphaPremultipliedFirst);
NSParameterAssert(context);

CGContextDrawImage(context, CGRectMake(0, 0, CGImageGetWidth(image),
CGImageGetHeight(image)), image);

CGColorSpaceRelease(rgbColorSpace);
CGContextRelease(context);

CVPixelBufferUnlockBaseAddress(pxbuffer, 0);

return pxbuffer;
}

- (IBAction)testCompressionSession
{
NSString *moviePath = [[NSBundle
mainBundle] pathForResource:@”Movie” ofType:@”mov”];

CGSize size = CGSizeMake(320,400);//定义视频的大小

NSError *error = nil;

unlink([betaCompressionDirectory UTF8String]);

//—-initialize compression engine
AVAssetWriter *videoWriter =
[[AVAssetWriter alloc] initWithURL:[NSURL
fileURLWithPath:betaCompressionDirectory]
fileType:AVFileTypeQuickTimeMovie
error:&error];
NSParameterAssert(videoWriter);
if(error)
NSLog(@”error
= %@”, [error localizedDescription]);

NSDictionary *videoSettings = [NSDictionary
dictionaryWithObjectsAndKeys:AVVideoCodecH264, AVVideoCodecKey,
[NSNumber
numberWithInt:size.width], AVVideoWidthKey,
[NSNumber
numberWithInt:size.height], AVVideoHeightKey, nil];
AVAssetWriterInput
*writerInput = [AVAssetWriterInput
assetWriterInputWithMediaType:AVMediaTypeVideo
outputSettings:videoSettings];

NSDictionary *sourcePixelBufferAttributesDictionary = [NSDictionary
dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_32ARGB],
kCVPixelBufferPixelFormatTypeKey, nil];

AVAssetWriterInputPixelBufferAdaptor *adaptor =
[AVAssetWriterInputPixelBufferAdaptor
assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput
sourcePixelBufferAttributes:sourcePixelBufferAttributesDictionary];
NSParameterAssert(writerInput);
NSParameterAssert([videoWriter
canAddInput:writerInput]);

if ([videoWriter canAddInput:writerInput])
NSLog(@”
“);
else
NSLog(@” “);

[videoWriter addInput:writerInput];

[videoWriter startWriting];
[videoWriter
startSessionAtSourceTime:kCMTimeZero];

//合成多张图片为一个视频文件
dispatch_queue_t dispatchQueue =
dispatch_queue_create(“mediaInputQueue”, NULL);
int __block frame = 0;

[writerInput requestMediaDataWhenReadyOnQueue:dispatchQueue
usingBlock:^{
while ([writerInput
isReadyForMoreMediaData])
{
if(++frame >= [imageArr
count]*10)
{
[writerInput markAsFinished];
[videoWriter
finishWriting];
[videoWriter release];
break;
}

CVPixelBufferRef buffer = NULL;

int idx = frame/10;

buffer = (CVPixelBufferRef)[self pixelBufferFromCGImage:[[imageArr
objectAtIndex:idx] CGImage] size:size];

if (buffer)
{
if(![adaptor appendPixelBuffer:buffer
withPresentationTime:CMTimeMake(frame,
10)])
NSLog(@”FAIL”);
else
CFRelease(buffer);
}

}
}];
}

时间: 2024-11-06 03:52:18

ios 图片转视频的相关文章

iOS选取相册中iCloud云上图片和视频的处理

关于iOS选取相册中iCloud云上图片和视频 推荐看:TZImagePickerController的源码,这个是一个非常靠谱的相册选择图片视频的库 .当然也可以自己写 如下遇到的问题 工作原因,需要处理接入一个视频模块,在视频选择的时候遇到了一个不太容易发现的bug,产生的原因是由于手机内存小,而用户又打开了相册同步iCloud, 加载中的图片 在这时,如果本地可用内存过小,会导致将本地相册中的图片或视频删除只留缩略图,如果App调用的时候想要选取这种图片就需要从iCloud云中进行下载,才

iOS开发——项目实战总结&类微信朋友圈发动态功能初步-图片与视频上传

类微信朋友圈发动态功能初步-图片与视频上传 最近在做一个新的项目,涉及到了关于图片和视频上传和显示的功能,研究了一段时间,总结一下. 使用AFNetworking上传图片(可一次上传多张图片,包含不同类型png, jpeg)和视频 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 2 3 AFHTTPRequestOperation *operation = [manager P

iOS开发之获取系统相册中的图片与视频(内带url转换)

@话不多说,直接上代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

iOS中图片与视频一次性多选

http://www.cnblogs.com/v2m_/archive/2012/12/21/2827324.html 一.使用系统的Assets Library Framework这个是用来访问Photos程序中的图片和视频的库.其中几个类解释如下 ALAsset ->包含一个图片或视频的各种信息 ALAssetRepresentation ->得到ALAsset的各种信息 ALAssetsFilter ->用来从一个ALAssetsGroup中检索ALAssets ALAssetsG

摘录 :iOS下音视频通信的实现-基于WebRTC

原文出自:http://www.cocoachina.com/ios/20170306/18837.html ,为了方便记忆,转载,如原作者不同意转载,邮件通知,立即删除 前言: WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,简而言之它是一个支持网页浏览器进行实时语音对话或视频对话的技术. 它为我们提供了视频会议的核心技术,包括音视频的采集.编解码.网络传输.显示等功能,并且还支持跨平台:windows,linux,mac,android,i

Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). 回顾:Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上) 连接网络摄像头 正如上文所提,我们选用一款简单的D-Link DCS-7010L网络摄像头.关键原因在于它支持RTSP协议,因此服务

Android IOS WebRTC 音视频开发总结(六八)-- Google: What's next for WebRTC

本文主要从用户,公司和技术角度分析美女视频直播这个行业,文章最早发表在我们的微信公众号上,支持原创,详见这里, 欢迎关注微信公众号blackerteam,更多详见www.rtc.help Justion和Sarah是google webrtc项目的主要负责人,下面的图片是根据他们分享的内容进行整理的,涉及webrtc进展.优化等方方面面.整理这些资料的过程中我们发现他们对待webrtc还是挺用心的,为webrtc的完善做了很多的工作,谢谢他们! 原始视频时长53分13秒,全英文的,所以我们考虑做

转:?Android IOS WebRTC 音视频开发总结 (系列文章集合)

随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blackerteam 或 webrtcorgcn). callstats是一家做实时通讯性能测阅读全文 posted @ 2016-07-22 08:24

锐动IOS带UI视频编辑SDK

1 编写目的 预期读者: 有视频编辑开发经验或者无经验的,打算或者正在使用"锐动iOS带UI视频编辑SDK"的相关工程师. iOS软件工程师. 产品经理. QA 2 名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1080x720,640x480等. 宽高比:视频分辨率的宽高比,常见的有16:9,4:3,1:1.锐动视频编辑SDK对各宽高比的视频都支持编辑,导出的默认分辨率是1280