? ? ? ?最近因?yàn)閳F(tuán)隊(duì)需要,所以抽空研究了一下iOS的錄屏功能,找到的資料很少,但是還是挺有用的,需要感謝大家的分享精神。我在這里就只想說一下需要注意的幾點(diǎn)問題。
1、由于我自建的項(xiàng)目是ARC模式的,所以在引入別人的“畫板”是MRC的相關(guān)代碼時(shí),編譯不過,因?yàn)榧嫒輪栴},所以需要在Cocoapods的配置文件里面使用代碼更改,或者也可以在"Build Phases"設(shè)置中引入相關(guān)的文件(這種方式請(qǐng)百度)。下面是我配置的相關(guān)代碼截圖:

2、在音頻和視頻合成的方法里面,根據(jù)本地路徑讀取到文件后,需要先哪array判斷下,不然在某一個(gè)條件為空的情況下會(huì)引起崩潰。如下:

3、錄制成功后合成的文件大小決定關(guān)鍵presetName參數(shù),我設(shè)置AVAssetExportPreset1280x720就已經(jīng)足夠,因?yàn)楹罄m(xù)要做成SDK給別人使用,所以我提供變量給別人傳遞,但是必須要用系統(tǒng)定義的,否則后果自負(fù)。

4、錄制音頻的格式要跟配置的參數(shù)一一對(duì)應(yīng),否則錄制失敗。比如wav格式的文件設(shè)置格式是kAudioFormatLinearPCM,caf的采樣頻率必須為kAudioFormatMPEG4AAC。當(dāng)然這兩種音頻格式都可以合成MP4或者M(jìn)OV文件。

5、錄制畫面幀傳遞的size=self.captureLayer.bounds.size很關(guān)鍵,創(chuàng)建畫布的時(shí)候取size的大小,但是設(shè)置視頻參數(shù)用 videoSize = CGSizeMake(tmpsize.width*scaleFactor, tmpsize.height*scaleFactor);其中float scaleFactor = [[UIScreen mainScreen] scale]; ?如下:



如果這些地方不設(shè)置對(duì)的話會(huì)導(dǎo)致播放的畫面發(fā)送拉扯擠壓,或者是后面CFDataGetBytes(image, CFRangeMake(0, CFDataGetLength(image)), destPixels)方法發(fā)生崩潰。
6、就是真機(jī)播放MP4文件的問題,如果平板或者手機(jī)上有下載“王者榮耀”的游戲,請(qǐng)先關(guān)掉再重啟系統(tǒng),不然沒法播放你錄制的視頻文件。
就寫到這里,放假了,有不對(duì)的地方歡迎指正。
錄屏Demo? 這是錄屏Demo,聲明非我原創(chuàng),我只是做了調(diào)整和修改,給有需要的童鞋!