Stream 事件列表
通过 stream.on('eventName') 监听指定的事件。您可以通过 stream 事件实现感知流播放状态,感知 stream 连接状态,感知采集设备状态等功能,下面是这些事件的详细介绍。
注意:
- 事件需要在事件触发之前监听,这样才能收到相应的事件通知,因此建议在 client 进房前做好事件监听,这样才能确保不会漏掉事件通知。
Members
(static) PLAYER_STATE_CHANGED
- Default Value:
-
- 'player-state-changed'
Audio/Video Player 状态变化事件 App 可根据 Stream 的播放状态变化来更新 UI,例如:通过监听 video player 状态变更事件来控制图标、遮罩的样式。
- 'PLAYING':开始播放
- event.reason 为 'playing' 或者 'unmute'。
- 'PAUSED':暂停播放
- event.reason 为 'pause' 时,由 <audio>/<video> element 的 pause 事件触发,如下几种情况会触发:
- 调用 HTMLMediaElement.pause 接口。
- 在 stream.play(elementId) 后,从 DOM 中移除 elementId 对应的 div 容器。
- 在 stream.play(elementId) 后,移动 elementId 对应的 div 容器,在 Chrome M70 版本及以下的浏览器上可能会触发该事件,此时您需要调用 Stream.resume() 继续播放。
- event.reason 为 'mute' 时。详见事件 MediaStreamTrack.mute_event
- 若 LocalStream 触发该事件,表明音频/视频采集暂停,通常是设备异常引起,如设备被其他应用抢占,此时需引导用户重新采集。
- 若 RemoteStream 触发该事件,表明收到的音频/视频数据不足以播放。通常是网络抖动引起,接入侧无需做任何处理。当收到的数据足以播放时,会自动恢复。
- event.reason 为 'pause' 时,由 <audio>/<video> element 的 pause 事件触发,如下几种情况会触发:
- 'STOPPED':停止播放
- event.reason 为 'ended'。
reason 状态变化原因:
- 'playing':开始播放,详见事件 HTMLMediaElement.playing_event
- 'mute':音视频轨道暂时未能提供数据,详见事件 MediaStreamTrack.mute_event
- 'unmute':音视频轨道恢复提供数据,详见事件 MediaStreamTrack.unmute_event
- 'ended':音视频轨道已被关闭
- 'pause':播放暂停
Example
stream.on('player-state-changed', event => {
console.log(`${event.type} player is ${event.state} because of ${event.reason}`);
});
(static) SCREEN_SHARING_STOPPED
- Default Value:
-
- 'screen-sharing-stopped'
本地屏幕分享停止事件通知,仅对本地屏幕分享流有效。
Example
stream.on('screen-sharing-stopped', () => {
console.log('screen sharing was stopped');
});
(static) CONNECTION_STATE_CHANGED
- Since:
-
- v4.10.1
- Default Value:
-
- 'connection-state-changed'
Stream 连接状态变更事件
- 'DISCONNECTED':连接断开
- 'CONNECTING':正在连接中
- 'CONNECTED':已连接
- 'RECONNECTING':自动重连中
不同状态变更的含义:
- DISCONNECTED -> CONNECTING: 正在尝试建立连接,调用推流或者订阅接口但尚未成功时触发。
- CONNECTING -> CONNECTED: 连接建立成功,推流成功或订阅成功触发。
- CONNECTED -> DISCONNECTED: 连接中断,当网络异常导致连接断开时触发。
- DISCONNECTED -> RECONNECTING: 正在重连,当连接异常断开时,SDK 尝试自动重连时触发。
- RECONNECTING -> CONNECTED: SDK 自动重连成功。
- RECONNECTING -> DISCONNECTED: SDK 自动重连失败。
处理建议:可以监听该事件,准确区分出每路 Stream 的连接状态。在恰当时机给用户做提示。
例如:当出现 RECONNECTING 时,提示用户当前连接状态异常,正在进行重连,引导用户检查自身网络是否正常。
Note:
- 若您需要监听 Stream 的连接状态变更,请在 stream-added 事件监听该事件,并在 stream-removed 事件取消该事件监听。
Example
stream.on('connection-state-changed', (event) => {
console.log(`prevState: ${event.prevState}, state: ${event.state}`);
});
(static) DEVICE_AUTO_RECOVERED
- Since:
-
- v4.13.0
- Default Value:
-
- 'device-auto-recovered'
当正在使用的摄像头、麦克风采集异常时,SDK 会尝试自动恢复采集。当自动恢复采集成功时,会通知该事件。否则 SDK 会抛出错误 DEVICE_AUTO_RECOVER_FAILED。
Example
localStream.on('device-auto-recovered', (event) => {
// 当前事件是否恢复了摄像头、麦克风的采集,可能同时为 true。
console.warn(event.isCamera, event.isMicrophone);
// 恢复采集后,当前 localStream 使用的摄像头、麦克风 deviceId。
console.warn(event.cameraId, event.microphoneId);
});
(static) ERROR
- Default Value:
-
- 'error'
错误事件,当出现不可恢复错误后,会抛出此事件
Example
stream.on('error', error => {
const errorCode = error.getCode();
if (errorCode === 0x4043) {
// 自动播放受限,引导用户手势操作并调用 stream.resume 恢复音视频播放
// 参考:https://trtc-1252463788.file.myqcloud.com/web/docs/module-ErrorCode.html#.PLAY_NOT_ALLOWED
} else if (errorCode === 0x4044) {
// 媒体设备被拔出后自动恢复失败,参考:https://trtc-1252463788.file.myqcloud.com/web/docs/module-ErrorCode.html#.DEVICE_AUTO_RECOVER_FAILED
}
});