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