美文网首页ios直播
iOS 直播专题3-前置处理

iOS 直播专题3-前置处理

作者: 浪人残风 | 来源:发表于2021-03-21 09:18 被阅读0次

    前置处理

    • 对视频添加美颜、水印、滤镜等
    • 对音频进行混音、消除环境音、声音特效等

    上一篇iOS 直播专题2-音视频采集提到视频采集采用的是GPUImage框架,这个框架集成了很多滤镜效果

    这里主要介绍美颜、水印处理
    处理流程:


    image.png

    美颜

    这里的美颜效果用的是GPUImageBeautyFilter
    功能:

    • 是否开启美颜
    • 美颜程度动态调节
    • 美白程度动态调节
    • 色调饱和度动态调节

    水印

    功能:
    自定义水印的视图UIView

    - (void)reloadFilter {
        [self.filter removeAllTargets];
        [self.blendFilter removeAllTargets];
        [self.uiElementInput removeAllTargets];
        [self.videoCamera removeAllTargets];
        [self.output removeAllTargets];
        [self.cropfilter removeAllTargets];
        
        if (self.beautyFace) { // 开启美颜
            self.output = [[GPUImageEmptyFilter alloc] init];
            self.filter = [[GPUImageBeautyFilter alloc] init];
            self.beautyFilter = (GPUImageBeautyFilter *)self.filter;
        } else { // 不开启美颜
            self.output = [[GPUImageEmptyFilter alloc] init];
            self.filter = [[GPUImageEmptyFilter alloc] init];
            self.beautyFilter = nil;
        }
        
        /// 调节镜像
        [self reloadMirror];
        
        // 480*640 比例为4:3  强制转换为16:9
        if([self.configuration.avSessionPreset isEqualToString:AVCaptureSessionPreset640x480]){
            CGRect cropRect = self.configuration.landscape ? CGRectMake(0, 0.125, 1, 0.75) : CGRectMake(0.125, 0, 0.75, 1);
            self.cropfilter = [[GPUImageCropFilter alloc] initWithCropRegion:cropRect];
            [self.videoCamera addTarget:self.cropfilter];
            [self.cropfilter addTarget:self.filter];
        }else{
            [self.videoCamera addTarget:self.filter];
        }
        
        // 添加水印
        if(self.warterMarkView){
            // filter和uiElementInput同时输出到blendFilter混合通道
            [self.filter addTarget:self.blendFilter];
            /// GPUImageUIElement将waterMarkContentView属性的视图转为纹理,输入到输出源
            [self.uiElementInput addTarget:self.blendFilter];
            
            [self.blendFilter addTarget:self.gpuImageView];
            if(self.saveLocalVideo) {
                [self.blendFilter addTarget:self.movieWriter];
            }
            [self.filter addTarget:self.output];
            [self.uiElementInput update];
        }else{
            [self.filter addTarget:self.output];
            [self.output addTarget:self.gpuImageView];
            if(self.saveLocalVideo) {
                [self.output addTarget:self.movieWriter];
            }
        }
        
        [self.filter forceProcessingAtSize:self.configuration.videoSize];
        [self.output forceProcessingAtSize:self.configuration.videoSize];
        [self.blendFilter forceProcessingAtSize:self.configuration.videoSize];
        [self.uiElementInput forceProcessingAtSize:self.configuration.videoSize];
        
        
        // 输出数据
        __weak typeof(self) _self = self;
        [self.output setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime time) {
            [_self processVideo:output];
        }];
        
    }
    

    项目源码下载

    相关文章

      网友评论

        本文标题:iOS 直播专题3-前置处理

        本文链接:https://www.haomeiwen.com/subject/ptuwcltx.html