Pano开发者中心
  • 开发者中心
  • 下载中心

›Web SDK

新手入门

  • 简介
  • 名词解释
  • 创建第一个应用

规则说明

  • Channel ID命名规则
  • 权限控制
  • 计费说明
  • 频道最大时长说明
  • 每月一万分钟免费说明
  • 布局参数说明
  • 水印

场景方案

    教育行业

    • 1vN互动小班课
    • 互动直播大班课

快速接入

  • 简介
  • 音视频

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native
    • Unity

    白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Electron
    • Flutter
    • React Native

高级功能(RTC)

  • 简介
  • 屏幕共享
  • 分组讨论
  • 状态回调
  • 设备诊断
  • 音量指示
  • 控制声音
  • 声卡操作
  • 混音/伴音
  • 混响
  • 耳返
  • 变声
  • 美颜
  • 音视频数据回调
  • 音视频外部采集
  • 收发多路视频
  • 多窗口渲染
  • 性能检测
  • 截图
  • 反馈

高级功能(RTS)

  • 简介
  • 白板

    • Windows (C++)
    • iOS (Objective-C)
    • Android (Java)
    • Web
    • Flutter

    标注

    • 视频标注
    • 共享标注
    • 外部标注

    消息

    • 消息服务

    远程控制

    • 远程控制

操作实践

  • 切换大小屏

RESTful API

  • 基本格式
  • 生成Token
  • 频道管理
  • 云端录制
  • CDN推流
  • 文档转码
  • 消息服务
  • 服务端消息通知

SDK API

  • SDK接口说明
  • Windows (C++)
  • macOS/iOS (Objective-C)
  • Android (Java)
  • Web SDK (IE专用版)
  • Web SDK

    • 浏览器兼容性
    • RtcEngine
    • GroupManager
    • RtcWhiteboard
    • RtsService
    • RtcMessage
    • Annotation
    • Constants

更新记录

  • 简介
  • Windows
  • macOS
  • iOS
  • Android
  • Electron
  • Flutter
  • React Native
  • Unity
  • Web(全功能SDK)
  • Web(RTS SDK)
  • Web(IE专用音视频SDK)

帮助

  • FAQ
  • 更多帮助

RtcEngine

Constructor

+ new RtcEngine(appId: string): RtcEngine

构造函数

Parameters:

▪ appId: string

appId

Returns: RtcEngine


+ new RtcEngine(config: object): RtcEngine

构造函数

Parameters:

▪ config: {appId: string, rtcServer: string}

Returns: RtcEngine

Methods

getCams

▸ getCams(successCb: function, failCb: function): void

获取摄像头设备列表

Parameters:

▪ successCb: function

成功回调,回调入参是获取到的设备列表

▸ (devices: MediaDeviceInfo[]): any

Parameters:

NameType
devicesMediaDeviceInfo[]

▪ failCb: function

失败回调,回调入参是捕获的异常

▸ (error: any): any

Parameters:

NameType
errorany

Returns: void


getMics

▸ getMics(successCb: function, failCb: function): void

获取 mic 列表

Parameters:

▪ successCb: function

成功回调,回调入参是获取到的设备列表

▸ (devices: MediaDeviceInfo[]): any

Parameters:

NameType
devicesMediaDeviceInfo[]

▪ failCb: function

失败回调,回调入参是捕获的异常

▸ (error: any): any

Parameters:

NameType
errorany

Returns: void


getSdkVersion

▸ getSdkVersion(): string

返回 PANO SDK 的版本信息

Returns: string


checkEnvRequirement

▸ checkEnvRequirement(): boolean

检测当前浏览器环境是否支持PANO SDK。我们没有进行浏览器版本的全量测试, 理论上支持Chromium内核的非Chrome浏览器,例如新版Edge浏览器和QQ浏览器等,如果在这些浏览器中检测返回false,您可以尝试调用PANO SDK。

Returns: boolean


getSpeakers

▸ getSpeakers(successCb: function, failCb: function): void

获取 speaker 设备列表

Parameters:

▪ successCb: function

成功回调,回调入参是获取到的设备列表

▸ (devices: MediaDeviceInfo[]): any

Parameters:

NameType
devicesMediaDeviceInfo[]

▪ failCb: function

失败回调,回调入参是捕获的异常

▸ (error: any): any

Parameters:

NameType
errorany

Returns: void


getWhiteboard

▸ getWhiteboard(): RtcWhiteboard

获取白板控制接口

Returns: RtcWhiteboard


joinChannel

▸ joinChannel(channelParam: object, optionalConfig: object): QResult

加入频道

Parameters:

▪ channelParam: object

join channel 参数

NameTypeDescription
channelIdstring最大长度是128字节,频道ID只能由以下字符构成 "0-9", "a-z", "A-Z", 空格 (不能出现在首部和尾部), "!", "#", "$", "%", "&", "(", ")", "+", ",", "-", ".", ":" ";", "<", "=", ">", "?", "@", "[", "]", "^", "_", "~"
channelModechannelMode1_on_1 或者 meeting
tokenstringApp服务器向PANO获取的token
userIdstring应用定义的用户ID,string形式的数字,转换为数字后的范围不超过区间[1, 2^63 - 1]
attendeeIdstring与PSTN端绑定时的ID,string形式的数字,转换为数字后的范围不超过区间[1, 2^31 - 1],如果不需要绑定PSTN用户则可以不传
userNamestring用户昵称
subscribeAudioAllboolean是否自动订阅全部用户的音频。如果为true,无需调用subscribeAudio也可以接收所有人的音频,unsubscribeAudio无法取消订阅音频;否则,由App开发者自行组织调用subscribeAudio和unsubscribeAudio

