rtc-room 实时音视频通话房间
基础库 v3.200.106 起支持,默认为同层渲染。
解释:实时音视频 RTC 房间,内部由多个 rtc-room-item 组件。该组件还提供丰富的 API 来控制登录、退出房间,发布 / 取消发布本地流,订阅 / 取消订阅远端流,控制远端流音视频等,详见 swan.createRtcRomContext 。只针对以下一级类目及其二级类目开放,详见支持服务类目。需要先通过类目审核,再在小程序管理后台,“开发管理 -> 功能管理”页面的“实时音视频通话”模块中自助开通该组件权限,详见接入流程。
Web 态说明:Web 态使用降级方案支持 rtc 实时音视频。设置 rtc-room 组件的相关属性和方法无效。
支持服务类目
一级类目 | |||||||
---|---|---|---|---|---|---|---|
快递业与邮政 | 教育 | 政务民生 | 生活 | 交通 | 房地产 | IT 科技 | 旅行 |
时政新闻 | 娱乐 | 商家自营 | 电商 | 商业服务 | 公益 | 汽车 | 健康 |
接入流程
1.【小程序】支持在“开发者平台 -> 开发管理 -> 功能管理 -> 实时音视频通话”开通使用。
当该小程序类目不属于上述类目时,暂不支持开通该服务,支持服务类目见文中支持服务类目。
2. 【小程序】符合类目要求时,点击开通后引导进入智能云平台进行登录。
3. 注册完成后进“云资源访问授权页面”,点击授权后进行实名认证判断:
3.1 当实名认证已完成后,则跳转至小程序开发者平台,表示开通完成;
3.2 当实名认证未完成时,则跳转至实名认证页面进行认证,按照页面指引进行认证。
认证申请提交后等待审核结果,预计半小时左右。
(1)审核通过后智能云短信通知,重新打开小程序开发者平台,表示开通完成。
(2)审核未通过后智能云短信通知,重新打开小程序开发者平台,表示未审核成功,点击『立即认证』查看认证失败原因并重新认证。
4. 在开发者平台点击『实时音视频通话』进入智能云 RTC 控制台,创建应用获取 SDKAppID ,按照操作指南进行开发。
5. 开发完成后可在小程序平台进行 RTC 更多操作和查看:
- 查看费用:跳转到智能云平台快速查看消耗费用明细情况。
- 关闭:快速暂停该能力使用,暂停后不再耗费费用,该能力也无法使用。
- 开通:重新使用该能力,开通后该能力可以继续使用,随着使用开始消耗费用。
属性说明
属性名 | 类型 | 默认值 | 必填 | 说明 | Web 态说明 |
---|---|---|---|---|---|
id | String | 是 | rtc-room 组件的唯一标识符 | ||
enable-camera | Boolean | true | 否 | 是否开启摄像头 | |
enable-auto-focus | Boolean | true | 否 | 是否开启摄像头自动对焦 | |
enable-zoom | Boolean | false | 否 | 是否支持双手滑动调整摄像头聚焦 | |
String | front | 否 | 设置前置还是后置摄像头,有效值:front、back | ||
enable-mic | Boolean | true | 否 | 是否开启麦克风 | |
enable-agc | Boolean | false | 否 | 是否开启音频自动增益 | |
enable-ans | Boolean | false | 否 | 是否开启音频噪声抑制 | |
bitrate | Number | 900 | 否 | 最大码率 | |
video-width | Number | 360 | 否 | 视频分辨率宽 | |
video-height | Number | 640 | 否 | 视频分辨率高 | |
enable-remote-mirror | Boolean | false | 否 | 设置远端看到的画面的镜像效果,该属性的变化不会影响到本地画面,仅影响远端看到的画面效果 | |
String | auto | 否 | 设置本地摄像头预览画面的镜像效果,有效值:auto、enable、disable | ||
String | speaker | 否 | 设置声音输出方式,有效值:speaker、ear | ||
bindstatechange | Eventhandle | 否 | 房间状态变化事件,参考下方状态码, | ||
binderror | Eventhandle | 否 | 错误事件。参考下方错误码, |
device-position 有效值
值 | 说明 |
---|---|
front | 前置摄像头 |
back | 后置摄像头 |
local-mirror 有效值
值 | 说明 |
---|---|
auto | 前置摄像头镜像,后置摄像头不镜像(系统相机的表现) |
enable | 前置摄像头和后置摄像头都镜像 |
disable | 前置摄像头和后置摄像头都不镜像 |
sound-mode 有效值
值 | 说明 |
---|---|
speaker | 扬声器 |
ear | 听筒 |
状态码
code | msg | userInfo | 说明 | 最低版本 |
---|---|---|---|---|
1001 | LOCAL_JOIN | { userId, displayName } | 成功进入房间 | 3.200.106 |
1002 | REMOTE_USER_JOIN | { userId, displayName } | 远端用户进入房间 | 3.200.106 |
1003 | REMOTE_USER_LEAVE | { userId, displayName } | 远端用户离开房间 | 3.200.106 |
1004 | REMOTE_USER_KICKOUT | { userId } | 有成员被踢出房间 | 3.250.12 |
2001 | REMOTE_STREAM_ADD | { userId, displayName } | 远端用户发布音视频流 | 3.200.106 |
3002 | REMOTE_STREAM_REMOVE | { userId, displayName } | 远端用户取消发布音视频流 | 3.200.106 |
错误码
errCode | errMsg | 说明 |
---|---|---|
10001 | internal error | 内部错误 |
10002 | network error | 网络请求失败 |
10003 | user deny | 用户拒绝 |
10004 | user not logged in | 账号失效 |
10005 | system deny | 系统拒绝 |
20001 | NO_SUCH_ROOM | 房间不存在 |
20001 | USERID_ALREADY_EXIST_ERROR | 用户已存在 |
20001 | login fail : execute fail | 执行失败 |
20001 | login fail : init rtc sdk fail | 初始化 rtc sdk 失败 |
20001 | login fail : so download failed | so 下载失败 |
20001 | login fail : so load failed | so 加载失败 |
20001 | login fail : error | 登陆失败 |
20001 | login fail : timeout | 登陆超时 |
20002 | ROOM_ALREADY_EXIST | room 组件已经有房间在登陆 |
20003 | DEVICE_IS_NOT_SUPPORTED | 安卓 5.0 以下的设备不支持 rtc 功能 |
30001 | ROOM_CONNECTION_LOST | 与服务器连接丢失 |
30002 | MEDIA_CONNECTION_LOST | 媒体通道连接丢失 |
40001 | OPEN_CAMERA_FAIL | 相机打开失败 |
40002 | REMOTE_ITEM_ALREADY_PLAYING | rtc-room-item 已经被占用 |
40003 | PUBLISH_FAIL | 本地发布流失败 |
示例
跳转编辑工具
扫码体验
代码示例
请使用百度APP扫码
图片示例
代码示例
- SWAN
- JS
<view class="doubleroom-container">
<rtc-room
id="doubleRoom"
class="rtc-room"
enable-camera="{{enableCamera}}"
enable-auto-focus="{{enableAutoFocus}}"
enable-zoom="{{enableZoom}}"
device-position="{{devicePosition}}"
enable-mic="{{enableMic}}"
enable-agc="{{enableAgc}}"
enable-ans="{{enableAns}}"
bitrate="{{bitrate}}"
video-width="{{videoWidth}}"
video-height="{{videoHeight}}"
enable-remote-mirror="{{enableRemoteMirror}}"
local-mirror="{{localMirror}}"
sound-mode="{{soundMode}}"
bindstatechange="handleStateChange"
binderror="handleError">
<rtc-room-item
id="localView"
type="local"
user-id="{{localUserId}}"
data-key="local"
class="{{isLocalMainView ? 'main-view' : 'small-view'}}"
bindtap="toggleMainView">
<view class="loading" s-if="{{streamList.length === 0}}">
<image
src="https://b.bdstatic.com/searchbox/icms/searchbox/img/loading-icon.png"
class="rotate-img">
</image>
<view class="loading-text">等待接听...</view>
</view>
<view s-if="{{!enableCamera}}" class="camera-off-container">
<image
class="camera-off-image"
src="https://b.bdstatic.com/searchbox/icms/searchbox/img/off-camera.png">
</image>
<view class="camera-off-text">本地摄像头未打开</view>
</view>
</rtc-room-item>
<rtc-room-item
id="remoteView"
s-if="streamList.length !== 0"
type="remote"
user-id="{{streamList[0].userId}}"
data-key="remote"
class="{{isLocalMainView ? 'small-view' : 'main-view'}}"
bindtap="toggleMainView">
</rtc-room-item>
</rtc-room>
<view class="handle-btns">
<view class="btn-normal {{enableMic ? '' : 'btn-active'}}" bindtap="toggleAudio">
<image
class="btn-image"
src="{{enableMic
? 'https://b.bdstatic.com/searchbox/icms/searchbox/img/audio-off.png'
: 'https://b.bdstatic.com/searchbox/icms/searchbox/img/audio-on.png'
}} ">
</image>
</view>
<view class="btn-normal {{soundMode === 'ear' ? 'btn-active' : ''}}" bindtap="toggleSoundMode">
<image
class="btn-image"
src="{{soundMode === 'ear'
? 'https://b.bdstatic.com/searchbox/icms/searchbox/img/speaker-off.png'
: 'https://b.bdstatic.com/searchbox/icms/searchbox/img/speaker-on.png'}} ">
</image>
</view>
<view class="btn-normal btn-hangup" bindtap="hangUp">
<image
class="btn-image"
src="https://b.bdstatic.com/searchbox/icms/searchbox/img/hangup.png">
</image>
</view>
<view class="btn-normal {{enableCamera ? '' : 'btn-active'}}" bindtap="toggleVideo">
<image
class="btn-image"
src="{{enableCamera
? 'https://b.bdstatic.com/searchbox/icms/searchbox/img/camera-off.png'
: 'https://b.bdstatic.com/searchbox/icms/searchbox/img/camera-on.png'}} ">
</image>
</view>
<view class="btn-normal" bindtap="switchCamera" >
<image
class="btn-image"
src="https://b.bdstatic.com/searchbox/icms/searchbox/img/switch.png">
</image>
</view>
</view>
<view class="top-mask"></view>
<view class="bottom-mask"></view>
</view>