关于iOS录屏功能躺过的坑,给有需要的人
最近因为团队需要,所以抽空研究了一下iOS的录屏功能,找到的资料很少,但是还是挺有用的,需要感谢大家的分享精神。我在这里就只想说一下需要注意的几点问题。
1、由于我自建的项目是ARC模式的,所以在引入别人的“画板”是MRC的相关代码时,编译不过,因为兼容问题,所以需要在Cocoapods的配置文件里面使用代码更改,或者也可以在"Build Phases"设置中引入相关的文件(这种方式请百度)。下面是我配置的相关代码截图:
这是一些手动释放的类,把相关路径添加进来2、在音频和视频合成的方法里面,根据本地路径读取到文件后,需要先哪array判断下,不然在某一个条件为空的情况下会引起崩溃。如下:
视频的数组也一样这样判断3、录制成功后合成的文件大小决定关键presetName参数,我设置AVAssetExportPreset1280x720就已经足够,因为后续要做成SDK给别人使用,所以我提供变量给别人传递,但是必须要用系统定义的,否则后果自负。
合成成功后把输入地址传递出去4、录制音频的格式要跟配置的参数一一对应,否则录制失败。比如wav格式的文件设置格式是kAudioFormatLinearPCM,caf的采样频率必须为kAudioFormatMPEG4AAC。当然这两种音频格式都可以合成MP4或者MOV文件。
一定要跟音频扩展名是对应关系5、录制画面帧传递的size=self.captureLayer.bounds.size很关键,创建画布的时候取size的大小,但是设置视频参数用 videoSize = CGSizeMake(tmpsize.width*scaleFactor, tmpsize.height*scaleFactor);其中float scaleFactor = [[UIScreen mainScreen] scale]; 如下:
视频参数配置 画布大小 每一帧的画面的大小如果这些地方不设置对的话会导致播放的画面发送拉扯挤压,或者是后面CFDataGetBytes(image, CFRangeMake(0, CFDataGetLength(image)), destPixels)方法发生崩溃。
6、就是真机播放MP4文件的问题,如果平板或者手机上有下载“王者荣耀”的游戏,请先关掉再重启系统,不然没法播放你录制的视频文件。
就写到这里,放假了,有不对的地方欢迎指正。
录屏Demo 这是录屏Demo,声明非我原创,我只是做了调整和修改,给有需要的童鞋!