# 插件 (/zh-CN/api-reference/rtc/csharp-windows/extension)

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

<a id="toc_extension"></a>

<a id="api_irtcengine_enableextension"></a>

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

## EnableExtension [#enableextension]

启用/禁用插件。

<a id="api_irtcengine_enableextension__prototype"></a>

```csharp
public abstract int EnableExtension(string provider, string extension, bool enable = true, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.UNKNOWN_MEDIA_SOURCE);
```

<a id="api_irtcengine_enableextension__detailed_desc"></a>

<a id="api_irtcengine_enableextension__timing"></a>

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

建议你在加入频道后调用该方法。

<a id="api_irtcengine_enableextension__restriction"></a>

### 调用限制 [#调用限制]

- 如果要开启多个插件，需要多次调用该方法。
- 该方法调用成功后，无法再加载其他插件。

<a id="api_irtcengine_enableextension__related"></a>

### 相关回调 [#相关回调]

频道内调用该方法成功时会触发插件启用回调 [OnExtensionStartedWithContext](/zh-CN/api-reference/rtc/csharp-windows/callback-irtcengineeventhandler-onextensionstartedwithcontext) 或插件禁用回调 [OnExtensionStoppedWithContext](/zh-CN/api-reference/rtc/csharp-windows/callback-irtcengineeventhandler-onextensionstoppedwithcontext)。

<a id="api_irtcengine_enableextension__parameters"></a>

### 参数 [#参数]

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

提供插件的服务商名称。

</Parameter>
<a id="extension"></a>
<Parameter name="extension">

插件的名称。

</Parameter>
<a id="enable"></a>
<Parameter name="enable">

是否启用插件：

<a id="api_irtcengine_enableextension__ul_c3b_d22_3qb"></a>

- `true`: 启用插件。
- `false`: 禁用插件。

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

