适用于音视频的弱网测试整理

一、什么是弱网环境

对于弱网的定义,不同的应用对弱网的定义是有一定的差别的,不仅要考虑各类型网络最低速率,还要结合业务场景和应用类型去划分。按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。随着国内移动端迅猛发展,大大增加用户碎片化使用移动端的概率,用户可能会在地铁上,高铁上,巴士上,甚至是电梯,电梯间,楼梯间,隧道,车库,大型活动现场等空间使用互联网应用。
在这里插入图片描述

二、音视频受网络限制的原理

Q1:当请求从客户端发出,最后服务器响应请求并返回,看似简单的流程,中间经过了些什么呢,又是有哪些流程会受到弱网情况的影响呢?
在这里插入图片描述
首先,简要介绍一下传输层协议,TCP/IP协议族是一个四层协议系统。

  • 从下到上分别为 数据链路层、网络层、传输层、应用层,每一层都通过若干协议实现完成不同的功能。
  • 其中数据链路层实现了网卡接口的网络驱动程序,处理数据在物理媒介上的传输,并隐藏了各个物理媒介之间的区别,为上层协议提供了统一的接口;网络层 通常网络上的两台主机之间不是直接相连接的,两种之间存在多个中间节点(路由器)。它的的作用就是在众多的节点中选择中间节点,使两台主机能够通信,确定两台主机的的地址管理和路由选择;传输层为两台主机上的应用提供端到端(end to end)的通信。与网络层不同的是,传输层只关心通信的起始端和目的端的可靠数据传输,而不在乎数据包的中转过程;应用层负责处理应用程序的逻辑(比如文件传输、名称查询和网络管理等)作用于用户层。而数据链路层、网络层和传输层负责处理网络通信细节,这部分必须稳定而高效,因此它们都在内核空间中实现。
  • 而刚提到的数据通信,从应用层发送一段数据时,需要将该数据通过协议栈从上往下依次传递,同时每一层协议都会在上一层数据的基础上加上自己的头部信息 (比如我们常见的TCP/UDP协议,在接收到我们要发送的数据时,就会在我们要发送的数据前面加上自己的头部信息)。完成所有数据封装后,当帧达到目的主机后,重新沿着协议栈自低而上依次传递,各层协议依次处理帧中本层负责的头部,获取到所需信息,并最终将处理后的数据分用交给应用程序。由此底层经过繁琐的数据处理后,完成一次数据的直接通信,而不同阶段客户端和服务器处于不同网络环境,每一层协议均会受网络状况的影响。

在这里插入图片描述
Q2:已知数据在网络层、数据传输层、应用层等都会受到网络影响,那具体会存在哪些网络问题呢?又是如何去对抗解决这些网络问题呢?

1、影响网络传输质量有很多原因,比如目标网站所在的服务器带宽不足或负载过大、网线问题导致网速变慢、防火墙的过多使用、系统资源不足等都会影响网络质量,其中最主要的是 网络拥塞、网络丢包、网络抖动 等问题,这些问题会是造成音视频卡顿、实时性不佳的主要原因。

2、解决这些核心网络问题,主要由上层 网络层(部分网络层无法解决,也会由 应用层 参与解决)。

其中,网络传输层主要协议有 TCP 和 UDP ,传输层协议在 TCP/IP 分层协议中位于应用层之下,一般在操作系统内部提供实现。其中,TCP 是面向连接的可靠传输协议,为数据传输的完整性和有序性提供了保障;UDP 是无连接的不可靠传输协议,数据传输的可靠性完全交由应用层处理。

在这里插入图片描述
实时音视频应用场景下,UDP 会作为优先选择已经是广泛共识。原因主要包括以下几点:

1、TCP 协议并非为音视频实时应用场景设计,其内部的拥塞控制和差错控制等机制为了可靠性和高吞吐量而导致延时的增加,在弱网环境下延时的恶化更为明显。ITU StandardG.114 对延时的定义是,端到端延时大于 400ms 时,用户的交互体验将受到明显的影响。

2、TCP 的拥塞控制机制和差错控制机制 位于操作系统内部实现,应用层无法优化,无法应对不同场景需求进行调整,严重 缺乏灵活性。

3、UDP 协议本身开销比 TCP 小,传输控制策略完全交由应用层来实现,具有足够的灵活性。

拥塞问题:
当网络中传输的数据流量超过网络瓶颈容量,就会产生拥塞问题。

拥塞的直接影响是突发丢包或者突发抖动,如果不及时预测拥塞的发生,及时降低发送数据量,接收端将会出现卡顿、延时大、画质差等等问题。

