浏览代码

更新版本到 1.4.6

ChangeLog
1. 开放私有化部署时针对房间服务器部署与否两种场景的设置
2. 添加 types 文件,支持用 typescript 调用 sdk 编写代码
3. 新增获取本地浏览器支持的音视频编码格式的功能
4. 修复 iOS safari, 360 等浏览器无法发布的问题
5. 修复日志上报参数错误的问题
6. 修复远端 mute 视频时,本地展示画面不黑屏,停留在最后一帧的问题
7. 完善/修正 API 文档
kevin.song 6 年之前
父节点
当前提交
77d6e382bd
共有 5 个文件被更改,包括 213 次插入23 次删除
  1. 1 1
      Manual.md
  2. 53 18
      README.md
  3. 3 3
      lib/index.js
  4. 2 1
      package.json
  5. 154 0
      types/index.d.ts

+ 1 - 1
Manual.md

@@ -72,7 +72,7 @@ client.joinRoom(roomId, userId, () => {
 
 ```
 client.unpublish(pubStreamId);
-client.unsubscibe(subStreamId);
+client.unsubscribe(subStreamId);
 ```
 
 ## 5. 退出房间

+ 53 - 18
README.md

@@ -20,7 +20,7 @@ UCloudRTC 包含以下方法、类或对象:
 
 Client 类包含以下方法:
 
-* [构函数 - 创建客户端](#client-constructor)
+* [构函数 - 创建客户端](#client-constructor)
 * [joinRoom 方法 - 加入房间](#client-joinroom)
 * [leaveRoom 方法 - 离开房间](#client-leaveroom)
 * [publish 方法 - 发布本地流](#client-publish)
@@ -67,15 +67,16 @@ Client 类包含以下方法:
 * [startPreviewing 方法 - 开启预览](#client-startpreviewing)
 * [stopPreviewing 方法 - 停止预览](#client-stoppreviewing)
 * [deviceDetection 方法 - 设备可用性检测](#client-devicedetection)
+* [getSupportedCodec 方法 - 检测当前浏览器支持的编解码格式](#client-getsupportedcodec)
 
 <a name="client-constructor"></a>
 
-### 1. 构函数
+### 1. 构函数
 
 用于创建一个 URTC Client 对象,示例代码:
 
 ```
-new Client(AppId, Token, Options);
+new Client(AppId, Token, ClientOptions);
 ```
 
 #### 参数说明
@@ -84,7 +85,7 @@ new Client(AppId, Token, Options);
 
 - Token: string 类型, 必传,需按规则生成,测试阶段,可使用 [generateToken](#generateToken) 临时生成
 
-- Options: object 类型, 选传,类型说明如下
+- ClientOptions: object 类型, 选传,类型说明如下
 
 ```
 {
@@ -159,12 +160,12 @@ Err 为错误信息
 发布本地流,自 1.4.0 版本开始支持同时发布两条流(且摄像头,屏幕共享各一条,不可同时为同一类),示例代码:
 
 ```
-client.publish(Options, onFailure)
+client.publish(PublishOptions, onFailure)
 ```
 
 #### 参数说明
 
-- Options: object 类型,选传,类型说明如下
+- PublishOptions: object 类型,选传,类型说明如下
 
 ```
 {
@@ -1075,12 +1076,12 @@ Err 为返回值,为空时,说明已执行成功,否则执行失败,值
 暂停播放音效,示例代码:
 
 ```
-client.pauseEffect(Options, callback)
+client.pauseEffect(EffectOptions, callback)
 ```
 
 #### 参数说明
 
-- Options: object 类型, 必传,详细的类型说明如下
+- EffectOptions: object 类型, 必传,详细的类型说明如下
 
 ```
 {
@@ -1103,12 +1104,12 @@ Err 为返回值,为空时,说明已执行成功,否则执行失败,值
 恢复播放音效,示例代码:
 
 ```
-client.resumeEffect(Options, callback)
+client.resumeEffect(EffectOptions, callback)
 ```
 
 #### 参数说明
 
-- Options: object 类型, 必传,详细的类型说明如下
+- EffectOptions: object 类型, 必传,详细的类型说明如下
 
 ```
 {
@@ -1132,12 +1133,12 @@ Err 为返回值,为空时,说明已执行成功,否则执行失败,值
 停止播放音效,示例代码:
 
 ```
-client.stopEffect(Options, callback)
+client.stopEffect(EffectOptions, callback)
 ```
 
 #### 参数说明
 
-- Options: object 类型, 必传,详细的类型说明如下
+- EffectOptions: object 类型, 必传,详细的类型说明如下
 
 ```
 {
@@ -1160,12 +1161,12 @@ Err 为返回值,为空时,说明已执行成功,否则执行失败,值
 设置正在播放的音效的音量大小,示例代码:
 
 ```
-client.setEffectVolume(Options, callback)
+client.setEffectVolume(EffectVolumeOptions, callback)
 ```
 
 #### 参数说明
 
-- Options: object 类型, 必传,详细的类型说明如下
+- EffectVolumeOptions: object 类型, 必传,详细的类型说明如下
 
 ```
 {
@@ -1228,12 +1229,12 @@ Err 为错误信息
 启动预览,示例代码:
 
 ```
-client.startPreviewing(PreviewOptions, onSuccess, onFailure);
+client.startPreviewing(DeviceOptions, onSuccess, onFailure);
 ```
 
 #### 参数说明
 
-- PreviewOptions: object 类型,选传,详细的类型说明如下
+- DeviceOptions: object 类型,选传,详细的类型说明如下
 
 ```
 {
@@ -1320,6 +1321,33 @@ Result 为返回值,object 类型,详细的类型说明如下
 }
 ```
 
+<a name="client-getsupportedcodec"></a>
+
+### 45. getSupportedCodec 方法
+
+检测当前浏览器支持的编解码格式
+
+```
+client.getSupportedCodec(callback);
+```
+
+#### 参数说明
+
+- callback: function 类型,必传,方法的回调函数,函数说明如下
+
+```
+function callback(Codecs) { }
+```
+
+Codecs 为返回值,object 类型,详细的类型说明如下
+
+```
+{
+  audio: string[],  // 字符串数组,支持的音频编解码格式。可能含有 "opus",或为空数组。
+  video: string[],  // 字符串数组,支持的视频编解码格式。可能含有 "h264"、"vp8" 两种取值,或为空数组。
+}
+```
+
 ----
 
 <a name='getdevices'></a>
@@ -1469,7 +1497,14 @@ Logger.debug(a, ...)  // 可传任意数量的任意类型的变量作为参数
 
 ```
 UCloudRTC.setServers({
-  api: "https://env1.urtc.com",   // api 为 URTC 房间服务的访问域名
-  log: "https://env1.urtclog.com" // log 为 URTC 日志服务器的访问域名
+  api: "https://env1.urtc.com",   // api 为 URTC 房间服务的访问地址
+  log: "https://env1.urtclog.com" // log 为 URTC 日志服务的访问地址
+  signal: "wss://env1.urtcsignal.com.cn:5005" // signal 为 URTC 信令服务的访问地址
 })
 ```
+
+> 注:
+> 
+> 1. 当不需要日志服务(未部署日志服务器)时,可不用设置 log。
+> 2. 当仅部署一台信令服务器时,由于可直接指定信令服务的访问地址,不需要由房间服务分配,此时可仅设置 signal,不用设置 api,如:`UCloudRTC.setServers({signal: "wss://env1.urtcsignal.com.cn:5005"})`。
+> 3. 当设置了 signal 时,优先使用 signal 指定的信令服务的访问地址,不再调用由 api 指定的房间服务分配信令服务访问地址的接口。

文件差异内容过多而无法显示
+ 3 - 3
lib/index.js


+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "urtc-sdk",
-  "version": "1.4.5",
+  "version": "1.4.6",
   "description": "UCloud RTC javascript SDK",
   "main": "lib/index.js",
   "repository": {
@@ -24,6 +24,7 @@
   ],
   "files": [
     "lib/index.js",
+    "types/index.d.ts",
     "Manual.md"
   ],
   "homepaage": "https://docs.ucloud.cn/video/urtc/overview"

+ 154 - 0
types/index.d.ts

@@ -0,0 +1,154 @@
+export declare type VideoCodec = 'vp8'|'h264';
+export declare type AudioCodec = 'opus';
+
+export declare type RoomType = 'rtc'|'live';
+export declare type UserRole = 'pull'|'push'|'push-and-pull';
+export declare type DeviceType = 'audio'|'video';
+
+// 业务方使用的事件类型
+export declare type EventType = 'user-added' | 'user-removed' |
+  'stream-added'|'stream-removed'| 'stream-published' | 'stream-subscribed' |
+  'mute-video' | 'unmute-video' | 'mute-audio' | 'unmute-audio';
+
+export declare type WaterMarkPosition = 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom'; // 左上,左下,右上,右下
+export declare type WaterMarkType = 'time' | 'image' | 'text';
+export declare type MainViewType = 'desktop' | 'screen' | 'camera'; // todo - remove desktop
+
+export interface ClientOptions {
+  type?: RoomType
+  role?: UserRole
+  codec?: VideoCodec  // 可设 vp8 或 h264,默认为 vp8
+}
+
+export interface Codecs {
+  audio: Array<string>,
+  video: Array<string>
+}
+
+export interface PublishOptions {
+  audio: boolean    // 是否开启麦克风
+  video: boolean    // 是否开启摄像头
+  screen: boolean   // 是否共享屏幕
+  microphoneId?: string // 麦克风设备ID
+  cameraId?: string     // 摄像头设备ID
+  extensionId?: string  // chrome插件ID
+  mediaStream?: MediaStream // 自定义的媒体流
+}
+
+export interface DeviceOptions {
+  audio: boolean        // 是否开启麦克风
+  video: boolean        // 是否开启摄像头
+  microphoneId?: string // 麦克风设备ID
+  cameraId?: string     // 摄像头设备ID
+}
+
+export interface DeviceDetectionOptions {
+  audio: boolean          // 必填,指定是否检测麦克风设备
+  video: boolean          // 必填,指定是否检测摄像头设备
+  microphoneId?: string   // 选填,指定需要检测的麦克风设备的ID,可通过 getMicrophones 方法查询获得该ID,不填时,将检测默认的麦克风设备
+  cameraId?: string       // 选填,指定需要检测的摄像头设备的ID,可以通过 getCameras 方法查询获得该ID,不填时,将检测默认的摄像头设备
+}
+
+export interface User {
+  uid: string     // 用户ID
+}
+
+export interface Stream {
+  sid: string                     // 流ID
+  uid: string                     // 对应的用户的ID
+  type: 'publish'|'subscribe'     // 流类型
+  mediaType?: 'camera'|'screen'   // 流的媒体类型,用于对发布流的区分
+  video: boolean                  // 是否包含音频
+  audio: boolean                  // 是否包含视频
+  muteAudio: boolean              // 音频是否静音
+  muteVideo: boolean              // 视频是否静音
+  mediaStream?: MediaStream       // 业务侧自定义媒体流
+}
+
+export interface LeaveRoomOptions {
+  keepRecording: boolean      // 是否保持服务端录制,默认不保持
+}
+
+export interface AudioVolumeOptions {
+  streamId?: string
+  element?: HTMLMediaElement
+  volume: number
+}
+
+export interface WaterMarkOptions {
+  position?: WaterMarkPosition
+  type?: WaterMarkType   // 水印类型
+  remarks?: string       // 水印备注
+}
+
+export interface MixStreamOptions {
+  uid?: string           // 指定某用户的流为主画面
+  type?: MainViewType    // 主画面类型
+  width?: number         // 混流后视频的宽度
+  height?: number        // 混流后视频的高度
+  template?: number      // 混流模板,对应不同的录制布局
+  isAverage?: boolean    // 是否均匀,均分对应平铺,不均分对应垂直
+}
+
+export interface RecordOptions {
+  waterMark?: WaterMarkOptions
+  mixStream?: MixStreamOptions
+  bucket: string
+  region: string
+}
+
+export interface Record {
+  FileName: string,
+  RecordId: string
+}
+
+export interface EffectOptions {
+  streamId?: string
+  effectId: number
+  filePath?: string
+  loop?: boolean
+  playTime?: number
+  replace?: boolean
+}
+
+export interface EffectVolumeOptions {
+  streamId?: string
+  effectId: number
+  volume: number
+}
+
+export interface SwitchDeviceOptions {
+  streamId?: string
+  type: DeviceType
+  deviceId: string
+}
+
+export interface SwitchImageOptions {
+  streamId?: string
+  filePath: string
+}
+
+export interface SnapshotOptions {
+  streamId?: string
+  download?: string | boolean
+}
+
+export interface AudioStats {
+  br: number
+  lostpre: number
+  vol: number
+  mime: string
+}
+
+export interface VideoStats {
+  br: number,
+  lostpre: number,
+  frt: number,
+  w: number,
+  h: number,
+  mime: string
+}
+
+export interface NetworkStats {
+  rtt: number
+}