Skip to content

媒体事件

媒体事件用于监听音视频流状态变化、音量指示、屏幕共享等媒体相关的事件。

音频事件

audioVolume

音量指示事件,用于监听用户的音量变化。

typescript
audioVolume: (volumeInfos: AliRtcAudioVolumeInfo[], totalVolume: number) => void

参数说明:

  • volumeInfos: 音量信息数组
  • totalVolume: 总音量
javascript
engine.on('audioVolume', (volumeInfos, totalVolume) => {
  console.log('总音量:', totalVolume);

  volumeInfos.forEach(volumeInfo => {
    const { uid, volume } = volumeInfo;
    console.log(`用户 ${uid} 音量:`, volume);

    // 更新音量指示器 UI
    updateVolumeIndicator(uid, volume);
  });
});

// 启用音量检测
engine.enableAudioVolumeIndication(300); // 每300ms检测一次

本地媒体事件

localDeviceException

本地设备异常事件。

typescript
localDeviceException: (deviceType: AliRtcEngineLocalDeviceType, exceptionType: AliRtcEngineLocalDeviceExceptionType, message: string) => void

参数说明:

  • deviceType: 设备类型(摄像头/麦克风/扬声器)
  • exceptionType: 异常类型
  • message: 异常消息
javascript
engine.on('localDeviceException', (deviceType, exceptionType, message) => {
  console.error('本地设备异常:', deviceType, exceptionType, message);

  switch (deviceType) {
    case AliRtcEngine.AliRtcEngineLocalDeviceType.AliRtcEngineLocalDeviceCamera:
      handleCameraException(exceptionType, message);
      break;
    case AliRtcEngine.AliRtcEngineLocalDeviceType.AliRtcEngineLocalDeviceMicrophone:
      handleMicrophoneException(exceptionType, message);
      break;
    case AliRtcEngine.AliRtcEngineLocalDeviceType.AliRtcEngineLocalDeviceSpeaker:
      handleSpeakerException(exceptionType, message);
      break;
  }
});

function handleCameraException(exceptionType, message) {
  switch (exceptionType) {
    case AliRtcEngine.AliRtcEngineLocalDeviceExceptionType.AliRtcEngineLocalDeviceExceptionDeviceNoPermission:
      showCameraPermissionDialog();
      break;
    case AliRtcEngine.AliRtcEngineLocalDeviceExceptionType.AliRtcEngineLocalDeviceExceptionDeviceNotAvailable:
      showCameraNotAvailableMessage();
      break;
    case AliRtcEngine.AliRtcEngineLocalDeviceExceptionType.AliRtcEngineLocalDeviceExceptionDeviceOccupied:
      showCameraOccupiedMessage();
      break;
  }
}