CloudHub JSSDK
- 概览
- CloudHubRTC
- CloudHubRTCObject
- Client
- ClientEvent
- ClientLiveTranscoding
- ClientChannelMediaRelayConfig
- Stream
- StreamEvent
- DeviceManager
- 常量
SDK 中的常量
使用方式: CloudHubRTC.CONSTANTS. 常量名,如:CloudHubRTC.CONSTANTS.MSG_TO_ALLUSER
发送消息
名称 | 类型 | 描述 |
---|---|---|
MSG_TO_ALLUSER | string | 发送信息给频道中的所有人 |
MSG_TO_ALLEXCEPTSENDER | string | 发送信息给除自己以外的频道中所有人 |
MSG_TO_NONEUSER | string | 只发送信息到信令服务器,不发给任何人 |
userId | string | 某用户 ID。Note: 只发送信息给此用户 |
补充说明
聊天消息转发规则说明
聊天消息 1 秒内的数据如果超过 100 条,则丢弃 100 条之后的聊天消息。例如:1 秒内发送 150 条数据,频道内用户只收到前 100 条数据,如果 1s 内发送 90 条数据,则所有人都能收到这 90 条数据。
频道的使用场景说明
直播场景,有主播和观众两种用户角色,可以通过 Client.setClientRole 方法设置主播和观众的角色。主播可以收发语音 / 视频流,而观众只能接收语音 / 视频,无法发送。直播场景有如下限制:
- 直播场景中观众的加入 / 离开的消息不会触发,即 client.on(“peer-join”) 和 client.on( “peer-leave”) 不触发回调。
- 直播场景中调用 setProperty 接口,如果被改变者为观众,则不会通知自定义用户属性改变,即 Client.on(“user-properties-update”) 不触发回调。
- 直播场景中建议只让部分人 (主播或者被授予权限的观众等) 能够发 pubMsg/delMsg,而不要让所有人都能主动发 pubMsg/delMsg【比如: 10 万人的频道,观众有 9.99 万人,那么这些人不应该有主动发 pubMsg/delMsg 的能力,而应该让主播授权给某个观众,这个观众才能发 pubMsg/delMsg】。
在通信场景中,频道中的任何用户都可以收发语音 / 视频流,且直播场景的各种限制都没有,唯一限制就是不允许进入太多用户,这个场景适用于一对一通话或群聊。
信令通道和媒体传输通道说明
- 信令通道是客户端与信令服务器通信的基础通道,频道的任何通信行为都依赖于此通道。
- 媒体传输通道是客户端的流与媒体服务器建立的通道,此通道用于音视频的传输。
- 信令通道失去连接会使媒体传输通道断开,媒体传输通道断开不会影响到信令通道。
- 流的 publish、subscribe、unpublish、unsubscribe 依赖于信令通道,因为在建立媒体传输通道前需要先通过信令通道进行通信,另外流的 mute 操作也依赖于信令通道。
- 一旦信令通道断开,请不要进行任何通信行为(如:pubMsg、delMsg 等),建议界面出现浮层,不要让用户进行界面上的操作,直到信令通道连接恢复。
单流模式说明
- 单流模式指只能发布 1 个设备流。
- 频道默认使用单流模式。
多流模式说明
- 多流模式指可以发布多个设备流。
- 需要启用多流模式时,请在 joinChannel 前调用 enableMultiStream 方法进行启用。
- joinChannel 调用后 enableMultiStream 方法将失效。
- 不支持多流模式和单流模式在频道内切换。
- 移动端不支持多流模式。
- 多流模式不支持切换视频设备。
浏览器 getUserMedia 接口失败的错误类型
- AbortError[中止错误]
尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出 NotReadableError 异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。
- NotAllowedError[拒绝错误]
用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。
较旧版本的规范使用了 SecurityError,但在新版本当中 SecurityError 被赋予了新的意义。
- NotFoundError[找不到错误]
找不到满足请求参数的媒体类型。
- NotReadableError[无法读取错误]
尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。
- OverConstrainedError[无法满足要求错误]
指定的要求无法被设备满足,此异常是一个类型为 OverconstrainedError 的对象,拥有一个 constraint 属性,这个属性包含了当前无法被满足的 constraint 对象,还拥有一个 message 属性,包含了阅读友好的字符串用来说明情况。
因为这个异常甚至可以在用户尚未授权使用当前设备的情况下抛出,所以应当可以当作一个探测设备能力属性的手段[fingerprinting surface]。
- SecurityError[安全错误]
在 getUserMedia() 被调用的 Document(Document 接口表示任何在浏览器中载入的网页,并作为网页内容的入口,也就是 DOM 树) 上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。
- TypeError[类型错误]
constraints 对象未设置[空],或者都被设置为 false。
- TimeoutError [请求超时 ]
因为 getUserMedia 接口调用可能出现成功 / 失败回调都没有触发 (浏览器内部 getUserMedia 问题),因此 SDK 给 getUserMedia 添加超时时间 15 秒,一旦超过 15 秒还没有成功 / 失败回调则认为超时。
因为获取摄像头需要用户手动授权,而授权框在 15 秒内没有操作,则认为 getUserMedia 请求超时(即:超时 15 秒后用户就算允许授权,getUserMedia 也认为是失败的)。
getUserMedia 默认超时时间为 15 秒,如果需要修改这个时间,请设置 CloudHubRTC.DEVICE_ADAPTER_CONFIG.GET_USER_MEDIA_TIMEOUT_TS(毫秒级),如:CloudHubRTC.DEVICE_ADAPTER_CONFIG.GET_USER_MEDIA_TIMEOUT_TS = 30000 表示将超时时间设置为 30 秒。
- UndefinedError [未定义错误 ]
可能因为各种系统各种浏览器内置的 getUserMedia 接口返回的结果不标准,因此 SDK 将不是上述类型的都统一认定为未定义错误。