▪ optionalConfig: object

可选参数,用于指定 channel 的一些初始配置

NameTypeDescription
joinChannelTypeJoinChannelTypejoinChannel 时指定将要加入的channel类型,可以只开启音视频 channel,或者只开启白板 channel,或者两个都开启

Returns:

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。joinChannel是异步过程,通过监听joinChannelConfirm获得最终joinChannel结果。


leaveChannel

▸ leaveChannel(): QResult

离开频道

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


destroy

▸ destroy(): QResult

释放RtcEngine对象的资源

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


muteAudioPlayout

▸ muteAudioPlayout(): QResult

使接收的音频静音,若调用时当前音频播放已经被静音,则不产生影响

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


unmuteAudioPlayout

▸ unmuteAudioPlayout(): QResult

使接收的音频从静音中恢复播放,若调用此方法时音频播放正常,则不产生影响

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


setAudioPlayoutVolume

▸ setAudioPlayoutVolume(volume: number): QResult

设置音频播放的音量

Parameter:

NameTypeDescription
volumenumber范围是区间[0,1]

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


getAudioPlayoutVolume

▸ getAudioPlayoutVolume(): number

获取音频播放的音量

Returns: number

音量范围是区间[0,1]

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


muteMic

▸ muteMic(): QResult

将自己发布的音频静音。如果当前正在使用PSTN通话,那么PSTN通话也将被静音。

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


muteCam

▸ muteCam(): QResult

暂停视频,摄像头仍然采集,媒体连接仍然保持,发送的视频内容是全黑屏画面,适合临时停用视频的场景

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


muteScreen

▸ muteScreen(): QResult

暂停屏幕共享,可用于开启屏幕共享之后临时停止共享的场景

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


selectCam

▸ selectCam(deviceId: string): QResult

选择摄像头

Parameters:

NameTypeDescription
deviceIdstringcam 设备id

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


selectMic

▸ selectMic(deviceId: string): QResult

设置 mic

Parameters:

NameTypeDescription
deviceIdstringmic 设备id

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


selectSpeaker

▸ selectSpeaker(deviceId: string): QResult

设置 speaker

Parameters:

NameTypeDescription
deviceIdstringspeaker 设备id

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


sendFeedback

▸ sendFeedback(option: object): QResult

发送用户反馈到到 PANO

Parameters:

▪ option: object

feedback 参数

NameTypeDescription
contactstring联系方式
descriptionstring描述
extraInfostring额外信息(可选)
productstring产品名称
typenumber问题类型,0: 通用;1:语音;2:视频;3:白板;4:屏幕共享
uploadLogsboolean是否上传日志

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


setRtsDelegate

▸ setRtsDelegate(rtsDelegate: RtsDelegate): QResult

如果项目使用外部的RTS SDK,需要把RtsDelegate对象设置到RtcEngine对象,否则不需要使用该API

注意 如果App额外使用独立的 RTS(@pano.video/panorts)SDK joinChannel,RTC(@pano.video/panortc)的joinChannelType应该选择mediaOnly,同时使用RTS的RtsDelegate,即import { RtsDelegate } from '@pano.video/panorts';

rtcEngine.setRtsDelegate(new RtsDelegate())

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


callout

▸ callout(phoneNum: string, isBind: boolean): QResult 从SDK主动发起号码拨打

Parameters:

▪ phoneNum: string

呼叫的电话号码

isBind: boolean 是否绑定到自己。如果绑定到自己,那么其他用户看到我的audioCallType从VoIP改变为PSTN,如果不绑定到自己,那么其他用户看到新增一个用户,这个用户只有音频。

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


dropCall

▸ callout(phoneNum: string): QResult 从SDK主动挂断电话

Parameters:

▪ phoneNum: string

将要挂断的电话号码,不限制号码是否绑定到自己或者自己主动拨打接通的情况

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


startAudio

▸ startAudio(): QResult

开启音频

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。startAudio是异步过程,可以通过监听startAudioTimeout获得最终startAudio的失败结果。


stopAudio

▸ stopAudio(): QResult

停止音频

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


startScreen

▸ startScreen(constraints: object): QResult

开启屏幕共享,在加入频道成功后可以调用

Parameters:

▪ constraints: object

开启屏幕共享的参数

NameTypeDescription
audioboolean可选,是否共享音频,Chrome version >= 74时支持,默认值false
videoobject可选,共享屏幕视频参数,如下:

constraints.video

NameTypeDescription
frameRatenumber可选,指定共享屏幕的视频帧率,默认值8
heightnumber可选,指定共享屏幕的视频高度(SDK 会自动计算共享屏幕的宽度)。
如果浏览器返回的实际分辨率高度小于等于设置的 height 值,以浏览器返回的为准;否则等比例缩放至设置的 height 值。
如果 frameRate > 15,height 默认值为 720;如果 frameRate <= 15,height 默认值为 1080。

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。

