Video SDK for macOS 快速接入

概述

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

四步集成

Step1:注册账号

游密官网注册游密账号。

Step2:添加应用,获取Appkey

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

Step3:下载Video SDK包体

根据游戏使用的游戏引擎与开发语言,在下载入口下载对应的SDK包体。

Step4:调试集成

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

SDK目录概述

语音SDK中有两个子文件夹:include、lib,下面依次介绍下这两个子文件夹。

  1. include:SDK的头文件。 重点介绍inlude下的需要使用到的重要文件。
    • YMVoiceService.h封装了语音SDK的全部功能接口,集成方可通过[YMVoiceService getInstance]直接调用。
    • VoiceEngineCallback.h包含需要实现的语音SDK的回调接口协议。
    • YouMeConstDefine.h包含错误码定义等各类枚举类型定义。
  2. lib:macOS库文件,包含libyoume_voice_engine.a、youme_voice_engine_mac.dylib(动态库)、libYouMeCommon.a 和 libffmpeg3.3.a 文件。

开发环境集成

将SDK放置到xcode工程目录下(可视实际情况自行放置)。

macOS系统Xcode开发环境配置

添加头文件和依赖库:

  1. 打开XCode工程,找到工程目录,右键点击选择“Add Files to ...”,然后将SDK下的include文件夹加入进来。

  2. 添加库文件路径:Build Settings -> Search Paths -> Library Search Paths,将SDK下的libs目录导入进来; 添加头文件路径:Build Settings -> Search Paths -> Header Search Paths, 将 SDK 下的 include 目录导入进来。
  3. 添加依赖库:在Build Phases -> Link Binary With Libraries下添加:libyoume_voice_engine.a
    libYouMeCommon.a
    libffmpeg3.3.a
    libc++.tbd
    libsqlite3.0.tbd
    libz.dylib
    libz.1.2.5.tbd
    libresolv.9.tbd
    SystemConfiguration.framework
    CoreTelephony.framework
    AVFoundation.framework
    AudioToolBox.framework
    CFNetwork.framework
    VideoToolbox.framework
    CoreVideo.framework
    VideoDecodeAcceleration.framework
  4. 为macOS10.14 以上版本添加录音权限配置 macOS 10.14 系统使用录音权限,需要在target的info.plist中新加NSMicrophoneUsageDescription键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。
  5. 为macOS 10.14 以上版本添加摄像头使用权限配置 macOS 10.14 系统使用摄像头权限,需要在target的info.plist中新加NSCameraUsageDescription键,值为字符串(授权弹窗出现时提示给用户)。首次开启摄像头时会向用户申请权限。

API调用说明

API的调用可使用“[YMVoiceService getInstance]”来直接操作,接口使用的基本流程为初始化->收到初始化成功回调通知->加入语音频道->收到加入频道成功回调通知->使用其它接口->离开语音频道->反初始化,要确保严格按照上述的顺序使用接口。

视频关键接口流程

  1. 初始化接口:[YMVoiceService getInstance] initSDK
  2. 初始化成功收到 YOUME_EVENT_INIT_OK 事件后,
    设置服务器区域 [YMVoiceService getInstance] setServerRegion
    设置采集帧率 [YMVoiceService getInstance] setVideoFps
    设置视频编码分辨率 [YMVoiceService getInstance] setVideoNetResolutionWidth
    设置视频码率 [YMVoiceService getInstance] setVideoCodeBitrate
    设置视频硬编 [YMVoiceService getInstance] setVideoHardwareCodeEnable
    加入频道 [YMVoiceService getInstance] joinChannelSingleMode
  3. 在收到YOUME_EVENT_JOIN_OK事件后,
    开关麦克风:[[YMVoiceService getInstance] setMicrophoneMute:false];
    开关扬声器:[[YMVoiceService getInstance] setSpeakerMute:false];
    控制自己的摄像头打开:[[YMVoiceService getInstance] startCapture];
    控制自己的摄像头关闭:[[YMVoiceService getInstance] stopCapture];
    创建渲染视图: [YMVoiceService getInstance ] createRender

  4. 使用其他接口和回调事件:
    切换摄像头:[YMVoiceService getInstance] switchCamera
    是否屏蔽他人视频: [[YMVoiceService getInstance] maskVideoByUserId:(NSString*) userId mask:(bool) mask];
    创建自己的视频流渲染view:[[YMVoiceService getInstance ] createRender:local_userid parentView:parentView];
    收到 YOUME_EVENT_OTHERS_VIDEO_ON 事件后,在该事件里创建视频渲染组件,渲染远端视频 [[YMVoiceService getInstance ] createRender:other_userid parentView:parentView]; 远端视频会渲染在返回的UIView里。
    删除渲染绑定:[[YMVoiceService getInstance] deleteRender:userid];

  5. 离开房间:[YMVoiceService getInstance] leaveChannelAll

  6. 反初始化:[YMVoiceService getInstance] unInit

实现回调

使用者要遵守协议 VoiceEngineCallback 并实现相关函数(回调函数)。回调都在子线程中执行,不能用于更新UI等耗时操作。

  • 具体实现回调方法
//事件上报回调
-(void) onYouMeEvent:(YouMeEvent_t)eventType errcode:(YouMeErrorCode_t)iErrorCode roomid:(NSString *)roomid param:(NSString *)param {
}
//RestAPI回调
-(void) onRequestRestAPI: (int)requestID iErrorCode:(YouMeErrorCode_t) iErrorCode  query:(NSString*) strQuery  result:(NSString*) strResult {
}
//获取频道用户列表回调
-(void) onMemberChange:(NSString*) channelID changeList:(NSArray*) changeList { 
}
//SDK内置连麦抢麦接口对应的回调
- (void) onBroadcast:(YouMeBroadcast_t)bc strChannelID:(NSString*)channelID strParam1:(NSString*)param1 strParam2:(NSString*)param2 strContent:(NSString*)content;
//音视频通话码率、丢包率回调
- (void) onAVStatistic:(YouMeAVStatisticType_t)type  userID:(NSString*)userID  value:(int) value;