StreamEvent

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 触发该事件,表明收到的音频/视频数据不足以播放。通常是网络抖动引起,接入侧无需做任何处理。当收到的数据足以播放时,会自动恢复。
  • 'STOPPED':停止播放
    • event.reason 为 'ended'。

reason 状态变化原因:

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
  }
});