2025/09/02 18:29:54
多路径网络传输 (Multipath)
功能简介
随着电子设备的系统能力提升,越来越多的设备支持同时使用多出口访问网络,典型的有两出口(Wi-Fi + 蜂窝网络),甚至三出口(Wi-Fi + 双卡的蜂窝网络)。各不同出口从实际网络传输路径上互相独立,不共享瓶颈带宽。
基于该特性,RTC SDK 从 v4.6.0 起新增多路径网络传输 (Multipath) 功能,适用于终端支持多网卡传输(比如 5G、Wi-Fi、Lan)的设备,可以有效降低甚至消除弱网带来的体验回退。声网实验室测试数据显示,在带宽频繁抖动的弱网条件下,开启 Multipath 可以实现画质、延迟不回退的前提下,卡顿率降低 50% 以上,可广泛应用于网络环境差、同时对传输稳定性要求高的实时音视频互动场景,如视频会议、在线教育、IoT 平行操作、远程采播等。
本文介绍如何在你的项目中实现多路径网络传输功能。
前提条件
- iOS 12.0 或以上版本的移动设备,且存在两个及以上的可用网络出口。
- 已参考快速开始在项目中实现了基础的音视频互动功能。
实现多路径网络传输
关键 API 介绍
RTC SDK 通过 AgoraRtcChannelMediaOptions
中的如下参数支持开启和配置多路径传输能力:
Objective-C
__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 或移动网络)。 - 全冗余模式:数据会在所有可用网络路径上同时传输,适用于流量不敏感,对体验有极致要求的场景,如户外采播、平行操控等。该模式会产生额外费用,如需使用请联系技术支持。
上下行可以分别通过 uplinkMultipathMode
和 downlinkMultipathMode
配置传输模式。
启用后,SDK 会在 multiPathStats
回调中实时报告各路径的传输统计信息,包括每一种网络类型的流量消耗以及每一个传输路径的实时统计数据,便于开发者监控和优化网络表现。
Objective-C
__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
示例代码
如下示例代码展示了如何开通并配置多路径网络传输功能:
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)
}
参考信息
示例项目
声网提供实现了多路径网络传输的开源示例项目供你参考,你可以前往下载或查看其中的源代码。