美文网首页ios进阶酷
关于iOS录屏功能躺过的坑,给有需要的人

关于iOS录屏功能躺过的坑,给有需要的人

作者: 落叶悠悠 | 来源:发表于2017-04-01 18:33 被阅读304次

           最近因为团队需要,所以抽空研究了一下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,声明非我原创,我只是做了调整和修改,给有需要的童鞋!

    相关文章

      网友评论

      • 呆子是只喵:大佬,录屏ijkplayer的时候,播放的视频无法获取到时什么情况?
      • 小小程序媛之路:请问像素没拉伸了,该怎样改啊
        落叶悠悠:@小小程序媛之路 只录app的声音不录麦克风的声音是什么情况?如果你想禁止录制麦克风的声音,想办法在app运行这个功能时,把麦克风声音禁止
        小小程序媛之路:@落叶悠悠 这个问题,我解决了。不过目前有疑问还没解决,就是录音,不能只录app的声音不录麦克风的声音吗
        落叶悠悠:主要问题是出在视频设置的宽高上,如果你还没解决的话可以参考我上面的demo。
      • 6310ffb20d0c:请问你是用replay框架录制屏幕的吗?如何设置大小
        落叶悠悠:@林思聪 你好,不是用的这个框架。设置视频大小是根据你给的设置参数来确定的。
      • 751fc49dcbfd:能分享下demo?
        落叶悠悠:可以,不过我很久没翻看这些代码了,得找下
      • 大斜的张:楼主 我录制的视频 像素明显被拉伸拖拽了 这种情况你遇到过吗
        小小程序媛之路:@大斜的张 请问你是怎样解决的啊
        大斜的张:已经解决了 谢谢
        落叶悠悠:有遇到过,不知道你现在解决了吗?很抱歉离职之后我没再看过博客,没及时回复你
      • ZHU大仙:renderInContext这方法截屏CPU占用很高啊,楼主
        落叶悠悠:@咖啡鼠_92c2 Demo的链接地址不是写在博客里面了吗?你留意一下底端突出的蓝色字体,点进去就可以跳转的git网站,直接下载好了
        a8ecf099c086:可以求一个 demo 吗?
        落叶悠悠:@图样TY UIGraphicsPushContext(context);
        [self.captureView drawViewHierarchyInRect:self.captureView.bounds afterScreenUpdates:NO];
        UIGraphicsPopContext();
        cpu会降下来,内存也不会暴增

      本文标题:关于iOS录屏功能躺过的坑,给有需要的人

      本文链接:https://www.haomeiwen.com/subject/ietwottx.html