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
上次更新: 8/27/2024, 7:32:11 PM