开启屏幕共享时可能会有失败事件需要处理: SDK获取屏幕媒体失败时将发布事件getScreenMediaFailed;媒体链接建立超时将发布事件startScreenTimeout。

如果需要本地显示共享屏幕的效果,可以监听getLocalScreen事件获取screen的video标签。

注意

  • 考虑到客户端的性能,建议startScreen高分辨率时配合低帧率参数,如果需要高帧率时降低分辨率。在参数frameRate大于15时,SDK可能降低采集视频的分辨率,导致达不到参数指定的分辨率。
  • Chrome version >= 74时支持audio选项。

stopScreen

▸ stopScreen(): QResult

停止屏幕共享

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


startVideo

▸ startVideo(videoProfileType: string, sourceMirror?: boolean): QResult

开启视频

Parameters:

▪ videoProfileType: VideoProfileType

以指定的质量开启视频,可取值为:

VideoProfileType.Lowest, VideoProfileType.Low, VideoProfileType.Standard, VideoProfileType.HD720P, VideoProfileType.HD1080P

▪ sourceMirror:

指示本次发布视频在被订阅时是否以镜像显示,默认为否

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。startVideo是异步过程,可以通过监听startVideoTimeout获得最终startVideo的失败结果。


stopVideo

▸ stopVideo(): QResult

关闭视频

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


subscribeAudio

▸ subscribeAudio(userId: string): QResult

订阅用户音频

Parameters:

▪ userId: string

userId: 将要订阅的用户ID

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。

注意 如果joinChannel时的参数subscribeAudioAll为true,无需调用subscribeAudio,若调用也不会产生效果


subscribeVideo

▸ subscribeVideo(param: object): QResult

订阅用户视频

Parameters:

▪ param: object

userId: 将要订阅的用户id

quality: VideoProfileType.Lowest, VideoProfileType.Low, VideoProfileType.Standard, VideoProfileType.HD720P, VideoProfileType.HD1080P

NameType
qualityVideoProfileType
userIdstring

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。

注意 订阅时如果当前网络状况不佳,接收到的视频分辨率可能低于订阅所请求的分辨率


subscribeScreen

▸ subscribeScreen(param: object): QResult

订阅用户共享屏幕

Parameters:

▪ param: object

userId: 将要订阅的用户id,

NameType
userIdstring

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。

注意 订阅之前,请确保用户已开启共享屏幕,在其他用户开启屏幕共享后会收到事件userScreenStart,可以在监听到该事件后调用subscribeScreen。订阅成功后会收到userScreenReceived事件,订阅失败将收到事件failedToSubscribeScreen


startPreview

▸ startPreview(deviceId: string, onSuccess: function, onFail: function, videoProfile: VideoProfileName): QResult

开启摄像头预览

Parameters:

▪ deviceId: string

摄像头设备id

▪ onSuccess: function

成功预览回调,回调入参是 videoTag

▸ (videoTag: HTMLVideoElement): any

Parameters:

NameType
videoTagHTMLVideoElement

▪ onFail: function

失败回调

▸ (error: any): any

Parameters:

NameType
errorany

▪ videoProfile: VideoProfileName

视频分辨率规格VideoProfileName

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


startRecordDeviceTest

▸ startRecordDeviceTest(deviceId: string, onSuccess: function, onError: function): QResult

开启检测麦克风音量

Parameters:

▪ deviceId: string

麦克风设备id

▪ onSuccess: function

成功开始检测的回调,回调入参是 {audioLevel: number, micTest: number}

注意 开启成功后,会每 200 毫秒周期性调用onSuccess,直到调用stopRecordDeviceTest停止检测。onSuccess参数的micTest属性是麦克风音量检测的索引,每次回调都是相同的值,stopRecordDeviceTest时需要使用该值。

Parameters:

NameType
audioLevelnumber, 取值范围 [0, 1]
micTestnumber

▪ onFail: function

失败回调

▸ (error: any): any

Parameters:

NameType
errorany

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


setMediaProcessor

▸ setMediaProcessor(processorType: string, mediaProcessor: function): QResult

设置媒体的处理函数,处理的数据是复制,用户处理完的数据不会替换到SDK中。

Parameters:

▪ processorType: string

目前支持取值:

'AudioCaptureExProcessor',表示抓取麦克风音频之后发送之前进行回调。

▪ mediaProcessor: function

媒体处理函数回调参数是

NameType
dataViewInt16Array类型,默认是有符号16bit小端格式的PCM采样数据
rtcAudioDataFormatobject, 包含属性type(音频格式,目前只有PCM格式,type为0), sampleRate(采样率), channels(声道数), bytesPerSample(采样位宽)

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


setUserAudioIndication

▸ setUserAudioIndication(indicationHandler: function, intervalMs: number): QResult

设置接收的音频音量提示

Parameters:

▪ indicationHandler: function

音量提示的处理函数,回调入参是数组 userAudioLevelArray: Array<{level: number, userId: string, active: boolean}>。表示本轮检测的所有user的音量,如果用户没有出现在数组中,表示该用户没有音量。

▪ intervalMs: number

音量提示的时间间隔毫秒数,默认200ms

注意 考虑到浏览器性能,建议时间间隔不要太小。

Parameters:

NameType
levelnumber,音频强度,取值范围 [0, 1]
userIdstring
activeboolean,与native SDK的字段含义不同,此处只是通过比较level是否大于0.01来大致反映音量是否够大

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


