# 多路径网络传输 (Multipath) (/zh-CN/realtime-media/rtc/build/advanced-channel/multipath)

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

<_PlatformTabsGroup>
<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="android" />
## 功能简介 [#功能简介]

随着电子设备的系统能力提升，越来越多的设备支持同时使用多出口访问网络，典型的有两出口（Wi-Fi + 蜂窝网络），甚至三出口（Wi-Fi + 双卡的蜂窝网络）。各不同出口从实际网络传输路径上互相独立，不共享瓶颈带宽。

基于该特性，RTC SDK 从 v4.6.0 起新增多路径网络传输 (Multipath) 功能，适用于终端支持多网卡传输（比如 5G、Wi-Fi、LAN）的设备，可以有效降低甚至消除弱网带来的体验回退。声网实验室测试数据显示，在带宽频繁抖动的弱网条件下，开启 Multipath 可以实现画质、延迟不回退的前提下，卡顿率降低 50% 以上，可广泛应用于网络环境差、同时对传输稳定性要求高的实时音视频互动场景，如视频会议、在线教育、IoT 平行操作、远程采播等。

本文介绍如何在你的项目中实现多路径网络传输功能。

## 前提条件 [#前提条件]

- Android 7.0 或以上版本的移动设备，且存在两个及以上的可用网络出口。
- Android API 级别 24 及以上。
- 已参考[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)在项目中实现了基础的音视频互动功能。

## 项目设置 [#项目设置]

多路径网络传输需要读取和修改设备的网络状态权限，因此，你需要在项目的 `app/src/main/AndroidManifest.xml` 文件中添加如下权限：

```xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
```

## 实现多路径网络传输 [#实现多路径网络传输]

### 关键 API 介绍 [#关键-api-介绍]

RTC SDK 通过 `ChannelMediaOptions` 中的如下参数支持开启和配置多路径传输能力：

```java
public class ChannelMediaOptions {
  // ...
  public Boolean enableMultipath;
  public Integer uplinkMultipathMode;
  public Integer downlinkMultipathMode;
  public Integer preferMultipathType;
}
```

其中，`enableMultipath` 参数用于开启多路径传输能力。开启后，SDK 支持两种多路径传输模式：