插件的媒体源类型。详见 [MEDIA_SOURCE_TYPE](/zh-CN/api-reference/rtc/csharp-windows/enum-mediasourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_enableextension__return_values"></a>

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

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

  - -3: 该插件动态库没有被加载。声网推荐你检查该动态库是否存放在预期的位置，或该动态库名是否正确。

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

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

<a id="api_irtcengine_getextensionproperty2"></a>

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

## GetExtensionProperty [#getextensionproperty]

获取插件的详细信息。

<a id="api_irtcengine_getextensionproperty2__prototype"></a>

```csharp
public abstract int GetExtensionProperty(string provider, string extension, string key, ref string value, int buf_len, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.UNKNOWN_MEDIA_SOURCE);
```

<a id="api_irtcengine_getextensionproperty2__detailed_desc"></a>

<a id="api_irtcengine_getextensionproperty2__timing"></a>

### 调用时机 [#调用时机-1]

加入频道前后均可调用。

<a id="api_irtcengine_getextensionproperty2__restriction"></a>

### 调用限制 [#调用限制-1]

无。

<a id="api_irtcengine_getextensionproperty2__parameters"></a>

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

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

输出参数。提供插件的服务商名称。

</Parameter>
<a id="extension-1"></a>
<Parameter name="extension">

输出参数。插件的名称。

</Parameter>
<a id="key"></a>
<Parameter name="key">

输出参数。插件属性的 Key。

</Parameter>
<a id="value"></a>
<Parameter name="value">

输出参数。插件属性 Key 对应的值。

</Parameter>
<a id="type-1"></a>
<Parameter name="type">

插件的媒体源类型。详见 [MEDIA_SOURCE_TYPE](/zh-CN/api-reference/rtc/csharp-windows/enum-mediasourcetype)。

</Parameter>
<a id="buf_len"></a>
<Parameter name="buf_len">

插件属性 JSON 字符串的最大长度。最大值为 512 字节。

</Parameter>
</ParameterList>

<a id="api_irtcengine_getextensionproperty2__return_values"></a>

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

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

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

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

<a id="api_irtcengine_loadextensionprovider"></a>

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

## LoadExtensionProvider [#loadextensionprovider]

加载插件。

<a id="api_irtcengine_loadextensionprovider__prototype"></a>

```csharp
public abstract int LoadExtensionProvider(string path, bool unload_after_use = false);
```

<a id="api_irtcengine_loadextensionprovider__detailed_desc"></a>

该方法用于将 SDK 外部插件（例如云市场插件和 SDK 拓展插件）添加到 SDK 中。

<a id="api_irtcengine_loadextensionprovider__timing"></a>

### 调用时机 [#调用时机-2]

请在初始化 [IRtcEngine](/zh-CN/api-reference/rtc/csharp-windows/rtc-interface-class#class_irtcengine) 后立即调用该方法。

<a id="api_irtcengine_loadextensionprovider__restriction"></a>

### 调用限制 [#调用限制-2]

如果要加载多个插件，需要多次调用该方法。

<a id="api_irtcengine_loadextensionprovider__parameters"></a>

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

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

插件的动态库路径和名称。例如：`/library/libagora_segmentation_extension.dll`。

</Parameter>
<a id="unload_after_use"></a>
<Parameter name="unload_after_use">

是否在插件使用完毕后自动卸载：

- `true`: 当 [IRtcEngine](/zh-CN/api-reference/rtc/csharp-windows/rtc-interface-class#class_irtcengine) 销毁时自动卸载插件。
- `false`: 不自动卸载插件，直到进程退出（推荐）。

</Parameter>
</ParameterList>

<a id="api_irtcengine_loadextensionprovider__return_values"></a>

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

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

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

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

<a id="api_irtcengine_registerextension"></a>

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

## RegisterExtension [#registerextension]

注册插件。

<a id="api_irtcengine_registerextension__prototype"></a>

```csharp
public abstract int RegisterExtension(string provider, string extension, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.UNKNOWN_MEDIA_SOURCE);
```

<a id="api_irtcengine_registerextension__detailed_desc"></a>

对于 SDK 外部的插件（例如云市场插件和 SDK 拓展插件），加载插件后，你需要调用该方法注册插件。SDK 内部插件（包含在 SDK 包中的插件）在初始化 [IRtcEngine](/zh-CN/api-reference/rtc/csharp-windows/rtc-interface-class#class_irtcengine) 后会自动加载并注册，无需调用该方法。

<a id="api_irtcengine_registerextension__timing"></a>

### 调用时机 [#调用时机-3]

- 建议你在初始化 [IRtcEngine](/zh-CN/api-reference/rtc/csharp-windows/rtc-interface-class#class_irtcengine) 后、加入频道前调用该方法。
- 对于视频相关插件（例如美颜插件），需要在启用视频模块（[EnableVideo](/zh-CN/api-reference/rtc/csharp-windows/video/video-basic#api_irtcengine_enablevideo)/[EnableLocalVideo](/zh-CN/api-reference/rtc/csharp-windows/video/video-basic#api_irtcengine_enablelocalvideo)）之前调用该方法。
- 调用该方法前，需要先调用 [LoadExtensionProvider](/zh-CN/api-reference/rtc/csharp-windows/extension#api_irtcengine_loadextensionprovider) 加载插件。

<a id="api_irtcengine_registerextension__restriction"></a>

### 调用限制 [#调用限制-3]

- 如果要注册多个插件，需要多次调用该方法。
- 不同插件在 SDK 中处理数据的顺序由插件的注册顺序决定。即先注册的插件会先处理数据。

<a id="api_irtcengine_registerextension__parameters"></a>

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

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

提供插件的服务商名称。

</Parameter>
<a id="extension-2"></a>
<Parameter name="extension">

插件的名称。

</Parameter>
<a id="type-2"></a>
<Parameter name="type">

插件的媒体源类型。详见 [MEDIA_SOURCE_TYPE](/zh-CN/api-reference/rtc/csharp-windows/enum-mediasourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_registerextension__return_values"></a>

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

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

  - -3: 该插件动态库没有被加载。声网推荐你检查该动态库是否存放在预期的位置，或该动态库名是否正确。

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

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

<a id="api_irtcengine_setextensionproperty"></a>

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

## SetExtensionProperty [#setextensionproperty]

设置插件的属性。

<a id="api_irtcengine_setextensionproperty__prototype"></a>

```csharp
public abstract int SetExtensionProperty(string provider, string extension, string key, string value, MEDIA_SOURCE_TYPE type = MEDIA_SOURCE_TYPE.UNKNOWN_MEDIA_SOURCE);
```

<a id="api_irtcengine_setextensionproperty__detailed_desc"></a>

开启插件后，你可以调用该方法设置插件的属性。

<a id="api_irtcengine_setextensionproperty__timing"></a>

### 调用时机 [#调用时机-4]

请在调用 [EnableExtension](/zh-CN/api-reference/rtc/csharp-windows/extension#api_irtcengine_enableextension) 开启插件后调用该方法。

<a id="api_irtcengine_setextensionproperty__restriction"></a>

### 调用限制 [#调用限制-4]

如果要设置多个插件的属性，需要多次调用该方法。

<a id="api_irtcengine_setextensionproperty__related"></a>

### 相关回调 [#相关回调-1]

调用该方法后，可能会触发插件事件回调 [OnExtensionEventWithContext](/zh-CN/api-reference/rtc/csharp-windows/callback-irtcengineeventhandler-onextensioneventwithcontext)，具体触发逻辑与插件本身相关。

<a id="api_irtcengine_setextensionproperty__parameters"></a>

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

<ParameterList>
<a id="provider-3"></a>
<Parameter name="provider">

提供插件的服务商名称。

</Parameter>
<a id="extension-3"></a>
<Parameter name="extension">

插件的名称。

</Parameter>
<a id="key-1"></a>
<Parameter name="key">

插件属性的 Key。

</Parameter>
<a id="value-1"></a>
<Parameter name="value">

插件属性 Key 对应的值。

</Parameter>
<a id="type-3"></a>
<Parameter name="type">

插件的媒体源类型。详见 [MEDIA_SOURCE_TYPE](/zh-CN/api-reference/rtc/csharp-windows/enum-mediasourcetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setextensionproperty__return_values"></a>

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

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

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

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

<a id="api_irtcengine_setextensionproviderproperty"></a>

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

## SetExtensionProviderProperty [#setextensionproviderproperty]

设置插件服务商的属性。

<a id="api_irtcengine_setextensionproviderproperty__prototype"></a>

```csharp
public abstract int SetExtensionProviderProperty(string provider, string key, string value);
```

<a id="api_irtcengine_setextensionproviderproperty__detailed_desc"></a>

你可以调用该方法设置插件服务商的属性，并根据服务商的类型初始化相关参数。

<a id="api_irtcengine_setextensionproviderproperty__timing"></a>

### 调用时机 [#调用时机-5]

请在调用 [RegisterExtension](/zh-CN/api-reference/rtc/csharp-windows/extension#api_irtcengine_registerextension) 之后、[EnableExtension](/zh-CN/api-reference/rtc/csharp-windows/extension#api_irtcengine_enableextension) 之前调用该方法。

<a id="api_irtcengine_setextensionproviderproperty__restriction"></a>

### 调用限制 [#调用限制-5]

如果要设置多个插件服务商的属性，需要多次调用该方法。

<a id="api_irtcengine_setextensionproviderproperty__parameters"></a>

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

<ParameterList>
<a id="provider-4"></a>
<Parameter name="provider">

提供插件的服务商名称。

</Parameter>
<a id="key-2"></a>
<Parameter name="key">

插件属性的 Key。

</Parameter>
<a id="value-2"></a>
<Parameter name="value">

插件属性 Key 对应的值。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setextensionproviderproperty__return_values"></a>

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

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

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

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