setRecordingAudioIndication

▸ setRecordingAudioIndication(indicationHandler: function, intervalMs: number): QResult

设置本地发送的音频音量提示,发布音频之后SDK会按照时间间隔intervalMs调用indicationHandler

Parameters:

▪ indicationHandler: function

音量提示的处理函数,回调入参是object audioLevel: {level: number, userId: string, active: boolean}。

▪ intervalMs: number

音量提示的时间间隔毫秒数,默认200ms

注意 考虑到浏览器性能,建议时间间隔不要太小。

Parameters:

NameType
levelnumber,音频强度,取值范围 [0, 1]
userIdstring
activeboolean,与native SDK的字段含义不同,此处只是通过比较level是否大于0.01来大致反映音量是否够大

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


stopRecordDeviceTest

▸ stopRecordDeviceTest(micTest: number): QResult

停止检测麦克风音量

Parameters:

▪ micTest: number

麦克风音量检测的索引

注意 麦克风音量检测开启成功后,会周期调用onSuccess,直到应用层调用stopRecordDeviceTest停止检测。其中参数micTest每次回调都是相同的值,stopRecordDeviceTest时需要使用该值。

Parameters:

NameType
micTestnumber

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


startNetworkTest

• startNetworkTest(callback: function): void

已废弃。

开始网络状态检测


getNetworkStatus

▸ getNetworkStatus(callback: function): void

获取自己的网络状态,有音视频或者屏幕共享收发的时候有效

Parameters:

▪ callback: function

网络状况检测完成后的回调,回调入参是 object

▸ (testResult: object): any

▪ Parameters: object

testResult的属性:

NameTypeDescription
ratingstring评分,可能取值以及含义见下表
rttnumberRTT时延,单位毫秒(ms),-1表示没有检测成功
rxLossnumber下行丢包率,-1表示没有检测成功
txLossnumber上行丢包率,-1表示没有检测成功

rating的取值及含义:

NameDescription
Unavailable网络不可用或者未能测试成功.
VeryBad服务质量非常差,几乎不可用。
Bad服务质量比较差,质量不稳定。
Poor服务质量一般。
Good服务质量很好。
Excellent服务质量非常好。

stopPreview

▸ stopPreview(videoTag: HTMLVideoElement): QResult

停止摄像头预览

Parameters:

NameTypeDescription
videoTagHTMLVideoElement

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


snapshotVideo

▸ snapshotVideo(opt: object, onSuccess: function, onError: function): void

获取视频截图

Parameters:

opt

NameTypeDescription
userIdstring必填,指定将要截图的用户Id
formatSnapshotImageFormat(可选),指定图片格式为png或者jpeg,默认使用png格式
imgObjTypeSnapshotImageObjType(可选),指定传递给onSuccess回调函数的参数类型,可以是JavaScript的File类型的实例或base64编码的String,默认为File对象
mirrorboolean(可选),截图是否做镜像处理,默认不做镜像处理

onSuccess, snapshotVideo成功时会把结果传递给onSuccess,参数类型可以是File实例或者和Base64编码的String

onError, snapshotVideo失败时会把错误原因传递给onError

Returns: void


unmuteCam

▸ unmuteCam(): QResult

恢复视频

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


unmuteMic

▸ unmuteMic(): QResult

将自己发布的音频取消静音。如果当前使用PSTN通话,那么PSTN通话也将被取消静音。

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


unmuteScreen

▸ unmuteScreen(): QResult

恢复屏幕共享

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


unsubscribeAudio

▸ unsubscribeAudio(userId: string): QResult

取消订阅用户音频

Parameters:

▪ userId: string

userId: 将要取消订阅音频的用户ID

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。

注意 如果joinChannel时的参数subscribeAudioAll为true,unsubscribeAudio调用将无效


unsubscribeVideo

▸ unsubscribeVideo(param: object): QResult

取消订阅视频

Parameters:

▪ param: object

将要取消订阅的用户id

NameType
userIdstring

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


unsubscribeScreen

▸ unsubscribeScreen(param: object): QResult

取消订阅共享屏幕

Parameters:

▪ param: object

将要取消订阅的用户id

NameType
userIdstring

Returns: QResult

QResult {
  code: string,
  message: string
}

QResult.code为OK时表示调用成功,其他表示调用失败,QResult.message为失败原因。


on

▸ on(event: string, cb: Function): void

监听事件,内部分发的事件参见 RtcEngine.Events

Parameters:

NameTypeDescription
eventstringRtcEngine.Events
cbFunction回调函数

Returns: void


off

▸ off(event: string, cb: Function): void

取消监听事件,内部分发的事件参见 RtcEngine.Events

Parameters:

NameTypeDescription
eventstringRtcEngine.Events
cbFunction回调函数

Returns: void

Object literals

Static Events

▪ Events: object

RtcEngine 内部状态变化时触发的回调,用户可以调用RtcEngine 实例的 on 方法添加监听回调

activeSpeakerListUpdate

• activeSpeakerListUpdate: string = "active_speaker_list_update"

音频活跃用户更新通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.activeSpeakerListUpdate,
  (data) => console.log('activeSpeakerListUpdate', data) // { list: ['123', '456'] }
);

audioDeviceChange

• audioDeviceChange: string = "audio_device_changed"

