JS SDK #
- 适用于网页端,H5页面,前端页面,Electron
- es6引用
import { UPRTCClient, UPRTCListener } from 'uprtc-web-client'
Electron使用如下独立版本
import { UPRTCClient, UPRTCListener } from 'uprtc-electron-client'
- 日志
// 输出指定等级的日志
window.localStorage.setItem('debug', 'uprtc-client:WARN* uprtc-client:ERROR*');
// 输出全部日志
window.localStorage.setItem('debug', '*')
UPRTCClient #
/**
* 配置
* @param {String} packageName 包名
* @param {String} appId 项目唯一标示
* @param {String} appKey 应用唯一标示
*/
static configUPRTC(packageName, appId, appKey)
/**
* 设置事件监听
* @param {UPRTCListener} listener 事件监听
*/
setListener(listener)
/**
* 媒体设备权限申请
* @param {string} kind 'video' , 'audio', 为空表示video和audio
* @returns true有权限 false无权限
*/
static async requestMediaPermission(kind)
/**
* 取得媒体设备列表
* @param {String} kind video 或 audioinput 或 audiooutput
* @returns 指定媒体类型设备Array
*/
static async getDevices(kind)
/**
* 是否已经加入房间
*/
isJoined()
/**
* 是否可生产媒体Track
*/
mediaEnable()
/**
* 加入指定房间
* @param {String} serverUrl 房间地址
* @param {String} roomId 房间ID
* @param {String} userId 用户ID
*/
async joinRoom(serverUrl, roomId, userId)
// 以下接口需要在加入房间后调用
/**
* 取得设备编码能力,包含音频和视频
* @returns Array<RtpCodecCapability>
*/
getCodecCapability()
/**
* 打开摄像机
* @param {Object} videoConstraints 可选,参照getUserMedia的video部分,
* @param {Array<RTCRtpEncodingParameters>} encodings 可选,参照https://w3c.github.io/webrtc-pc/#rtcrtpencodingparameters
* @param {CodecOptions} codecOption 可选,参照共同
* @param {RtpCodecCapability} codec,可选,参照 getCodecCapability可在其返回中选择任意video编码器
* @returns {UPRTCPeerTrack)
*/
async openCamera(videoConstraints, encodings, codecOption, codec)
/**
* 切换摄像机
* @param {Object} videoConstraints 参照getUserMedia的video部分,需指定deviceId
* @returns {UPRTCPeerTrack)
*/
async switchCamera(videoConstraints)
/**
* 关闭摄像机
*/
async closeCamera()
/**
* 设置摄像机采集流拦截处理,在打开摄像机之前调用
* @param {Function(stream: MediaStream): MediaStream|Promise<MediaStream>} cb 流处理函数,支持async
*/
setCameraCapturerStreamProcessor(cb) {
this._room.setCameraCapturerStreamProcessor(cb)
}
/**
* 打开麦克风
* @param {Object} audioConstraints 可选,参照getUserMedia的audio部分,
* @param {CodecOptions} codecOptions 可选,参照共同
* @param {RtpCodecCapability} codec 可选,参照 getCodecCapability可在其返回中选择任意audio编码器
* @returns {UPRTCPeerTrack)
*/
async openMic(audioConstraints, codecOptions, codec)
/**
* 切换麦克风
* @param {Object} audioConstraints 必须指定deviceId
* @returns
*/
async switchMic(audioConstraints) {
return await this._room.switchAudio(audioConstraints)
}
/**
* 关闭麦克风
*/
async closeMic()
/**
* 播放背景音乐
* @param {Blob} file
*/
playBackgroundMusic(file)
/**
* 停止背景音乐
*/
stopBackgroundMusic()
/**
* 分享桌面
* @param {Object} screenConstraints 可选,参照getUserMedia的video屏幕分享部分https://w3c.github.io/mediacapture-main/#media-track-settings
* 另外screenConstraints内添加了自定义属性参数rectangle {x,y,widht,height} 指定分享桌面矩形区域,或可理解为对分享内容裁剪的矩形区域
* @param {Array<RTCRtpEncodingParameters>} encodings 可选,参照https://w3c.github.io/webrtc-pc/#rtcrtpencodingparameters
* @param {CodecOptions} codecOption 可选,参照共同
* @param {RtpCodecCapability} codec,可选,参照 getCodecCapability可在其返回中选择任意video编码器
* @returns {UPRTCPeerTrack)
*/
async shareDesktop(screenConstraints, encodings, codecOptions, codec)
/**
* 停止分享桌面
*/
async stopShareDesktop()
/**
* 设置发送的最大比特率(不能超过服务端设置的最大比特率)
* @param {Number} bitrate
*/
async setMaxBitrate(bitrate)
/**
* 发送房间内消息,业务相关性消息建议从应用服务调用rest api发送
* @param {Object} data 消息内容
*/
async sendMessage(data)
/**
* 离开房间
*/
exitRoom()
/**
* 是否已经加入房间
* @returns
*/
isJoined()
/**
* 是否可生产媒体
* @returns
*/
mediaEnable()
// ※※※ 以下为electron版本独有 ※※※
/**
* 开始录制,录制到文件
* @param {string} path 录制文件存放路径,或者录制URL由服务端生成(参照接口:API-服务端-录制-创建客户端录制上传URL)
* @param {HTMLElement} dom 可理解为录制内容,录制区域,录制范围,可选,不设置时录制整个窗口。注意:录制时如果分享桌面,只会录制分享内容,停止录制后会继续录制dom
* @param {Object} video {
* maxFrameRate, // 录制最大帧
* width, // 视频宽
* height, // 视频高
* mimeType // 可选,为MediaRecorderOptions内的属性,video参数里可以包含MediaRecorderOptions的所有属性,
* // 以浏览支持的属性为准。参照:https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/MediaRecorder#options
* },
* 可选,默认,30,1280,720
* @param {Object} cover {
* imgUrl, // imgUrl 封面图片设置,三种类型的值 1,file:///... , 2, blob, 3, base64
* title, // 可选,主标题
* titleColor, // 可选,主标题颜色
* subTitle, // 可选,副标题,多行使用'\n'分割
* subTitleColor, // 可选,副标题颜色
* startX, // 标题坐标left/x
* startY // 标题坐标top/y
* }
* 可选参数,默认无封面
*/
async startRecord(path, dom, video, cover)
/**
* 在录制中可以动态修改dom(录制内容)
* @param {HTMLElement} dom
*/
updateRecordDom (dom)
/**
* 停止录制
*/
stopRecord()
/**
* 是否正在录制
*/
isRecroding()
UPRTCPeerTrack #
// 属性
// track唯一标识
id
// track所有者/用户唯一标示,
peerId
// 设备类型, camera,mic,desktop
deviceType
// 设备名称
deviceName
// 设备唯一标示
deviceId
// 媒体类型,audio, video
kind
// 是否是自己的媒体,或者理解为是否是本地媒体
isMe
// 是否正在柏昂
isPlaying
// 是否已经关闭
isClosed
// 是否暂停
isPaused
// 取得播放媒体的MediaStream
mediaStream
// 取得最大优先层 {spatialLayer, temporalLayer}
maxPreferredLayers
// 视频分辨率 {width, height}
resolution
// 接口方法
/**
* 播放
* @param {MediaStream} mediaStream 可选,为空时内部会创建一个MediaStream
*/
async startPlay(mediaStream)
/**
* 停止播放
*/
async stop()
/**
* 暂停播放
*/
async pause()
/**
* 恢复播放
*/
async resume()
/**
* 分数对象, UPeerTrackScore参照android
*/
async getScore()
/**
* 设置期望空间和时间层,视频有效
* @param spatialLayer 空间层
* @param temporalLayer 时间层
*/
async setPlayPreferredLayers(spatialLayer, temporalLayer)
/**
* 打开/关闭track分数监听,打开后会立即回调onTrackScoreChange
* @param enable true打开,false关闭
*/
async setScoreChangeListenEnable(enable)
UPRTCListener #
/**
* 加入房间
* @event {Function(code: int)} cb
* @param code 0 表示成功
*/
setOnRoomJoined(cb)
/**
* 接收到房间消息
* @event {Function(msg: any)} cb
* @param msg 消息内容
*/
setOnMessage(cb)
/**
* 房间成员加入
* @event {Function(peerId: string)} cb
*/
setOnPeerJoined(cb)
/**
* 房间成员离开
* @event {Function(peerId: string)} cb
*/
setOnPeerExited(cb)
/**
* 房间成员的媒体加入
* @event {Function(UPRTCPeerTrack)} cb
*/
setOnPeerMediaJoined(cb)
/**
* 房间成员的媒体离开
* @event {Function(UPRTCPeerTrack)} cb
*/
setOnPeerMediaExited(cb)
/**
* 用户在房间中可生产媒体
* @event {Function(kind: string)} cb
* @param kind 可生产媒体的种类,audio或video,如果是video表示也可以输出audio
*/
setOnMediaEnable(cb)
/**
* 用户在房间中不可生产媒体
* @event {Function()} cb
*/
setOnMediaDisable(cb)
/**
* track分数有变化时回调
* @event {Function(peerTrack: UPRTCPeerTack, score: UPeerTrackScore )} cb
* @param peerTrack 分数变化的track
* @param score 分数对象, UPeerTrackScore参照android
*/
setOnTrackScoreChange(cb)
/**
* 房间观众数,直播时有效
* @event {Function(num: number)} cb
* @param num 房间人数
*/
setOnPeerTotalNum(cb)
/**
* 用户离开房间
* @event {Function()} cb
*/
setOnRoomExited(cb)
/**
* 桌面分享选择,※※※electron版本独有※※※
* @event {Function(Array<{id,label,thumbnail,appIcon}>)} cb 支持返回async,Promise
* cb返回空表示用户取消分享,返回所选桌面的id开始分享
*/
setOnDesktopSourcesShare(cb)
关于音量分贝 #
参照 (opens new window),用UPRTCPeerTrack的mediaStream属性构建Hark即可
npm install hark