Shake Shack 网络性能优化实践短片
内容来源:华为开发者大会2021 HMS Core 6 System技术论坛,主题演讲《抖音短视频网络性能优化实践》。
演讲嘉宾:卡涛,抖音Android架构师
大家好!我是来自字节跳动抖音体验团队的卡涛。我的分享主题是抖音短视频网络性能优化实践。接下来,我将介绍短视频应用的弱网瓶颈,以及集成HMS Core无线传输服务后的改变。
弱网:短视频应用的网络瓶颈
日活跃用户数量突破6亿的抖音,面对巨量的用户群体,迎来了巨大的网络体验挑战。播放视频卡顿、视频加载时间长、卡顿5秒以上,这些都是困扰我们的问题。抖音还有直播业务,其中的“推拉流”过程对带宽的要求非常高,网络不行会直接导致用户在直播抢购时“卡了”。针对这些问题,我们一般会进行局域网探测,查看带宽问题;诊断测试,判别哪条链路出现问题。
随着抖音业务范围的不断扩大,安卓端侧的业务需求也逐渐增多,面临许多网络困境——
-
视频下载/上传:抖音的很多用户不仅会下载视频分享给他人,还会自主上传的高质量的视频,这对网络要求很高。
-
动态化:抖音的电商业务发展蓬勃,其中的信息流广告会调用一部分动态化资源。
-
插件化:除了短视频,抖音的直播、本地生活、社交等功能插件的终端体验尤为重要。
-
离线化:在春节、购物节等时间节点举办大型活动时,抖音会上线很多玩法、游戏。这时要保证活动的即时性,比如春晚抢红包的场景需要提前下发,对带宽也有很高要求。
-
直播:抖音的直播业务如火如荼,需要保证带宽足、时延低、弱网环境尽量流畅等条件。“推流” 情况下,上传的带宽足够即可;“拉流”则对观看直播的实时性、时延、带宽、弱网可用性都有非常高的要求。
-
API请求:抖音用户量级大,若要持续拉取用户信息和视频播放信息,就对带宽、时延、弱网和稳定性提出了挑战。
系统能力:网络优化的突破口
那么,抖音如何在应用侧提升网络体验呢?应用业务层网络可用性优化有动态码率、动态分辨率、业务降级等。比如视频可以在低网速下自动降低码率;用智能心跳能力探测网络的心跳间隔。
网络框架层可用性优化有数据包压缩、动态选路、DNS解析优化、复合请求、链接层优化、CDN加速、协议层优化、弱网切换。如果用户的网络环境比较差,我们会提示用户登录免费Wi-Fi;或是提示他们选择免流模式。针对流量敏感的用户,我们也会尽量让他在较高质量的网络下浏览A,不对资费造成很大影响。有些业务的实时性要求不高,但对抖音的前台流量影响很大,后台还会对这些业务进行CDN限速,从而保证前台的播放和直播体验。系统层网络可用性优化则体现为更准确的用户感知、更精准的预测、更强的三方管制、更精细的链接保护。
以上都是目前业界比较通用的网络优化方式。HMS Core无线传输服务中的系统网络增强能力,包括链路保护、带宽加强、场景预测、弱网可用、信号评估,基本做到全覆盖。
针对网络卡顿,经过测试发现根本原因是关键链路的加载导致的。应用侧的弱网诊断手段有限,无线传输服务提供了更强的弱网感知和识别能力,进而进行更精准的弱网预测。它可以帮助应用理解网络API链接的优先级,主动控制带宽的并发量,感知更多的网络状态切换、更全面的用户体验信息,提升用户体验。
最佳实践:抖音弱网优化的典型案例
弱网预测,可以在弱网来临之前让应用有所准备。无线传输服务接到通知后,可以在地铁、电梯、高铁等不同弱网场景采取不同的云控弱网措施。比如用户在弱网场景下观看点播或直播,可以智能预加载,调整推送码率,并进行流量管控,提前下载流量。
如果预估弱网环境持续时间不长,无线传输服务会进行弱网的行为指引,提示想要退出应用的用户“您的网络即将恢复,请耐心等待”。预感弱网环境变化后,它还会提前调整协议层参数。另外,针对一些对前台影响大、耗流量的业务场景,抖音也会考虑撤掉。但在网络质量好的情况下,这些业务场景对用户体验是有益的,我们一般会通过实验观察表现后决定去留。
卡顿透传,可以让系统精细化决策。用户在播放长视频时,如果后台请求超时,基本没有感知;在前台点播短视频时,如果看到十几秒卡住再播,体验就会变得非常差。造成这一现象的主要原因有瞬时无网、延迟波动、带宽受限等。如何解决呢?为了优先保证视频加载和流媒体,无线传输服务可以结合卡顿事件定制策略,在预估Wi-Fi信号、5G信号、基站信号后,定义网络通道优先级并增强带宽。
网络卡顿快速响应,让隐藏的卡顿不再成为体验瓶颈。之前,网络断连1-2秒,应用无法及时感知。但前台的点播或直播就会有5-6秒的卡顿。集成无线传输服务后,可以做到事件可预测、双向事件通知和时常评估。在可感知的前提下,保证无网条件不发送无效请求,有网之后立即请求,更好地服务于对实时性要求高的应用场景。
大数据量带宽扩容,让痛苦快速消失。随着用户视频质量的提升,抖音面临大幅度的带宽消耗以及应用流量需求。比如插件下载、大型活动离线化资源下载、动态化资源预加载、视频上传、直播推流、安装包下载。首先,抖音会进行应用级优化,通过流量调度,完成错峰下载,保证前台流量顺畅,同时在服务端限制CDN速度。集成无线传输服务后,Wi-Fi高优先级发包、双Wi-Fi功能、多网并发、带宽管控等功能持续优化。
总的来说,基于抖音用户的大体量,集成无线传输服务能力的表现很不错。我们还有很多和华为在功耗、显示、网络等方向的合作,希望有机会和大家再次分享,感谢!
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
上一篇: 可用性--多少测试人员才够用?
推荐阅读
-
Shake Shack 网络性能优化实践短片
-
[姿势估计] 实践记录:使用 Dlib 和 mediapipe 进行人脸姿势估计 - 本文重点介绍方法 2):方法 1:基于深度学习的方法:。 基于深度学习的方法:基于深度学习的方法利用深度学习模型,如卷积神经网络(CNN)或递归神经网络(RNN),直接从人脸图像中学习姿势估计。这些方法能够学习更复杂的特征表征,并在大规模数据集上取得优异的性能。方法二:基于二维校准信息估计三维姿态信息(计算机视觉 PnP 问题)。 特征点定位:人脸姿态估计的第一步是通过特征点定位来检测和定位人脸的关键点,如眼睛、鼻子和嘴巴。这些关键点提供了人脸的局部结构信息,可用于后续的姿势估计。 旋转表示:常见的旋转表示方法包括欧拉角和旋转矩阵。欧拉角通过三个旋转角度(通常是俯仰、偏航和滚动)描述头部的旋转姿态。旋转矩阵是一个 3x3 矩阵,表示头部从一个坐标系到另一个坐标系的变换。 三维模型重建:根据特征点的定位结果,三维人脸模型可用于姿势估计。通过将人脸的二维图像映射到三维模型上,可以估算出人脸的旋转和平移信息。这就需要建立人脸的三维模型,然后通过优化方法将模型与特征点对齐,从而获得姿势估计结果。 特征点定位 特征点定位是用于检测人脸关键部位的五官基础部分,还有其他更多的特征点表示方法,大家可以参考我上一篇文章中介绍的特征点检测方案实践:人脸校正二次定位操作来解决人脸校正的问题,客户在检测关键点的代码上略有修改,坐标转换部分客户见上图 def get_face_info(image). img_copy = image.copy image.flags.writeable = False image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = face_detection.process(image) # 在图像上绘制人脸检测注释。 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) box_info, facial = None, None if results.detections: for detection in results. for detection in results.detections: mp_drawing.Drawing.detection = 无 mp_drawing.draw_detection(image, detection) 面部 = detection.location_data.relative_keypoints 返回面部 在上述代码中,返回的数据是五官(6 个关键点的坐标),这是用 mediapipe 库实现的,下面我们可以尝试用另一个库:dlib 来实现。 使用 dlib 使用 Dlib 库在 Python 中实现人脸关键点检测的步骤如下: 确保已安装 Dlib 库,可使用以下命令: pip install dlib 导入必要的库: 加载 Dlib 的人脸检测器和关键点检测器模型: 读取图像并将其灰度化: 使用人脸检测器检测图像中的人脸: 对检测到的人脸进行遍历,并使用关键点检测器检测人脸关键点: 显示绘制了关键点的图像: 以下代码将参数 landmarks_part 添加到要返回的关键点坐标中。