音频设备状态变化的通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.audioDeviceChange,
  (data) => console.log('audioDeviceChange', data)
);

// {
//   changeType: 'added', // 变更类型
//   device: {
//     deviceId: "default",
//     groupId: "42f3f1e46aee892d76c671feb614adb09f45df51e57e9c04e01d7c1f2132bf83",
//     kind: "audioinput",
//     label: "默认 - 外置麦克风 (Built-in)"
//   }
// }

channelFailover

• channelFailover: string = "channel_fail_over"

频道错误恢复通知,接收到此通知时 panosdk 已经从服务器断开,panosdk 会尝试重新连接到服务器,开发者可以提示用户正在重连

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.channelFailover,
  (data) => console.log('channelFailover', data) 
);
// { state: 'Reconnecting' | 'Success' | 'Failed' }

firstAudioDataReceived

• firstAudioDataReceived: string = "first_audio_data_received"

第一个音频包到达通知

joinChannelConfirm

• joinChannelConfirm: string = "channel_join_confirm"

加入频道的通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.joinChannelConfirm,
  (data) => console.log('joinChannelConfirm', data)
);

// {
//   result: 'failed',  此字段指示joinChannel成功与否
//   code: 'CHANNEL_FULL', 
//   message: 'channel is full'
// }

result: 'success' 表示加入频道成功(可能不携带 code 和 message), 其他表示加入频道失败,joinChannel 成功与否以此字段为准。

code: joinChannel 失败时的错误,可能有如下错误 'SUCCESS', 'CHANNEL_MODE', 'AUTH_FAILED', 'CHANNEL_CLOSED', 'INVALID_TOKEN', 'CHANNEL_FULL', 'CHANNEL_LOCKED', 'INVALID_ARGS', 'FAILED', 上述 code 含义分别为:加入成功、模式错误(混用了点对点模式和会议模式)、认证失败、会议已结束、TOKEN参数错误、频道已满、频道锁定、参数非法、其他原因。

message: 用于帮助开发人员理解错误信息,请注意不同版本的 message 格式有所不同。

leaveChannelIndication

• leaveChannelIndication: string = "current_user_leave"

离开频道的通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.leaveChannelIndication,
  (data) => console.log('leaveChannelIndication', data)
);
// {
//   reason: 'Meeting Ended',
//   reasonCode: 2
// }
reasonCodereasonDescription
0Kicked Out被踢出会议
2Meeting Ended会议结束
3Login ElsewhereuserId 在别处登录
4User Count Full会议用户数量达到上限
5Rejoin Channel Failedfailover失败

channelCountDown

• channelCountDown: string = "room_count_down"

频道倒计时通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.channelCountDown,
  (data) => console.log('channelCountDown', data)
);
// {
//   remainsec: 300 // 频道剩余时间,单位:秒
// }

userAudioMute

• userAudioMute: string = "user_audio_mute"

用户设置静音通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userAudioMute,
  (data) => console.log('userAudioMute', data)
);
// {
//   userId: "3309586" //设置静音用户的 userId
// }

userAudioStart

• userAudioStart: string = "user_audio_start"

用户开启音频通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userAudioStart,
  (data) => console.log('userAudioStart', data)
);
// {
//   userId: "3309586" //用户的 userId
// }

userAudioStop

• userAudioStop: string = "user_audio_stop"

用户关闭音频通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userAudioStop,
  (data) => console.log('userAudioStop', data)
);
// {
//   userId: "3309586" //用户的 userId
// }

userAudioUnmute

• userAudioUnmute: string = "user_audio_unmute"

用户取消静音通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userAudioUnmute,
  (data) => console.log('userAudioUnmute', data)
);
// {
//   userId: "3309586" //用户的 userId
// }

userAudioCallTypeChanged

• userAudioCallTypeChanged: string = "user_audio_call_type_changed"

用户语音通话方式发生变化

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userAudioCallTypeChanged,
  (data) => console.log('userAudioCallTypeChanged', data)
);
// {
//   userId: "3309586", //用户的 userId,
//   type: 1 // 0 = VoIP, 1 = PSTN
// }

userLeave

• userLeave: string = "user_leave"

用户离开频道通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userLeave,
  (data) => console.log('userLeave', data)
);
// {
//   userId: "3309586" //用户的 userId
// }

userJoin

• userJoin: string = "user_join"

用户加入频道通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userJoin,
  (data) => console.log('userJoin', data)
);
// {
//   userId: "3309586", //用户的 userId
//   user: {
//     userId: "3309586",
//     userName: "Pano-001",
//     audioStatus: "close",
//     videoStatus: "close"
//   }
// }

videoDeviceChange

• videoDeviceChange: string = "video_device_changed"

视频设备状态变化的通知

whiteboardAvailable

• whiteboardAvailable: string = "whiteboard_available"

白板可用通知,在 failover 成功或者成功加入会议时触发

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.whiteboardAvailable,
  (data) => console.log('whiteboardAvailable', data)
);
// {
//   type: "join", // 触发类型,'join' 或者 'failover'
//   message: "Join channel success." // 提示消息
// }

whiteboardStart

• whiteboardStart: string = "whiteboard_start"

白板打开通知,当 channel 中有任一用户打开白板(open),会触发这个事件,之后再打开不会再触发

whiteboardStop

• whiteboardStop: string = "whiteboard_stop"

白板关闭通知

whiteboardUnavailable

