视频秒播优化实践

c8e27fcf0ee3ce2ae5e994c1e7a1921e.jpeg

464043fe04fcea2a1481634f5a60983a.gif

本文字数:2259

预计阅读时间:10分钟

795a4d64a79dafb74619090209f75082.png

视频起播时间,即首帧时间,是视频类应用的一个重要核心指标,也是影响用户观看体验的核心因素之一。如果视频要加载很久才能开始播放,用户放弃播放甚至离开 App 的概率都会增加。

视频秒播是指用户在起播时平滑播放,没有首屏的顿感,用户几乎感知不到有首帧时间的存在。

我们把从开始播放到视频首帧画面展现出来这个链路的耗时称为首帧耗时,想要优化首帧耗时,达到秒播效果,我们需要知道这个链路上,都进行了哪些步骤,然后找到其耗时点,进行针对性优化。不同的业务场景下,播放行为和播控策略不尽相同,最常见的就是冷启动场景、短视频场景、页面切换场景以及长视频场景。本文主要讨论具体业务场景下的优化实践,我们可以根据场景的特性,采取不同的优化策略。

01

通用首帧优化方法

6fa6f4cacb80c0ee92fba951ed8e8940.png

1.1提前获取播放地址

视频播放的第一步就是获取视频资源的播放链接,通常而言,视频资源会有唯一标识video id,在点播的服务端会有一个根据video id获取播放链接的服务,如果将播放地址随feed流一起下发,或者播放前提前请求,则省去了客户端的一次网络请求耗时。

1.2预加载

预加载是一种常见的首帧优化措施,我们可以提前下载部分视频数据以达到快速起播的目的。但是什么时候去预加载、预加载多少、并行预加载数量等都是实际需要考虑的问题。

首先是预加载时机的问题,预加载时机如果太晚,几乎没有效果;如果太早,可能会跟当前正在播放的视频抢夺宝贵的带宽资源,甚至造成播放卡顿。我们必须要遵守一个原则:视频预加载绝对不能影响到当前视频的播放。一个简单的方案就是,当前视频缓冲到一定比例,再进行下个视频的预加载。当然还有更加细致的方案,根据当前播放视频的可用缓存、当前网络的下载速度、当前视频的码率以及即将预加载视频的码率、并行预加载数量,通过这些数据我们能够构建一个模型去预测接下来视频播放的卡顿状况,如果大概率是不会发生卡顿,则可以开启预加载,反之则不启用或者暂停预加载。

另外一个问题,预加载多少,直观认识,至少得保证首帧能加载出来。一个粗略的估算方法是moov大小加上视频的平均码率 * 预加载时长,这样就可以通过服务端下发moov头大小及视频的平均码率,然后在App端上通过实验去调整预加载时长参数,进而调整预加载大小。

1.3预渲染

通过预加载只能够将网络请求的耗时消除掉,但播放器还是需要经历解复用、解码、渲染的步骤,在中低端机器有200毫秒以上的耗时。如果能够将视频的首帧提前渲染好而不播放,将会缩减掉这部分的耗时。而预渲染就是提前将视频的首帧渲染出来的技术。

具体来说,预渲染会提前解码出视频首帧,并且将首帧渲染出来,但是这个过程中音频不会播放出来。在滑动播放场景,当滑动视频卡片时,就已经开始启动预渲染,在卡片滑动过程中,视频的首帧很可能就已经通过预渲染加载出来,这样当卡片滑到中央时,则直接启动播放,这时候用户基本上感受不到视频的加载。

02

分场景优化实践

2.1冷启动场景

冷启动场景下能做的优化空间较小,主要两个思路:

一、在App启动最早的时候(Application创建时),开始异步初始化播放器组件,让播放器尽早Ready;

二、在不影响体验的情况下,选择码率低的档位起播。

2.2短视频滑动场景

短视频沉浸式滑动播放场景,可以采取双播放器实例加载复用的策略,播放当前视频的同时,第二个播放器加载即将播放的视频,渲染首帧后暂停,列表其他视频进行预加载(预加载是纯下载的过程,无渲染逻辑)。

另外,还有滑动过程中调播的优化,在滑动松手 scrollViewWillEndDragging时就可以计算出待播放的视频,无需等到滑动停止scrollViewDidEndDragging,手指抬起就开启播放,可节省300毫秒左右的耗时。

在增加了下一个视频的 “预播” 机制后,用户滑到下个视频时,可以立即从首帧的暂停状态恢复为播放,不再需要预先显示封面图,也提高了播放体感上的速度。除视频以外的业务数据的渲染,可以放在用户滑动翻页的过程中进行。

基本流程如下图:

58b53484b60e433ae5e75ac67012d5bd.jpeg
preload

2.3页面跳转场景

