
# 流对象（Stream）
本章节介绍了Web SDK的Stream接口详情。
表1Stream接口 
| 接口                                                    | 描述               |
|:---|:---|
| [play]           | 播放该音视频流。         |
| [stop]             | 停止播放视频流。         |
| [resume]          | 恢复播放音视频。         |
| [close]           | 关闭音视频。           |
| [muteAudio]         | 禁用音频轨道。          |
| [muteVideo]       | 禁用视频轨道。          |
| [unmuteAudio]     | 启用音频轨道。          |
| [unmuteVideo]     | 启用视频轨道。          |
| [getId]            | 获取Stream唯一标识ID。  |
| [getUserId]       | 获取Stream所属的用户ID。 |
| [setAudioOutput]  | 设置音频输出设备。        |
| [setAudioVolume]    | 设置音频音量大小。        |
| [getAudioLevel]    | 获取实时音频音量级别。      |
| [hasAudio]        | 流是否包含音频轨道。       |
| [hasVideo]         | 流是否包含视频轨道。       |
| [getAudioTrack]    | 获取流的音频轨道。        |
| [getVideoTrack]     | 获取流的视频轨道。        |
| [getType]        | 获取流类型。           |
| [on]               | 注册流对象事件回调接口。     |
| [off]           | 取消注册流对象事件回调接口。   |
| [getStreamInfo]  | 获取流信息。           |
| [getVideoSnapshot] | 获取视频截图           |
   
 #### play
```
async play(elementId: string, options?: Options): Promise<void>
```
【**功能说明**】
播放音视频流。该方法会自动创建\<audio\>、\<video\>标签，并在指定的标签上播放音频和视频，同时该标签会被添加到页面中名为 "elementId "的div容器下。
**【请求参数】**
- elementId：必选，string类型，HTML \<div\>标签ID。
- options：可选，Options类型，播放选项。 Options类型定义为：{
  - objectFit：可选，string类型，远端共享流的默认值为contain，其他流默认值为cover。支持的枚举值如下：
    - contain：优先保证视频内容全部显示。视频尺寸等比缩放，直至视频窗口的一边与视窗边框对齐。如果视频尺寸与显示视窗尺寸不一致，在保持长宽比的前提下，将视频进行缩放后填满视窗，缩放后的视频四周会有一圈黑边。
    
    - cover：优先保证视窗被填满。视频尺寸等比缩放，直至整个视窗被视频填满。如果视频长宽与显示窗口不同，则视频流会按照显示视窗的比例进行周边裁剪或图像拉伸后填满视窗。
    
    - fill：视频内容完全填充视窗。如果视频的宽高比与视窗不相匹配，那么视频将被拉伸以适应视窗。
     
  
  - muted：可选，boolean类型，true表示静音，false表示不静音。默认值为false。
  
  - resolutionId：可选，string类型。双流场景，指定播放的分辨率Id的视频，如果不指定，默认选择分辨率最高的视频。该参数为1.8.0版本新增。
  
  - }
    
   