• whiteboardUnavailable: string = "whiteboard_unavailable"

白板不可用通知,在failover过程中或者离开会议时触发

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.whiteboardUnavailable,
  (data) => console.log('whiteboardUnavailable', data)
);
// {
//   type: "failover", // 触发类型,'left' 或者 'failover'
//   message: "Connect lost, reconnecting..." // 提示消息
// }

localVideoStart

• localVideoStart: string = "local_video_start"

已废弃。

本地视频开启成功

userVideoStart

• userVideoStart: string = "user_video_start"

用户开启视频

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoStart,
  (data) => console.log('userVideoStart', data)
);
// {
//   userId: '1233', // 用户id
//   maxVideoProfile: 'HD720P', // string
// }

其中maxVideoProfile是VideoProfileType的key,表示对方发布的视频规格最高不超过该值。

userVideoTransform

• userVideoTransform: string = "user_video_transform"

用户视频旋转变换事件。SDK会把旋转变换应用到userVideoReceived事件中的video element的style属性,如果APP应用逻辑不需要更精细调整旋转后的style,也不会copy SDK释放的video element,那么不需要监听本事件。

如果需要复制userVideoReceived事件中的video element,应该监听该事件,把rotate和mirror属性记录下,每当需要显示video element的拷贝时,都检查该video对应的rotate和mirror,并进行转换。

注意 只有旋转角度或者是否镜像发生变化时,SDK才会发布该事件,因此APP层需要记录下状态以供后续订阅的video可以参考。userVideoReceived事件和userVideoTransform事件没有固定顺序,因此收到userVideoReceived事件时需要检查是否已经保存userVideoTransform事件,收到userVideoTransform事件时需要检查是否已经保存用户video元素。

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoTransform,
  (event) => console.log('userVideoTransform', event.data)
);
// {
//   userId: '1233', // 用户id
//   streamId: 1, // number
//   mirror: false, // boolean
//   rotate: 270, // number
// }

其中streamId是当 SDK 使用多摄像头方案时指定的视频流ID,默认情况不包含该字段;mirror表示视频是否做左右镜像变换;rotate表示视频做顺时针旋转角度。

userVideoStop

• userVideoStop: string = "user_video_stop"

用户关闭视频

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoStop,
  (data) => console.log('userVideoStop', data)
);
// {
//   userId: '1233', // 用户id
// }

getVideoMediaFailed

• getVideoMediaFailed: string = "failed_to_get_video_media"

获取本地视频失败

callbackparams

与getAudioMediaFailed相似,可以参考getAudioMediaFailed

getScreenMediaFailed

• getScreenMediaFailed: string = "failed_to_get_screen_media"

获取本地屏幕共享失败

callbackparams

与getAudioMediaFailed相似,可以参考getAudioMediaFailed

getAudioMediaFailed

• getAudioMediaFailed: string = "failed_to_get_audio_media"

获取本地音频失败

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.getAudioMediaFailed,
  (data) => {
    console.log('getAudioMediaFailed', data)
    // {
    //   errorName: "NotAllowedError", // 错误信息,判断错误类型以该字段为准
    //   errorMessage: "Permission denied", // 错误说明,帮助开发者理解错误类型,可能改变
    // }
    if (data.errorName === 'NotAllowedError') {
      alert('没有权限开启设备')
    } else if (data.errorName === 'NotFoundError') {
      alert('找不到设备')
    } else if (data.errorName === 'NotReadableError') {
      alert('尽管已经授权,但是系统,浏览器,网页层面发生错误导致设备无法访问。例如Windows上其他应用排他访问设备,或者浏览器无法打开设备')
    } else {
      alert('获取音视频失败')
    }
  }
);

注意 应用逻辑中应该处理获取媒体失败的情况。errorName 有如下三种常见取值:

  • NotAllowedError,没有授权获取音视频
  • NotFoundError,没有音视频设备
  • NotReadableError,尽管已经授权,但是设备无法访问,例如 Windows 系统上其他应用正在使用

enumerateDeviceTimeout

• enumerateDeviceTimeout: string = "enumerate_device_timeout"

枚举设备超时

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.enumerateDeviceTimeout,
  (data) => console.log('enumerateDeviceTimeout', data)
);
// {
//   data: {
//     kind: 'audioinput' // 设备类型,'audioinput', 'audiooutput', 'videoinput'
//   } // 错误信息
// }

userVideoReceived

• userVideoReceived: string = "get_remote_user_video"

用户 video tag 更新

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoReceived,
  (data) => console.log('userVideoReceived', data)
);
// {
//   event:'get_remote_user_video',
//   data: {
//     videoTag: HTMLVideoElement; // videoTag
//     userId: string; // 用户 Id
//     userName: string; // 用户名
//   }
// }

userVideoMute

• userVideoMute: string = "user_video_mute"

用户暂停视频

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoMute,
  (data) => console.log('userVideoMute', data)
);
// {
//   userId: '1233', // 用户id
// }

userVideoUnmute

• userVideoUnmute: string = "user_video_unmute"

用户恢复视频

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userVideoUnmute,
  (data) => console.log('userVideoUnmute', data)
);
// {
//   userId: '1233', // 用户id
// }

getLocalVideo

• getLocalVideo: string = "get_local_video"