进入新页面时,总需要先请求播放数据及业务数据,然后再加载播放视频,这个过程会让用户感知到等待时长。播放页面之间的跳转,有两种情况:

一、播放中视频的跳转;

二、未起播视频的跳转。

针对情况一的优化策略为:无缝切换,不打断当前视频的播放,实现播放器在两个页面间的转移,真正做到“零耗时”体验。

针对情况二的优化策略为:在跳到新页面时需要前页面传入 videoUrl,提前进行播放,同时进行业务数据的请求和渲染。这样保证了视频与业务数据的加载可以异步执行,由于用户主要目光是集中在视频上的,所以从用户的视角直观的来看,页面加载速度变快了。

2.4长视频场景

长视频场景下可做的优化,一个是关键帧起播。长视频一般是从播放进度处起播,通常的实现方式是seek到历史进度前面最近的一个关键帧,然后把视频帧塞给解码器,在解码器中做丢帧处理,直到 pts 到了指定的历史进度。假设这个视频的码率是 2.5Mbps,视频的 GOP 大小为 5s,那么精准 seek 的起播,最坏情况需要额外下载 2.5 * 5=12.5Mb 的数据。如果我们只在关键帧位置起播(非精准 seek),则可以避免这些额外数据的下载,从而缩短首帧的耗时。

另一个是连播预加载,连播场景下是可以定位用户接下来要播放的视频的,可以采取提前获取播放地址,并进行预加载的策略,提高连播视频的起播速度。

03

总结与展望

本文介绍了通用的几种首帧优化方法,以及各实际业务场景中的不同优化策略,我们在项目开发中也在持续优化实践。客户端受网络环境、高中低各种机型、用户使用习惯等影响,无论是预加载、预渲染策略,还是网络请求策略等各种策略,仍有非常多需要精细化的去优化的点,才能让尽量多的用户都能获得更好的播放体验。

73fbbd26e3494b8ba50be8636ef78e2b.png

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

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

相关文章

飞书api增加权限

1,进入飞书开发者后台:飞书开放平台 给应用增加权限 2,进入飞书管理后台 https://fw5slkpbyb3.feishu.cn/admin/appCenter/audit 审核最新发布的版本 如果还是不行,则需要修改数据权限,修改为全部成员可修改。 改完…

大数据架构之关系型数据仓库——解读大数据架构(二)

文章目录 前言什么是关系型数仓对数仓的错误认识与使用自上而下的方法关系型数仓的优点关系型数仓的缺点数据加载加载数据的频率如何确定变更数据 关系型数仓会消失吗总结 前言 本文对关系型数据仓库(RDW)进行了简要的介绍说明,包括什么是关…

课时93:流程控制_函数进阶_综合练习

1.1.3 综合练习 学习目标 这一节,我们从 案例解读、脚本实践、小结 三个方面来学习。 案例解读 案例需求 使用shell脚本绘制一个杨辉三角案例解读 1、每行数字左右对称,从1开始变大,然后变小为1。    2、第n行的数字个数为n个&#xf…

Bug及异常:unity场景角色移动卡墙壁的问题

场景是一个小的杠铃形状封闭空间,美术没有给包围盒,我自己用blender做了一个(属于兴趣爱好),如下: 导入场景中使用meshcollider做成空气墙,发现角色移动到角落继续行走会卡角落处&#x…

谷歌pixel6/7pro等手机WiFi不能上网,显示网络连接受限