【**返回参数**】
Promise\<void\>：返回一个Promise对象。
![](https://support.huaweicloud.com/csdk-rtc/public_sys-resources/caution_3.0-zh-cn.png)
- 由于浏览器自动播放策略的限制，在play()返回错误后需要引导用户通过手动触发页面控件后，调用[resume]接口恢复播放。
- 本地流播放通常需要设置muted参数为true（静音），以防播放出来的声音也被麦克风采集到，造成回音的效果。
- 在App上，一个resolution对应于一个音视频播放窗口，Stream中的音频对所有的resolution是公共的。
 
 #### stop
```
stop(option?: StopOption): void
```
**【功能说明】**
停止播放音视频流。
**【请求参数】**
option：可选，StopOption类型，表示停止播放的选项。如果不传，则停止该流的音频和所有分辨率的视频。
StopOption类型定义如下：{
- audio：可选，boolean类型。表示是否停止音频。默认为false。
- video：可选，boolean类型。表示是否停止视频。默认为false。
- resolutionIds：可选，string\[\] 型。在video为true的时候有效。指定停止播放的分辨率Id 的视频，如果不传resolutionIds，则默认停止所有分辨率的视频。
}
**【返回参数】**
无
 #### resume
```
async resume(option?: ResumeOption): Promise<void>
```
【**功能说明**】
恢复播放音视频。场景说明如下：
- 在某些版本浏览器上，移动传入play()的div容器可能会导致音视频播放器进入PAUSED状态，此时需要调用该接口恢复播放。
- 由于浏览器自动播放策略的限制，在play()返回错误后需要引导用户通过手动方式调用该接口恢复播放。
 
【**请求参数**】
option：可选，表示恢复播放的选项，ResumeOption类型，如果不传则恢复播放该流的音频和所有分辨率的视频。
ResumeOption类型定义为：{
- audio：可选，boolean类型。是否resume音频。默认为false。
- video：可选，boolean类型。是否resume视频。默认为false。
- resolutionIds：可选，string\[\]类型，在video为true的时候有效。指定恢复播放的分辨率Id的视频，如果不传resolutionIds，默认恢复所有分辨率的视频。
}
【**返回参数**】
Promise\<void\>：返回一个Promise对象。
 #### close
```
close(option?: CloseOption): void
```
**【功能说明】**
关闭音视频的播放。对于本地流，该方法在关闭播放的同时会关闭音视频采集，释放设备资源占用。
**【请求参数】**
option：可选，CloseOption类型，表示关闭音视频的选项。如果option不填写，则关闭音频和所有分辨率的视频。
CloseOption类型定义如下：{
- audio：可选，boolean类型。表示是否关闭音频。默认为false。
- video：可选，boolean类型。表示是否关闭视频。默认为false。
- resolutionIds：可选，string\[\]类型。在video为true的时候有效。指定关闭播放的分辨率Id的视频，如果不传resolutionIds，默认关闭所有分辨率的视频。
}
**【返回参数】**
无
 #### muteAudio
```
muteAudio(): boolean
```
【**功能说明**】
禁用音频轨道。
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示禁用音频轨道成功，false表示禁用音频轨道失败。
 #### muteVideo
```
muteVideo(): boolean
```
【**功能说明**】
禁用视频轨道。
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示禁用视频轨道成功，false表示禁用视频轨道失败。
 #### unmuteAudio
```
unmuteAudio(): boolean
```
【**功能说明**】
启用音频轨道。
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示启用音频轨道成功，false表示启用音频轨道失败。
 #### unmuteVideo
```
unmuteVideo(): boolean
```
【**功能说明**】
启用视频轨道。
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示启用视频轨道成功，false表示启用视频轨道失败。
 #### getId
```
getId(): string
```
【**功能说明**】
获取Stream唯一标识ID。发布流中需包含视频流，发布后才能获取到有效的ID。
【**请求参数**】
无
【**返回参数**】
string类型，Stream唯一标识ID。
 #### getUserId
```
getUserId(): string
```
【**功能说明**】
获取Stream所属的用户ID。对于本地流，如果在[createStream](https://support.huaweicloud.com/csdk-rtc/rtc_05_0137.html#rtc_05_0137__section4419114172210)的时候入参StreamConfig中没有设置该参数，则返回undefined。
【**请求参数**】
无
【**返回参数**】
string类型，Stream所属的用户ID。
 #### setAudioOutput
```
setAudioOutput(deviceId: string): Promise<void>
```
【**功能说明**】
设置音频输出设备。
【**请求参数**】
deviceId：必选，string类型，音频输出设备的设备ID。
【**返回参数**】
Promise\<void\>：返回一个Promise对象。
 #### setAudioVolume
```
setAudioVolume(volume: number): void
```
【**功能说明**】
设置音频音量大小。
【**请求参数**】
volume：必选，number类型，音量大小，取值范围为\[0,100\]。
【**返回参数**】
无
 #### getAudioLevel
```
getAudioLevel(): number
```
【**功能说明**】
获取实时音量级别。
【**请求参数**】
无
【**返回参数**】
number类型，返回值在(0, 1)之间，通常该值大于0.1认为用户正在说话。
 #### hasAudio
```
hasAudio(): boolean
```
【**功能说明**】
该Stream是否包含音频轨道。
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示包含音频轨道，false表示不包含音频轨道。
 #### hasVideo
```
hasVideo(): boolean
```
【**功能说明**】
该Stream 是否包含视频轨道
【**请求参数**】
无
【**返回参数**】
boolean类型，true表示包含视频轨道，false表示不包含视频轨道。
 #### getAudioTrack
```
getAudioTrack(): MediaStreamTrack
```
【**功能说明**】
获取音频轨道
【**请求参数**】
无
【**返回参数**】
MediaStreamTrack类型。MediaStreamTrack类型详情可参见[MediaStreamTrack](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaStreamTrack)。
 #### getVideoTrack
```
getVideoTrack(resolutionId?:string): MediaStreamTrack
```
【**功能说明**】
获取视频轨道。
【**请求参数**】
resolutionId：可选，string类型。指定分辨率Id，如果不指定，默认选择分辨率最高的视频。
【**返回参数**】
MediaStreamTrack 类型。MediaStreamTrack类型详情可参见[MediaStreamTrack](https://developer.mozilla.org/zh-CN/docs/Web/API/MediaStreamTrack)。
 #### getType
```
getType(): string
```
【**功能说明**】
获取流类型。用于判断一个流是主流还是辅流，辅流通常是一个屏幕共享流。
【**请求参数**】
无
【**返回参数**】
string类型，本地流：local，远端主流：main，远端辅流：auxiliary。
 #### on
```
on(event: string, handler: function): void
```
【**功能说明**】
注册流对象事件回调接口。
【**请求参数** 】
- event：必选，string类型，事件名称。详细事件列表请参见[RTCStreamEvent](https://support.huaweicloud.com/csdk-rtc/rtc_05_0143.html)。
- handler：必选，function类型，事件处理方法。
 
【**返回参数**】
无
 #### off
```
off(event: string, handler: function): void
```
【**功能说明**】
取消注册流对象事件回调接口。
【**请求参数** 】
- event：必选，string类型，事件名称。详细事件列表请参见[RTCStreamEvent](https://support.huaweicloud.com/csdk-rtc/rtc_05_0143.html)。
- handler：必选，function类型，事件处理方法。
 
【**返回参数**】
无
 #### getStreamInfo
```
getStreamInfo(): StreamInfo
```
【**功能说明**】
获取已经初始化的本地流，或者收到的远端流的的信息。
【**请求参数**】
无
【**返回参数**】
StreamInfo 类型定义如下：{
- videoProfiles：RTCVideoProfileInfo\[\]类型。
- audioProfile：RTCAudioProfile类型。
}
RTCVideoProfileInfo类型定义如下：{
- resolutionId：string类型，表示分辨率Id。
- hasTrack：boolean类型，表示该分辨率的视频是否具备可播放的track。
- width：number类型，分辨率的宽度，单位为像素。
- height：number类型，分辨率的高度，单位为像素。
- frameRate：number类型，视频帧率，单位为帧/秒。
- minBitrate：number类型，视频最小码率，单位为bps。
- maxBitrate：number类型，视频最大码率，单位为bps。
}
RTCAudioProfile类型定义如下：{
- sampleRate：number类型，表示音频采样率。
- channelCount：number类型，表示音频声道数。
- bitrate：number类型，表示音频码率，单位为bps。
}
 #### getVideoSnapshot
```
getVideoSnapshot(resolutionId?: string,format?: string, encoderOptions?: number): string
```
【**功能说明**】
获取视频截图
【**请求参数**】
- resolutionId：可选，string类型。双流场景，指定需要截图的视频分辨率Id，resolutionId可通过接口[getStreamInfo] 获取。如果不传resolutionId，则默认对分辨率最高的视频流截图。
- format：可选，string类型。表示截图的格式，可填'jpeg'、'webp'、'png'。如果不传format，则默认使用png格式截图。
- encoderOptions：可选，number类型。format填'jpeg'或者'webp'时生效，表示图片质量，值范围【0,1】，默认值为1。
【**返回参数**】
string类型，表示视频截图对象的url，当视频未播放，或者resolutionId错误时，返回的string为空。
