多方音视频 iOS SDK 使用说明

版本历史

修改时间 修改说明
2021 年 01 月 11日 完成首版文档

目录结构

第1部分----------集成SDK
第2部分----------流程说明
第3部分----------使用示例
第4部分----------参考资料

术语说明

术语 术语说明
视频通话 支持语音和视频的双向通话

1 集成SDK

1.1 添加SDK所需权限

1.1.1 使用 sdk 前请在 Xcode -> Targets -> Info 中添加以下麦克风及摄像头权限,用于音视频采集

1. Privacy - Microphone Usage Description
2. Privacy - Camera Usage Description

1.2 手动添加相关库

在 Xcode -> Targets -> Build Phases -> Link Binary With Libraries中,添加如下库:

CoreMedia、AudioToolbox、VideoToolbox.framework、OpenAL.framework、AVFoundation.framework、libc++、libiconv.2.4.0、libbz2、libz

1.3 关闭 Bitcode

请将 Xcode -> Targets -> Build Settings -> Enable Bitcode 设置为 NO。

当你正确完成以上三个步骤后,您就已经成功集成SDK,接下来可以开始使用SDK。

2 流程说明

在您开始使用SDK之前,或者当您在使用SDK 过程中遇到疑问时,您可以通过以下流程图大致了解SDK的工作流程,以便您更好的了解和使用SDK。

EZVideoTalkSDK flow chart

3 使用示例

3.1 头文件介绍

关键头文件

#import "EZVideoTalkSDK.h"                   //包含SDK核心功能
#import "EZVideoTalkView.h"                 //本地通话窗口
#import "EZVideoTalkParam.h"                 //音视频通话参数
#import "EZMediaSessionVideoParam.h"    //音视频采集参数

3.2 使用示例代码

关键接口

#pragma mark - SDK
/**
SDK初始化

 @param param 必填 配置参数
 @param localWin 本地窗口

 @return 返回值
 */
- (instancetype)initWithParam:(EZMediaSessionVideoParam *)param
                  localWindow:(EZVideoTalkView *)localWin;

/// 设置远程窗口
/// 1.必须在拿到远端客户端加入的消息后设置;
/// 2.必须在主线程调用;
/// 3.结束后需要将window只为nil;
/// @param remoteWin  远端窗口
/// @param clientID 加入的客户端的ID
- (int32_t)setRemoteWindow:(UIView * _Nullable)remoteWin ofClient:(int32_t)clientID;

/**
 开始双向音视频对讲,耗时接口,默认 EZVideoTalkCaptureVideo | EZVideoTalkCaptureAudio 同时开启
 */
- (void)startWithBAVParam:(EZVideoTalkParam *)param;

/**
 开始双向音视频对讲,耗时接口
 @param param 必填 配置参数
 @param type 采集类型
 */
- (void)startWithBAVParam:(EZVideoTalkParam *)param type:(EZVideoTalkCaptureType)type;

/**
 停止双向音视频对讲
 */
- (void)stop;

/// 本地采集的音频或者是视频配置,可以在音视频通话过程中切换
/// @param type EZMediaCaptureSessionType
- (int32_t)configCaptureType:(EZVideoTalkCaptureType)type;

/// 开启声音,接收到EZVideoTalkMessageStartInputData消息后调用
/// @param open 开关状态
/// @param clientId clientId
- (int32_t) openSound:(BOOL)open forClient:(int32_t)clientId;

/**
 切换对讲时使用的摄像头,默认采用前置 同步接口

 @param backCameraSelected YES:选择后置,NO:选择前置
 @return 成功返回 noErr,失败返回错误码
 */
- (int32_t)switchCamera:(BOOL)backCameraSelected;

#pragma mark - 日志调试
/**
 日志设置

 @param enable 是否打印日志
 @param logCallback 日志回调,上层自定义处理
 */
+ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;

/**
 打开对端码流抓取

 @param enble 是否打开
 */
+(void)setDebugVideoLog:(BOOL)enble;

/**
 获取sdk版本信息

 @return 版本号
 */
+ (NSString*)getVersion;

示例代码

1. 创建/获取会议信息
//创建会议信息
[EZOpenSDK requestCallingMeetingInfo:self.pageSetting.password completion:^(int32_t roomId, NSString *vtmAddress, NSError *error) {       
    //todo       
}];


//加入方获取会议信息
[EZOpenSDK requestCalledMeetingInfo:self.pageSetting.roomId completion:^(int32_t roomId, NSString *vtmAddress, NSError *error) {
    //todo   
}];

2. 设置采集参数,初始化SDK
EZMediaSessionVideoParam *mediaParam = [EZMediaSessionVideoParam new];
mediaParam.pixelWidth = 320;
mediaParam.pixelHeigth = 320;
mediaParam.videoOrientation = AVCaptureVideoOrientationPortrait;
mediaParam.encodeKeyFrameInterval = 4;

[EZVideoTalkSDK setDebugVideoLog:YES];
[EZVideoTalkSDK setDebugLogEnable:YES withLogCallback:^(NSString *logStr) {
    NSLog(@"EZVideoTalkSDK-----%@", logStr);
}];

_client = [[EZVideoTalkSDK alloc] initWithParam:mediaParam localWindow:self.localWin];
_client.delegate = self;

3. 实现代理方法
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedError:(int32_t)errorCode
{
    NSLog(@"%s recived errorcode:%d", __func__, errorCode);

    dispatch_async(dispatch_get_main_queue(), ^{
        //todo
    });
}

- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedMessage:(EZVideoTalkMessageType)messageCode msg:(NSDictionary *)msg;
{
    dispatch_async(dispatch_get_main_queue(), ^{

        if (messageCode == EZVideoTalkMessageRoomCreated) {
               //todo
        }
        else if (messageCode == EZVideoTalkMessageStartInputData) {
            //todo
        }
        else if (messageCode == EZVideoTalkMessagePeerEnteredRoom) {
            //todo
        }
        else if (messageCode == EZVideoTalkMessagePeerLeaveRoom) {
              //todo
        }
    });
}

4. 设置通话参数,开始多方通话
EZVideoTalkParam *bavParam = [EZVideoTalkParam new];

bavParam.isMultiPartyCall = YES;
bavParam.isCallingWithDevice = callingWithDev;
bavParam.iCltRole = self.pageSetting.isCalling ? 0 : 1; //主叫端传0,被叫端传1
bavParam.iStsPort = [infos.lastObject intValue];
bavParam.iRoomId = roomID > 0 ? roomID : 0;
bavParam.szOterId = callingWithDev ? self.deviceInfo.deviceSerial : @""; //主叫且含有设备的多方会话需要传设备序列号
bavParam.iChannel = callingWithDev ? self.pageSetting.channelId : 1;
bavParam.szSelfId = self.pageSetting.nickname;
bavParam.szAuthToken = token;
bavParam.szStsAddr = infos.firstObject;
bavParam.iDevStreamType = 1;  //设置主子码流 1 主码流、2 子码流

[self modifyCaptureType];
[self.client startWithBAVParam:bavParam type:self.captureType];

4 参考资料

若文档有未尽之处,请参考官网 demo。

results matching ""

    No results matching ""