本文档适用于游密实时音视频引擎(Video SDK)Unity3D平台下接入,API接口说明部分同样适用于其他平台,可互相参考。
YMRTC SDK提供了以下文件:
Plugins库文件,分为Android平台和iOS平台。
AndroidManifest.xml
:可用来配置安卓下SDK所需要的权限、服务等。
Plugins/Android
: Android平台使用的动态库,包括ARMv5、ARMv7和X86三种CPU架构下的libyoume_voice_engine.so文件,还包括youme_voice_engine.jar。
Plugins/iOS
:iOS平台使用的静态库,包含libyoume_voice_engine.a文件。
YouMeVoiceAPI.cs
:封装了Video SDK 的全部功能接口。
YouMeConstDefine.cs
:包含Video SDK 错误码等枚举类型定义。
unitypackage
包。Import Unity Package
对话框中,所有的复选框打勾(如下图所示),但要格外注意AndroidManifest.xml可能与工程已有或将有的同名文件直接覆盖,应先比对合并。Project View
中选中Assets/Plugins/Android/libs
下特定的CPU架构,比如armeabi-v7a
,勾选右侧的Inspector View
中的Select platforms for plugin
下的Android
右侧的复选框,此处注意armeabi和armeabi-v7a两种ARM架构的库文件,只能勾选其中一种架构,否则会出现库文件冲突的错误
。File
->Build Settings…
的Platform
列表中选择Android
,酌情点击Switch Platform
按钮,然后勾选右侧Google Android Project
。Build Settings
->Export
,选择输出的Android工程路径,导出Android工程。
File
->Build Settings…
的Platform列表中选择iOS,酌情点击Switch Platform
按钮。Build Settings
->Build
,选择输出iOS工程的路径,输入工程名字,导出iOS工程。Build Phases
->Link Binary With Libraries
下拉菜单中添加添加这几个框架文件:libsqlite3.0.tbd
libz.1.2.5.tbd
libresolv.9.tbd
CoreTelephony.framework
VideoToolbox.framework
AudioToolbox.framework
AVKit.framework
CoreVideo.framework
CoreFoundation.framework
AVFoundation.framework
SystemConfiguration.framework
CFNetwork.framework
GLKit.framework
info.plist
中新加NSMicrophoneUsageDescription
键,值为字符串(授权弹窗出现时提示给用户)。首次录音时会向用户申请权限。配置方式如下:
接口对象实例需要通过调用YouMe.YouMeVoiceAPI.GetInstance ()
来获取,接口使用的基本流程为初始化
->收到初始化成功回调通知
->加入频道
->收到加入频道成功回调通知
->使用其它接口
->离开频道
->反初始化
,要确保严格按照上述的顺序使用接口。
void SetCallback(string strObjName);
功能
设置接收回调消息的对象名。这个函数必须最先调用,这样才能收到后面所有调用的回调消息。
参数说明
strObjName
:string类型,注册的GameObject的名字。
上面注册好回调的GameObject类还需实现以下方法:
void OnEvent (string strParam);
//以下代码仅供参考
void OnEvent (string strParam)
{
string[] strSections = strParam.Split (new char[] { ',' });
if (strSections == null){
return;
}
YouMe.YouMeEvent eventType = (YouMeEvent)int.Parse (strSections [0]);
YouMe.YouMeErrorCode errorCode = (YouMeErrorCode)int.Parse (strSections [1]);
string channelID = strSections [2];
string userID = strSections [3];
switch (eventType) {
//对eventType的case列举请查询枚举类型YouMeEvent的定义,以下只是部分列举
//使用者请按需自行添加或删除
case YouMe.YouMeEvent.YOUME_EVENT_INIT_OK:
//"初始化成功";
break;
case YouMe.YouMeEvent.YOUME_EVENT_INIT_FAILED:
//"初始化失败,错误码:" + errorCode;
break;
case YouMe.YouMeEvent.YOUME_EVENT_JOIN_OK:
//加入频道成功
break;
case YouMe.YouMeEvent.YOUME_EVENT_LEAVED_ALL:
//"离开所有频道成功";
break;
case YouMe.YouMeEvent.YOUME_EVENT_JOIN_FAILED:
//进入语音频道失败
break;
case YouMe.YouMeEvent.YOUME_EVENT_REC_PERMISSION_STATUS:
//"通知录音权限状态,成功获取权限时错误码为YOUME_SUCCESS,获取失败为YOUME_ERROR_REC_NO_PERMISSION(此时不管麦克风mute状态如何,都没有声音输出)";
break;
case YouMe.YouMeEvent.YOUME_EVENT_RECONNECTING:
//"断网了,正在重连";
break;
case YouMe.YouMeEvent.YOUME_EVENT_RECONNECTED:
//"断网重连成功";
break;
case YouMe.YouMeEvent.YOUME_EVENT_MEMBER_CHANGE:
//房间内成员列表变化,param参数是包含自己的所有用户列表
List<string> members = new List<string>(12);
for(int index = 2 ; index < strSections.Length ;index++){
//会议内的用户,包括自己
members.Add(strSections[index]);
}
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_MIC_OFF:
//其他用户的麦克风关闭:param是关闭用户的userid
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_MIC_ON:
//其他用户的麦克风打开
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_SPEAKER_ON:
//其他用户的扬声器打开
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_SPEAKER_OFF:
//其他用户的扬声器关闭
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_VOICE_ON:
//其他用户开始讲话
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_VOICE_OFF:
//其他用户结束讲话
break;
case YOUME_EVENT_MY_MIC_LEVEL:
//麦克风的语音级别
break;
case YOUME_EVENT_MIC_CTR_ON:
//麦克风被其他用户打开
break;
case YOUME_EVENT_MIC_CTR_OFF:
//麦克风被其他用户关闭
break;
case YOUME_EVENT_SPEAKER_CTR_ON:
//扬声器被其他用户打开
break;
case YOUME_EVENT_SPEAKER_CTR_OFF:
//扬声器被其他用户关闭
break;
case YOUME_EVENT_LISTEN_OTHER_ON:
//取消屏蔽某人语音
break;
case YOUME_EVENT_LISTEN_OTHER_OFF:
//屏蔽某人语音
break;
//=====================视频相关=========================
case YOUME_EVENT_OTHERS_VIDEO_ON:
//收到其他用户的视频流通知,可以开始渲染这个用户的视频流
//VideoJoin(userid);
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_CAMERA_PAUSE:
//userid 关闭了摄像头
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_CAMERA_RESUME:
//userid 打开了摄像头
break;
case YouMe.YouMeEvent.YOUME_EVENT_OTHERS_VIDEO_SHUT_DOWN://视频断开事件
{
// 这个事件在暂停后、临时断网也会通知,不适合做用户下线通知
// RemoveUserVideoRender(param);
}
break;
default:
// "事件类型" + eventType + ",错误码" + errorCode;
break;
}
}
void OnRequestRestApi (string strParam);
strParam
:json串,包含:
requestid
:整数类型,回传ID。 error
:错误码。 query
:回传查询命令,json串(包含command和query字段)。 result
:查询结果,详情见RequestRestApi接口说明文档。 void OnMemberChange (string strParam);
strParam
:json串,包含:
channelid
:字符串,频道ID。 memchange
:数字类型,成员列表,或者变更列表。(userid 字符串,用户ID ;
isJoin, bool类型,false为离开)。YouMeErrorCode Init(
string strAppKey,
string strAPPSecret,
YOUME_RTC_SERVER_REGION serverRegionId,
string strExtServerRegionName);
功能
初始化语音引擎,做APP验证和资源初始化。
参数说明
strAPPKey
:从游密申请到的 app key, 这个你们应用程序的唯一标识。
strAPPSecret
:对应 strAPPKey 的私钥, 这个需要妥善保存,不要暴露给其他人。
serverRegionId
:设置首选连接服务器的区域码,如果在初始化时不能确定区域,可以填RTC_DEFAULT_SERVER,后面确定时通过 SetServerRegion 设置。如果YOUME_RTC_SERVER_REGION定义的区域码不能满足要求,可以把这个参数设为 RTC_EXT_SERVER,然后通过后面的参数strExtServerRegionName 设置一个自定的区域值(如中国用 "cn" 或者 “ch"表示),然后把这个自定义的区域值同步给游密,我们将通过后台配置映射到最佳区域的服务器。
strExtServerRegionName
:自定义的扩展的服务器区域名。不能为null,可为空字符串“”。只有前一个参数serverRegionId设为RTC_EXT_SERVER时,此参数才有效(否则都将当空字符串“”处理)。
返回值
返回YOUME_SUCCESS才会有异步回调通知。其它返回值请参考YouNeErrorCode类型定义。
//涉及到的主要回调事件有:
// YOUME_EVENT_INIT_OK - 表明初始化成功
// YOUME_EVENT_INIT_FAILED - 表明初始化失败,最常见的失败原因是网络错误或者 AppKey-AppSecret 错误
void OnEvent (string strParam);
YouMeErrorCode JoinChannelSingleMode (string strUserID, string strChannelID, YouMeUserRole userRole);
功能
加入语音频道(单频道模式,每个时刻只能在一个语音频道里面)。
参数说明
strUserID
:全局唯一的用户标识,全局指在当前应用程序的范围内。
strChannelID
:全局唯一的频道标识,全局指在当前应用程序的范围内。
userRole
:用户在语音频道里面的角色,见YouMeUserRole定义。
返回值
返回YOUME_SUCCESS才会有异步回调通知。其它返回值请参考YouNeErrorCode类型定义。
//涉及到的主要回调事件有:
//YOUME_EVENT_JOIN_OK - 成功进入语音频道
//YOUME_EVENT_JOIN_FAILED - 进入语音频道失败,可能原因是网络或服务器有问题
void OnEvent (string strParam);
示例:
``` c#
// 开启摄像头
YouMe.YouMeVoiceAPI.GetInstance().StartCapture();
// 根据用户id获取渲染id
int videoRenderID = YouMeTexture.GetInstance ().CreateTexture (selfUserID, gameObject.name);
// 更新视频,目前约15帧每秒
YouMeTexture.GetInstance().SetVideoRenderUpdateCallback(videoRenderID,(Texture2D videoTexture)=>{
// 把 videoTexture 这个Texture2D对象显示到游戏里即可
});
```
具体方法参见demo
YouMeErrorCode CreateRender(string userId);
功能
创建渲染。
参数说明
userId
:用户id。
YouMeErrorCode StartCapture();
功能
开始camera capture。
参数说明
无。