# 视频设备管理 (/zh-CN/api-reference/rtc/electron/device-management/video-device)

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

<a id="toc_video_device"></a>

<a id="api_ivideodevicemanager_enumeratevideodevices"></a>

<a id="ariaid-title2"></a>

## enumerateVideoDevices [#enumeratevideodevices]

获取系统中所有的视频设备列表。

<a id="api_ivideodevicemanager_enumeratevideodevices__prototype"></a>

```ts
abstract enumerateVideoDevices(): VideoDeviceInfo[];
```

<a id="api_ivideodevicemanager_enumeratevideodevices__detailed_desc"></a>

<a id="api_ivideodevicemanager_enumeratevideodevices__return_values"></a>

### 返回值 [#返回值]

- 方法调用成功：返回一个 [VideoDeviceInfo](/zh-CN/api-reference/rtc/electron/class-videodeviceinfo) 数组，其中包含系统中所有视频设备。
- 方法调用失败: 返回空列表。

### 所属接口类 [#所属接口类]

- [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager)

<a id="api_ivideodevicemanager_getcapability"></a>

<a id="ariaid-title3"></a>

## getCapability [#getcapability]

获取视频采集设备在指定的视频格式下的详细视频帧信息。

<a id="api_ivideodevicemanager_getcapability__prototype"></a>

```ts
abstract getCapability(
    deviceIdUTF8: string,
    deviceCapabilityNumber: number
  ): VideoFormat;
```

<a id="api_ivideodevicemanager_getcapability__detailed_desc"></a>

