首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五)
2012
09-15

Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五)

         两周没有更新博客了,MOMO最近超忙各种加班进行中。。IOS + Android同时开发,激情的日子继续着,蛤蛤。昨天有个朋友打电话告诉我说它们的U3D项目遇到点棘手的难题,他们想在Unity3D中增加截屏录像录音的功能,并且还要能导出保存成.mp4的格式。据我所知Unity3D是没有截屏录像的功能,只有截屏图片的功能。有一段时间没有研究Unity3D的东西了,一时心里痒痒我决定那就好好研究研究,功夫不负有心人终于让我研究出来如何在Unity3D结合IOS前端录制截屏视频的功能了。首先我说说我研究实现的原理。1.截取屏幕每帧的图片,将截取的N张图片组成一个没有声音的视频.mp4文件。2.同时还需要录制手机听筒中的声音保存为.caf格式。3.最终将没有声音的视频和音频组合成一个全新的视频文件,保存在沙盒中即可。

        因为他们的Unity3D项目比较特殊,可以认为是在Unity3D游戏引擎之上搭建的IOS软件项目。Unity3D只负责显示一个3D的模型,至于UI部分全部都是由IOS的前台的OC代码实现的。这样就造成一个问题,OC的代码截图只有UI部分,U3D截图只有3D部分。为了解决这个问题截屏时我们需要把这两张图片合成为一张全新的图片。这里再说一下用苹果私有API截图是可以同时将UI部分U3D部分保存为一张图片,不过有可能APPStore不能审核通过所以大家还是老老实实用合并的方法来做。

OK下面MOMO来说代码的实现过程

首先在Unity中创建一个全新的工程,在创建一个立方体对象,为了方便看效果我们写一条脚本让这个立方体的对象一直自转,这样播放出来的视频看的会比较清楚喔。

Test.cs直接挂在立方体对象之上。代码比较简单我就不解释了。

 

 

然后我们将这个Unity3D工程导出成IOS的项目 。Unity会生成对应的XCODE工程。我们写一个全新的ViewController覆盖在U3D生成的OPGL viewController之上,用于写UI高级控件,接着打开APPControll.mm文件。

在如下方法的末尾处添加代码

如果你不是U3D项目请大家记得引入AVFoundation.formwork 和 MediaPlayer.framework ,因为U3D会自动将这两个fromWork生成出来

 

下面是具体的实现 ,核心的代码MOMO也是在网上学习老外的文章,最终将它们组合在了一起就完成了。研究了好几个小时,真实内牛满面啊~~~~  由于代码比较多,请大家一定要仔细阅读哦。。

 

如下图所示,高级控件的按钮属于UI部分,后面的立方体对象是U3D生成,并且立方体对象在一直的旋转。点击开始截屏按钮时OC 部分 和U3D会每一帧同时截屏,并且此时开始录音。点击结束截屏按钮时,程序先将OC和U3D截屏的图片每一帧两两的组合成一个新图片,然后生成没有声音的视频。 最后将没有声音的视频 和刚刚录制的音频组合成一个全新的视频存在沙盒中即可。

 

Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五) - 雨松MOMO程序研究院 - 1

 

此时我们看一下模拟器中的沙盒文件,”数字”.JPG就是OC截取的图片, “数字+U3D”.JPG就是U3D中截取的图片。Sound.caf就是录制的音频文件,veido.mp4 就是将连续的图片组合成的无声音视频文件,最后的outputVeido.mov就是将无声音的视频文件与音频文件组合成的新视频文件。

 

Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五) - 雨松MOMO程序研究院 - 2

 

双击打开outputVeido.mov视频文件,我们可以直接在QuickTimePlayer中播放它,怎么样功能很给力吧,哈哈哈。U3D也能轻松的实现截屏功能,哈哈哈~~

 

Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五) - 雨松MOMO程序研究院 - 3

 

最后我在说一下,这个代码同时也适用于IOS普通的软件项目中,U3D只是多做了一步合成图片的功能,所有代码都写在MyViewController中请大家仔细看喔。 这两天MOMO还会抽时间研究一下在Android 下如何截屏录制视频,请大家拭目以待噢,哇咔咔。因为U3D生成的工程比较大,所以我就不上传U3D生成的XCODE代码了,我给出一个纯OC代码的下载地址,最后雨松MOMO祝大家学习愉快。

下载地址:http://vdisk.weibo.com/s/cvQOT

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之IOS截屏 话筒录音 录制截屏视频保存沙盒(另类实现方法)(三十五)》有 49 条评论

  1. 求神者 说:

    谢谢分享 ^^
    请问安卓版的录制截屏视频保存沙盒怎么做?
    求大神帮帮我…

  2. 紫雪 说:

    MOMO大神您好,我想问一下:我现在可以实现录视频,但是没有声音,请问声音要怎么录制,因为是多平台开发,所以这个声音的录制不怎么适用,呵呵

  3. 郑大强 说:

    [a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil];
    雨凇您好,这个demo,我在虚拟机上可以跑,但是在真机(ipad mini)上面每次运行到这一句就报错。求解?

  4. 秋风悲画扇 说:

    大神,出个安卓下unity3d的录音录屏吧,谢谢

  5. 张超 说:

    大神,性能怎么样啊, 能把 带U3D的完整demo发下吗?

留下一个回复

你的email不会被公开。