正式開始之前先介紹一下GPUImage,這是一款基于OpenGL ES 2.0的開源圖像處理庫。在iOS上將OpenGL ES的使用封裝成Objective-C接口,可以用來給圖像、相機(jī)視頻、視頻等添加濾鏡等渲染操作。GPUImage一代已經(jīng)不再維護(hù),OC只能給iOS和Mac使用;同時(shí)有GPUImage2使用Swift(基于Swift 3)開發(fā),可以給Mac, iOS和Linux使用;最新的GPUImage3仍在開發(fā)完善中,基于Swift4,并且將OpenGL ES替換成蘋果的Metal,由于是蘋果官方封裝GPU方法,可以預(yù)見會比使用OpenGL ES的性能效率更高。本文使用的仍是第一代GPUImage。
接入GPUImage使用cocoapods直接接入就行,就不再贅述。下面是一個(gè)簡單的濾鏡使用:
GPUImage使用有三個(gè)關(guān)鍵點(diǎn),input, output, filter(filter也是output但主要實(shí)現(xiàn)了濾鏡,所以分開說)。output一般是用來承載圖像內(nèi)容輸出,可以是GPUImageUIElement(通過UIView來創(chuàng)建并承載整個(gè)UIView的內(nèi)容), GPUImagePicture(使用UIImage或者CGImage之類的圖像來創(chuàng)建);filter就是所使用的濾鏡,可以使用GPUImage自帶的比如GPUImageGaussianBlurFilter, GPUImageColorInvertFilter等等,當(dāng)然也可以自建Filter來實(shí)現(xiàn)一些自己所需要的濾鏡,當(dāng)然也需要一些OpenGL的功底;input則是內(nèi)容輸入需要GPUImage進(jìn)行一些處理的,下面用一個(gè)MovieWriter進(jìn)行視頻和一個(gè)動態(tài)畫面進(jìn)行合成來舉例:
使用中第一版沒有提到聲音問題所以沒有發(fā)現(xiàn),第二版需要使用視頻原聲音并錄制進(jìn)去,查了一下可以這樣使用:
錄制開始會有隨機(jī)閃退問題,網(wǎng)上查了一下,大致是因?yàn)?a target="_blank">音頻處理比視頻處理快,當(dāng)音頻處理完直接callback去做渲染處理了,但這時(shí)視頻這幀還沒有加載完成,導(dǎo)致處理失敗崩潰,網(wǎng)上有一個(gè)替換GPUImageMovieWriter.m源文件的方法來規(guī)避這個(gè)問題,但我嘗試了一下仍然會發(fā)生,就不貼出來了。暫時(shí)也沒有更好的辦法來修復(fù)這個(gè)問題,由于時(shí)間緊迫,我采取只傳遞聲音而取消寫入視頻中,使用ffmpeg進(jìn)行音視頻合成(或其他視頻處理工具,因?yàn)楸旧眄?xiàng)目有視頻剪切使用了ffmpeg)。如果以后對這方面有更深入的了解和研究會繼續(xù)更新如何解決這個(gè)問題。
PS: 說個(gè)題外關(guān)于視頻編碼問題,騰訊家的qq和微信SDK分享視頻只能分享網(wǎng)絡(luò)源無法分享本地源,但如果通過蘋果系統(tǒng)自帶的分享則可以分享視頻。最新版部分視頻會發(fā)生視頻壓縮失敗的問題,無法上傳。起先認(rèn)為是視頻編碼問題,通過ffmpeg重新使用h264或者libx264都無法解決;后來發(fā)現(xiàn)那些無法通過騰訊系壓縮的是音頻重新合成過的,所以我對音頻重新編碼,使用的是網(wǎng)絡(luò)上流媒體目前比較通用的aac,結(jié)果讓我大失所望,還是不行!網(wǎng)上也找不到騰訊有關(guān)這兩款分享視頻所需要的編碼問題,而如果我不通過ffmpeg進(jìn)行編輯,原視頻的H.264+aac就是好的,沒有辦法只能采取控制變量法來一個(gè)一個(gè)試編碼。最后測出來是視頻H.264沒有問題,音頻則需要使用ac3來進(jìn)行編碼才能通過。
發(fā)布評論請先 登錄
諧波怎么處理最簡單的方法

看完這篇,SPI其實(shí)也很簡單嘛(可下載)
DAC8832 輸出偏移了0.8V,不知道各位有沒有碰到過類似問題?
EasyExcel碰到問題記錄
使用TXS0108ERGYR做1.8V轉(zhuǎn)3.3V時(shí)碰到A端有數(shù)據(jù)輸入,但是B端沒數(shù)據(jù)輸出,為什么?
TPA3110功放后面的snubber怎么工作的?
TPA3251不小心把GVDD_CD腳和CLIP管腳碰到一起,然后CILP和FAULT指示燈一直亮,管腳一直輸出低電平,什么問題?
TPA3113D2功放在PBTL應(yīng)用過程中碰到芯片發(fā)熱,聲音無輸出現(xiàn)象,怎么解決?
求助,關(guān)于使用TPA3116D2時(shí)碰到的問題求解
簡單了解SDK與APK的區(qū)別
使用MODE引腳進(jìn)行簡單的恒壓調(diào)節(jié)

評論