原文鏈接:http://www.lxweimin.com/p/ddb640ac4fec
作者:七牛云
視頻或者音頻完成采集之后得到原始數據,為了增強一些現場效果或者加上一些額外的效果,我們一般會在將其編碼壓縮前進行處理,比如打上時間戳或者公司 Logo 的水印,祛斑美顏和聲音混淆等處理。在主播和觀眾連麥場景中,主播需要和某個或者多個觀眾進行對話,并將對話結果實時分享給其他所有觀眾,連麥的處理也有部分工作在推流端完成。
常見視頻處理功能
1. 美顏
都說「80% 的主播沒有美顏根本沒法看」,美顏是直播產品中最常見的功能之一。最近準備在香港上市的美圖公司的主打產品就是美顏相機和美拍,有媒體戲稱其會沖擊化妝品行業,其實就是美顏的效果的功勞,讓美女主播們不化妝也可以自信的直播,而美顏相機的用戶則可以拍出「更好的自己」。
美顏的主要原理是通過「磨皮+美白」來達到整體美顏的效果。磨皮的技術術語是「去噪」,也即對圖像中的噪點進行去除或者模糊化處理,常見的去噪算法有均值模糊、高斯模糊和中值濾波等。當然, 由于臉部的每個部位不盡相同,臉上的雀斑可能呈現出眼睛黑點的樣子,對整張圖像進行「去噪」處理的時候不需要將眼睛也去掉,因此這個環節中也涉及到人臉和皮膚檢測技術。
七牛直播云提供的 iOS 和 Android 推流 SDK 中內置了美顏功能,你可以根據自己的需要選擇開關美顏功能,并且能夠自由調節包括美顏,美白,紅潤等在內的參數。其中 iOS 端 SDK PLCameraStreamingKit 的參數設置如下:
1)按照默認參數開啟或關閉美顏:
-(void)setBeautifyModeOn:(BOOL)beautifyModeOn;
2)設置美顏程度,范圍為 0 ~ 1:
-(void)setBeautify:(CGFloat)beautify;
3)設置美白程度,范圍為 0 ~ 1
-(void)setWhiten:(CGFloat)whiten;
4)設置紅潤程度,范圍為 0 ~ 1
-(void)setRedden:(CGFloat)redden;
2. 視頻水印
水印是圖片和視頻內容中常見的功能之一,它可用于簡單是版權保護,或者進行廣告設置。處于監管的需求,國家相關部門也規定視頻直播過程中必須打上水印,同時直播的視頻必須錄制存儲下來保存一定的時間,并在錄制的視頻上打上水印。
視頻水印包括播放器水印和視頻內嵌水印兩種方式可供選擇,對于播放器水印來說,如果沒有有效的防盜措施,對于沒有播放鑒權的推流,客戶端拿到直播流之后可以在任何一個不帶水印的播放器里面播放,因此也就失去了視頻保護的能力。綜合考慮云端錄制對于水印的需求,我們一般會選擇「視頻內嵌水印」的方式打水印。
七牛直播云提供的 iOS 和 Android 推流 SDK 中也內置了水印功能,你可以根據自己的需要添加水印或移除水印,并且能夠自由設置水印的大小和位置。其中 iOS 端 SDK PLCameraStreamingKit 的參數設置如下:
1)添加水印
-(void)setWaterMarkWithImage:(UIImage *)wateMarkImage position:(CGPoint)position;
該方法將為直播流添加一個水印,水印的大小由 wateMarkImage 的大小決定,位置由 position 決定,需要注意的是這些值都是以采集數據的像素點為單位的。例如我們使用AVCaptureSessionPreset1280x720 進行采集,同時 wateMarkImage.size 為 (100, 100) 對應的origin 為 (200, 300),那么水印的位置將在大小為 1280x720 的采集畫幅中位于 (200, 300) 的位置,大小為 (100, 100)。
2)移除水印
-(void)clearWaterMark;
3. 濾鏡
除了上面提到的美顏和水印之外,視頻中還有很多其它的處理效果也在這個環節完成。七牛直播云提供的 SDK 在開放性設計基礎之上,通過數據源回調接口,可以支持各種自定義濾鏡的接入。
為了實現豐富的濾鏡效果,在 iOS 端可以考慮使用 GPUImage 這個庫,這是一個開源的基于GPU的圖片或視頻的處理框架,內置了多達120多種常見的濾鏡效果。有了它,添加實時的濾鏡只需要簡單地添加幾行代碼,還可以基于這個庫自己寫算法實現更豐富端效果。GPUImage 地址:https://github.com/BradLarson/GPUImage
除了 iOS 端之外,Android 也有 GPUImage 這個庫的移植:https://github.com/CyberAgent/android-gpuimage同時,Google 官方也開源了一個偉大的庫,覆蓋了 Android 上面很多多媒體和圖形圖像相關的處理:https://github.com/google/grafika