最近在研究直播过程中动态在在主播人脸上添加贴纸,之前推流端使用的是VideoCore,底层是C++实现,其Mixer不大好扩展,于是把推流端改用LFLiveKit,因为LFLiveKit支持GPUImage,GPUImage的好处是图片的处理灵活,可以使用多个滤镜组合来完成最终的图片合成。
使用的过程中发现滤镜不好扩展,图片处理在LFVideoCapture中,如果自定义Filter需要修改LFLiveKit的源代码。于是对源代码做了一些改动,LFLiveSession提供filter接口,通过设置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
改动后就可以自定义滤镜了,后续写一个检测人脸,并且根据眼睛,鼻子,嘴巴位置贴图的滤镜,实现类似FaceU的功能。
网友评论