拥塞产生的原因有两点:

接收方容量不够
网络内部有瓶颈
那作为测试,我们一是 需要快速准确地进行网络拥塞探测;二是 观测是否可以 避免拥塞以及尽可能快地从拥塞状态恢复。

拥塞探测 根据观测数据的差异可用分为两类:

基于丢包的算法(Loss-based):通过丢包事件来检测网络拥塞。

基于延时的算法(Delay-based):通过对延时的测量来判断网络拥塞。

丢包问题:
如上所述,实时交互式媒体传输基于 RTP/UDP 协议,丢包问题由应用层处理。

网络传输方面的对抗丢包技术手段主要包括 重传(ARQ)、前向纠错(FEC)。

信源编码方面根据数据以及编码方的不同也可以提供某些特定的抗丢包能力,比如视频编码中采用 B 帧降低丢包的影响。

抖动问题:
概括而言,抖动问题就是 网络传输延时变化问题,抖动越大表示网络传输延时变化越大。

抖动问题会造成接收端卡顿、播放快进等严重影响音视频沟通体验的问题。造成抖动问题的原因是多方面的,比如新的流加入造成网络资源竞争加剧、源端数据发送速率本身不平稳以及其他网络原因。

目前处理抖动的通用策略是 接收端建立抖动缓冲区(JitterBuffer)来消除抖动。接收端通过增加抖动延时来吸收不均匀的延时,达到均匀播放的目的。

三、弱网测试保障适用场景

  1. 弱网测试对 直播应用 和 音视频应用 都是刚需,他们所面对的网络环境具有较强的 复杂性、异构型,用户可能会在任何地方任何网络条件下进行直播或者视频会议。特别是视频直播,用户可能会在地铁里观看直播,可能在高铁上观看直播,主播有可能在户外信号弱的地方进行推流,也有可能在大型活动的现场进行推流。而视频会议的员工可能在全球的任何地方,有可能当地的网络条件较差。
  2. 但是直播和视频会议等实时音视频应用,对视频的 连续性、图像质量、音频质量、连接的稳定性 要求都是非常高的,在不同环境下的严重程度也存在很大差异,任何一方面做得不尽人意都可能影响到用户对产品的使用感受,可能会导致用户流失。因此非常有必要针对各种可能遇到的弱网环境,对应用的各方面进行优化和调整。这样一来,如何检测复杂网络下音视频的体验,是音视频测试关注的重点问题。

四、弱网测试工具分享

  • 通过对市面上8种测试工具进行调研,考虑到平台兼容性、最终选中Charles/Qnet两种弱网检测工具。在这里插入图片描述
    其中包括 charles、Qnet 两种弱网检测工具的使用,测试工具弱网场景的模拟原理了话,就是通过实时将系统接受和发出的网络数据包拦截下来,人工的造成延迟、掉包和篡改操作后再进行发送。无论是要复现网络异常造成的程序错误,还是评估应用程序在不良网络状况下的表现,都可以在不需额外搭建环境的情况下,在系统层次达到想要的效果。

五、弱网参数设置参考值

  1. 在各种各样的弱网环境中,网络对应用的影响因素大致分为:可用带宽、丢包、时延、时延抖动等。
  2. 通过对实地网络参数进行测速,如电梯、地铁场景等,参照运营商输出的14种弱网场景,给出大家对于不同弱网场景,参数设定的一个参考值,下面附件中也提供了可直接用于charles导入的网络参数文件。

ps:实地测速使用app端的网络测速工具:appstore 测网速

在这里插入图片描述
名词解释:

上行速率:上行速率是指移动终端给基站发送信息时的数据传输速率,
下载速度:比如手机、笔记本等无线终端给基站传输数据速率;下行速率是指基站向移动终端发送信息时的传输速率,比如手机或笔记本等无线终端从基站或者网络下载数据的速率。
丢包率:丢包率(Loss Tolerance或Packet Loss Rate)是指测试中所丢失数据包数量占所发送数据组的比率。
时延:是指一个报文或分组从一个网络的一端传送到另一个端所需要的时间。它包括了发送时延,传播时延,处理时延,排队时延。(时延=发送时延+传播时延+处理时延+排队时延)一般,发送时延与传播时延是我们主要考虑的。
EDGE:由于EDGE是一种介于现有的第二代移动网络与第三代移动网络之间的过渡技术,因此也有人称它为"二代半"技术。

网络时延参考自百度百科:
上述数据参考自:https://blog.csdn.net/mao834099514/article/details/79456881

六、音视频的极限网络