近期在项目中遇到一个机型出现的问题,先对项目代码进行排查,发现别的设备都能正常运行,就开始来排查机型的问题,特意写出来方便后续查看,也方便其它开发者来自查。 设备机型:Pixel 6a 设备安卓版本:13 该方法无需root,只需要电脑设备安装adb(即Android Debug Bridge…

分布式技术---------------消息队列中间件之 Kafka

目录 一、Kafka 概述 1.1为什么需要消息队列(MQ) 1.2使用消息队列的好处 1.2.1解耦 1.2.2可恢复性 1.2.3缓冲 1.2.4灵活性 & 峰值处理能力 1.2.5异步通信 1.3消息队列的两种模式 1.3.1点对点模式(一对一,消费者主动…

出海企业如何从海外云手机中受益?

随着全球化的推进,越来越多的企业开始将目光投向海外市场。然而,不同国家和地区的网络环境、政策限制,以及语言文化的差异,给出海企业的市场拓展带来了诸多挑战。在这一背景下,海外云手机作为一种新兴解决方案&#xf…

MySQL如何定位慢查询?如何分析这条慢查询?

常见的慢查询 聚合查询(常用的聚合函数有:MAX()、MIN()、COUNT()、SUM()、AVG())。 多表查询 表数据过大查询 深度分页…

【Tomcat 文件读取/文件包含(CVE-2020-1938)漏洞复现】

文章目录 前言 一、漏洞名称 二、漏洞描述 三、受影响端口 四、受影响版本 五、漏洞验证 六、修复建议 前言 近日在做漏扫时发现提示服务器存在CVE-2020-1938漏洞,故文章记录一下相关内容。 一、漏洞名称 Tomcat 文件读取/文件包含漏洞(CVE-2020-1938) 二、漏洞描…

【SpringBoot】mybatis-plus实现增删改查

mapper继承BaseMapper service 继承ServiceImpl 使用方法新增 save,updateById新增和修改方法返回boolean值,或者使用saveOrUpdate方法有id执行修改操作,没有id 执行新增操作 案例 Service public class UserService extends ServiceImpl<UserMapper,User> {// Au…

送礼物动态特效直播和短视频特效源码送礼物动态连麦PK特效语音视频聊天室朋友圈十套

内附十套动画效果源码&#xff0c;可F5刷新随机显示特效预览。送礼物动态特效直播和短视频特效源码送礼物动态连麦PK特效语音视频聊天室朋友圈十套 SVGA 是一种用于嵌入式动画的矢量文件格式&#xff0c;通常用于在移动应用程序和网页中展示高质量的动画效果。相对于传统的 GIF…

办公软件巨头CCED、WPS迎来新挑战,新款办公软件已形成普及之势

办公软件巨头CCED、WPS的成长经历 CCED与WPS&#xff0c;这两者均是中国办公软件行业的佼佼者&#xff0c;为人们所熟知。 然而&#xff0c;它们的成功并非一蹴而就&#xff0c;而是经过了长时间的积累与沉淀。 CCED&#xff0c;这款中国大陆早期的文本编辑器&#xff0c;在上…

区块链安全-----区块链基础

区块链是一种全新的信息网络架构 &#xff0c;是新一代信息基础设施 &#xff0c;是新型的价值交换方式、 分布式协 同生产机制以及新型的算法经济模式的基础。 区块链技术可以集成到多个领域。 区块链的主要用途 是作为加密货币的分布式总帐。 它在银行 &#xff0c;金融 &…

软件定义车队面临网络安全的曲折之路

当以色列 REE Automotive 设计其 P7 电动汽车底盘时&#xff0c;它是从软件开始工作的&#xff1a;扁平的车辆底盘完全可配置&#xff0c;每个轮胎附近有四个独立的模块&#xff0c;用于转向、制动、悬架和动力传动系统&#xff0c;每个模块均由电子驱动控制单元&#xff08;EC…

【Hadoop】下载安装及伪分布式集群搭建教程

目录 1.概述 2.环境准备 3.hadoop安装 3.1.下载安装配置 3.2.伪分布式集群 3.3.注意事项 4.Hadoop集群的组成 1.概述 hadoop有三种安装模式 单机模式&#xff0c;只在一台机器上运行&#xff0c;存储用的本地文件系统而不是HDFS。 伪分布式模式&#xff0c;存储采用HD…

LDF、DBC、BIN、HEX、S19、BLF、ARXML、slx等

文章目录 如题 如题 LDF是LIN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 DBC是CAN报文格式文件&#xff0c;把这个直接拖到软件里面&#xff0c;可以发报文和接收报文 BIN文件烧录在BOOT里面&#xff08;stm32&#xff09;&#xff0c…

lua学习笔记21完结篇(lua中的垃圾回收)

print("*****************************lua中的垃圾回收*******************************") text{id24,name"仙贝"} --垃圾回收关键字collectgarbag --获取当前lua占用内存数 k字节 返回值*1024就可以得到具体占用字节数 print(collectgarbage("count&…

是时候将 DevOps 可见性扩展到网络边缘了

尽管部署前运行了大量测试&#xff0c;但在部署应用程序后&#xff0c;性能问题经常让 DevOps 团队感到困惑。经过进一步调查&#xff0c;最常被忽视的问题是应用程序本身的分布式特性。从多个位置访问应用程序的最终用户永远不会拥有相同水平的互联网服务&#xff0c;因此在纽…

Harmony鸿蒙南向驱动开发-Regulator接口使用

功能简介 Regulator模块用于控制系统中某些设备的电压/电流供应。在嵌入式系统&#xff08;尤其是手机&#xff09;中&#xff0c;控制耗电量很重要&#xff0c;直接影响到电池的续航时间。所以&#xff0c;如果系统中某一个模块暂时不需要使用&#xff0c;就可以通过Regulato…

OpenAI现已普遍提供带有视觉应用程序接口的GPT-4 Turbo

OpenAI宣布&#xff0c;其功能强大的GPT-4 Turbo with Vision模型现已通过公司的API全面推出&#xff0c;为企业和开发人员将高级语言和视觉功能集成到其应用程序中开辟了新的机会。 PS&#xff1a;使用Wildcard享受不受网络限制的API调用&#xff0c;详情查看教程 继去年 9 月…