多方视频通话

功能简介:多方视频通话时,根据当前业务场景合理设置视频编码参数,可以在较低的带宽占用下实现流畅清晰的音视频沟通,下面将针对几种常见场景进行介绍。


1.一对一

画中画布局示例图

描述:比如双人视频聊天场景,双方通常都希望看到对方比较清晰的视频,此时可以使用较高的视频编码分辨率,比如720P或480P。


  • 接口调用:
// 获取自己视频分辨率并配置为720P
VideoCfg* cfg = [[CloudroomVideoMeeting shareInstance] getVideoCfg];
cfg.sizeType = VSIZE_SZ_720;
[[CloudroomVideoMeeting shareInstance] setVideoCfg:cfg];

//这里使用上图横屏布局,我方显示全屏
CLCameraView * myView = [[CLCameraView alloc]initWithFrame:self.view.bounds];
//设置myUID
[bigView setUsrVideoId:myUID];

//对方显示在右下角
CGFloat viewW = self.view.bounds.size.width;
CGFloat viewH = self.view.bounds.size.height;
CGFloat peerW = 320;
CGFloat peerH = 180;
CLCameraView * peerView = [[CLCameraView alloc]initWithFrame:CGRectMake(viewW-peerW, viewH-peerH, peerW, peerH)];
//设置对方peerUid
[peerView setUsrVideoId:peerUid];

相关API请参考:

相关结构定义请参考:


2.多方视频

多方视频示例图:

多方视频示例图

描述: 比如在线教育场景,老师的视频画面比较大,可以使用较高的分辨率比如720P,下面学生的视频画面比较小,应采用较低的视频编码分辨率,比如360P或256P。


  • 老师端设置摄像头使用720P
    VideoCfg* cfg = [[CloudroomVideoMeeting shareInstance] getVideoCfg];
    // 默认的视频分辨率为720P
    cfg.sizeType = VSIZE_SZ_720;
    [[CloudroomVideoMeeting shareInstance] setVideoCfg:cfg];
  • 学生端设置摄像头使用360P
    VideoCfg* cfg = [[CloudroomVideoMeeting shareInstance] getVideoCfg];
    // 默认的视频分辨率为720P
    cfg.sizeType = VSIZE_SZ_360;
    [[CloudroomVideoMeeting shareInstance] setVideoCfg:cfg];
  • 控件查看视频时,设置相关视频档位:
    //此处是新创建的CLCameraView
    CLCameraView* teacherVideoView = [[CLCameraView alloc]init];
    CLCameraView* studentVideoView1 = [[CLCameraView alloc]init];
    CLCameraView* studentVideoView2 = [[CLCameraView alloc]init];
    CLCameraView* studentVideoView3 = [[CLCameraView alloc]init];
    CLCameraView* studentVideoView4 = [[CLCameraView alloc]init];
    
    // 进入房间后...
    
    // 设置老师端观看视频
    [teacherVideoView setUsrVideoId:teacherVideoId];

    // 设置学生端观看视频
    [studentVideoView1 setUsrVideoId:studentVideoId];
    [studentVideoView2 setUsrVideoId:studentVideoId];
    [studentVideoView3 setUsrVideoId:studentVideoId];
    [studentVideoView4 setUsrVideoId:studentVideoId];

  • 注意事项:

    • 老师和学生的身份是由业务层控制,sdk不识别身份
    • 布局可以使用xib或者使用第三方布局框架都可以

相关API请参考:

相关结构定义请参考:

3.个性化视图:

图一:

图一示例图

图二:

图2示例图

描述:在某些业务场景下,同一个房间内的用户视图不一致,导致同一个视频在不同的用户那里呈现的画面尺寸不一样,比如9方通话场景下原先9个视频画面平铺(如图一),大家都只需要编码256P的视频。某一个时刻用户D开始全屏观看A的视频(如图二),此时A需要编码高分辨率视频比如720P来确保D能看到A的清晰画面,这样一来房间中其他人虽然观看的是A的小画面,却也收到了A的720P视频流,浪费了带宽和解码性能,万一其他用户也做了类似D的操作,整个房间的通话将不可用。 对于这种场景,我们可以启用视频大小流机制,看A小画面的用户订阅A的小流,看A大画面的用户订阅A的大流,这样既能满足各自的清晰度要求,又不会浪费带宽和CPU性能。


  • 示例代码:
/* 设置视频流 用户A的代码:
  (1)A启用大小流机制 。设置默认视频设置为大流,第二档设置为小流
*/
    //配置默认大流使用720p
    VideoCfg *cfg1 = [[VideoCfg alloc]init];
    cfg1.sizeType  = VSIZE_SZ_720;
    cfg1.fps = 12;

    //配置默认小流使用360p
    VideoCfg *cfg2 = [[VideoCfg alloc]init];
    cfg2.sizeType  = VSIZE_SZ_360;
    cfg2.fps = 12;

    CamAttribute *attr = [[CamAttribute alloc]init];
    attr.disabled = false;
    attr.quality1_cfg = cfg1;
    attr.quality2_cfg = cfg2;
    [[CloudroomVideoMeeting shareInstance] setLocVideoAttributes:videoID attributes:attr];
  • 观看视频阶段
    CLCameraView* cameraView = [[CLCameraView alloc]init];
    
    // 进入房间后...
    
    // 当用户用小流查看视频
    int qualityLv = 2;
    [cameraView setUsrVideoId:VideoId qualityLv:qualityLv];
    
    // 当用户进行观看大流视频的交互操作后...
    
    // 用大流查看视频
    qualityLv = 1;
    [cameraView setUsrVideoId:VideoId qualityLv:qualityLv];

相关API请参考:

相关结构定义请参考: