Video SDK for iOS 快速接入

概述

游密音视频SDK(Video SDK)是游密科技公司旗下的一款专注于为开发者提供实时音视频技术和服务的云产品。我们的研发团队来自腾讯,其中不少是拥有10年以上音视频经验的专家,专业专注;我们的服务端节点部署遍布全球,为用户提供高效稳定的实时云服务,且弹性可扩展,真正做到亿级支撑、毫秒级延迟、通话清晰流畅、按需取用,为用户带来优质的通话体验。通过Video SDK,能够让您轻松实现游戏内语音通话、主播、指挥、组队等多项功能。

四步集成

Step1:注册账号

游密官网注册游密账号。

Step2:添加应用,获取Appkey

在控制台添加应用,获得接入需要的AppkeyAppsecret

Step3:下载Video SDK包体

根据游戏使用的游戏引擎与开发语言,在下载入口下载对应的SDK包体,最新版本在专属支持群可以直接联系我们获取。

Step4:调试集成

iOS 平台集成Video SDK:集成方法

SDK目录概述

视频SDK的libs文件夹中存放的动态库:YoumeLiveVideoEngine.framework,视频主要功能集成使用这个动态库,下面介绍这个动态库的使用。

  1. 导入类。
    • #import <YoumeLiveVideoEngine/YMLiveVideoEngine.h>
    • #import <YoumeLiveVideoEngine/YMLiveVideoEngineDelegate.h>
  2. 接口及回调使用:
    • YMLiveVideoEngine.h封装了视频SDK的全部功能接口,通过[YMLiveVideoEngine shareInstance]调用。
    • YMLiveVideoEngineDelegate.h包含需要实现的视频SDK的回调接口协议,通过声明YMLiveVideoEngineDelegate用于监听回调。

开发环境

  • Xcode 5.0 或以上版本
  • iOS 7.0 或以上版本且支持音频的 iOS 设备或模拟器(推荐使用真机)
  • iOS 设备已经连接到 Internet

SDK集成

  1. 将 libs 文件夹中的动态库复制到项目的 ./project_name 文件夹下(project_name 为你的项目名称)。
  2. 打开 Xcode,进入 TARGETS > Project Name > General > Frameworks, Libraries, and Embedded Content 菜单。
  3. 点击 + > Add Other… > Add Files 添加对应动态库,并确保添加的动态库 Embed 属性设置为 Embed & Sign。 添加完成后,项目会自动链接所需系统库。
  4. 为iOS10以上版本添加录音权限配置 iOS 10 使用录音权限,需要在info新加Privacy - Microphone Usage Description键,值为字符串,比如“语音聊天需要录音权限”。 首次录音时会向用户申请权限。配置方式如图(选择Private-Microphone Usage Description)。 iOS10录音权限配置
  5. 为iOS10以上版本添加摄像头使用权限配置 为iOS10以上版本添加摄像头使用权限配置,需要新加 Privacy-Camera Usage Description 键,值为字符串(授权弹窗出现时提示给用户)。首次开启摄像头时会向用户申请权限。配置方式参考上图录音权限

视频通话时序图

时序图

视频通话相关代码

初始化

初始化Video SDK:其中appKey和appSecret为在游密后台申请的App Key和App Secret。regionId:IM服务器区域,一般使用0即RTC_CN_SERVER表示中国,其余设置值可查看官网文档-服务器部署地区定义

//初始化引擎
[[YMLiveVideoEngine shareInstance] initSDK:(id)self
                                    appkey:appKey
                                 appSecret:appSecret
                                  regionId:RTC_DEFAULT_SERVER
                          serverRegionName:@""];

实现回调消息

-(void) onYouMeEvent:(YouMeEvent_t)eventType errcode:(YouMeErrorCode_t)iErrorCode roomid:(NSString *)roomid param:(NSString *)param
{
    if (eventType == YOUME_EVENT_INIT_OK)
    {
        NSLog(@"-----初始化引擎成功");
    }
    else if (eventType == YOUME_EVENT_INIT_FAILED)
    {
        NSLog(@"-----初始化引擎失败");
    }
}

分辨率、帧率设置

onYouMeEvent收到初始化成功消息YOUME_EVENT_INIT_OK后: 设置分辨率:YMVideoEncoderConfiguration对象的参数width为宽,参数height为高,设置帧率:其中fps为帧率(1-30),默认15帧

//分辨率、帧率设置
YMVideoEncoderConfiguration *config = [[YMVideoEncoderConfiguration alloc] init];
config.width = dimensionWidth;
config.height = dimensionHeight;
config.frameRate = frameRate;
config.bitrate = 0;

[self.youmeEngine setVideoEncoderConfiguration:config];

加入频道

加入频道: 其中第一个参数为channelID:频道标识,userID:用户标识,autoRecv:是否自动接收频道内其他有人的视频,true表示自动接收,如果为false,需要调用 setUsersVideoInfo指定接收流后才会收到对方视频。用户角色说明:加入频道默认的角色为观众角色YOUME_USER_LISTENER,如需发布流请在加入频道成功后调用 setClientRole设定为主播角色YOUME_USER_HOST

//开始加入频道
[self.youmeEngine joinChannel:self.roomId
                       userId:self.userId
                     autoRecv:YES];

实现回调消息

//本端加入频道成功
- (void)liveVideoEngine:(YMLiveVideoEngine *)engine didJoinChannel:(NSString *)userId
{
    NSLog(@"-----本端已加入频道");
}

发布音视频流

  1. 加入频道成功后,首先须设定用户角色为主播角色YOUME_USER_HOST
[self.youmeEngine setClientRole:YOUME_USER_HOST];  
  1. 将视频流与本地视频渲染视图(UIView,SDK内部创建)绑定,其中第一个参数为渲染视图放置的父视图,userId为本端加入频道时的userID,mode为视频画面填充模式,详见《Video SDK for iOS-状态码》中YouMeVideoRenderMode类型定义
[self.youmeEngine setupLocalVideo:self._viewBig
                           userId:userId
                             mode:YOUME_VIDEO_RENDER_MODE_HIDDEN];
  1. 最后发布本地音视频流
[self.youmeEngine muteLocalAudioStream:NO];
[self.youmeEngine muteLocalVideoStream:NO];

取消发布流

  1. 用户角色切换为观众角色YOUME_USER_LISTENER
[self.youmeEngine setClientRole:YOUME_USER_LISTENER];
  1. 取消发布本地音视频流
[self.youmeEngine muteLocalAudioStream:YES];
[self.youmeEngine muteLocalVideoStream:YES];
  1. 解绑本地视频流与视频渲染视图(UIView),参数为本端加入频道时的userID
[self.youmeEngine deleteLocalVideo:userId];

收到远端用户发布流回调

回调didJoinedOfUid触发时,即收到其他用户发布音视频流的回调事件,将该用户的视频流与远端视频渲染视图(UIView)绑定,其中第一个参数为渲染视图放置的父视图,userId为远端用户的userID,mode为视频画面填充模式

[self.youmeEngine setupRemoteVideo:videoView
                            userId:userId
                              mode:YOUME_VIDEO_RENDER_MODE_HIDDEN];

收到远端用户取消发布流回调

回调didOfflineOfUid触发时,即收到其他用户取消发布音视频流的回调事件,解绑该用户视频流与视频渲染视图(UIView),参数为本端加入频道时的userID

[self.youmeEngine deleteRemoteVideo:userId];

离开频道,销毁引擎

离开频道

[self.youmeEngine leaveChannel];

销毁引擎

[self.youmeEngine destory];