获取本地视频成功,需要显示本地视频时可以通过此事件获得正在发送的视频元素

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.getLocalVideo,
  (data) => console.log('getLocalVideo', data)
);
// {
//   data: { videoTag: HTMLVideoElement; }
// }

startAudioTimeout

• startAudioTimeout: string = "start_audio_time_out"

开启音频超时

startVideoTimeout

• startVideoTimeout: string = "start_video_time_out"

开启视频超时

failedToSubscribeVideo

• failedToSubscribeVideo: string = "failed_to_subscribe_video"

订阅用户视频失败

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.failedToSubscribeVideo,
  (data) => console.log('failedToSubscribeVideo', data)
);
// {
//   userId: '1233', // 用户id
//   reason: 'something wrong...' // 失败原因
// }

startScreenTimeout

• startScreenTimeout: string = "start_screen_time_out"

startScreen开启屏幕共享超时

userScreenReceived

• userScreenReceived: string = "get_remote_user_screen"

subscribeScreen订阅成功,接收到订阅的其他用户的屏幕共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenReceived,
  (data) => console.log('userScreenReceived', data)
);
// {
//   videoTag: HTMLVideoElement; // videoTag
//   userId: string; // 用户 Id
//   userName: string; // 用户名
// }

getScreenMediaFailed

• getScreenMediaFailed: string = "failed_to_get_screen_media"

startScreen获取本地桌面共享失败,可能由于未授权或者最终选择要共享的窗口之前取消了共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.getScreenMediaFailed,
  (data) => console.log('getScreenMediaFailed', data)
);
// {
//   error // 错误信息
// }

userScreenStop

• userScreenStop: string = "user_screen_stop"

有用户关闭屏幕共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenStop,
  (data) => console.log('userScreenStop', data)
);
// {
//   userId: '1233', // 用户id
// }

userScreenStart

• userScreenStart: string = "user_screen_start"

其他用户开启屏幕共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenStart,
  (event) => console.log(event)
);
// {
//   event: 'user_screen_start',
//   userId: '1233', // 用户id
// }

userScreenResolutionChanged

• userScreenResolutionChanged: string = "user_screen_resolution_changed"

订阅的共享屏幕分辨率发生变化

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenResolutionChanged,
  (event) => console.log(event)
);
// {
//   event:'user_screen_resolution_changed',
//   data: {
//     userId: '1233',
//     width: 1920,
//     height: 1080
//   }
// }

localScreenEnded

• localScreenEnded: string = "local_screen_ended"

本地开启的屏幕共享由于被外部中断(例如关闭了共享的应用程序),SDK已经停止共享屏幕

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.localScreenEnded,
  (data) => console.log('localScreenEnded', data)
);
// {
//   userId: '1233', // 用户id
// }

getLocalScreen

• getLocalScreen: string = "get_local_screen"

本地共享屏幕成功获取媒体,需要显示本地视频时,可以通过此事件获得正在发送的共享屏幕的HTML video元素

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.getLocalScreen,
  (data) => console.log('getLocalScreen', data)
);
// {
//   data: { videoTag: HTMLVideoElement; }
// }

userScreenMute

• userScreenMute: string = "user_screen_mute"

其他用户暂停屏幕共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenMute,
  (data) => console.log('userScreenMute', data)
);
// {
//   userId: '1233', // 用户id
// }

userScreenUnmute

• userScreenUnmute: string = "user_screen_unmute"

其他用户恢复屏幕共享

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.userScreenUnmute,
  (data) => console.log('userScreenUnmute', data)
);
// {
//   userId: '1233', // 用户id
// }

failedToSubscribeScreen

• failedToSubscribeScreen: string = "failed_to_subscribe_screen"

订阅其他用户的共享屏幕失败

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.failedToSubscribeScreen,
  (data) => console.log('failedToSubscribeScreen', data)
);
// {
//   userId: '1233', // 用户id
//   reason: 'something wrong...' // 失败原因
// }

networkStatus

• networkStatus: string = "network_status"

通话中的网络质量通知,joinChannel成功之后会按周期(2秒)回调该事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.on(
  PanoRtc.RtcEngine.Events.networkStatus,
  (data) => console.log('networkStatus', data)
);
// data 内容
// {
//   event: 'network_status', // 事件类型
//   networkRatings: [{userId: '1234', rating: 'Good'}] // 数组,所有有网络质量数据的用户的网络质量
// }

rating的取值及含义:

NameDescription
Unavailable网络不可用或者未能测试成功.
VeryBad服务质量非常差,几乎不可用。
Bad服务质量比较差,质量不稳定。
Poor服务质量一般。
Good服务质量很好。
Excellent服务质量非常好。

groupJoinConfirm

• groupJoinConfirm: string = "group_join_confirm"

加入分组的结果事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupJoinConfirm,
  (data) => console.log('groupJoinConfirm', data)
);
// data 内容
// {
//     groupId: 'group123',
//     result: 'OK' //只有OK表示加入成功,其他表示失败
// }

groupUserJoinIndication

• groupUserJoinIndication: string = "group_user_join_indication"

其他用户加入分组时的通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupUserJoinIndication,
  (data) => console.log('groupUserJoinIndication', data)
);
// data 内容
// {
//     groupId: 'group123',
//     userId: '123123',
//     userData: 'invisible' // app层调用joinGroup传递的自定义userData
// }

groupUserLeaveIndication

