You need to enable JavaScript to run this app.
导航
网络质量探测及应对策略
最近更新时间:2024.07.17 16:35:46首次发布时间:2024.07.17 16:31:26
复制全文
我的收藏
有用
有用
无用
无用

本文介绍如何在使用火山引擎云手机客户端 SDK 进行云手机画面同步至本地设备时,利用 SDK 提供的回调机制,实时监控并上报用户的网络质量状态,并根据网络状况实施有效的弱网应对措施。
火山引擎云手机客户端 SDK 支持以回调的形式定时上报网络质量。你可以通过注册 IStreamListener 监听 onNetworkQuality 回调上报的用户网络质量,根据用户网络质量变化采取相应的调整策略,如在用户网络质量劣化时进行视频流清晰度降级或提示用户更换网络等,从而为用户提供更加流畅和适应性强的服务体验。

网络质量探测代码示例

当创建了一路视频或音频流之后, 云手机客户端 SDK 会每隔 2 秒触发一次网络质量回调,上报网络质量评级。

public void startVePhone(){
    PhonePlayConfig.Builder builder = new PhonePlayConfig.Builder();
    builder.streamListener(getIStreamListener());
    //...无关代码省略
    PhonePlayConfig config = builder.build();
    VePhoneEngine.getInstance().start(mPhoneConfig, getIPlayerListener());
}

IStreamListener getIStreamListener(){
    return new IStreamListener(){
    
        @Override
        public void onNetworkQuality(int quality) {
            Log.d(TAG, "onNetworkQuality: quality = [" + quality + "]");
            switch (quality) {
                case StreamStats.NETWORK_QUALITY_DOWN:
                    Log.d(TAG, "onNetworkQuality: 网络不可用");
                    break;
                case StreamStats.NETWORK_QUALITY_VERY_BAD:
                    Log.d(TAG, "onNetworkQuality: 网络情况糟糕");
                    break;
                case StreamStats.NETWORK_QUALITY_BAD:
                    Log.d(TAG, "onNetworkQuality: 网络情况较差");
                    break;
                case StreamStats.NETWORK_QUALITY_GOOD:
                    Log.d(TAG, "onNetworkQuality: 网络情况良好");
                    break;
                default:  // 其他质量档位暂不返回
                    break;
            }
        }
        
        // ...无关代码省略
    
    }

}
弱网应对操作建议

基于回调上报的网络质量,对应的操作建议如下:

网络质量评级说明操作建议
2当前网络状况良好,能够较好地承载当前业务。如果当前视频清晰度档位低于默认档位,并且已保持该状态 15 个回调周期以上,则建议适当提高清晰度档位,参看清晰度档位调整建议
4当前网络质量欠佳,可能会影响用户主观体验用户已经受到了一定程度的影响,建议向用户发出网络状态不佳的提示,明确告知用户网络连接缓慢或不稳定的情况。
5当前网络质量较差,需采取对应策略,如降低媒体流码率或更换网络用户已经受到了较大影响,建议降低拉流清晰度档位,或者提示用户更换网络。参看清晰度档位调整建议
6网络断开,无法使用用户下行码率为 0,客户端已经断网,需要提示用户更换网络。
清晰度档位调整建议

不同视频清晰度档位下,视频的分辨率、帧率和码率不同,对网络流量和用户体验的影响也存在差异。例如,高码率视频虽然提供更清晰的画质,但也更容易导致网络拥塞,尤其在网络条件不佳时。相反,低码率视频流虽然减轻了网络负担,减少了拥塞风险,但可能会牺牲一定的观看质量。
为了平衡视频质量和网络状况,建议根据实时网络质量动态调整视频清晰度。你可以调用 setVideoStreamProfileId 接口,参考云手机清晰度档位说明选择符合需求的档位 ID。具体建议如下:

  1. 经验证,16307、16103、14102 档位是在 4000kbps、2000kbps、1500kbps 的下行带宽时主观体验最好的清晰度档位,清晰度降级时建议使用以上三个档位。

  2. 14101 档位是在 1000kbps 下行带宽下的唯一可用档位,且画质损失较大,使用该档位需要权衡用户对画质和卡顿率的要求。

  3. 建议使用 “快降慢升” 的动态调整策略,即在发现网络质量较差时快速降低清晰度档位,减小视频码率,快速缓解网络拥塞;在视频质量长时间保持稳定且档位较低时,可以适当提升档位,提高用户主观体验。

    1. 建议在网络较差的情况下逐档降级。如默认档位为 16307,当网络较差时可以降至 16103;仍然较差时可以降至 14102,每次降级间隔至少 5 个回调周期(10 秒),为网络调整提供时间;

    2. 当用户档位低于默认的 16307 档位,并且连续数个 15 个回调周期(30 秒)以上网络状况良好,则可以适当提升一个档位。

API 参考
功能简述AndroidiOSWeb
网络质量回调onNetworkQualityonNetworkQualitynetwork-quality
切换视频流清晰度档位setVideoStreamProfileIdsetVideoStreamProfileIdsetVideoStreamProfileId