最近在研究直播過程中動態(tài)在在主播人臉上添加貼紙,之前推流端使用的是VideoCore,底層是C++實現(xiàn),其Mixer不大好擴展,于是把推流端改用LFLiveKit,因為LFLiveKit支持GPUImage,GPUImage的好處是圖片的處理靈活,可以使用多個濾鏡組合來完成最終的圖片合成。
使用的過程中發(fā)現(xiàn)濾鏡不好擴展,圖片處理在LFVideoCapture中,如果自定義Filter需要修改LFLiveKit的源代碼。于是對源代碼做了一些改動,LFLiveSession提供filter接口,通過設(shè)置filter改變直播中使用的濾鏡。并且提供一個支持水印和任何filter合成的filterGroup——LFFilterWithWaterMaskFilter。
/**
** A filter to process Video from Camera
*/
@property(nonatomic,strong, nullable) GPUImageOutput *filter;
美顏和水印可以通過LFFilterWithWaterMaskFilter 濾鏡合成一個濾鏡,使用方法如下:
- (GPUImageOutput *)myFilter {
if(_myFilter ==nil) {
UIImageView*imageview = [[UIImageViewalloc]initWithFrame:CGRectMake(60,100,65,22)];
imageview.image= [UIImageimageNamed:@"huzi.png"];
LFGPUImageBeautyFilter*beauty = [[LFGPUImageBeautyFilteralloc]init];
LFFilterWithWaterMaskFilter *filter = [[LFFilterWithWaterMaskFilter alloc]initWithWaterMaskView:imageview filter:beauty];
filter.videoSize=self.frame.size;
_myFilter = filter;
}
return_myFilter;
}
具體的使用方法可以看源代碼
BPLiveKitTestDemo
改動后就可以自定義濾鏡了,后續(xù)寫一個檢測人臉,并且根據(jù)眼睛,鼻子,嘴巴位置貼圖的濾鏡,實現(xiàn)類似FaceU的功能。