• groupUserLeaveIndication: string = "group_user_leave_indication"

其他用户离开分组时的通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupUserLeaveIndication,
  (data) => console.log('groupUserLeaveIndication', data)
);
// data 内容
// {
//     groupId: 'group123',
//     userId: '123123'
// }

groupDismissConfirm

• groupDismissConfirm: string = "group_dismiss_confirm"

解散分组的结果事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupDismissConfirm,
  (data) => console.log('groupDismissConfirm', data)
);
// data 内容
// {
//     groupId: 'group123',
//     result: 'OK'
// }

groupLeaveIndication

• groupLeaveIndication: string = "group_leave_indication"

被动离开分组的事件,例如分组被他人解散时会发生该事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupLeaveIndication,
  (data) => console.log('groupLeaveIndication', data)
);
// data 内容
// {
//     groupId: 'group123',
// }

groupInviteIndication

• groupInviteIndication: string = "group_invite_indication"

该事件表示收到邀请加入分组时的事件通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupInviteIndication,
  (data) => console.log('groupInviteIndication', data)
);
// data 内容
// {
//     groupId: 'group123',
//     fromUserId: '456456' //发送邀请的用户
// }

groupDefaultUpdateIndication

• groupDefaultUpdateIndication: string = "group_default_update_indication"

该事件表示收到设置了默认分组的事件通知

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupDefaultUpdateIndication,
  (data) => console.log('groupDefaultUpdateIndication', data)
);
// data 内容
// {
//     groupId: 'group123' // 默认分组
// }

setDefaultGroupConfirm

• setDefaultGroupConfirm: string = "set_default_group_confirm"

设置默认分组的结果事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.setDefaultGroupConfirm,
  (data) => console.log('setDefaultGroupConfirm', data)
);
// data 内容
// {
//     groupId: 'group123' // 默认分组
//     result: 'OK' // 结果为OK或者FAILED
// }

groupObserveConfirm

• groupObserveConfirm: string = "group_observe_confirm"

观察分组API调用的结果事件

callbackparams

import PanoRtc from '@pano.video/panortc';

rtcEngine.getGroupManager().on(
  PanoRtc.RtcEngine.Events.groupObserveConfirm,
  (data) => console.log('groupObserveConfirm', data)
);
// data 内容
// {
//     groupId: 'group123' // 默认分组
//     result: 'OK' // 结果为OK或者FAILED
// }
Last updated on 3/11/2022
← 浏览器兼容性GroupManager →
  • Constructor
  • Methods
    • getCams
    • getMics
    • getSdkVersion
    • checkEnvRequirement
    • getSpeakers
    • getWhiteboard
    • joinChannel
    • leaveChannel
    • destroy
    • muteAudioPlayout
    • unmuteAudioPlayout
    • setAudioPlayoutVolume
    • getAudioPlayoutVolume
    • muteMic
    • muteCam
    • muteScreen
    • selectCam
    • selectMic
    • selectSpeaker
    • sendFeedback
    • setRtsDelegate
    • callout
    • dropCall
    • startAudio
    • stopAudio
    • startScreen
    • stopScreen
    • startVideo
    • stopVideo
    • subscribeAudio
    • subscribeVideo
    • subscribeScreen
    • startPreview
    • startRecordDeviceTest
    • setMediaProcessor
    • setUserAudioIndication
    • setRecordingAudioIndication
    • stopRecordDeviceTest
    • startNetworkTest
    • getNetworkStatus
    • stopPreview
    • snapshotVideo
    • unmuteCam
    • unmuteMic
    • unmuteScreen
    • unsubscribeAudio
    • unsubscribeVideo
    • unsubscribeScreen
    • on
    • off
  • Object literals
    • Static Events
    • ▪ Events: object
    • activeSpeakerListUpdate
    • audioDeviceChange
    • channelFailover
    • firstAudioDataReceived
    • joinChannelConfirm
    • leaveChannelIndication
    • channelCountDown
    • userAudioMute
    • userAudioStart
    • userAudioStop
    • userAudioUnmute
    • userAudioCallTypeChanged
    • userLeave
    • userJoin
    • videoDeviceChange
    • whiteboardAvailable
    • whiteboardStart
    • whiteboardStop
    • whiteboardUnavailable
    • localVideoStart
    • userVideoStart
    • userVideoTransform
    • userVideoStop
    • getVideoMediaFailed
    • getScreenMediaFailed
    • getAudioMediaFailed
    • enumerateDeviceTimeout
    • userVideoReceived
    • userVideoMute
    • userVideoUnmute
    • getLocalVideo
    • startAudioTimeout
    • startVideoTimeout
    • failedToSubscribeVideo
    • startScreenTimeout
    • userScreenReceived
    • getScreenMediaFailed
    • userScreenStop
    • userScreenStart
    • userScreenResolutionChanged
    • localScreenEnded
    • getLocalScreen
    • userScreenMute
    • userScreenUnmute
    • failedToSubscribeScreen
    • networkStatus
    • groupJoinConfirm
    • groupUserJoinIndication
    • groupUserLeaveIndication
    • groupDismissConfirm
    • groupLeaveIndication
    • groupInviteIndication
    • groupDefaultUpdateIndication
    • setDefaultGroupConfirm
    • groupObserveConfirm
浙ICP备20002645号 ©2019-2022 Pano拍乐云