通过对线上音视频的竞品调研,探索应用于不同场景下音视频的极限网络网端。

快剪辑平台【抖音,快手,秒剪】
编辑器功能平台【剪映,快影,度咔,必剪(参考)】
智能成片【秒剪,抖音,快手,度咔,畅片】

1、常规UI展示:通过对 抖音,快手,秒剪 APP进行弱网检测,【2G弱网】是极端网段。

2、智能成片:通过对 秒剪,抖音,快手,度咔,畅片、粉APP 六种APP 进行弱网检测,【3G弱网】是智能成片功能的极限网段;低于该弱网限制,对应功能的高、中、低端机型,业务功能无法正常应用。

3、ASR 语音识别+导出等操作:通过对 剪映,快影,度咔,必剪(参考)、粉 六种APP 进行弱网检测,【3G弱网】是ASR功能/导出操作的极限网段,低于该弱网限制,对应功能的高、中、低端机型,业务功能无法正常应用。

七、弱网用例场景设计

实际需要进行弱网场景覆盖场景,需根据业务 P0 核心场景划分,以及 新增/产品关注 业务场景进行弱网的覆盖。

八、弱网经典问题分享

针对直播、剪辑视频场景,遇到的客户端弱网问题、以及对应的弱网解决方案进行分享:

在这里插入图片描述
3、串行接口请求失败,一个接口失败导致全部失败

1、根据业务进行排查 / 性能调优

2、根据素材进行素材瘦身

3、拆分减少串行处理的接口,数据异步返回后针对性刷新

持续更新…

九、单位换算分享

冷知识:bps kbps mbps 换算规则

Mbps 即 百万位每秒,Kbps 即 千位每秒,bps 位每秒

速度单位,bit即比特,通常用b(小写)表示,指一位二进制位,1Mbps=1000Kbps=1000000bps;

所以1Mbps=1000 000bps;

这是通常用来衡量带宽的单位,指每秒钟传输的二进制位数

MB即百万字节也称兆字节;

KB即千字节;

B即字节;

之间关系为1MB=1024KB=1024*1024B;

1B=8b

附:charles网络设置xml文件(可直接导入)

十、Q & A

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/158321.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea自动封装方法

