Browse Source

更新版本到 1.4.6

ChangeLog
1. 开放私有化部署时针对房间服务器部署与否两种场景的设置
2. 添加 types 文件,支持用 typescript 调用 sdk 编写代码
3. 新增获取本地浏览器支持的音视频编码格式的功能
4. 修复 iOS safari, 360 等浏览器无法发布的问题
5. 修复日志上报参数错误的问题
6. 修复远端 mute 视频时,本地展示画面不黑屏,停留在最后一帧的问题
7. 完善/修正 API 文档
kevin.song 6 years ago
parent
commit
77d6e382bd
5 changed files with 213 additions and 23 deletions
  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 指定的房间服务分配信令服务访问地址的接口。

File diff suppressed because it is too large
+ 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
+}