博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GPUImage之摄像篇
阅读量:7079 次
发布时间:2019-06-28

本文共 2894 字,大约阅读时间需要 9 分钟。

由于摄像和拍照使用的是同一变量.所以这里就不再重新定义了.可以参考拍照篇 首先定义几个变量

    GPUImageMovieWriter * movieWriter; //写入磁盘的    NSMutableDictionary * videoSettings; //字面意思.视频设置    NSDictionary * audioSettings; //声音设置    NSString * moviePath; //视频存储路径复制代码
//视频设置    videoSettings = [[NSMutableDictionary alloc] init];    [videoSettings setObject:AVVideoCodecH264 forKey:AVVideoCodecKey];    [videoSettings setObject:[NSNumber numberWithInteger:1080] forKey:AVVideoWidthKey]; //视频的宽度,这里最好是定义imageCamera时候的宽度    [videoSettings setObject:[NSNumber numberWithInteger:1920] forKey:AVVideoHeightKey]; //视频的高度.同上        //音频设置    AudioChannelLayout channelLayout;    memset(&channelLayout, 0, sizeof(AudioChannelLayout));    channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;        audioSettings = [NSDictionary dictionaryWithObjectsAndKeys:                     [ NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,                     [ NSNumber numberWithInt: 2 ], AVNumberOfChannelsKey,                     [ NSNumber numberWithFloat: 16000.0 ], AVSampleRateKey,                     [ NSData dataWithBytes:&channelLayout length: sizeof( AudioChannelLayout ) ], AVChannelLayoutKey,                     [ NSNumber numberWithInt: 32000 ], AVEncoderBitRateKey,                     nil];        //临时储存路径    moviePath=  [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"Movie.mov"];        NSURL *movieURL = [NSURL fileURLWithPath:moviePath];    //视频写入磁盘初始化.    /*    我这里使用了AVFileTypeQuickTimeMovie  因为我上文使用了mov.    还支持其他,比如AVFileTypeMPEG4 格式为.MP4    AVFileTypeAppleM4V 格式m4v    AVFileTypeAppleM4A 格式m4a    AVFileType3GPP 格式3gp 等..自己可以在AVFoundation/AVMediaFormat中看到        */    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(1080, 1920) fileType:AVFileTypeQuickTimeMovie outputSettings:videoSettings];        [movieWriter setHasAudioTrack:YES audioSettings:audioSettings];    unlink([moviePath UTF8String]); //如果这个路径有文件,删除.也可以使用NSFileManager来进行操作    imageCamera.audioEncodingTarget = movieWriter; //设置声音复制代码

开始录像

    [filter addTarget:movieWriter];    [movieWriter startRecording];复制代码

停止录像

    [filter removeTarget:movieWriter];    //储存到图片库,并且设置回调.    [movieWriter finishRecordingWithCompletionHandler:^{        UISaveVideoAtPathToSavedPhotosAlbum(pathToMovie, self, @selector(videoWithPatch:didFinishSavingWithError:contextInfo:), nil);    }];复制代码

回调代码

- (void)videoWithPatch:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{//使用NSFileManager来进行删除,如果不删除的话,第二次点击会出现崩溃错误.提示AVAssetWriter status为2,或者3.(已完成状态).    NSFileManager* fileManager=[NSFileManager defaultManager];    if([fileManager removeItemAtPath:pathToMovie error:nil]){        NSLog(@"REMOVE");    }else{        NSLog(@"error");    }}复制代码

至此 摄像和拍照 应该已经完结了.恩.如果有问题可以随时联系我,一起研究. 下一篇是裁剪.

转载地址:http://kdvml.baihongyu.com/

你可能感兴趣的文章
思杰的雄心——软件定义的工作空间
查看>>
WS2008R2升级到WS2012的RDS思考
查看>>
将公用文件夹从Exchange2010迁移到 Exchange 2013
查看>>
Windows Server 2012虚拟桌面分辨率支持列表
查看>>
工信部:工业和信息化部办公厅关于印发《云计算综合标准化体系建设指南》的通知...
查看>>
FOSRestBundle功能包:使用指南
查看>>
Centos 7&6分布式lamp平台
查看>>
Microsoft Windows Server 2016 Build 10.0.9926.0下载
查看>>
Configuring Oracle Data Integrator for Cloudera
查看>>
Varnish缓存部署方式及原理详解
查看>>
C语言字符串拷贝strcpy函数的陷阱分析
查看>>
KVM虚拟化开源高可用方案(四)sheepdog
查看>>
排错之网络映射缓存凭证记录导致备份计划任务失败
查看>>
vSphere Data Protection 6.1.2部署与配置
查看>>
PfSense基于BSD的软件防火墙的安装、配置与应用
查看>>
使用shell和expect一键批量分发SSH密钥脚本
查看>>
ESXI上的vm虚拟机文件被锁定无法POWER ON的问题处理
查看>>
《统一沟通-微软-培训》-2-部署-反向代理-2-配置初始的部署设置
查看>>
Exchange Server 2013部署系列之五:在Windows8上部署管理工具
查看>>
“3.15”曝二维码安全漏洞 瑞星呼吁重视WiFi安全
查看>>