iOS 直播專題3-前置處理

前置處理

  • 對(duì)視頻添加美顏、水印、濾鏡等
  • 對(duì)音頻進(jìn)行混音、消除環(huán)境音、聲音特效等

上一篇iOS 直播專題2-音視頻采集提到視頻采集采用的是GPUImage框架,這個(gè)框架集成了很多濾鏡效果

這里主要介紹美顏、水印處理
處理流程:


image.png

美顏

這里的美顏效果用的是GPUImageBeautyFilter
功能:

  • 是否開啟美顏
  • 美顏程度動(dòng)態(tài)調(diào)節(jié)
  • 美白程度動(dòng)態(tài)調(diào)節(jié)
  • 色調(diào)飽和度動(dòng)態(tài)調(diào)節(jié)

水印

功能:
自定義水印的視圖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;
    }
    
    /// 調(diào)節(jié)鏡像
    [self reloadMirror];
    
    // 480*640 比例為4:3  強(qiáng)制轉(zhuǎn)換為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同時(shí)輸出到blendFilter混合通道
        [self.filter addTarget:self.blendFilter];
        /// GPUImageUIElement將waterMarkContentView屬性的視圖轉(zhuǎn)為紋理,輸入到輸出源
        [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];
    
    
    // 輸出數(shù)據(jù)
    __weak typeof(self) _self = self;
    [self.output setFrameProcessingCompletionBlock:^(GPUImageOutput *output, CMTime time) {
        [_self processVideo:output];
    }];
    
}

項(xiàng)目源碼下載

還有 13% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
支付 ¥1.00 繼續(xù)閱讀

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容