在调用 [numberOfCapabilities](/zh-CN/api-reference/rtc/electron/device-management/video-device#api_ivideodevicemanager_numberofcapabilities) 获取视频采集设备支持的视频格式数量后，你可以调用该方法获取指定索引号支持的具体视频帧信息。

<a id="api_ivideodevicemanager_getcapability__parameters"></a>

### 参数 [#参数]

<ParameterList>
<a id="deviceidutf8"></a>
<Parameter name="deviceIdUTF8">

视频采集设备的 ID。

</Parameter>
<a id="devicecapabilitynumber"></a>
<Parameter name="deviceCapabilityNumber">

视频格式的索引号。如果 [numberOfCapabilities](/zh-CN/api-reference/rtc/electron/device-management/video-device#api_ivideodevicemanager_numberofcapabilities) 的返回值为 i，则该参数取值范围为[0,i)。

</Parameter>
</ParameterList>

<a id="api_ivideodevicemanager_getcapability__return_values"></a>

### 返回值 [#返回值-1]

指定视频格式的具体信息，包括宽度（px），高度（px）和帧率（fps）。详见 [VideoFormat](/zh-CN/api-reference/rtc/electron/class-videoformat)。

### 所属接口类 [#所属接口类-1]

- [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager)

<a id="api_ivideodevicemanager_getdevice_ivideodevicemanager"></a>

<a id="ariaid-title4"></a>

## getDevice [#getdevice]

获取当前使用的视频采集设备。

<a id="api_ivideodevicemanager_getdevice_ivideodevicemanager__prototype"></a>

```ts
abstract getDevice(): string;
```

<a id="api_ivideodevicemanager_getdevice_ivideodevicemanager__detailed_desc"></a>

<a id="api_ivideodevicemanager_getdevice_ivideodevicemanager__return_values"></a>

### 返回值 [#返回值-2]

视频采集设备。

### 所属接口类 [#所属接口类-2]

- [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager)

<a id="api_irtcengine_getvideodevicemanager"></a>

<a id="ariaid-title5"></a>

## getVideoDeviceManager [#getvideodevicemanager]

获取 [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager) 对象，以管理视频设备。

<a id="api_irtcengine_getvideodevicemanager__prototype"></a>

```ts
abstract getVideoDeviceManager(): IVideoDeviceManager;
```

<a id="api_irtcengine_getvideodevicemanager__detailed_desc"></a>

<a id="api_irtcengine_getvideodevicemanager__return_values"></a>

### 返回值 [#返回值-3]

一个 [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager) 对象。

### 所属接口类 [#所属接口类-3]

- [IRtcEngine](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengine)

<a id="api_ivideodevicemanager_numberofcapabilities"></a>

<a id="ariaid-title6"></a>

## numberOfCapabilities [#numberofcapabilities]

获取指定视频采集设备支持的视频格式数量。

<a id="api_ivideodevicemanager_numberofcapabilities__prototype"></a>

```ts
abstract numberOfCapabilities(deviceIdUTF8: string): number;
```

<a id="api_ivideodevicemanager_numberofcapabilities__detailed_desc"></a>

视频采集设备可能支持多种视频格式，每一种格式都支持不同的视频帧宽度、视频帧高度、帧率组合。
你可以通过调用该方法，获取指定的视频采集设备可支持多少种视频格式，然后调用 [getCapability](/zh-CN/api-reference/rtc/electron/device-management/video-device#api_ivideodevicemanager_getcapability) 获取指定视频格式下的具体视频帧信息。

<a id="api_ivideodevicemanager_numberofcapabilities__parameters"></a>

### 参数 [#参数-1]

<ParameterList>
<a id="deviceidutf8-1"></a>
<Parameter name="deviceIdUTF8">

视频采集设备的 ID。

</Parameter>
</ParameterList>

<a id="api_ivideodevicemanager_numberofcapabilities__return_values"></a>

### 返回值 [#返回值-4]

- &gt; 0: 方法调用成功。返回该设备支持的视频格式数量。例如：如果指定的摄像头支持 10 种不同的视频格式，则返回值为 10。
- ≤ 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-4]

- [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager)

<a id="api_irtcengine_querycodeccapability"></a>

<a id="ariaid-title7"></a>

## queryCodecCapability [#querycodeccapability]

查询 SDK 支持的视频编解码能力。

<a id="api_irtcengine_querycodeccapability__prototype"></a>

```ts
abstract queryCodecCapability(): { codecInfo: CodecCapInfo[]; size: number };
```

<a id="api_irtcengine_querycodeccapability__detailed_desc"></a>

<a id="api_irtcengine_querycodeccapability__return_values"></a>

### 返回值 [#返回值-5]

- 如果调用成功，则返回一个包含以下属性的对象：

  - `codecInfo`：[CodecCapInfo](/zh-CN/api-reference/rtc/electron/class-codeccapinfo) 数组，表示 SDK 的视频编码能力。
  - `size`：[CodecCapInfo](/zh-CN/api-reference/rtc/electron/class-codeccapinfo) 数组的大小。
- 如果调用超时，请修改调用逻辑，不要在主线程中调用该方法。

### 所属接口类 [#所属接口类-5]

- [IRtcEngine](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setcameracapturerconfiguration"></a>

<a id="ariaid-title8"></a>

## setCameraCapturerConfiguration [#setcameracapturerconfiguration]

设置摄像头采集配置。

<a id="api_irtcengine_setcameracapturerconfiguration__prototype"></a>

```ts
abstract setCameraCapturerConfiguration(
    config: CameraCapturerConfiguration
  ): number;
```

<a id="api_irtcengine_setcameracapturerconfiguration__detailed_desc"></a>

<a id="api_irtcengine_setcameracapturerconfiguration__timing"></a>

### 调用时机 [#调用时机]

该方法必须在开启本地摄像头采集前调用，如 [startPreview](/zh-CN/api-reference/rtc/electron/video/video-basic#api_irtcengine_startpreview2) 和 [joinChannel](/zh-CN/api-reference/rtc/electron/channel#api_irtcengine_joinchannel2) 前调用。

<a id="api_irtcengine_setcameracapturerconfiguration__parameters"></a>

### 参数 [#参数-2]

<ParameterList>
<a id="config"></a>
<Parameter name="config">

摄像头采集配置，详见 [CameraCapturerConfiguration](/zh-CN/api-reference/rtc/electron/class-cameracapturerconfiguration)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setcameracapturerconfiguration__return_values"></a>

### 返回值 [#返回值-6]

- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-6]

- [IRtcEngine](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setcameradeviceorientation"></a>

<a id="ariaid-title9"></a>

## setCameraDeviceOrientation [#setcameradeviceorientation]

设置采集视频的旋转角度。

<a id="api_irtcengine_setcameradeviceorientation__prototype"></a>

```ts
abstract setCameraDeviceOrientation(
    type: VideoSourceType,
    orientation: VideoOrientation
  ): number;
```

<a id="api_irtcengine_setcameradeviceorientation__detailed_desc"></a>

:::note
注：

- 该方法仅适用于 Windows。
- 该方法必须在 [enableVideo](/zh-CN/api-reference/rtc/electron/video/video-basic#api_irtcengine_enablevideo) 后调用，设置结果在摄像头成功开启后生效，即 SDK 触发 [onLocalVideoStateChanged](/zh-CN/api-reference/rtc/electron/video/video-basic#callback_irtcengineeventhandler_onlocalvideostatechanged) 回调返回本地视频状态为 `LocalVideoStreamStateCapturing` (1) 后。
- 当视频采集设备不带重力感应功能时，你可以调用该方法手动调整采集到的视频画面的旋转角度。
:::

<a id="api_irtcengine_setcameradeviceorientation__parameters"></a>

### 参数 [#参数-3]

<ParameterList>
<a id="type"></a>
<Parameter name="type">

视频源类型，详见 [VideoSourceType](/zh-CN/api-reference/rtc/electron/enum-videosourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setcameradeviceorientation__return_values"></a>

### 返回值 [#返回值-7]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-7]

- [IRtcEngine](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengine)

<a id="api_ivideodevicemanager_setdevice_ivideodevicemanager"></a>

<a id="ariaid-title10"></a>

## setDevice [#setdevice]

通过设备 ID 指定视频采集设备。

<a id="api_ivideodevicemanager_setdevice_ivideodevicemanager__prototype"></a>

```ts
abstract setDevice(deviceIdUTF8: string): number;
```

<a id="api_ivideodevicemanager_setdevice_ivideodevicemanager__detailed_desc"></a>

:::note
注：

- 插拔设备不会改变设备 ID。
:::

<a id="api_ivideodevicemanager_setdevice_ivideodevicemanager__parameters"></a>

### 参数 [#参数-4]

<ParameterList>
<a id="deviceidutf8-2"></a>
<Parameter name="deviceIdUTF8">

设备 ID。可通过调用 [enumerateVideoDevices](/zh-CN/api-reference/rtc/electron/device-management/video-device#api_ivideodevicemanager_enumeratevideodevices) 方法获取。
最大长度为 [MaxDeviceIdLengthType](/zh-CN/api-reference/rtc/electron/enum-maxdeviceidlengthtype)。

</Parameter>
</ParameterList>

<a id="api_ivideodevicemanager_setdevice_ivideodevicemanager__return_values"></a>

### 返回值 [#返回值-8]

- 0: 方法调用成功。
- &lt; 0: 方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-8]

- [IVideoDeviceManager](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_ivideodevicemanager)

<a id="callback_irtcengineeventhandler_oncameraready"></a>

<a id="ariaid-title11"></a>

## onCameraReady [#oncameraready]

摄像头就绪回调。

<a id="callback_irtcengineeventhandler_oncameraready__prototype"></a>

```ts
onCameraReady?(): void;
```

<a id="callback_irtcengineeventhandler_oncameraready__detailed_desc"></a>

<a id="废弃"></a>

:::error[废弃]
弃用: 请改用 [onLocalVideoStateChanged](/zh-CN/api-reference/rtc/electron/video/video-basic#callback_irtcengineeventhandler_onlocalvideostatechanged) 中的 LocalVideoStreamStateCapturing(1)。
:::

该回调提示已成功打开摄像头，可以开始捕获视频。

### 所属接口类 [#所属接口类-9]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onvideodevicestatechanged"></a>

<a id="ariaid-title12"></a>

## onVideoDeviceStateChanged [#onvideodevicestatechanged]

视频设备变化回调。

<a id="callback_irtcengineeventhandler_onvideodevicestatechanged__prototype"></a>

```ts
onVideoDeviceStateChanged?(
    deviceId: string,
    deviceType: MediaDeviceType,
    deviceState: number
  ): void;
```

<a id="callback_irtcengineeventhandler_onvideodevicestatechanged__detailed_desc"></a>

该回调提示系统视频设备状态发生改变，比如被拔出或移除。如果设备已使用外接摄像头采集，外接摄像头被拔开后，视频会中断。

<a id="callback_irtcengineeventhandler_onvideodevicestatechanged__parameters"></a>

### 参数 [#参数-5]

<ParameterList>
<a id="deviceid"></a>
<Parameter name="deviceId">

设备 ID。

</Parameter>
<a id="devicetype"></a>
<Parameter name="deviceType">

设备类型。详见 [MediaDeviceType](/zh-CN/api-reference/rtc/electron/enum-mediadevicetype)。

</Parameter>
<a id="devicestate"></a>
<Parameter name="deviceState">

设备状态。详见 [MediaDeviceStateType](/zh-CN/api-reference/rtc/electron/enum-mediadevicestatetype) 。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-10]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/electron/rtc-interface-class#class_irtcengineeventhandler)
