V3.0
*修订日期* | *描述* | *作者* | *版本号* |
---|---|---|---|
2019.6.5 | 初始文档 | 刘柱 | 3.0.0 |
2021.1.15 | 刘柱 | 3.1.0 | |
RTC SDK提供人与人实时沟通协作过程中需要用到的所有基本能力,涵盖了网络会议系统、IM即时通讯系统及直播系统三大类终端产品音视频通讯的主要功能。
RTC SDK由业界资深工程师精心打造,稳定可靠,第三方团队拿来就能用,不必自己去造“轮子”,从而降低了第三方团队的技术风险,减少了项目的开发投入,尤其是能大幅缩短第三方团队开发具有多方音视频+数据协作能力的App/Web应用的时间。
RTC SDK可用于几乎所有行业,很多业务场景中需要用到人与人实时沟通与协作的能力,而类似QQ,微信或会议系统这种通用沟通工具又不能直接使用或不能满足功能,这种情况下,RTC SDK就是您最好的选择。市场调研表明,RTC SDK在医疗、教育、金融、能源、交通等各个领域,都有巨大的市场需求。
RTC SDK 为移动、桌面和互联网应用提供一个完善的音视频及数据互动开发框架,屏蔽掉互动系统的复杂细节,对外提供较为简洁的 API 接口,方便第三方应用快速集成互动功能。
RTC SDK Android版提供如下功能:
本指南是提供给具有一定的 C++编程经验和了解面向对象概念的产品经理及程序员使用,Open-AVD SDK 已很好的封装了音视频相关的底层技术细节,因而读者不需要具备音视频开发方面的经验。
公司的github网址(https://github.com/3tee)上会提供各类基于RTC SDK的实例 Demo,包括基本音视频能力Demo。
您在使用本SDK的过程中,遇到任何困难,请与我们联系,我们将热忱为你提供帮助。你可以通过如下方式与我们取得联系。
Ø 技术支持工程师: 186XXXXXXXX
本指南编写目的是为了帮助使用 AVD SDK 的用户快速搭建 SDK 的开发环境、熟悉开发流程、掌握 SDK 开发功能接口而编写的。 本指南基于 Visual Studio,导入 baseVideo Demo 进行最简单的音视频能力进行编写,如果需要更多的功能,请参阅 SDK API 接口开发手册。
本指南默认的开发工具为 Visual Studio 2017 ,它是微软推出的一款支持 C++的开发 IDE,运行以及修改 SDK Demo 非常方便。安装时选择插件如下图 4-1。
2.3
中下载的 SDK Demo,通过下面截图导入:
SDK Demo 导入工程后,于下图 4-4 处,将环境设置为 Release,再点击本地windows 调试器,即可很方便运行,截图如下:
本开发流程只涉及到音视频的基本功能,以 baseVideo Demo 的能力加以说明,关于其它的功能,如桌面共享、多摄像头的支持,可以参阅 SDK API 接口开发手册或咨询我们的技术支持工程师。
针对正式客户及测试客户,公司会提供一对有效的 Access Key 和Secret Key,这对密钥可以产生访问令牌(24 小时有效),用于生成会议房间号,及加会房间等操作。目前 SDK Demo 提供的测试的授权信息及服务器地址如下,公司会不定期的更新,有问题请咨询。 服务器地址,依据当前 web 服务协议(http,https)指定对应的端口,默认是https
x
static rtc::String _url = "https://dev.3tee.cn:441";
static rtc::String _appkey = "SDKdemo_access";
static rtc::String _secretkey = "SDKdemo_secret";
通过调用 initSdkWithToken(),可以产生访问令牌,参考代码如下:
代码 5-2 产生访问令牌
xxxxxxxxxx
rtc::IAVDEngine::Instance()->uninit();
rtc::String server = _url;
Result result = rtc::IAVDEngine::Instance()->init(this, _url, _appkey, _secretkey);
if (result != AVD_OK){
AVD SDK C++端开发指南5
std::cout << "result = " << result << std::endl;
std::cout << "url = " << _url << std::endl;
return result;
}
Sleep(5000);
signal_initResult->emit(result);
xxxxxxxxxx
rtc::IAVDEngine::Instance()->uninit();
rtc::String server = _url;
Result result = rtc::IAVDEngine::Instance()->init(this, _url, _appkey, _secretkey);
if (result != AVD_OK){
std::cout << "result = " << result << std::endl;
std::cout << "url = " << _url << std::endl;
return result;
}
Sleep(5000);
signal_initResult->emit(result);
xxxxxxxxxx
_room = rtc::IRoom::obtain(roomId, userid);
if (!_room) {
std::cout << "error ,room " << roomId << " is null." << std::endl;
exit(-1);
}_room->setListener(this); _usermanager = rtc::IMUserManager::getUserManager(_room); _usermanager->setListener(this); _audio = rtc::IMAudio::getAudio(_room); _audiodevice = _audio->getAudioDevice(); _audio->setListener(this); _audiodevice->setListener(this);
xxxxxxxxxx
_video = rtc::IMVideo::getVideo(_room);
_cameradevice = _video->getCameraDevice();
_video->setListener(this);
_cameradevice->setListener(this);
return 0;
默认已打开音视频。
xxxxxxxxxx
异步返回
/** 加入房间操作异步返回
*
* @param[in] result 加入错误代码。
* @return 0 成功
* Err_Stream_Connection_TimeOut 房间加会超时:可能原因有服务器没返回信令握手等
* Err_Rest_GetMcu_Failure 集群中获取可用mcu 失败;* Err_Net_ChannelSignal_Failure 房间信令连接失败,检查服务器地址和端口,及本地网络;
* Err_Net_ChannelData_Failure 房间数据连接失败(未实现)* @sa join
*/
virtual void onJoinResult(Result result) = 0;
xxxxxxxxxx
** 摄像头视频发布通知
*
* @param[in] camera 摄像头信息,摄像头信息中 level 和description 为应用层数据,应用层可以使用这些字段保存次摄像头视频相关的应用逻辑数据,方便标示、订阅视频。*
* @note 当摄像头视频发布时,房间内所有用户接收到此通知;因通知的重要程
AVD SDK C++端开发指南7
度,将从 onCameraStatusNotify 中分离出此状态。
* @sa publishLocalCamera */
virtual void onPublishCameraNotify(const Camera& camera) = 0;
/** 摄像头视频取消发布通知
*
* @param[in] camera 摄像头信息。
*
* @note 当摄像头视频取消发布时,房间内所有用户接收到此通知;因通知的重要程度,将从 onCameraStatusNotify 中分离出此状态。
* @sa unpublishLocalCamera */
virtual void onUnpublishCameraNotify(const Camera& camera) = 0;
/** 本用户发布摄像头视频异步返回
*
* @param[in] result 错误代码。
* @param[in] fromId 摄像头 Id,唯一标示一路视频。
*
* @sa publishLocalCamera */
virtual void onPublishLocalResult(Result result, const DeviceId& fromId) = 0;
/** 本用户取消发布摄像头视频异步返回
*
* @param[in] result 错误代码。
* @param[in] fromId 摄像头 Id,唯一标示一路视频。
*
* @sa unpublishLocalCamera */
virtual void onUnpublishLocalResult(Result result, const DeviceId& fromId) = 0;
xxxxxxxxxx
/** 本用户订阅视频异步返回
*
* @param[in] result 错误代码。
* @param[in] fromId 摄像头 Id,唯一标示一路视频。
AVD SDK C++端开发指南8
*
* @sa subscribe */
virtual void onSubscribeResult(Result result, const DeviceId& fromId) = 0;
xxxxxxxxxx
/** 本用户取消订阅视频异步返回
*
* @param[in] result 错误代码。
* @param[in] fromId 摄像头 Id,唯一标示一路视频。
*
* @sa unsubscribe */
virtual void onUnsubscribeResult(Result result, const DeviceId& fromId) = 0;
xxxxxxxxxx
avdroomwindow->_camera_self = avdroomwindow->_cameradevice->getDefaultCamera();
avdroomwindow->_selfVideoRender = avdroomwindow->GetSelfVideoRender();
avdroomwindow->_video->attachRender(avdroomwindow->_camera_self.id, avdroomwindow->_selfVideoRender);
名词 | 解释 | 备注 |
---|---|---|
room | 房间对象,是实时沟通功能的一个管理单元,房间中会有多个沟通参与者即用户,房间有各种沟通功能,如文字聊天、语音视频等,沟通是基于房间的。不同房间沟通是隔离的 | |
user | 用户对象,每个加入到房间的客户端作为一个房间用户,用户将会根据权限和设备情况执行房间中各种沟通功能。用户Id:唯一标示一个房间用户的Id,由应用层来设置。 |
*错误码* | *描述* | *出现原因* | *处理方法* | *备注* |
---|---|---|---|---|
1000 | 基本错误 | 一些基本的无法细分错误 | 提供sdk日志排查 | |
1001 | 参数错误 | 参数是否填错 | 检查传参 | |
1002 | 没有初始化 | 没有初始化引擎 | 检查是否初始化 | |
1003 | 已经初始化 | sdk内部逻辑通知 | 无 | 对应用层无影响 |
1004 | 未实现 | 该方法未实现 | 反馈客户端开发排查 | |
1005 | 空指针 | 代码逻辑 | 反馈客户端开发排查 | |
1006 | 未知异常 | 代码逻辑 | 反馈客户端开发排查 | |
1007 | 内存越界 | 代码逻辑 | 反馈客户端开发排查 | |
1008 | 非法参数 | 代码逻辑 | 反馈客户端开发排查 | |
1009 | 操作无效 | 代码逻辑 | 反馈客户端开发排查 | |
1011 | 对象没找到 | 代码逻辑 | 反馈客户端开发排查 | |
1014 | 超时 | 可能网络异常,或者服务器访问不了 | 先检查网络或端口是否有问题 | |
1015 | 对象错误状态 | 代码逻辑 | 反馈客户端开发排查 | |
1016 | 网络错误 | 1在媒体通道还未连接上时去调用发布视频导致错误2或者初始化引擎报错 | 1等媒体通道连接上后再做音视频的操作2检查是否认证失败 | |
1017 | 没有token | 无 | 无 | 未用 |
1018 | 图像转换失败 | 主要是导入视频时报错 | 检测导入数据是否有问题 | |
1019 | 缓存不够 | 使用C接口返回错误 | c++到c转换数据时长度不够,反馈c++开发 | |
1020 | 设备被占用 | 比如摄像头已经被其他应用正在使用,当前sdk无法使用。 | 先检查是哪个应用正常使用摄像头,先关闭掉后sdk再使用 | |
1021 | 操作以及完成 | 无 | 无 | sdk内部通知,不影响应用层 |
1025 | 函数未认证 | 服务端验证是否有使用权限 | 找客户端排查 | |
1026 | 无 | 无 | 未用 | |
1027 | mcu服务器连接失败 | 由于媒体服务未连上产生的发布视频错误 | 检查下媒体链接是否有问题 | |
1028 | 视频不支持的分辨率 | |||
1029 | 房间已经关闭 | 无 | 无 | 未用 |
1030 | 媒体流连接超时 | 媒体服务连接超时 | 检查下媒体链接是否有问题 | |
1031 | 集群模式下获取mcu失败 | 初始化引擎返回的错误 | ||
1032 | 房间信令连接失败 | 连接服务端的信令通道失败 | 检查自己网络或者服务器是否可连 | |
1033 | 房间数据连接失败 | 无 | 无 | 未用 |
1034 | 等待数据 | 抓图时,数据还没有 | 重复调用即可 | |
*错误码* | *描述* | *出现原因* | *处理方法* | *备注* |
401 | 初始化引擎时未认证 | 认证的token或者key有问题 | 检查是否token或key使用错误,如果无误则需要找服务端排查 | |
402 | 客户端重复加入房间 | 内部逻辑,不会返回到应用层 | 无 | 不影响应用层 |
404 | 房间号不存在 | 房间号在服务器是不存在的 | 客户端先确认房间号,如果房间号正确,需要服务端排查 | |
405 | license 不够 | 用户数超过最大license 个数 | 找我们技术支持申请license | |
406 ~422 | 未用到,可以不用关心 | |||
434 | 无 | 未出现过,可以不用关心 | ||
445 | 主持人不在房间 | 主要使用token初始化引擎的用户 | 可以让主持人先加入房间或者修改后台设置 | |
503~508 | 无 | 未出现过,可以不用关心 | ||
601 | 无 | 未出现过,可以不用关心 | ||
602 | 无 | 未出现过,可以不用关心 | ||
612 | 该mcu服务器没有找到指定的房间 | 服务端的配置或者逻辑问题 | 需要服务端排查 | |
613 | 无 | 未出现过,可以不用关心 | ||
700 | 无 | 未出现过,可以不用关心 | ||
701 | 无 | 未出现过,可以不用关心 | ||
800 | 无 | 未用到,可以不用关心 | ||
801 | 无 | 未用到,可以不用关心 | ||
802 | 发布视频或音频时重复的设备id | 没有出现过 | 如果出现反馈日志,需要检查sdk逻辑 | |
803 | 房间错误的token | 没有出现过 | 如果出现,需要sdk和服务端排查下 | |
804 | 使用相同id加入房间,已经在房间的那个相同用户id会被踢出房间。 | 多个用户使用重复id的,则会被服务器踢出重复的。 | 保证每个加入房间用户id唯一 | |
805 | 无 | 无 | 暂未用 | |
806 | 无 | 无 | 暂未用 | |
807 | sdk无法链接上服务端的媒体通道,而被服务器踢出房间 | 可能网络或者服务端端口配置问题,sdk无法连上服务端的媒体通道 | 检查网络或者检查服务器端口 | |
808 | 被其他用户踢出房间 | 某个用户通过sdk接口把自己踢出房间了 | 无 | |
809 | ||||
810 | 房间被关闭 | 某个用户通过sdk接口关闭了房间 | 无 | |
811 | 服务器关闭 | 可能服务器正在重启 | 等服务器重启成功后重连 | |
812 | 自己收到其他用户连接超时后被踢出房间的通知 | 某个用户可能网络异常导致无法链接服务器而被服务器踢出房间了 | 无 | 忽略 |
815 | 房间被关闭了 | 可能是其他用户通过rest接口关闭了房间 | 无 | 这个是正常逻辑,不影响应用层 |