TRTC 支持四种不同的进房模式,其中视频通话(VideoCall)和语音通话(VoiceCall)统称为通话模式,视频互动直播(Live)和语音互动直播(VoiceChatRoom)统称为 直播模式。
通话模式下的 TRTC,支持单个房间最多300人同时在线,支持最多50人同时发言。适合1对1视频通话、300人视频会议、在线问诊、远程面试、视频客服、在线狼人杀等应用场景。
TRTC 云服务由两种不同类型的服务器节点组成,分别是“接口机”和“代理机”:
在通话模式下,TRTC 房间中的所有用户都会被分配到接口机上,相当于每个用户都是“主播”,每个用户随时都可以发言(最高的上行并发限制为50路),因此适合在线会议等场景,但单个房间的人数限制为300人。
您可以登录 Github 获取本文档相关的示例代码。
说明:如果访问 Github 较慢,您也可以直接下载 TXLiteAVSDK_TRTC_iOS_latest.zip。
您可以选择以下方式将 TRTC SDK 集成到项目中。
Podfile
文件,添加以下内容:
说明:如果该目录下没有
Podfile
文件,请先执行pod init
命令新建文件再添加以下内容。
target 'Your Project' do
pod 'TXLiteAVSDK_TRTC'
end
pod install
安装成功后当前项目根目录下会生成一个 xcworkspace 文件。如果您暂时不想安装 CocoaPods 环境,或者已经安装但是访问 CocoaPods 仓库比较慢,您可以直接下载 ZIP 压缩包,并参考 快速集成(iOS) 将 SDK 集成到您的工程中。
在Info.plist
文件中添加摄像头和麦克风的申请权限:
Key | Value |
---|---|
Privacy - Camera Usage Description | 描述使用摄像头权限的原因,例如,需要访问您的相机权限,开启后视频聊天才会有画面 |
Privacy - Microphone Usage Description | 描述使用麦克风权限的原因,例如,需要访问您的麦克风权限,开启后聊天才会有声音 |
TRTCCloud
实例。// 创建 trtcCloud 实例
let trtcCloud: TRTCCloud = TRTCCloud.sharedInstance()
trtcCloud.delegate = self
delegate
属性注册事件回调,并监听相关事件和错误通知。// 错误通知是要监听的,需要捕获并通知用户
func onError(_ errCode: TXLiteAVError, errMsg: String?, extInfo: [AnyHashable : Any]?) {
if ERR_ROOM_ENTER_FAIL == errCode {
toastTip("进房失败[\(errMsg ?? "")]")
exitRoom()
}
}
在调用 enterRoom() 接口时需要填写一个关键参数 TRTCParams,该参数包含的必填字段如下表所示。
参数名称 | 字段类型 | 补充说明 | 填写示例 |
---|---|---|---|
sdkAppId | 数字 | 应用 ID,您可以在 实时音视频控制台 中查看 SDKAppID。 | 1400000123 |
userId | 字符串 | 只允许包含大小写英文字母(a-z、A-Z)、数字(0-9)及下划线和连词符。 | test_user_001 |
userSig | 字符串 | 基于 userId 可以计算出 userSig,计算方法请参见 如何计算 UserSig 。 | eJyrVareCeYrSy1SslI... |
roomId | 数字 | 默认不支持字符串类型的房间号,字符串类型的房间号会影响进房速度。如果您确实需要支持字符串类型的房间号,可以 提交工单 联系我们。 | 29834 |
注意:TRTC 同一时间不支持两个相同的 userId 进入房间,否则会相互干扰。
roomId
代指的音视频房间。如果该房间不存在,SDK 会自动创建一个以字段roomId
的值为房间号的新房间。appScene
参数,使用错误可能会导致卡顿率或画面清晰度不达预期。TRTCAppScene.videoCall
。TRTCAppScene.audioCall
。onEnterRoom(result)
事件。其中,参数result
大于0时表示进房成功,具体数值为加入房间所消耗的时间,单位为毫秒(ms);当result
小于0时表示进房失败,具体数值为进房失败的错误码。func enterRoom() {
let params = TRTCParams.init()
params.sdkAppId = sdkappid
params.userId = userid
params.userSig = usersig
params.roomId = 908
trtcCloud.enterRoom(params, appScene: TRTCAppScene.videoCall)
}
func onEnterRoom(_ result: Int) {
if result > 0 {
toastTip("进房成功,总计耗时[\(result)]ms")
} else {
toastTip("进房失败,错误码[\(result)]")
}
}
注意:
- 如果进房失败,SDK 同时还会回调
onError
事件,并返回参数errCode
(错误码)、errMsg
(错误原因)以及extraInfo
(保留参数)。- 如果已在某一个房间中,则必须先调用
exitRoom()
退出当前房间,才能进入下一个房间。
SDK 支持自动订阅和手动订阅。
在自动订阅模式下,进入某个房间之后,SDK 会自动接收房间中其他用户的音频流,从而达到最佳的“秒开”效果:
view
关联起来。// 实例代码:根据通知订阅(或取消订阅)远端用户的视频画面
func onUserVideoAvailable(_ userId: String, available: Bool) {
let remoteView = remoteViewDic[userId] as! UIView
if available {
trtcCloud.startRemoteView(userId, view: remoteView)
trtcCloud.setRemoteViewFillMode(userId, mode: TRTCVideoFillMode.fit)
} else {
trtcCloud.stopRemoteView(userId)
}
}
说明:如果您在收到
onUserVideoAvailable()
事件回调后没有立即调用startRemoteView()
订阅视频流,SDK 将会在5s内停止接收来自远端的视频数据。
您可以通过 setDefaultStreamRecvMode() 接口将 SDK 指定为手动订阅模式。在手动订阅模式下,SDK 不会自动接收房间中其他用户的音视频数据,需要您手动通过 API 函数触发。
//示例代码:发布本地的音视频流
trtcCloud.setLocalViewFillMode(TRTCVideoFillMode.fit)
trtcCloud.startLocalPreview(frontCamera, view: localView)
trtcCloud.startLocalAudio()
注意:Mac 版 SDK 默认会使用当前系统默认的摄像头和麦克风。您可以通过调用 setCurrentCameraDevice() 和 setCurrentMicDevice() 选择其他摄像头和麦克风。
调用 exitRoom() 方法退出房间,SDK 在退房时需要关闭和释放摄像头、麦克风等硬件设备,因此退房动作并非瞬间完成的,需收到 onExitRoom() 回调后才算真正完成退房操作。
// 调用退房后请等待 onExitRoom 事件回调
trtcCloud.exitRoom()
func onExitRoom(_ reason: Int) {
print("离开房间[\(roomId)]: reason[\(reason)]")
}
注意:如果您的 App 中同时集成了多个音视频 SDK,请在收到
onExitRoom
回调后再启动其它音视频 SDK,否则可能会遇到硬件占用问题。
大数据杀熟已经泛滥到了不得不治理的时候。一方面大数据杀熟几乎无处不在,另一...
这个世界是纷繁复杂的,同时又是符合一些简单规律的。朱子有句名言:千头万绪,...
前言 这篇文章适合所有的 C# 开发新手、老鸟以及想准备学习开发 C# 的程序猿。.N...
2月份GitHub上最热门的开源项目排行已经出炉啦,这个月和币圈相关的开源项目上榜...
上个月体检报告新鲜出炉。其中「胆红素」一项异常,报告建议再进行检查,有问题...
IBM于1998年提出并于1999年3月在美国纽约宣布推出了极具创造性的“X架构”,当时...
1. 接口描述 接口请求域名: cvm.tencentcloudapi.com 。 本接口 (RenewInstance...
1、DHCP的责任 ①.保证任何IP地址在同一时刻只能由一台DHCP客户机所使用。 ②.DH...
有送 域名 的 虚拟主机 吗?市面上是有送域名的虚拟主机,但大多数服务商的虚拟...
行业专家Mark van Rijmenam博士撰写了一篇令人关注的文章,对大数据在CRM技术中...