原文鏈接:http://www.reibang.com/p/ddb640ac4fec
作者:七牛云
視頻或者音頻完成采集之后得到原始數(shù)據(jù),為了增強(qiáng)一些現(xiàn)場(chǎng)效果或者加上一些額外的效果厌处,我們一般會(huì)在將其編碼壓縮前進(jìn)行處理守谓,比如打上時(shí)間戳或者公司 Logo 的水印当悔,祛斑美顏和聲音混淆等處理贤旷。在主播和觀眾連麥場(chǎng)景中祷安,主播需要和某個(gè)或者多個(gè)觀眾進(jìn)行對(duì)話镶摘,并將對(duì)話結(jié)果實(shí)時(shí)分享給其他所有觀眾嗽桩,連麥的處理也有部分工作在推流端完成。
常見(jiàn)視頻處理功能
1. 美顏
都說(shuō)「80% 的主播沒(méi)有美顏根本沒(méi)法看」凄敢,美顏是直播產(chǎn)品中最常見(jiàn)的功能之一碌冶。最近準(zhǔn)備在香港上市的美圖公司的主打產(chǎn)品就是美顏相機(jī)和美拍,有媒體戲稱其會(huì)沖擊化妝品行業(yè)涝缝,其實(shí)就是美顏的效果的功勞扑庞,讓美女主播們不化妝也可以自信的直播,而美顏相機(jī)的用戶則可以拍出「更好的自己」拒逮。
美顏的主要原理是通過(guò)「磨皮+美白」來(lái)達(dá)到整體美顏的效果罐氨。磨皮的技術(shù)術(shù)語(yǔ)是「去噪」,也即對(duì)圖像中的噪點(diǎn)進(jìn)行去除或者模糊化處理滩援,常見(jiàn)的去噪算法有均值模糊栅隐、高斯模糊和中值濾波等。當(dāng)然, 由于臉部的每個(gè)部位不盡相同租悄,臉上的雀斑可能呈現(xiàn)出眼睛黑點(diǎn)的樣子谨究,對(duì)整張圖像進(jìn)行「去噪」處理的時(shí)候不需要將眼睛也去掉,因此這個(gè)環(huán)節(jié)中也涉及到人臉和皮膚檢測(cè)技術(shù)泣棋。
七牛直播云提供的 iOS 和 Android 推流 SDK 中內(nèi)置了美顏功能胶哲,你可以根據(jù)自己的需要選擇開(kāi)關(guān)美顏功能,并且能夠自由調(diào)節(jié)包括美顏潭辈,美白鸯屿,紅潤(rùn)等在內(nèi)的參數(shù)。其中 iOS 端 SDK PLCameraStreamingKit 的參數(shù)設(shè)置如下:
1)按照默認(rèn)參數(shù)開(kāi)啟或關(guān)閉美顏:
-(void)setBeautifyModeOn:(BOOL)beautifyModeOn;
2)設(shè)置美顏程度萎胰,范圍為 0 ~ 1:
-(void)setBeautify:(CGFloat)beautify;
3)設(shè)置美白程度碾盟,范圍為 0 ~ 1
-(void)setWhiten:(CGFloat)whiten;
4)設(shè)置紅潤(rùn)程度,范圍為 0 ~ 1
-(void)setRedden:(CGFloat)redden;
2. 視頻水印
水印是圖片和視頻內(nèi)容中常見(jiàn)的功能之一技竟,它可用于簡(jiǎn)單是版權(quán)保護(hù)冰肴,或者進(jìn)行廣告設(shè)置。處于監(jiān)管的需求榔组,國(guó)家相關(guān)部門也規(guī)定視頻直播過(guò)程中必須打上水印熙尉,同時(shí)直播的視頻必須錄制存儲(chǔ)下來(lái)保存一定的時(shí)間,并在錄制的視頻上打上水印搓扯。
視頻水印包括播放器水印和視頻內(nèi)嵌水印兩種方式可供選擇检痰,對(duì)于播放器水印來(lái)說(shuō),如果沒(méi)有有效的防盜措施锨推,對(duì)于沒(méi)有播放鑒權(quán)的推流铅歼,客戶端拿到直播流之后可以在任何一個(gè)不帶水印的播放器里面播放,因此也就失去了視頻保護(hù)的能力换可。綜合考慮云端錄制對(duì)于水印的需求椎椰,我們一般會(huì)選擇「視頻內(nèi)嵌水印」的方式打水印。
七牛直播云提供的 iOS 和 Android 推流 SDK 中也內(nèi)置了水印功能沾鳄,你可以根據(jù)自己的需要添加水印或移除水印慨飘,并且能夠自由設(shè)置水印的大小和位置。其中 iOS 端 SDK PLCameraStreamingKit 的參數(shù)設(shè)置如下:
1)添加水印
-(void)setWaterMarkWithImage:(UIImage *)wateMarkImage position:(CGPoint)position;
該方法將為直播流添加一個(gè)水印译荞,水印的大小由 wateMarkImage 的大小決定瓤的,位置由 position 決定,需要注意的是這些值都是以采集數(shù)據(jù)的像素點(diǎn)為單位的吞歼。例如我們使用AVCaptureSessionPreset1280x720 進(jìn)行采集圈膏,同時(shí) wateMarkImage.size 為 (100, 100) 對(duì)應(yīng)的origin 為 (200, 300),那么水印的位置將在大小為 1280x720 的采集畫(huà)幅中位于 (200, 300) 的位置篙骡,大小為 (100, 100)本辐。
2)移除水印
-(void)clearWaterMark;
3. 濾鏡
除了上面提到的美顏和水印之外桥帆,視頻中還有很多其它的處理效果也在這個(gè)環(huán)節(jié)完成。七牛直播云提供的 SDK 在開(kāi)放性設(shè)計(jì)基礎(chǔ)之上慎皱,通過(guò)數(shù)據(jù)源回調(diào)接口老虫,可以支持各種自定義濾鏡的接入。
為了實(shí)現(xiàn)豐富的濾鏡效果茫多,在 iOS 端可以考慮使用 GPUImage 這個(gè)庫(kù)祈匙,這是一個(gè)開(kāi)源的基于GPU的圖片或視頻的處理框架,內(nèi)置了多達(dá)120多種常見(jiàn)的濾鏡效果天揖。有了它夺欲,添加實(shí)時(shí)的濾鏡只需要簡(jiǎn)單地添加幾行代碼,還可以基于這個(gè)庫(kù)自己寫(xiě)算法實(shí)現(xiàn)更豐富端效果今膊。GPUImage 地址:https://github.com/BradLarson/GPUImage
除了 iOS 端之外些阅,Android 也有 GPUImage 這個(gè)庫(kù)的移植:https://github.com/CyberAgent/android-gpuimage同時(shí),Google 官方也開(kāi)源了一個(gè)偉大的庫(kù)斑唬,覆蓋了 Android 上面很多多媒體和圖形圖像相關(guān)的處理:https://github.com/google/grafika