# Interface ICameraVideoTrack (/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

可以通过 [AgoraRTC.createCameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartc#createcameravideotrack) 来获取。

## Properties [#properties]

<a id="enabled"></a>

### enabled [#enabled]

<ApiSignature>

enabled: boolean

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[enabled](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#enabled)

本地轨道当前的启用状态。

<a id="isplaying"></a>

### isPlaying [#isplaying]

<ApiSignature>

isPlaying: boolean

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[isPlaying](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#isplaying)

媒体轨道是否正在页面上播放。

- `true`: 媒体轨道正在页面上播放。
- `false`: 媒体轨道没有在页面上播放。

<a id="muted"></a>

### muted [#muted]

<ApiSignature>

muted: boolean

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[muted](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#muted)

本地媒体轨道当前的静音状态。

<a id="processordestination"></a>

### processorDestination [#processordestination]

<ApiSignature>

processorDestination: IBaseProcessor

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[processorDestination](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#processordestination)

:::info[自从]
*4.10.0*

本地视频轨道上当前媒体处理链路的最终节点。
:::

<a id="trackmediatype"></a>

### trackMediaType [#trackmediatype]

<ApiSignature>

trackMediaType: "audio"|"video"

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[trackMediaType](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#trackmediatype)

媒体轨道的类型：

- `"audio"`: 音频轨道。
- `"video"`: 视频轨道。

## Methods [#methods]

<a id="clone"></a>

### clone [#clone]

<ApiSignature>

clone(config?: [VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) | [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset), cloneTrack?: boolean): [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack)

</ApiSignature>

Overrides [ILocalVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalvideotrack).[clone](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalvideotrack#clone)

:::info[自从]
*4.19.0*

复制当前的视频轨道对象，生成一个新的视频轨道。

在视频会议、在线教育等场景中，你可以用该方法实现同一视频流的两路显示，并为每路显示设置不同的分辨率、帧率、码率等参数。
:::

<ParameterList title="Parameters">
<Parameter name="config" optional>

<ParameterType>

[VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) | [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset)

</ParameterType>

新生成视频轨道的编码配置。你可以通过 [VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) 传入 SDK 内置的编码配置；也可以通过传入一个 [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset) 来自定义视频编码配置。

</Parameter>
<Parameter name="cloneTrack" type="boolean" optional>

是否克隆当前轨道。默认为 `true`。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

[ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack)

</ApiReturnType>

新生成的视频轨道。

</ApiReturns>

<a id="close"></a>

### close [#close]

<ApiSignature>

close(): void

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[close](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#close)

关闭本地轨道，并释放相关采集设备。

一旦本地轨道被关闭，就无法再次使用。如需再次使用本地轨道，需要重新创建。

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="getcurrentframedata"></a>

### getCurrentFrameData [#getcurrentframedata]

<ApiSignature>

getCurrentFrameData(): ImageData

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[getCurrentFrameData](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#getcurrentframedata)

:::info[自从]
*4.1.0*

获取当前渲染的视频帧数据。

> 只有在播放后才能调用此方法，如果没有调用 [play](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#play) 则返回空数据。
:::

<ApiReturns>

<ApiReturnType>

ImageData

</ApiReturnType>

存储了 RGBA 数据的 `ImageData` 对象。该对象为浏览器原生对象，详见 [ImageData](https://developer.mozilla.org/zh-CN/docs/Web/API/ImageData)。

</ApiReturns>

<a id="getlisteners"></a>

### getListeners [#getlisteners]

<ApiSignature>

getListeners(event: string): Function[]

</ApiSignature>

Inherited from EventEmitter.getListeners

指定一个事件名，获取当前所有监听这个事件的回调函数。

<ParameterList title="Parameters">
<Parameter name="event" type="string" required>

事件名称。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Function[]

</ApiReturnType>

</ApiReturns>

<a id="getmediastreamtrack"></a>

### getMediaStreamTrack [#getmediastreamtrack]

<ApiSignature>

getMediaStreamTrack(): MediaStreamTrack

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[getMediaStreamTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#getmediastreamtrack)

获取浏览器原生的 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) 对象。

<ApiReturns>

<ApiReturnType>

MediaStreamTrack

</ApiReturnType>

一个 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) 对象。

</ApiReturns>

<a id="getrtcrtptransceiver"></a>

### getRTCRtpTransceiver [#getrtcrtptransceiver]

<ApiSignature>

getRTCRtpTransceiver(type?: [StreamType](/zh-CN/api-reference/rtc/react-sdk/web-sdk/enums/streamtype)): RTCRtpTransceiver | undefined

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[getRTCRtpTransceiver](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#getrtcrtptransceiver)

获取当前轨道的 [RTCRtpTransceiver](https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpTransceiver) 实例。

该方法目前主要用于视频流的[端到端加密（Beta）](/zh-CN/realtime-media/rtc/build/security-and-auth/e2e-encryption)。

> 如果 SDK 发生断线重连，当前轨道对应的 `RTCRtpTransceiver` 实例可能会发生变化。你可以通过以下回调来获取新的 `RTCRtpTransceiver` 实例：
>
> - 本地轨道：[ILocalTrack.transceiver-updated](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#event_transceiver_updated)
> - 远端轨道：[IRemoteTrack.transceiver-updated](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iremotetrack#event_transceiver_updated_2)

<ParameterList title="Parameters">
<Parameter name="type" optional>

<ParameterType>

[StreamType](/zh-CN/api-reference/rtc/react-sdk/web-sdk/enums/streamtype)

</ParameterType>

视频流的类型。详见 [StreamType](/zh-CN/api-reference/rtc/react-sdk/web-sdk/enums/streamtype)。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

RTCRtpTransceiver | undefined

</ApiReturnType>

当前轨道的 `RTCRtpTransceiver` 实例。

</ApiReturns>

<a id="getstats"></a>

### getStats [#getstats]

<ApiSignature>

getStats(): [LocalVideoTrackStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/localvideotrackstats)

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[getStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#getstats)

Overrides [ILocalTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack).[getStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#getstats)

获取本地视频轨道的相关信息。

#### deprecated [#deprecated]

自 v4.1.0 起废弃，请使用 [AgoraRTCClient.getLocalVideoStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#getlocalvideostats) 和 [AgoraRTCClient.getLocalAudioStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#getlocalaudiostats)。

<ApiReturns>

<ApiReturnType>

[LocalVideoTrackStats](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/localvideotrackstats)

</ApiReturnType>

</ApiReturns>

<a id="gettrackid"></a>

### getTrackId [#gettrackid]

<ApiSignature>

getTrackId(): string

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[getTrackId](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#gettrackid)

获取由 SDK 生成的对于媒体轨道来说的唯一 ID。

<ApiReturns>

<ApiReturnType>

string

</ApiReturnType>

媒体轨道 ID。

</ApiReturns>

<a id="gettracklabel"></a>

### getTrackLabel [#gettracklabel]

<ApiSignature>

getTrackLabel(): string

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[getTrackLabel](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#gettracklabel)

获取本地轨道的来源描述。

<ApiReturns>

<ApiReturnType>

string

</ApiReturnType>

可能返回以下值：

- 如果是通过 `createMicrophoneAudioTrack` 或 `createCameraVideoTrack` 创建的轨道，返回 [MediaDeviceInfo.label](https://developer.mozilla.org/en-US/docs/Web/API/MediaDeviceInfo/label) 字段。
- 如果是通过 `createScreenVideoTrack` 创建的轨道，返回屏幕共享的 `sourceId`。
- 如果是 `createCustomAudioTrack` 或 `createCustomVideoTrack` 创建的轨道，返回 [MediaStreamTrack.label](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack/label) 字段。

</ApiReturns>

<a id="getvideoelementvisiblestatus"></a>

### getVideoElementVisibleStatus [#getvideoelementvisiblestatus]

<ApiSignature>

getVideoElementVisibleStatus(): [CheckVideoVisibleResult](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#checkvideovisibleresult) | undefined

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[getVideoElementVisibleStatus](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#getvideoelementvisiblestatus)

- @自从

     *4.8.0*

获取 HTML `<video>` 标签的可见状态和不可见原因。

调用 `localVideoTrack.play` 后 SDK 会创建 [HTML `<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video) 标签用于播放视频轨道。当 `localVideoTrack.isPlaying` 为 `true` 却看不到图像时，你可调用该方法进行问题排查。

<ApiReturns>

<ApiReturnType>

[CheckVideoVisibleResult](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#checkvideovisibleresult) | undefined

</ApiReturnType>

[CheckVideoVisibleResult](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#checkvideovisibleresult) 对象。如果该方法返回 `undefined`，可能为以下原因：

- `localVideoTrack.isPlaying` 为 `false`。
- `<video>` 标签不存在。
- `<video>` 标签不是通过 `play` 方法调用产生的。

</ApiReturns>

<a id="off"></a>

### off [#off]

<ApiSignature>

off(event: string, listener: Function): void

</ApiSignature>

Inherited from EventEmitter.off

取消一个指定事件的监听。

<ParameterList title="Parameters">
<Parameter name="event" type="string" required>

指定事件的名称。

</Parameter>
<Parameter name="listener" type="Function" required>

监听事件时传入的回调函数。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="on"></a>

### on [#on]

#### on [1/4] [#on-14]

<ApiSignature>

on(event: "track-updated", listener: typeof event_track_updated): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#on)

Overrides [ILocalAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack#on)

<ParameterList title="Parameters">
<Parameter name="event" type="&quot;track-updated&quot;" required>

事件名称。

</Parameter>
<Parameter name="listener" type="typeof event_track_updated" required>

详见 [track-updated](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#event_track_updated)。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

#### on [2/4] [#on-24]

<ApiSignature>

on(event: "track-ended", listener: typeof event_track_ended): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#on)

Overrides [ILocalAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack#on)

<ParameterList title="Parameters">
<Parameter name="event" type="&quot;track-ended&quot;" required>

事件名称。

</Parameter>
<Parameter name="listener" type="typeof event_track_ended" required>

详见 [track-ended](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#event_track_ended)。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

#### on [3/4] [#on-34]

<ApiSignature>

on(event: "video-element-visible-status", listener: typeof event_video_element_visible_status): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#on)

Overrides [ILocalAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack#on)

<ParameterList title="Parameters">
<Parameter name="event" type="&quot;video-element-visible-status&quot;" required>

事件名称。

</Parameter>
<Parameter name="listener" type="typeof event_video_element_visible_status" required>

详见 [video-element-visible-status](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalvideotrack#event_video_element_visible_status)。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

#### on [4/4] [#on-44]

<ApiSignature>

on(event: "transceiver-updated", listener: typeof event_transceiver_updated): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#on)

Overrides [ILocalAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack).[on](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalaudiotrack#on)

添加事件监听器。

<ParameterList title="Parameters">
<Parameter name="event" type="&quot;transceiver-updated&quot;" required>

事件名称。

</Parameter>
<Parameter name="listener" type="typeof event_transceiver_updated" required>

详见 [ILocalTrack.transceiver-updated](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#event_transceiver_updated)。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="once"></a>

### once [#once]

<ApiSignature>

once(event: string, listener: Function): void

</ApiSignature>

Inherited from EventEmitter.once

监听一个指定的事件，当事件触发时会调用传入的回调函数。

当监听后事件第一次触发时，该监听和回调函数就会被立刻移除，也就是只监听一次指定事件。

<ParameterList title="Parameters">
<Parameter name="event" type="string" required>

指定事件的名称。

</Parameter>
<Parameter name="listener" type="Function" required>

传入的回调函数。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="pipe"></a>

### pipe [#pipe]

<ApiSignature>

pipe(processor: IBaseProcessor): IBaseProcessor

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[pipe](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#pipe)

:::info[自从]
*4.10.0*

将 `Processor` 注入本地视频轨道。
:::

<ParameterList title="Parameters">
<Parameter name="processor" type="IBaseProcessor" required>

`Processor` 实例。每个插件均有对应类型的 `Processor`。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

IBaseProcessor

</ApiReturnType>

`Processor` 实例。

</ApiReturns>

<a id="play"></a>

### play [#play]

<ApiSignature>

play(element: string | HTMLElement, config?: [VideoPlayerConfig](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoplayerconfig)): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[play](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#play)

Overrides [ILocalTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack).[play](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#play)

在页面上播放远端视频轨道。

<ParameterList title="Parameters">
<Parameter name="element" type="string | HTMLElement" required>

指定一个 DOM 元素，SDK 将在这个元素下创建 `<video>` 元素播放视频轨道，支持 2 种类型：

- `string`: 指定该 DOM 元素的 ID 值。
- `HTMLElement`: 直接传入一个 DOM 元素对象。

</Parameter>
<Parameter name="config" optional>

<ParameterType>

[VideoPlayerConfig](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoplayerconfig)

</ParameterType>

设置播放参数（镜像/显示模式）。详见 [VideoPlayerConfig](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoplayerconfig)。对于本地视频轨道，镜像模式默认开启。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="removealllisteners"></a>

### removeAllListeners [#removealllisteners]

<ApiSignature>

removeAllListeners(event?: string): void

</ApiSignature>

Inherited from EventEmitter.removeAllListeners

指定一个事件，取消其所有的监听。

<ParameterList title="Parameters">
<Parameter name="event" type="string" optional>

指定事件的名称，如果没有指定事件，则取消所有事件的所有监听。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="replacetrack"></a>

### replaceTrack [#replacetrack]

<ApiSignature>

replaceTrack(track: MediaStreamTrack, stopOldTrack: boolean): Promise&lt;void&gt;

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[replaceTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#replacetrack)

:::info[自从]
*4.17.0*

替换本地视频轨道。

该方法在本地视频流发布前或发布后都可以调用：

- 在发流前调用，新的视频轨道会在本地播放。
- 在发流后调用，远端会接收到新的视频轨道。

新的视频轨道可以通过 [ILocalVideoTrack.getMediaStreamTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocalvideotrack#getmediastreamtrack) 或者 `mediaStream.getVideoTracks` 方法获取。你可以选择是否停止被替换的视频轨道。

**注意事项：**

- 支持 Chrome 65+，Safari 以及最新版 Firefox 浏览器。
- 部分移动设备上该方法可能不生效。
- 建议在相同类型、相同编码配置的视频轨道之间进行替换，原因如下：

  - 如果视频轨道类型不同，例如用 `ScreenVideoTrack` 对象替换 `CameraVideoTrack` 对象，由于 `CameraVideoTrack` 默认开启镜像（详见 [VideoPlayerConfig.mirror](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoplayerconfig#mirror)），会导致画面发生镜像翻转。
  - 如果编码配置（`encoderConfig`）不同，可能导致实际发送的分辨率或帧率不准。
- 订阅端无法知悉视频轨道被替换。
- 如果需要切换媒体输入设备，推荐使用 [ICameraVideoTrack.setDevice](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#setdevice) 方法。

**示例代码**

```javascript
// 原有的本地视频轨道
const localVideoTrack = await AgoraRTC.createCameraVideoTrack();
// 获取新的视频轨道（方式一）
const newTrack = localVideoTrack.getMediaStreamTrack();
// 获取新的视频轨道（方式二）
const newTrack = await navigator.mediaDevices.getUserMedia({audio: true, video: true}).then(mediaStream => mediaStream.getVideoTracks()[0]);
// 替换本地视频轨道，并且停止原有的视频轨道
await localVideoTrack.replaceTrack(newTrack, true);
```
:::

<ParameterList title="Parameters">
<Parameter name="track" type="MediaStreamTrack" required>

新的视频轨道。需要传入一个 [MediaStreamTrack](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) 对象。

</Parameter>
<Parameter name="stopOldTrack" type="boolean" required>

是否停止原有的视频轨道：

- 停止原有的视频轨道。
- 保留原有的视频轨道。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="sendseidata"></a>

### sendSeiData [#sendseidata]

<ApiSignature>

sendSeiData(sei: Uint8Array): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[sendSeiData](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#sendseidata)

在 H.264 视频流中添加 SEI 数据。

<ParameterList title="Parameters">
<Parameter name="sei" type="Uint8Array" required>

SEI 数据。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="setdevice"></a>

### setDevice [#setdevice]

<ApiSignature>

setDevice(deviceId: string | [RequiredOnlyOneOf](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#requiredonlyoneof)&lt;object&gt;): Promise&lt;void&gt;

</ApiSignature>

设置负责采集视频数据的摄像头设备。

> 在发布前和发布后均可调用此方法。

<ParameterList title="Parameters">
<Parameter name="deviceId" required>

<ParameterType>

string | [RequiredOnlyOneOf](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#requiredonlyoneof) & lt;object & gt;

</ParameterType>

设备 ID，支持通过以下方式传入：

- 传入字符串：传入通过 [AgoraRTC.getCameras](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartc#getcameras) 获取的 `deviceId`。
- 传入对象：自 4.19.0 起，你可以传入一个包含 `facingMode` 或 `deviceId` 的对象，但只能指定其中一个属性的值。其中 `deviceId` 通过 [AgoraRTC.getCameras](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartc#getcameras) 获取，`facingMode` 支持设为以下值：

  - `"environment"`: 使用后置摄像头。
  - `"user"`: 使用前置摄像头。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="setenabled"></a>

### setEnabled [#setenabled]

<ApiSignature>

setEnabled(enabled: boolean): Promise&lt;void&gt;

</ApiSignature>

Overrides [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[setEnabled](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#setenabled)

:::info[自从]
*4.0.0*

启用/禁用该轨道。

轨道禁用后，播放和发布都将被停止。

> - 禁用轨道不会触发 [LocalTrack.on("track-ended")](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ilocaltrack#event_track_ended) 事件。
> - 如果该轨道已发布，禁用轨道后，远端会触发 [user-unpublished](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#event_user_unpublished) 事件。重新启用后，远端会触发 [user-published](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#event_user_published) 事件。
> - `setEnabled` 和 `setMuted` 不能同时调用。
:::

<ParameterList title="Parameters">
<Parameter name="enabled" type="boolean" required>

是否启用该轨道:

- `true`: 启用该轨道.
- `false`: 禁用该轨道.

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="setencoderconfiguration"></a>

### setEncoderConfiguration [#setencoderconfiguration]

<ApiSignature>

setEncoderConfiguration(config: [VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) | [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset)): Promise&lt;void&gt;

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[setEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#setencoderconfiguration)

设置视频的编码参数，包括分辨率、帧率、码率。

<ParameterList title="Parameters">
<Parameter name="config" required>

<ParameterType>

[VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) | [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset)

</ParameterType>

你可以传入 SDK 预设的视频编码配置 [VideoEncoderConfigurationPreset](/zh-CN/api-reference/rtc/react-sdk/web-sdk/globals#videoencoderconfigurationpreset)，也可以传入自定义的 [VideoEncoderConfiguration](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/videoencoderconfiguration) 对象。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="setmuted"></a>

### setMuted [#setmuted]

<ApiSignature>

setMuted(muted: boolean): Promise&lt;void&gt;

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[setMuted](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#setmuted)

发送或暂停发送该轨道的媒体数据。

:::info[自从]
*4.6.0*

如果该轨道已发布，调用 `setMuted(true)` 后，远端会触发 [user-unpublished](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#event_user_unpublished) 事件。再调用 `setMuted(false)` 后，远端会触发 [user-published](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/iagorartcclient#event_user_published) 事件。

> - 与 [setEnabled](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#setenabled) 相比，调用该方法响应速度更快且不影响视频采集状态，详见 [setEnabled 和 setMuted 有什么区别？](/zh-CN/reference/faq/integration/set_enabled_set_muted)。
> - `setEnabled` 和 `setMuted` 不能同时调用。
:::

<ParameterList title="Parameters">
<Parameter name="muted" type="boolean" required>

是否发送该轨道的媒体数据:

- `true`: 暂停发送该轨道的媒体数据。
- `false`: 恢复发送该轨道的媒体数据。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="setoptimizationmode"></a>

### setOptimizationMode [#setoptimizationmode]

<ApiSignature>

setOptimizationMode(mode: "balanced" | "motion" | "detail"): Promise&lt;void&gt;

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[setOptimizationMode](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#setoptimizationmode)

:::info[自从]
*4.2.0*

设置视频传输优化模式。

你可以在视频通话、视频直播或屏幕共享过程中调用此方法动态调整视频的传输优化模式。例如你想要把屏幕共享内容从演示文稿切换为视频时，你可以将传输优化模式从 `"detail"` 切换为 `"motion"`，确保视频画面在网络波动时不会出现卡顿。

**注意事项：**

该方法只支持 Chrome 浏览器。
:::

<ParameterList title="Parameters">
<Parameter name="mode" type="&quot;balanced&quot; | &quot;motion&quot; | &quot;detail&quot;" required>

视频传输优化模式：

- `"balanced"`: 使用默认的传输优化模式：

  - 对于屏幕共享视频流，SDK 默认的优化策略为清晰优先。
  - 对于其他视频流，SDK 默认的优化策略为兼顾清晰和流畅，弱网条件下，帧率和分辨率都会被调整。
- `"detail"`: 清晰优先。

  - SDK 会自动根据你的采集分辨率和帧率设定一个最小码率。即使遭遇网络波动，发送码率也不会低于这个值，从而确保清晰的视频画面。
  - 大部分情况下，SDK 不会降低发送分辨率，但是可能会降低帧率。
- `"motion"`: 自 4.21.0 开始，SDK 默认开启流畅优先模式。

  - SDK 不会启用最小码率策略。遭遇网络波动时，发送端会降低码率来确保接收端的视频画面不会出现中断和卡顿。
  - 大部分情况下，SDK 不会降低帧率，但是可能会降低发送分辨率。

</Parameter>
</ParameterList>

<ApiReturns>

<ApiReturnType>

Promise&lt;void&gt;

</ApiReturnType>

</ApiReturns>

<a id="stop"></a>

### stop [#stop]

<ApiSignature>

stop(): void

</ApiSignature>

Inherited from [IBufferSourceAudioTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack).[stop](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/ibuffersourceaudiotrack#stop)

停止播放。

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>

<a id="unpipe"></a>

### unpipe [#unpipe]

<ApiSignature>

unpipe(): void

</ApiSignature>

Inherited from [ICameraVideoTrack](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack).[unpipe](/zh-CN/api-reference/rtc/react-sdk/web-sdk/interfaces/icameravideotrack#unpipe)

:::info[自从]
*4.10.0*

取消本地视频轨道上注入的 `Processor`。
:::

<ApiReturns>

<ApiReturnType>

void

</ApiReturnType>

</ApiReturns>
