音视频通信 RTC(Real-Time Communication)是阿里云覆盖全球的实时音视频开发平台,依托核心音视频编解码、信道传输、网络调度技术,提供高可用、高品质、超低延时的音视频通信服务,让用户快速搭建多端实时应用,适用于在线教育、视频会议、互动娱乐、音视频社交等场景。
产品链接:https://www.aliyun.com/product/rtc
阿里云 RTC 提供网络质量监控功能,您可以通过使用 AliRtcNetworkQuality 回调来获取网络质量评价。
功能简介
在网络质量不理想的情况下,音视频通信的质量受客观因素影响会下降。当监控到弱网环境时,为保证基础通信体验,建议您使用 SDK 对应的方法分别在发布端和订阅端进行如下优化。
- 调整视频流规格:通过设置较低档位规格的 VideoProfile,减少视频通信的网络资源占用。
- 切换视频为小流:小流有着与大流相同的宽高比,但是分辨率和码率相对较低,网络资源占用的需求较低。
- 仅发布音频流:在极端网络环境下,可以选择只发送音频流,从而保证通信的持续。
通过使用 AliRtcNetworkQuality 回调获取的网络评价如下所示。
枚举名 | 描述 |
AlivcRtcNetworkQualityExcellent | 网络极好,流程度清晰度质量好 |
AlivcRtcNetworkQualityGood | 网络好,流畅度清晰度和极好差不多 |
AlivcRtcNetworkQualityPoor | 网络较差,音视频流畅度清晰度有瑕疵,不影响沟通 |
AlivcRtcNetworkQualityBad | 网络差,视频卡顿严重,音频能正常沟通 |
AlivcRtcNetworkQualityVeryBad | 网络极差,基本无法沟通 |
AlivcRtcNetworkQualityDisconnect | 网络中断 |
AlivcRtcNetworkQualityUnknow | 未知 |
实现方法
在实现该功能之前,需要您已经搭建 AppServer、实现基本功能等操作。详情请参见入门概述。
具体实现方法如下所示。
您可以通过 onNetworkQualityChanged(网络状况变化时回调)方法获得网络质量,然后在根据实际策略进行优化。
- (void)onNetworkQualityChanged:(NSString *)uid upNetworkQuality:(AliRtcNetworkQuality)upQuality downNetworkQuality:(AliRtcNetworkQuality)downQuality;
参数 | 类型 | 描述 |
uid | NSString * | 网络质量发生变化的用户 ID |
upQuality | AliRtcNetworkQuality | 上行网络质量 |
downQuality | AliRtcNetworkQuality | 下行网络质量 |
- 您可以调用 setVideoProfile 设置视频流规格。
说明 通过设置较低规格的视频流,减少视频通信的网络资源占用。
AliRtcVideoProfile vp = AliRtcVideoProfile_Default; [self.engine setVideoProfile:vp forTrack:AliRtcVideoTrackCamera];
参数 | 类型 | 描述 |
profile | AliRtcVideoProfile | 视频流参数。 |
track | AliRtcVideoTrack | 需要设置的视频 Track 类型。 |
- 调用 configRemoteCameraTrack 将订阅视频切换为小流。说明当网络质量恢复优良状态时,请您根据实际需求决定是否切换至优先订阅大流(即默认的订阅模式)。
- (void)configRemoteCameraTrack:(NSString *)uid preferMaster:(BOOL)master enable:(BOOL)enable;
参数 | 类型 | 描述 |
uid | String | 用户 id |
master | boolean | 是否大流 |
enable | boolean | 是否可用 |
- 调用 subscribe 重新订阅:
[self.engine subscribe:view.userID onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {}];
- 切换为小流可以编写如下代码:
[self.engine configRemoteCameraTrack:view.userID preferMaster:NO enable:YES]; [self.engine subscribe:view.userID onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {}];
- 切换为大流可以编写如下代码:
[self.engine configRemoteCameraTrack:view.userID preferMaster:YES enable:YES]; [self.engine subscribe:view.userID onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {}];
- 调用 configLocalCameraPublish 方法实现仅发布音频流。
说明 当网络质量恢复优良状态时,请您根据实际需求决定是否重新发布音视频流。
- (void)configLocalCameraPublish:(BOOL)enable;
参数 | 类型 | 说明 |
enable | boolean | true 为允许发布相机流,false 表示不允许 |
- 示例代码如下:
[self.engine configLocalCameraPublish:NO]; [self.engine publish:nil];
获得更多功能实现方法,请参见 AliRtcEngine 接口。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。