# Aliyun WebRtc SDK


阿里云音视频通信aliyun-webrtc-sdk，提供基于WebRTC适用于浏览器的SDK。


## Installation


You can install it as dependency with npm/cnpm or yarn.


```javascript
$ # save into package.json dependencies with -S
$ npm install aliyun-webrtc-sdk -S

$ # you can use cnpm for fast install
$ cnpm install aliyun-webrtc-sdk -S

$ # use yarn for install
$ yarn add aliyun-webrtc-sdk
```


## 一、接入前准备
阿里云RTC提供移动端、PC等多端SDK，并兼容标准WebRTC浏览器接入网络，帮助您快速搭建多端实时应用。接入RTC的方法，请参见[入门概述](https://help.aliyun.com/document_detail/74889.html?spm=a2c4g.11186623.2.14.701d257bVKEW0k#concept-2326476)。
当您成功搭建本地SDK，可以在终端调用API与RTC服务端进行交互，在加入频道或房间后，您可以进行本地推流、订阅远端用户等操作，实现频道内不同用户之间的音视频实时通话。
阿里云RTC拥有全球实时智能调度系统，并结合实时媒体处理系统和1500+边缘节点，运用行业领先的音频3A（AGC、AEC、ANS）、视频编码、弱网对抗等算法为您提供低延时、抗丢包的音视频实时通信。
![](https://intranetproxy.alipay.com/skylark/lark/0/2020/png/241429/1583478028152-476aa35b-4353-4055-955a-199523e4c658.png#align=left&display=inline&height=1726&margin=%5Bobject%20Object%5D&originHeight=1726&originWidth=1346&size=0&status=done&style=none&width=1346)

## 二、快速开启

- 创建实例

```javascript
import 'aliyun-webrtc-sdk'

/**
 * 创始实例,目前支持多实例
 */
var aliWebrtc = new AliRtcEngine();
```

- 检测浏览器是否支持webrtc

```javascript
aliWebrtc.isSupport().then((res)=>{
  //支持webrtc
}).catch((error)=>{
	//不支持webrtc
})
```

- 订阅onPublisher回调。当远程用户推流时，在SDK里会触发onPublisher回调，通过订阅这个回调，能够得到频道里已经推流的用户。

```javascript
aliWebrtc.on('onPublisher',(publisher) =>{
    //远程发布者userId
    console.log(publisher.userId);
    //远程发布名字
    console.log(publisher.displayName);
    //远程流内容，streamConfigs是数组。
    console.log(publisher.streamConfigs);
  });
```

- 开启本地预览。在创建完AliRtcEngine实例后，您可以通过video标签播放。

```javascript
aliWebrtc.startPreview(
    video    // html中的video元素
).then(()=>{
    //预览成功
}).catch((error) => {
    // 预览失败
});
```

- 加入频道

```javascript
aliWebrtc.joinChannel({
    userid,         // 用户ID，只能由数字、字母、下划线组成
    channel,        // 频道
    appid,          // 应用ID
    nonce,          // 随机码
    timestamp,      // 时间戳
    gslb,           // gslb服务地址
    token,          // 令牌
},displayName).then(()=>{
    // 入会成功
} ,(error)=>{
    // 入会失败，打印错误内容，可以看到失败原因
    console.log(error.message);
});
```

- 推流 默认推摄像头和麦克风流

```javascript
aliWebrtc.publish().then(()=>{
} ,(error)=>{
    console.log(error.message);
});
```

- 订阅和显示远程流。通过subscribe方法订阅远程流，订阅成功后在调用setDisplayRemoteVideo显示远程流。

通常在onPublisher回调中进行订阅与设置视图。


```javascript
aliWebrtc.subscribe(userId).then((userId)=>{
    aliWebrtc.setDisplayRemoteVideo(
        userId,       // userId是用户ID
        video,        // html中用于显示stream对象的video元素
        1             // 1表示摄像头流（大流和小流）和音频流，2表示屏幕分享流
    )
},(error)=>{
    console.log(error.message);
});
```

- 离开频道。

```javascript
aliWebrtc.leaveChannel().then(()=>{
} ,(error)=>{
    console.log(error.message);
});
```


## 三、接口回调列表
### 1）接口列表（**详细接口信息请参考**[官网AliRtcEngine接口文档](https://help.aliyun.com/document_detail/107041.html?spm=a2c4g.11186623.6.713.7cdc1fa39se1N1)）
#### 基础接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| isSupport | 检测浏览器是否支持RTC SDK | 1.7 |
| getDevices | 获取设备信息 | 1.2 |
| getAvailableResolutions | 获取可支持的分辨率 | 1.2 |
| isSupportScreenShare | 是否支持屏幕共享 | 1.12 |
| setChannelProfile | 设置频道模式 | 1.12 |
| setClientRole | 设置角色 | 1.12 |
| setAudioOnlyMode | 设置是否为纯音频模式 | 1.12.2 |

#### 频道相关接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| joinChannel | 加入频道 | 1.2 |
| leaveChannel | 离开频道 | 1.2 |

#### 发布相关接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| configLocalAudioPublish | 设置是否允许发布音频流 | 1.9 |
| configLocalCameraPublish | 设置是否允许发布相机流 | 1.9 |
| configLocalScreenPublish | 设置是否允许发布屏幕共享流 | 1.9 |
| publish | 发布本地视频流 | 1.2 |
| unPublish | 结束发布本地流 | 1.2 |

#### 订阅相关接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| configRemoteAudio | 设置是否订阅远端音频流 | 1.9 |
| configRemoteCameraTrack | 设置是否订阅远端相机流 | 1.9 |
| configRemoteScreenTrack | 设置是否订阅远端屏幕流 | 1.9 |
| subscribe | 订阅远程发布流 | 1.2 |
| unSubscribe | 取消订阅该用户所有的流 | 1.2 |

#### 视频相关接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| currentCamera | 指定摄像头设备 | 1.9 |
| videoProfile | 设置视频流参数 | 1.9 |
| muteLocalCamera | 是否停止本地视频采集 | 1.2 |
| setDisplayRemoteVideo | 为远端的视频设置渲染窗口以及绘制参数 | 1.5 |
| setVideoProfile | 设置视频流或共享流参数 | 1.11 |
| enableCamera | 设置是否推摄像头 | 1.13 |

#### 音频相关接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| currentAudioCapture | 指定麦克风设备 | 1.9 |
| muteLocalMic | 是否停止本地音频采集 | 1.2 |
| muteRemoteAudioPlaying | 设置是否停止播放远端音频流 | 1.12.2 |
| muteAllRemoteAudioPlaying | 设置是否停止远端的所有音频流的播放 | 1.12.2 |
| setAudioVolume | 设置订阅用户音量 | 1.13 |
| getAudioVolume | 获取订阅用户音量 | 1.13
 |
| enableAudioVolumeIndicator | 设置接收音量值回调 | 1.13 |

#### 预览接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| startPreview | 预览本地摄像头 | 1.2 |
| stopPreview | 结束预览本地摄像头 | 1.2 |
| enableHighDefinitionPreview | 设置是否开启高清预览 | 1.12.1 |

#### 远端用户查询接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| getUserList | 获取当前房间在线用户 | 1.9 |
| getUserInfo | 获取用户信息 | 1.9 |

#### 其他接口
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| on | 订阅事件 | 1.2 |
| off | 取消订阅事件 | 1.2 |
| setExternalMediaTrack | 设置外部输入音视频流替换 | 1.12.1 |



### 2）回调列表（**详细回调信息请参考**[官网回调与监听文档](https://help.aliyun.com/document_detail/128789.html?spm=a2c4g.11186623.6.712.340521d6e2JiJj)）
| API | 描述 | 以上版本支持 |
| :--- | :--- | :--- |
| onPublisher | 发布流回调 | 1.2 |
| onUnPublisher | 取消发布流回调 | 1.2 |
| onJoin | 加入频道回调 | 1.2 |
| onLeave | 离开频道回调 | 1.2 |
| onError | 错误异常回调 | 1.2 |
| onBye | 被服务器踢出或者频道关闭时回调 | 1.11 |
| onUpdateRole | 角色切换回调 | 1.12 |
| onAudioLevel | 音频能量值回调 | 1.13 |



## 四、错误码列表(详细错误码信息请参考[官网错误码文档](https://help.aliyun.com/document_detail/157277.html?spm=a2c4g.11186623.6.714.31201fa3FoOxK2))
### isSupport 错误码 errorCode
| 错误码 | 含义 | 描述 |
| --- | --- | --- |
| 10000 | ERROR_DEVICE_UNKNOWNERROR | 设备未知错误 |
| 10001 | ERROR_DEVICE_AUDIODEVICENOTFOUND | 未找到音频设备 |
| 10002 | ERROR_DEVICE_VIDEODEVICENOTFOUND | 未找到视频设备 |
| 10003 | ERROR_DEVICE_AUDIODEVICENOTALLOWED | 浏览器禁用音频设备 |
| 10004 | ERROR_DEVICE_VIDEODEVICENOTALLOWED | 浏览器禁用视频设备 |
| 10005 | ERROR_DEVICE_AUDIODEVICENOTREADABLE | 系统禁用音频设备 |
| 10006 | ERROR_DEVICE_VIDEODEVICENOTREADABLE | 系统禁用视频设备 |
| 10020 | ERROR_NOTSUPPORT_WEBRTC | 浏览器不支持webrtc |
| 10021 | ERROR_NEEDHTTPS | 不是Https环境 |
| 10022 | ERROR_NOTSUPPORT_DEVICE | 不支持获取设备 |
| 10023 | ERROR_NOTSUPPORT_H264 | 不支持H264 |
| 10024 | ERROR_NOTSUPPORT_BROWSER | 不支持此浏览器 |



### 其他 错误码 errorCode
| 错误码 | 含义 | 描述 |
| --- | --- | --- |
| 10000 | ERROR_DEVICE_UNKNOWNERROR | 设备未知错误 |
| 10001 | ERROR_DEVICE_AUDIODEVICENOTFOUND | 未找到音频设备 |
| 10002 | ERROR_DEVICE_VIDEODEVICENOTFOUND | 未找到视频设备 |
| 10003 | ERROR_DEVICE_AUDIODEVICENOTALLOWED | 浏览器禁用音频设备 |
| 10004 | ERROR_DEVICE_VIDEODEVICENOTALLOWED | 浏览器禁用视频设备 |
| 10005 | ERROR_DEVICE_AUDIODEVICENOTREADABLE | 系统禁用音频设备 |
| 10006 | ERROR_DEVICE_VIDEODEVICENOTREADABLE | 系统禁用视频设备 |
| 10010 | ERROR_SCREENSHARE_UNKNOWNERROR | 屏幕共享未知错误 |
| 10011 | ERROR_SCREENSHARE_NOTALLOWED | 屏幕共享被禁用 |
| 10012 | ERROR_SCREENSHARE_ENDED | 屏幕共享已取消 |
| 10013 | ERROR_SCREENSHARE_NOPERMISSION | 屏幕共享系统禁止（mac） |
| 10112 | ERROR_OPTIONS_LIVE_CANNOT_PUBLISH | 观众角色不能推流 |
| 10120 | ERROR_OPTIONS_AUDIO_ONLY | 纯音频模式推流或订阅其他流 |
| 10130 | ERROR_OPTIONS_ENABLECAMERA | enableCamera的时候调用摄像头 |
| 10200 | ERROR_AUTOPLAY_UNKNOWN_ERROR | 自动播放未知错误 |
| 10201 | ERROR_AUTOPLAY_ERROR | 自动播放失败错误 |
| 10301 | ERROR_ICE_PUBLISH_DISCONNECTED | 推流ice断开 |
| 10302 | ERROR_ICE_SUBSCRIBE_DISCONNECTED | 订阅ice断开 |
| 10310 | ERROR_HEARTBEAT_TIMEOUT | 90s 心跳超时 |
| 10311 | ERROR_NOSESSION | no session |
| 10400 | ERROR_PUBLISH_NOSTREAM | 所有流都是禁用状态 |
| 10401 | ERROR_ANSWER_FAIL | answer失败 |
| 10500 | ERROR_FREQUENTLY_OPERATION | 操作频繁 |
| 33622275 | ERROR_OPTIONS_JOINCHANNEL | 入会失败，频道类型错误 |