- 动态模式：（默认）根据网络状况动态选择最佳路径进行传输，适用于流量敏感、对体验要求比较高的场景，如会议、教育等。动态模式下，你可以通过 `preferMultipathType` 指定首选的网络传输路径（如优先 Wi-Fi 或移动网络）。
- 全冗余模式：数据会在所有可用网络路径上同时传输，适用于流量不敏感，对体验有极致要求的场景，如户外采播、平行操控等。该模式会产生额外费用，如需使用请[联系技术支持](https://ticket.shengwang.cn/)。

上下行可以分别通过 `uplinkMultipathMode` 和 `downlinkMultipathMode` 配置传输模式。

启用后，SDK 会在 `onMultipathStats` 回调中实时报告各路径的传输统计信息，包括每一种网络类型的流量消耗以及每一个传输路径的实时统计数据，便于开发者监控和优化网络表现。

```java
public static class MultipathStats {
  public int lanTxBytes;
  public int lanRxBytes;
  public int wifiTxBytes;
  public int wifiRxBytes;
  public int mobileTxBytes;
  public int mobileRxBytes;
  public int activePathNum;
  public PathStats[] pathStats;
}
```

### 示例代码 [#示例代码]

如下示例代码展示了如何开通并配置多路径网络传输功能：

```java
private String multipathModeStr = "";
private int activePathNum = 0;

// 开启多路径网络传输
mediaOptions.enableMultipath = true;

multipathModeStr = spinner_multipath_mode.getSelectedItem().toString();
Constants.MultipathMode multipathMode = Constants.MultipathMode.valueOf(multipathModeStr);
// 设置上行传输模式
mediaOptions.uplinkMultipathMode = Constants.MultipathMode.getValue(multipathMode);
// 设置下行传输模式
mediaOptions.downlinkMultipathMode = Constants.MultipathMode.getValue(multipathMode);

// 动态传输模式下，设置传输出口类型偏好
mediaOptions.preferMultipathType = Constants.MultipathType.MULTIPATH_TYPE_WIFI.getValue();


// 报告多路径传输统计信息
@Override
public void onMultipathStats(MultipathStats stats) {
  super.onMultipathStats(stats);
  activePathNum = stats.activePathNum;
}
```

## 参考信息 [#参考信息]

### 示例项目 [#示例项目]

声网提供实现了多路径网络传输的开源示例项目供你参考，你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">Multipath</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/API-Examples/blob/main/Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/Multipath.java" />
  <Card title={<RepositoryCardTitle provider="github">Multipath</RepositoryCardTitle>} href="https://github.com/Shengwang-Community/API-Examples/blob/main/Android/APIExample/app/src/main/java/io/agora/api/example/examples/advanced/Multipath.java" />
</Cards>

### API 参考 [#api-参考]

- [`ChannelMediaOptions`](/zh-CN/api-reference/rtc/android/class-channelmediaoptions)
- [`onMultipathStats`](/zh-CN/api-reference/rtc/android/network#callback_irtcengineeventhandler_onmultipathstats)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="ios" />
## 功能简介 [#功能简介-1]

随着电子设备的系统能力提升，越来越多的设备支持同时使用多出口访问网络，典型的有两出口（Wi-Fi + 蜂窝网络），甚至三出口（Wi-Fi + 双卡的蜂窝网络）。各不同出口从实际网络传输路径上互相独立，不共享瓶颈带宽。

基于该特性，RTC SDK 从 v4.6.0 起新增多路径网络传输 (Multipath) 功能，适用于终端支持多网卡传输（比如 5G、Wi-Fi、LAN）的设备，可以有效降低甚至消除弱网带来的体验回退。声网实验室测试数据显示，在带宽频繁抖动的弱网条件下，开启 Multipath 可以实现画质、延迟不回退的前提下，卡顿率降低 50% 以上，可广泛应用于网络环境差、同时对传输稳定性要求高的实时音视频互动场景，如视频会议、在线教育、IoT 平行操作、远程采播等。

本文介绍如何在你的项目中实现多路径网络传输功能。

## 前提条件 [#前提条件-1]

- iOS 12.0 或以上版本的移动设备，且存在两个及以上的可用网络出口。
- 已参考[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)在项目中实现了基础的音视频互动功能。

## 实现多路径网络传输 [#实现多路径网络传输-1]

### 关键 API 介绍 [#关键-api-介绍-1]

RTC SDK 通过 `AgoraRtcChannelMediaOptions` 中的如下参数支持开启和配置多路径传输能力：

```objc
__attribute__((visibility("default"))) @interface AgoraRtcChannelMediaOptions : NSObject
// ...
@property(assign, nonatomic) BOOL enableMultipath;
@property(assign, nonatomic) AgoraMultipathMode uplinkMultipathMode;
@property(assign, nonatomic) AgoraMultipathMode downlinkMultipathMode;
@property(assign, nonatomic) AgoraMultipathType preferMultipathType;
@end
```

其中，`enableMultipath` 参数用于开启多路径传输能力。开启后，SDK 支持两种多路径传输模式：

- 动态模式：（默认）根据网络状况动态选择最佳路径进行传输，适用于流量敏感、对体验要求比较高的场景，如会议、教育等。动态模式下，你可以通过 `preferMultipathType` 指定首选的网络传输路径（如优先 Wi-Fi 或移动网络）。
- 全冗余模式：数据会在所有可用网络路径上同时传输，适用于流量不敏感，对体验有极致要求的场景，如户外采播、平行操控等。该模式会产生额外费用，如需使用请[联系技术支持](https://ticket.shengwang.cn/)。

上下行可以分别通过 `uplinkMultipathMode` 和 `downlinkMultipathMode` 配置传输模式。

启用后，SDK 会在 `multiPathStats` 回调中实时报告各路径的传输统计信息，包括每一种网络类型的流量消耗以及每一个传输路径的实时统计数据，便于开发者监控和优化网络表现。

```objc
__attribute__((visibility("default"))) @interface AgoraMultipathStats : NSObject
@property (assign, nonatomic) NSUInteger lanRxBytes;
@property (assign, nonatomic) NSUInteger lanTxBytes;
@property (assign, nonatomic) NSUInteger wifiRxBytes;
@property (assign, nonatomic) NSUInteger wifiTxBytes;
@property (assign, nonatomic) NSUInteger mobileRxBytes;
@property (assign, nonatomic) NSUInteger mobileTxBytes;
@property (assign, nonatomic) NSUInteger activePathNum;
@property (copy, nonatomic) NSArray<AgoraPathStats *> *_Nullable pathStats NS_SWIFT_NAME(pathStats);
@end
```

### 示例代码 [#示例代码-1]

如下示例代码展示了如何开通并配置多路径网络传输功能：

```swift
// 初始化多路径传输控制器
@IBOutlet weak var selectModePicker: Picker!
func initSelectModePicker() {
    selectModePicker.label.stringValue = "Mode".localized
    selectModePicker.picker.addItems(withTitles: ["dynamic", "duplicate"])
    selectModePicker.picker.selectItem(at: 0)
}

// ...
// 开启多路径传输 
channelMediaOption.enableMultipath = (multipathSwitch.state == .on)
// 设置上行传输模式
channelMediaOption.uplinkMultipathMode = (selectModePicker.picker.indexOfSelectedItem == 0) ? .dynamic : .
// 设置下行传输模式
channelMediaOption.downlinkMultipathMode = (selectModePicker.picker.indexOfSelectedItem == 0) ? .dynamic : .duplicate

// 报告多路径传输统计信息
func rtcEngine(_ engine: AgoraRtcEngineKit, multiPathStats stats: AgoraMultipathStats) {
    videos[0].statsInfo?.updateMultipathStats(stats)
}
```

## 参考信息 [#参考信息-1]

### 示例项目 [#示例项目-1]

声网提供实现了多路径网络传输的开源示例项目供你参考，你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">Multipath</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/API-Examples/blob/main/iOS/APIExample/APIExample/Examples/Advanced/Multipath" />
  <Card title={<RepositoryCardTitle provider="github">Multipath</RepositoryCardTitle>} href="https://github.com/Shengwang-Community/API-Examples/tree/main/iOS/APIExample/APIExample/Examples/Advanced/Multipath" />
</Cards>

### API 参考 [#api-参考-1]

- [`AgoraRtcChannelMediaOptions`](/zh-CN/api-reference/rtc/ios/class-channelmediaoptions)
- [`multipathStats`](/zh-CN/api-reference/rtc/ios/network#callback_irtcengineeventhandler_onmultipathstats)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="macos" />
## 功能简介 [#功能简介-2]

随着电子设备的系统能力提升，越来越多的设备支持同时使用多出口访问网络，典型的有两出口（Wi-Fi + 蜂窝网络），甚至三出口（Wi-Fi + 双卡的蜂窝网络）。各不同出口从实际网络传输路径上互相独立，不共享瓶颈带宽。

基于该特性，RTC SDK 从 v4.6.0 起新增多路径网络传输 (Multipath) 功能，适用于终端支持多网卡传输（比如 5G、Wi-Fi、LAN）的设备，可以有效降低甚至消除弱网带来的体验回退。声网实验室测试数据显示，在带宽频繁抖动的弱网条件下，开启 Multipath 可以实现画质、延迟不回退的前提下，卡顿率降低 50% 以上，可广泛应用于网络环境差、同时对传输稳定性要求高的实时音视频互动场景，如视频会议、在线教育、IoT 平行操作、远程采播等。

本文介绍如何在你的项目中实现多路径网络传输功能。

## 前提条件 [#前提条件-2]

- macOS 10.14 及以上版本的设备，且存在两个及以上的可用网络出口。
- 已参考[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)在项目中实现了基础的音视频互动功能。

## 实现多路径网络传输 [#实现多路径网络传输-2]

### 关键 API 介绍 [#关键-api-介绍-2]

RTC SDK 通过 `AgoraRtcChannelMediaOptions` 中的如下参数支持开启和配置多路径传输能力：

```objc
__attribute__((visibility("default"))) @interface AgoraRtcChannelMediaOptions : NSObject
// ...
@property(assign, nonatomic) BOOL enableMultipath;
@property(assign, nonatomic) AgoraMultipathMode uplinkMultipathMode;
@property(assign, nonatomic) AgoraMultipathMode downlinkMultipathMode;
@property(assign, nonatomic) AgoraMultipathType preferMultipathType;
@end
```

其中，`enableMultipath` 参数用于开启多路径传输能力。开启后，SDK 支持两种多路径传输模式：

- 动态模式：（默认）根据网络状况动态选择最佳路径进行传输，适用于流量敏感、对体验要求比较高的场景，如会议、教育等。动态模式下，你可以通过 `preferMultipathType` 指定首选的网络传输路径（如优先 Wi-Fi 或移动网络）。
- 全冗余模式：数据会在所有可用网络路径上同时传输，适用于流量不敏感，对体验有极致要求的场景，如户外采播、平行操控等。该模式会产生额外费用，如需使用请[联系技术支持](https://ticket.shengwang.cn/)。

上下行可以分别通过 `uplinkMultipathMode` 和 `downlinkMultipathMode` 配置传输模式。

启用后，SDK 会在 `multiPathStats` 回调中实时报告各路径的传输统计信息，包括每一种网络类型的流量消耗以及每一个传输路径的实时统计数据，便于开发者监控和优化网络表现。

```objc
__attribute__((visibility("default"))) @interface AgoraMultipathStats : NSObject
@property (assign, nonatomic) NSUInteger lanRxBytes;
@property (assign, nonatomic) NSUInteger lanTxBytes;
@property (assign, nonatomic) NSUInteger wifiRxBytes;
@property (assign, nonatomic) NSUInteger wifiTxBytes;
@property (assign, nonatomic) NSUInteger mobileRxBytes;
@property (assign, nonatomic) NSUInteger mobileTxBytes;
@property (assign, nonatomic) NSUInteger activePathNum;
@property (copy, nonatomic) NSArray<AgoraPathStats *> *_Nullable pathStats NS_SWIFT_NAME(pathStats);
@end
```

### 示例代码 [#示例代码-2]

如下示例代码展示了如何开通并配置多路径网络传输功能：

```swift
// 初始化多路径传输控制器
@IBOutlet weak var selectModePicker: Picker!
func initSelectModePicker() {
    selectModePicker.label.stringValue = "Mode".localized
    selectModePicker.picker.addItems(withTitles: ["dynamic", "duplicate"])
    selectModePicker.picker.selectItem(at: 0)
}

// ...
// 开启多路径传输 
channelMediaOption.enableMultipath = (multipathSwitch.state == .on)
// 设置上行传输模式
channelMediaOption.uplinkMultipathMode = (selectModePicker.picker.indexOfSelectedItem == 0) ? .dynamic : .
// 设置下行传输模式
channelMediaOption.downlinkMultipathMode = (selectModePicker.picker.indexOfSelectedItem == 0) ? .dynamic : .duplicate

// 报告多路径传输统计信息
func rtcEngine(_ engine: AgoraRtcEngineKit, multiPathStats stats: AgoraMultipathStats) {
    videos[0].statsInfo?.updateMultipathStats(stats)
}
```

## 参考信息 [#参考信息-2]

### 示例项目 [#示例项目-2]

声网提供实现了多路径网络传输的开源示例项目供你参考，你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">Multipath</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/API-Examples/tree/main/macOS/APIExample/Examples/Advanced/Multipath" />
  <Card title={<RepositoryCardTitle provider="github">Multipath</RepositoryCardTitle>} href="https://github.com/Shengwang-Community/API-Examples/tree/main/macOS/APIExample/Examples/Advanced/Multipath" />
</Cards>

### API 参考 [#api-参考-2]

- [`AgoraRtcChannelMediaOptions`](/zh-CN/api-reference/rtc/macos/class-channelmediaoptions)
- [`multipathStats`](/zh-CN/api-reference/rtc/macos/network#callback_irtcengineeventhandler_onmultipathstats)
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="windows" />
## 功能简介 [#功能简介-3]

随着电子设备的系统能力提升，越来越多的设备支持同时使用多出口访问网络，典型的有两出口（Wi-Fi + 蜂窝网络），甚至三出口（Wi-Fi + 双卡的蜂窝网络）。各不同出口从实际网络传输路径上互相独立，不共享瓶颈带宽。

基于该特性，RTC SDK 从 v4.6.0 起新增多路径网络传输 (Multipath) 功能，适用于终端支持多网卡传输（比如 5G、Wi-Fi、LAN）的设备，可以有效降低甚至消除弱网带来的体验回退。声网实验室测试数据显示，在带宽频繁抖动的弱网条件下，开启 Multipath 可以实现画质、延迟不回退的前提下，卡顿率降低 50% 以上，可广泛应用于网络环境差、同时对传输稳定性要求高的实时音视频互动场景，如视频会议、在线教育、IoT 平行操作、远程采播等。

本文介绍如何在你的项目中实现多路径网络传输功能。

## 前提条件 [#前提条件-3]

- Windows Vista 及以上版本的设备，且存在两个及以上的可用网络出口。
- 已参考[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)在项目中实现了基础的音视频互动功能。

## 实现多路径网络传输 [#实现多路径网络传输-3]

### 关键 API 介绍 [#关键-api-介绍-3]

RTC SDK 通过 `ChannelMediaOptions` 中的如下参数支持开启和配置多路径传输能力：

```cpp
struct ChannelMediaOptions {
  // ...
  Optional<bool> enableMultipath;
  Optional<MultipathMode> uplinkMultipathMode;
  Optional<MultipathMode> downlinkMultipathMode;
  Optional<MultipathType> preferMultipathType;
};

```

其中，`enableMultipath` 参数用于开启多路径传输能力。开启后，SDK 支持两种多路径传输模式：

- 动态模式：（默认）根据网络状况动态选择最佳路径进行传输，适用于流量敏感、对体验要求比较高的场景，如会议、教育等。动态模式下，你可以通过 `preferMultipathType` 指定首选的网络传输路径（如优先 Wi-Fi 或移动网络）。
- 全冗余模式：数据会在所有可用网络路径上同时传输，适用于流量不敏感，对体验有极致要求的场景，如户外采播、平行操控等。该模式会产生额外费用，如需使用请[联系技术支持](https://ticket.shengwang.cn/)。

上下行可以分别通过 `uplinkMultipathMode` 和 `downlinkMultipathMode` 配置传输模式。

启用后，SDK 会在 `onMultipathStats` 回调中实时报告各路径的传输统计信息，包括每一种网络类型的流量消耗以及每一个传输路径的实时统计数据，便于开发者监控和优化网络表现。

```cpp
struct MultipathStats {
  uint32_t lanTxBytes;
  uint32_t lanRxBytes;
  uint32_t wifiTxBytes;
  uint32_t wifiRxBytes;
  uint32_t mobileTxBytes;
  uint32_t mobileRxBytes;
  int activePathNum;
  const PathStats* pathStats;
};
```

### 示例代码 [#示例代码-3]

如下示例代码展示了如何开通并配置多路径网络传输功能：

```cpp
// 初始化多路径传输相关的界面元素
m_cmbMultipathMode.InsertString(0, _T("Duplicate"));
m_cmbMultipathMode.InsertString(1, _T("Dynamic"));
m_cmbMultipathMode.SetCurSel(0);

// 初始化多路径传输相关控制
m_staEnableMultipath.SetWindowText(_T("Enable Multipath:"));
m_chkEnableMultipath.SetCheck(BST_UNCHECKED);

// 配置 ChannelMediaOptions
ChannelMediaOptions options;
// ...
// 开启多路径网络传输
options.enableMultipath = (m_chkEnableMultipath.GetCheck() == BST_CHECKED);;

// 获取用户指定的传输模式
int modeIndex = m_cmbMultipathMode.GetCurSel();
MultipathMode mode = (modeIndex == 0) ? Duplicate : Dynamic;
// 设置上行传输模式
options.uplinkMultipathMode = mode;
// 设置下行传输模式
options.downlinkMultipathMode = mode;

// 动态传输模式下，设置传输出口类型偏好
options.preferMultipathType = WIFI;

// 报告多路径传输统计信息
void CMultipathRtcEngineEventHandler::onMultipathStats(const MultipathStats& stats)
{
  if (m_hMsgHanlder)
  {
    MultipathStats* statsPtr = new MultipathStats(stats);
    ::PostMessage(m_hMsgHanlder, WM_MSGID(EID_MULTIPATH_STATS), (WPARAM)statsPtr, 0);
  }
}
```

## 参考信息 [#参考信息-3]

### 示例项目 [#示例项目-3]

声网提供实现了多路径网络传输的开源示例项目供你参考，你可以前往下载或查看其中的源代码。

<Cards>
  <Card title={<RepositoryCardTitle provider="gitee">Multipath</RepositoryCardTitle>} href="https://gitee.com/agoraio-community/API-Examples/tree/main/windows/APIExample/APIExample/Advanced/Multipath" />
  <Card title={<RepositoryCardTitle provider="github">Multipath</RepositoryCardTitle>} href="https://github.com/Shengwang-Community/API-Examples/tree/main/windows/APIExample/APIExample/Advanced/Multipath" />
</Cards>

### API 参考 [#api-参考-3]

- [`ChannelMediaOptions`](/zh-CN/api-reference/rtc/cpp-all-platforms/class-channelmediaoptions)
- [`onMultipathStats`](/zh-CN/api-reference/rtc/cpp-all-platforms/network#callback_irtcengineeventhandler_onmultipathstats)
<_PlatformProcessedMarker close="true" />
</_PlatformTabsGroup>