例如 package com.utils;import java.lang.reflect.Field; import java.sql.*; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle;/*** author hrui* date 2023/10/13 13:49*/ public class DBUtils {private static ResourceBundle bund…

【Pytorch】pytorch中保存模型的三种方式

【Pytorch】pytorch中保存模型的三种方式 文章目录 【Pytorch】pytorch中保存模型的三种方式1. torch保存模型相关的api1.1 torch.save()1.2 torch.load()1.3 torch.nn.Module.load_state_dict()1.4 什么是state_dict()1.4. 1 举个例子 2. pytorch模型文件后缀3. 存储整个模型3…

Netty深入浅出Java网络编程学习笔记(二) Netty进阶应用篇

目录 四、应用 1、粘包与半包 现象分析 粘包 半包 本质 解决方案 短链接 定长解码器 行解码器 长度字段解码器——LTC 2、协议设计与解析 协议的作用 Redis协议 HTTP协议 自定义协议 组成要素 编码器与解码器 编写测试类 Sharable注解 自定义编解码器能否使用Sharable注解 3、在…

科技为饮食带来创新,看AI如何打造智能营养时代

在当今社会,快节奏的生活方式、便捷的食品选择以及现代科技的快速发展正深刻地重塑着我们对健康的认知和实践,它已经不再仅仅是一个话题,而是一个备受关注的社会焦点。在这个纷繁复杂的交汇点上,AI技术的介入为我们开辟了前所未有…

【Rust笔记】浅聊 Rust 程序内存布局

浅聊Rust程序内存布局 内存布局看似是底层和距离应用程序开发比较遥远的概念集合,但其对前端应用的功能实现颇具现实意义。从WASM业务模块至Nodejs N-API插件,无处不涉及到FFI跨语言互操作。甚至,做个文本数据的字符集转换也得FFI调用操作系统…

云原生网关可观测性综合实践

作者:钰诚 可观测性 可观测性(Observability)是指系统、应用程序或服务的运行状态、性能和行为能够被有效地监测、理解和调试的能力。 随着系统架构从单体架构到集群架构再到微服务架构的演进,业务越来越庞大,也越来…

QMidi Pro for Mac:打造您的专属卡拉OK体验

你是否曾经厌倦于在KTV里与朋友们争夺麦克风?是否想要在家中享受自定义的卡拉OK体验?现在,有了QMidi Pro for Mac,一切变得简单而愉快! QMidi Pro是一款功能强大的卡拉OK播放器,专为Mac用户设计。它充分利…

【C语言】程序环境和预处理

程序环境: 1、C语言的任何一种实现,存在两个不同的环境; 2、翻译环境:将源代码转换成可执行的二进制指令(机器指令);.c文件(源文件——文本信息的代码)->&#xff0…

论文学习——Class-Conditioned Latent Diffusion Model For DCASE 2023

文章目录 引言正文AbstractIntroductionSystem Overview2.1 Latent Diffusion with sound-class-based conditioning以声音类别为条件的潜在扩散模型2.2 Variational Autoencoder and neural vocoder变分自编码器和神经声码器FAD-oriented Postprocessing filter(专…

Linux开启SSH

Linux开启SSH 1.虚拟机确定连通性 如果是虚拟机的话则需要进行确定和宿主主机之间能正常联通(不能联通还远程个啥) 获取到虚拟机的IP 参考文章:Linux获取本机IP地址使用宿主机ping一下虚拟机的IP查看是否联通 2.安装SSH服务端 安装工具来使得能够通过SSH进行连接 命令 sudo a…

springBoot组件注册

springBoot组件注册 前言1、创建组件文件2、写属性3、生成get和set方法4、以前注册的方法5、现在注册的方法6、在启动文件查看7、多实例Scope("prototype")8、注册第三方包导入对应的场景启动器注册组件查看是否存在也可以通过Import(FastsqlException.class)导入但是…

C++医院影像科PACS源码:三维重建、检查预约、胶片打印、图像处理、测量分析等

PACS连接DICOM接口的医疗器械(如CT、MRI、CR、DR、DSA、各种窥镜成像系统设备等),实现图像无损传输,实现DICOM胶片打印机回传打印功能,支持各种图像处理,可以进行窗技术调节,与登记台管理系统共…

Spring Boot 中的 TransactionTemplate 是什么,如何使用

Spring Boot中的TransactionTemplate:简化事务管理 事务管理是任何应用程序中至关重要的部分,特别是在处理数据库操作时。Spring Boot提供了多种方式来管理事务,其中之一是使用TransactionTemplate。本文将深入探讨TransactionTemplate是什么…

树莓派玩转openwrt软路由:5.OpenWrt防火墙配置及SSH连接

1、SSH配置 打开System -> Administration,打开SSH Access将Interface配置成unspecified。 如果选中其他的接口表示仅在给定接口上侦听,如果未指定,则在所有接口上侦听。在未指定下,所有的接口均可通过SSH访问认证。 2、防火…

如何在手机上设置节日提醒和倒计时天数?

在平淡的生活和工作中,时不时有各种各样节日的点缀,为我们的日常增添了一些仪式感,例如春节、元宵节、情人节、端午节、七夕节等。此外还有一些特殊的日子也值得纪念,例如恋爱纪念日、结婚纪念日、亲朋好友生日等。面对这些节日&a…

CodeForces每日好题10.14

给你一个字符串 让你删除一些字符让它变成一个相邻的字母不相同的字符串,问你最小的删除次数 以及你可以完成的所有方/案数 求方案数往DP 或者 组合数学推公式上面去想,发现一个有意思的事情 例如1001011110 这个字符串你划分成1 00 1 0 1111 0 每…

Step 1 搭建一个简单的渲染框架

Step 1 搭建一个简单的渲染框架 万事开头难。从萌生到自己到处看源码手抄一个mini engine出来的想法,到真正敲键盘去抄,转眼过去了很久的时间。这次大概的确是抱着认真的想法,打开VS从零开始抄代码。不知道能坚持多久呢。。。 本次的主题是搭…

多城镇信息发布付费置顶公众号开源版开发

多城镇信息发布付费置顶公众号开源版开发 以下是多城镇信息发布付费置顶公众号的功能列表: 信息发布:用户可以在公众号上发布各类信息,如房屋租售、二手物品交易、招聘信息等。 信息置顶:用户可以选择付费将自己的信息置顶在公众…

vue2时间处理插件——dayjs

在vue时间处理上有很多的方法和实现,可以自己实现,但是效率不高,所以,在框架开发中我们一般不会手写,一般是使用集成的第三方插件来解决我们的问题,在vue3中大家一般都使用Moment.js来处理,所以…

print() 函数

二、print() 函数 这里先说一下 print() 函数,如果你是新手,可能对函数不太了解,没关系,在这里你只要了解它的组成部分和作用就可以了,后面函数这一块会详细说明的。 print() 函数由两部分构成 : 指令&a…