网易云从集成到多人视频会议(3)~中间的坑~~

本地视频

远程视频

这也是坑。。。
以一般人的思维,创建完会议室,然后加入房间,就跳转到视频页面,,显示本地自己的视频图像,,然后有人加进来的话再把对方的视频图像显示出来。
然而。。。不能这么做。就是在这里我卡了两天。。。。。。。真想打人。

创建加入会议房间必须在同一个页面完成,否则会出现本地视频代理方法不走。。然后你就获取不到本地流,显示不出来。。。

首先需要

           #import "NTESGLView.h"

这个东西(ijkl)这也是坑啊。。。倒入的时候报错。。相对路径和绝对路径的错
解决方法就是直接把相对路径去掉
#include "ijksdl_vout.h" 这样子。 就可以了。


B8A82E3F-A86C-4F85-AE47-8EE731D4B439.png

不想写了直接上代码了

.m文件
//
//  LSXVideoChatVC.m
//  wxf
//
//  Created by 医联通 on 17/10/13.
//  Copyright © 2017年 lsx. All rights reserved.
//

#import "LSXVideoChatVC.h"
#import <NIMAVChat/NIMAVChat.h>
#import <NIMSDK/NIMSDK.h>
#import "NTESGLView.h"
#import "NTESBundleSetting.h"
@interface LSXVideoChatVC ()<NIMNetCallManagerDelegate>

@property (nonatomic, strong) NTESGLView *videoView;
@property (nonatomic, strong) UIView * localView;

@end

@implementation LSXVideoChatVC

- (void)viewDidLoad {
    [super viewDidLoad];
    
    _localView=[UIView new];
    
    _videoView=[[NTESGLView alloc]initWithFrame:CGRectMake(0, 64,SCREEN_WIDTH, SCREEN_HEIGHT/2)];
    _videoView.backgroundColor=LineColor;
    [self.view addSubview:_videoView];
    
    if([_CreatOrJoin isEqualToString:@"1"]){
        _localView.frame=_videoView.bounds;
    }else{
        _localView.frame=CGRectMake(SCREEN_WIDTH-110, 74, 100, 100);
    }
    
    [[NIMAVChatSDK sharedSDK].netCallManager addDelegate:self];
    
    if([_CreatOrJoin isEqualToString:@"1"]){
        //创建
        [self reserveMeetingWithRoomId:_roomId];
    }else{
        //加入
        NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
        meeting.name =_roomId;
        [self joinNetCallWithRMeeting:meeting];
    }
}
//
//-(void)CreatButtons{
//    
//    UIButton * btn1=[UIButton new];
//    [_videoView addSubview:btn1];
//    btn1.frame=CGRectMake(10, 74, <#CGFloat width#>, <#CGFloat height#>)
//    
//}









//预订会议(创建会议)
- (void)reserveMeetingWithRoomId:(NSString *)roomId{
    
    NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
    meeting.name = roomId;
    meeting.type = NIMNetCallMediaTypeVideo;
    meeting.ext = @"哈哈哈哈";
    meeting.actor = YES;
    [[NIMAVChatSDK sharedSDK].netCallManager reserveMeeting:meeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {
        if (!error) {
            NSLog(@"预定成功 ,进入房间");
            [self joinNetCallWithRMeeting:meeting];
            
        } else {
            if (error.code == 417) {
                [self joinNetCallWithRMeeting:meeting];
            } else {
                NSLog(@"预定房间失败");
            }
        }
    }];
}
//加入会议相关方法
- (void)joinNetCallWithRMeeting:(NIMNetCallMeeting *)rMeeting {
    
    
    NIMNetCallOption *callOption =[[NIMNetCallOption alloc]init];
    // 发送视频质量(SDK会处理 有可能无效)
    //callOption.preferredVideoQuality =NIMNetCallVideoQualityDefault;
    // 禁止剪裁
    // callOption.disableVideoCropping =NO;
    // 自动旋转远端画面
    callOption.autoRotateRemoteVideo =YES;
    // 期望的视频编码器
    callOption.preferredVideoEncoder =NIMNetCallVideoCodecDefault;
    // 期望的视频解码器
    callOption.preferredVideoDecoder =NIMNetCallVideoCodecDefault;
    // 初始打开摄像头,
    callOption.videoCaptureParam.startWithCameraOn =YES;
    // 启用互动直播
    callOption.enableBypassStreaming =YES;
    // 互动直播推流地址
    callOption.bypassStreamingUrl =nil;
    // 是否在服务器录制音频
    callOption.serverRecordAudio =YES;
    callOption.autoDeactivateAudioSession = NO;
    // 是否在服务器录制视频
    callOption.serverRecordVideo =YES;
    callOption.videoCaptureParam = [self videoCaptureParam];
    // 加入会议的类型->音频/视频
    rMeeting.type =NIMNetCallMediaTypeVideo;
    // 是否发送音视频数据
    rMeeting.actor = YES;
    // 网路电话配置
    rMeeting.option = callOption;
    //进入房间聊天
    [[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:rMeeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {
        if (!error) {
            NSLog(@"进入成功");
            NSLog(@"callID====%llu---name===--%@",meeting.callID,meeting.name);
        } else {
            NSLog(@"进入失败");
            [self reserveMeetingWithRoomId:_roomId];
        }
    }];
}
//音视频配置
- (NIMNetCallVideoCaptureParam *)videoCaptureParam{
    
    NIMNetCallVideoCaptureParam *param = [[NIMNetCallVideoCaptureParam alloc] init];
    
    param.videoCrop = [[NTESBundleSetting sharedConfig] videochatVideoCrop];
    // 使用后置摄像头开始视频, 默认是 YES
    param.startWithBackCamera   = [[NTESBundleSetting sharedConfig] startWithBackCamera];
    
    param.preferredVideoQuality = [[NTESBundleSetting sharedConfig] preferredVideoQuality];
    
    param.provideLocalVideoProcess = [[NTESBundleSetting sharedConfig] provideLocalProcess];
    
    param.preferredVideoQuality = NIMNetCallVideoQualityLow;
    
    return param;
}

#pragma NIMNetCallManagerDelegate
/// 远程视频 (是控制远程视频流)
-(void)onRemoteYUVReady:(NSData *)yuvData width:(NSUInteger)width height:(NSUInteger)height from:(NSString *)user{

    if (yuvData) {
       _localView.frame=CGRectMake(SCREEN_WIDTH-110, 74, 100, 100);
        [_videoView render:yuvData width:width height:height];
    }
}
/// 本地视频 (此处是控制本地视频流)
-(void)onLocalDisplayviewReady:(UIView *)displayView{
   
    displayView.frame=_localView.bounds;
    [_localView addSubview:displayView];
    [_videoView addSubview:_localView];
}
-(void)viewWillDisappear:(BOOL)animated{
    [self hzId:_hzId withType:@"2"];
    [self MSUNetCallManagerLeaveMeeting];
}
//离开会议
- (void)MSUNetCallManagerLeaveMeeting {
    
    NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
    meeting.name = _roomId;
    [[NIMAVChatSDK sharedSDK].netCallManager leaveMeeting:meeting];
}
- (void)dealloc{
    [[NIMAVChatSDK sharedSDK].netCallManager removeDelegate:self];
}
@end

以上就是网易云多人视频会议。如果有什么问题可以留言。欢迎指出错误一起交流学习。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容