音视频坑的解决方案 (OC)

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:812157648,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

音视频坑的解决方案 (OC)

  • 视频镜像问题

  • 共享屏幕拉伸变形

  • 视频回声噪音消除

  • 视频源和通讯断开处理

  • 视频屏幕拉伸处理

视频镜像问题解决

self.preView.track = self.mediaCapturer.videoTrack;
self.preView.videoView.transform = CGAffineTransformMakeScale(-1.0,1.0);
复制代码

共享屏幕拉伸变形 (IOS 和安卓)

造成拉伸的原因是采集视频的分辨率和帧数不统一

  造成拉伸的原因是因为采集视频分辨率不统一 造成视频拉伸变形设置统一的分辨率和帧数
 self.capture.captureSession.sessionPreset = [self.capture.captureSession canSetSessionPreset:AVCaptureSessionPreset640x480] ? AVCaptureSessionPreset640x480 : AVCaptureSessionPresetMedium;
           [device lockForConfiguration:NULL];
            @try {
                //设置30帧
                [device setActiveVideoMinFrameDuration:CMTimeMake(1, 30)];
                [device setActiveVideoMaxFrameDuration:CMTimeMake(1, 30)];
            } @catch (NSException *exception) {
                NSLog(@"MediaIOS, 设备不支持所设置的分辨率,错误信息:%@",exception.description);
            } @finally {

            }
           [device unlockForConfiguration];
复制代码

噪音消除

   //  增加 4个约束 解决回声消除问题 answer内调用传空值
     NSDictionary *mandatoryContraints = @{};

     @"OfferToReceiveAudio" : @"true",
     @"OfferToReceiveVideo" : @"true",
     @"googNoiseSuppression": @"true",
     @"googEchoCancellation": @"true"

return @{
        @"OfferToReceiveAudio" : @"true",
        @"OfferToReceiveVideo" : @"true",
        @"googNoiseSuppression": @"true",
        @"googEchoCancellation": @"true"
    };
复制代码

App切换后台到主页视频断开重连 (处理socket 和视频源的)

appdelegate方法里面设置通知监听 
 - (void)applicationWillEnterForeground:(UIApplication *)application {
    if(self.isback){
        self.isback = false;
        [[NSNotificationCenter defaultCenter]postNotificationName:@"Foreground" object:nil];
    }
}
会议中开启视频源
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row == 0) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            dispatch_async(dispatch_get_global_queue(0, 0), ^{
                [_mediaCapturer startCapture];
            });
        });
    }
}

原文作者:tiantian_cool
原文地址:https://juejin.cn/post/6919684897623769102

posted @ 2021-01-22 15:32  iOS发呆君  阅读(246)  评论(0编辑  收藏  举报