vivo互联网视频播放体验优化的探索与实践

随着vivo互联网在视频业务领域的不断扩展,在多样化的业务场景下,如何提升每个用户的视频播放体验,保障最优的播放流畅度和清晰度,vivo互联网技术团队做了很多尝试与突破。LiveVideoStackCon 2022北京站邀请vivo互联网研发经理王道环,为我们介绍vivo互联网视频产品矩阵和技术架构,以及他们是如何打磨流畅度与内容感知编码并提升视频清晰度实际遇到的问题和解决方案。

文/王道环

编辑/LiveVideoStack

大家好,我是来自vivo互联网的王道环。我今天带来的分享是vivo互联网视频播放体验优化的探索与实践。

整个分享包括四个部分:

88c9e5c2179bcf25492b85d51e7d63d3.png

-01-

vivo视频业务介绍

68532f6e9285e2f26171b7acaf0e1009.png

首先给大家简单介绍下vivo视频业务。vivo互联网视频业务目前接入三大产品:

第一个是浏览器。浏览器是厂商自带工具属性,可以帮助用户搜索网页、提供图文信息流以及横版视频的服务。浏览器的日活目前接近1亿。

第二个产品是vivo短视频。它的内容调性主要以泛娱乐、泛生活为主,目前是我们着重发展的一个业务,后面我所讲到的案例也是以此业务来扩展。

第三个产品是i视频。i视频也比较成熟,目前日活接近2千万,主要提供横版的中长视频和影视内容。

170998ca10de49baf2e57d489a8aaf92.png

图为vivo视频处理技术中台架构。整个架构比较清晰、简单,包括整个视频的生命周期,从内容上传到视频处理,以及分发和播放。其中视频处理是最重要的核心模块。因为每天会面对用户UCG上传内容和MCN机构平台上传内容,这些内容质量参差不齐,码率和帧率都不一致。那么如何对这些视频进行转码和处理,以及画质增强,并呈现给用户,达到极致的体验,这是本模块最核心的使命。

视频分发是以CDN智能调度和质量检测为主。视频播放模块是以自研的播放器内核SDK为基础,包括自适应多码率和预加载策略等。QUIC主要是应对弱网场景,保证端侧播放流畅性。

底层基础服务部分,主要讲一下实验平台。因为做任何一轮技术优化,都要经过严格的用户分流,保证A/B实验均衡,同时也会做一些QoS和QoE的分析。对一些常规的技术优化,我们会分析QoS指标包括百秒卡顿时长、起播耗时、秒开率等。在QoE方面,主要包括用户平均播放时长、完播率等。对于一些更复杂的技术优化,我们还会做进一步的拆分,包括未播离开率、未播case的归因分析,以及整体网络请求链路的耗时等。

d1f092decb50a75a444110f4f8669296.png

在vivo短视频上线后,我们收到了大量站内外的用户负反馈,主要集中在画质不清晰、播放不流畅和卡顿等。 

c7e63fdf9beaf93fc4c311f74bacd0a1.png

那么怎样去衡量和优化这些体验?优化之后用户是否能真正满意而不是只停留在技术革新?对于视频业务来说,就是用简单、完美、优雅的方法来解决清晰度和流畅度问题。

-02-

打磨播放流畅度

接下来介绍一下我们是如何打磨播放流畅度的。

3c304ca30885f6627eecd1dd1571a51f.png

在vivo短视频上线之初,我们只是提供了单一分辨率的服务。这样就会导致两个问题,一是针对高端机型,如果被分发到低分辨率的如360p/480p的视频,清晰度相对较差,而这部分用户对画质要求很高,那么他们对产品就不会很满意。另外对于低端机型的用户,这部分手机的硬解性能较低,如果被分发到1080p以上的视频,那么就会造成播放卡顿。

为了快速解决这个问题,我们设置了多分辨率以及固定码率的阶梯转码策略。整体的实践方案是根据实际码率和分辨率的情况来分档转码策略。同时客户端也会根据用户的实时网速情况,进行档位切换。为了进一步提升转码效率,并节省成本,如右图所示,我们会根据播放量的情况进行转码。

ffd984798ea442b8e3938c20228a9786.png

图为MPEG4给到的分辨率和码率的建议设置图

如果我们只是按照这个标准去做,工作较为简单。但经过对线上数据分析发现,一些视频的播放场景是比较复杂的,切换比较多,这样可能会造成过度压缩的情况。另外一些视频的播放场景比较简单,如果按照此标准设置,就可能会造成带宽浪费,没有压缩到极致。

b449a459d3e130685334d8944e6290e5.png

我们目前面临的困难是:日增十万级内容,内容库有千万级内容,并且场景较为复杂,文件格式也比较混乱。所以我们的目标是:1、体验好。起播要快,画质要高。2、成本低。我们要选择最合适的压缩比例,让用户可以感受到最快的起播速度和最高的画质。

d3700748ea5c2ab4db1048b9d3b76dde.png

因此我们引入了自适应编码。自适应编码的目的是给不同复杂的视频挑选合适的编码方式,达到在相同画质的情况下,起到最低码率的效果。我们的自适应编码有三个特点:第一是基于Per-Segment思想,针对同一个视频划分不同场景,采用不同的编码策略;第二是我们会对原始视频进行一次基准转码,再结合一些特征,来预测“压缩比-质量分”曲线,从而成倍提升转码效率;第三是灵活参数决策,结合实际用户画像和业务特点,来选择合适的编码参数。

fb0e7a2ab4a0cac0fe19a9715285e444.png

自适应编码预测模型部分,重点分享下如何选取视频输入特征。分为四个部分:时空复杂度、码率、基准VMAF分和基准帧信息。时空复杂度代表了整个视频画面的复杂程度,一定程度上可以体现内容和场景的复杂程度;码率是影响视频质量的一个重要因素。码率越低,视频质量的分离程度越大;基准VMAF分帮助我们限定预测的曲线范围;基准帧信息辅助特征提取。

240f7e2387caac2f37de8995fdb2f562.png

接下来介绍如何解决单视频多场景问题。为了针对同一个视频去切分它的不同场景,首先会采用HSV像素变化阈值,进行场景分割。为了避免部分视频出现快速运动和光线变化带来的误差,我们会使用空间复杂度差值和I帧检测进行辅助。图中的案例即为实现场景分割的效果。

900b0ffe506dd6c6cf2eeb15a8051242.png

我们随机选取了一个线上视频。这个视频的特点是0-6s时画面相对简单,6-9是相对复杂。我们分别对其进行多场景分割以及常规压缩,可以看出,蓝色的多场景分割策略在0-6s时码率相对较低,在6-9s时相对较高。这也比较符合自适应编码的最初目标,即根据场景的复杂度、不同场景的复杂度情况来设定合理的码率。最终整体的视频码率也相对较低,而且VMAF分高于常规压缩策略,整体是符合预期的。

a5c7e9f7eb1077010d984ee65c7ddb93.png

我们来看下模型综合预测结果。图中有两条曲线,黄色的GT曲线和蓝色的预测曲线。右侧是loss图,可以看出随着迭代次数增加到万次后,loss值已经趋于0。我们可以根据基准转码的视频,把视频划为三档,分别为VMAF分差小于1、小于2、和小于3。这也是为了解决后面业务中遇到的问题。

4a82f26b5c31633c4a43993db4d78054.png

为了解决用户侧画质与流量的平衡问题,根据压缩比与VMAF分预测曲线及分档,我们自然就会联想到根据机型来制定不同的分发策略。对于高端机如XFold、XNote、X80Pro、iQOO9 Pro或新锐白领用户,他们对画质要求高且流量敏感度低,我们可以给其优先分发高档位视频,即VMAF与基准编码VMAF分差为1分,这些视频在用户侧播放表现更加流畅丝滑、观感也更好;对于中端机如S15、iQOO Neo等机型或一些小镇青年,这些用户群体对画质要求中等、流量敏感度一般,我们可以给其优先分发中档位视频;而对于千元机如Y系列机型,一般是下沉用户,比如资深蓝领或小镇中老年,这些用户往往会更在意流量使用,对画质要求不高,因此我们可以给其优先分发低档位视频。

6d9d7acdaa69badbe8d154e3c13cc4a2.png

接下来是业务场景的多样性分析。大家都知道,想要满足起播速度快、并发量高、画质也高这三个特点是非常有挑战的。

首先我们看热点推送场景,它的特点是新闻热点突发,瞬时千万级push,点击和并发量高。在没有预加载、客户端冷启动的情况下,对于起播速度要求也比较高。但这个场景下的码率是很低的,所以只对三特性中的两点有要求。

我们都知道,如果想保证起播速度快、能支持高并发量且画质最佳是一件非常难的事情,对技术难度和带宽成本来说要求都很高。

但是结合具体业务场景具体分析,似乎也没有一个场景很严苛地需要3个条件同时满足。拿热点推送场景来说,这类型的业务场景一般是大热点推送,往往是瞬时点击用户多,并发量高,客户端冷启动没有预加载的机会,因此对视频起播速度要求很高,画质方面,热点视频一般是新闻转发或编辑合成,此类视频画质要求并不高。

再者是外部引流场景,这类场景的特点是用户对视频感兴趣而被吸引到我们的app中,属于用户拉新,对于新用户来讲,画质高和起播快是必须同时具备的,对新用户的体验和留存也是最为关键的,但是拉新导流这种场景并发量不会太高。

最后是主推荐流场景,这也是我们最主要的场景,配合客户端灵活的预加载策略,我们只需要保证首条视频起播够快,剩下的视频由于已被提前加载,因此起播速度要求并不高,但是高画质和高并发是必须保证的。

a1e0c0cbbc4ac5b4883030b2c337a32a.png

对于vivo短视频3种典型的主流业务场景,我们采用不同的策略方案去处理。

从右图可以看出,码控策略会对视频的画质以及视频的码率波动产生较大的影响,对于点播VOD场景,业内常用的是CRF的码控模式,这种模式对视频的清晰度最为友好,但是通过线上实际的观察使用,我们发现,CRF倾向于在视频开头分配较大的码率,会对起播耗时产生负向的作用。在客户端冷启动无预加载起播时,这种负向效果会对业务产生较大影响。 

而热点推送场景要求起播快且瞬时并发量大,那么自适应决策优先分发低/中档视频,同时采用ABR的码控策略,以保证客户端冷启动能够秒播并节约带宽。外部引流场景要求起播快,那么我们采用ABR码控再优先分发中画质视频,保证导流的效率。最为重要的主推荐流场景,我们可以采用通用的CRF编码再优先分发高画质视频,保证用户的沉浸式浏览体验。

f434e1624b1c9db868507c3dd971c166.png

接下来看自适应编码的实验结果,通过播放vv加权,我们的视频整体平均码率与阶梯码率压缩方案相比,下降了10%,相应带来了卡顿的下降,但是VMAF分数得到了提升,这是符合预期的。因为自适应编码的目的就是在保证视频原有画质的基础上,让视频播放更流畅,带宽成本更低。

对于业务指标,短时间内是很难看到非常可观的收益,我们做实验的基本原则,就是如果业务指标没有显著负向,技术指标提升了,就可以持续扩大灰度量级。用户体验的提升是一个漫长的过程,我们的实验也持续了2个月之久,全量后,播放完成度、完播率、有效播放率也有一定的涨幅,符合预期。

-03-

提升视频清晰度

接下来我们看如何提升视频清晰度。

b227d1e47b8876cc60d3d531e878f446.png

我们对内容库里的视频做了盘点和分析,主要是低画质视频主要集中在噪声、伪影、模糊、分辨率低。

71b84e5e923fbb2fbd6e2c4012b4ba4b.png

要想做好画质增强,我们当前面临了一些挑战:

首先,相对于下采样方式已知的非盲设定,内容库里真是视频的退化是未知且多样化的,有些视频可能会叠加了多种不同程度的退化。对于这种情况,我们需深入分析视频的低质成因,设计合理的退化策略来辅助制定数据集,模拟真实的退化过程,这样训练集才更有针对性。

第二,就是细节合成和退化抑制之间难以权衡。展开来讲,一些超分算法经过长期传播能够聚合有用信息,生成更多细节输出。虽然长期传播会在视频轻度退化的情况下提高性能,合成更多细节,但严重的退化可能会通过传播被放大,从而损害输出视频的质量。因此为了平衡细节合成和退化抑制之间的权衡,我们引入了退化监督模块,在传播之前对一些较为严重的退化进行适当清理,以抑制退化被长期传播过度放大。

第三,是单一的训练模型难以覆盖多品类视频。之前有提到,我们内容库里视频品类繁多,因此有必要结合视频的场景和分类来定制化地合理设计相应的网络和损失函数,以满足不同分类视频的增强要求。

8b2f6acdc96be0e1d256998bfdc879cb.png

画质增强算法基于深度学习技术,分为四个模块:混合叠加退化、退化监督、双向空域特征传播和全局特征重建

混合叠加退化模块是针对原始视频叠加不同的退化,例如高斯噪声、泊松噪声、高斯模糊、视频压缩等,进一步模拟退化的复杂性和多样性。经过线上数据发现,不同场景的视频对于不同类型的退化敏感程度是不一样的,所以我们会辅以场景检测步骤,更真实模拟退化机制。

退化监督模块的目的是为了解决细节合成和退化抑制之间难以权衡的问题。

01b97ffd7770daa556fe6e970d9e307c.png

双向空域特征传播模块采用了前后向的双向传播,同时为了保证这些特征在时序上对齐,我们也采用了光流对齐的方案。同时对传播空域特征进行扭曲,以提升网络性能。

全局特征重建模块通过对传播特征进行卷积以及Pixel Shuffer上采样生成输出图像,以及通过对输入原始图像进行卷积和双线性插值上采样,与输出图像进行拼接,最终生成画质增强图像。

e83c5a83ea78471d6bedda02fc30b755.png

通过以上的画质增强算法,达到画质增强的效果。

30f2f10aae1aa31117774b023c246e9c.png

在上图的去模糊badcase中,我们进行添加不同模糊退化次数,以研究画质增强效果。模糊退化次数会分别添加0-3次,发现分数变高,但导致了字符形状的模糊,对整体视频呈现效果有较大影响。

8b02dae0b2648f99472a53cb92016726.png

根据上述的字幕badcase,我们使用以下的一些方式保护视频中的字幕,分为字幕保护训练和分类推理。

首先是损失函数调整。我们对存在字幕的视频,在训练的过程中加入了文本先验损失,测量的是从LR图像中提取的文本序列和从GT中提取的文本序列之间的L1范数和KL散度。

第二点是控制退化程度。对存在字幕的视频,减少模拟模糊退化的次数,以降低视频整体画质增强效果为代价,对视频的字幕进行保护。

第三点是数据集增强。我们对存在字幕的视频,在训练集中添加了大量来自不同自然场景的带有文本的视频,进行针对性的训练集加强是一种非常有效的方式。

第四点是视频字幕检测。通过字幕检测算法(预训练一个分类网络,判断视频中是否存在字幕)检测视频中是否存在字幕,再通过模型智能决策,对存在字幕的视频,选择经过上述三点针对性优化的模型进行画质增强。

b291dd0474e33f3366586489bc60b559.png

画质增强的线上实现会针对输入的低画质视频进行退化强度评测和视频场景分析,通过模型智能决策模块选择合适的增强模型和参数,再交由画质增强,以及加入画质评测步骤,最终实现线上画质增强。

cacda333a4ebc72aef714c5064a3bfe7.png

画质增强工程链路包括为前置分析、核心处理和后向分发。工程链路中主要是后向分发,前二者偏算法。最终增强处理后的视频是要面向用户的,所以视频码率、增强后的画质分是非常重要的指标。我们会结合业务特点和用户画像进行一轮自适应编码,把码率控制在合理范围内。然后是画质分析,包括系统和人工分析,最终分发给用户。

在线上有两个收集badcase的入口,一是人工评测和画质分析,二是线上提供的用户反馈入口,以不断补充训练集,迭代优化模型,使用户更满意。

856188bde99ce8137036dca1b480d73e.png

我们来看画质增强的实验收益。核心QoS指标有高清占比、平均画质分和卡顿率,均有较大幅度收益。核心QoE中的几个指标包括有效播放率、播放完成率和完播度也有一定增长。

-04-

总结与展望

接下来是总结与展望。

854b1bdc8bd8c921430d0a67f9a0cc62.png

总结一下,我们通过问题驱动、A/B实验和科学求证等手段进行优化方案制定以持续提升用户体验。

在打磨流畅度方面,我们围绕低成本和高体验,设计了场景自适应编码,目的是为了根据不同的场景分割,通过降低码率进一步优化成本,再结合实际业务特性和用户需求,做编码决策。

在提升清晰度方面,我们是通过退化监督、画质增强和画质评测来进行实现的。

f3b589d1842eff718f3e76a2ecc90149.png

关于未来的展望,我们希望探索在折叠屏的场景下播放体验升级,以及端云协同下的画质增强。

我的分享就到这里,谢谢大家。


d9476ad8f5bfe0a1ccd3d95815e1693a.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python接口自动化测试之unittest自动化测试框架基本使用

目录 unittest简单介绍 unittest基础使用 unittest.Testcase setUp tearDown setUpClass tearDownClass 测试用例 unittest.main() unitteest提供的各种断言方式 unittest测试用例跳过执行 跳过执行测试用例共有四种写法 self.skipTest(reason) 跳过执行测试用例注…

eBay如何实现多账号登录以及防关联?

随着跨境电商的快速发展,亚马逊,eBay已成为人们熟知的电商平台。“不把鸡蛋放在同一个篮子里”,多账号运营店铺有许多显而易见的好处。 但由于亚马逊平台封号状况愈演愈烈,不少卖家把战线转移到了eBay平台。随着入驻人数的增加&a…

Solidity拓展:数学运算过程中数据长度溢出的问题

在数学运算过程中假如超过了长度则值会变成该类型的最小值,如果小于了该长度则变成最大值 数据上溢 uint8 numA 255; numA;uint8的定义域为[0,255],现在numA已经到顶了,numA会使num变成0(由于256已经超过定义域,它会越过256&…

Redis事务及网络处理

一 Redis事务 redis开启事务后,会把接下来的所有命令缓存到一个单独的队列中,在提交事务时,使这些命令不可被分割的一起执行完成。 如果使用了watch命令监视某一个key,如果在开启事务之后,提交事务之前,有…

FreeRTOS:队列

目录 前言一、队列简介1.1数据存储1.2多任务访问1.3出队阻塞1.4入队阻塞1.5队列操作过程图示1.5.1创建队列1.5.2向队列发送第一个消息1.5.3向队列发送第二个消息1.5.4从队列中读取消息 二、队列结构体三、队列创建3.1创建函数3.2函数xQueueCreateStatic()3.3函数xQueueCreate()…

Spring Security入门

1. Spring Security 简介 Spring Security 是一个高度可定制的身份验证和访问控制框架,它基于 Spring 框架,并可与 Spring 全家桶无缝集成。该框架可以精确控制用户对应用程序的访问,控制用户的角色和权限等。 Spring Security 最早是由 Be…

又名管道和无名管道

一、进程间通信(IPC,InterProcess Communication) 概念:就是进程和进程之间交换信息。 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共…

JMeter性能测试:JMeter多用户并发模拟及压测结果分析

目录 JMeter设置 JMeter线程组 JMeter压测实例 View Results Tree Aggregate Report 命令行方式执行压测 jtl文件解析 JMeter多用户并发模拟 JMeter设置 多用户并发数的多少与计算机内存有关,设置 jmeter.bat (Windows) 或者 jmeter.sh (Linux):…

Faster R-CNN网络架构详解和TensorFlow Hub实现(附源码)

文章目录 一、RPN网络1. RPN网络简介2. backbone网络简介 二、Faster R-CNN网络架构1. Faster R-CNN网络简介2. 基于TensorFlow Hub实现Faster R-CNN 前言:Faster R-CNN的简介见 上一篇文章 一、RPN网络 1. RPN网络简介 RPN网络全称Region Proposal Network&#…

vscode配置flutter开发环境,不需要安装第三方安卓模拟器

文章目录 1.获取Flutter SDK2.配置Android环境3. 在Android Studio配置Android设备3.1 进入Device Manager配置安卓设备3.2 创建安卓虚拟机3.3 选择x86 镜像3.4 配置硬件加速3.5 启动模拟器 4.配置vscode1.安装 Flutter 和 Dart 插件 5. 新建flutter程序创建应用 6.启动程序1.选…

nodejs+vue社区母婴幼儿用品商城系统

本系统实现了管理员对用户、商品信息、交流论坛、订单信息的管理,是为了满足用户更深层次的需求。除了上述优势外,本系统还具有:查询迅速,搜索资料方便,可靠性强等等在如今这个高速发展的时代,效率决定着你…

day10 - 使用canny算子进行人像勾勒

本期主要介绍canny算子,了解canny算子的流程以及各个流程的原理和实现。 ​ 完成本期内容,你可以: 了解canny算子的流程和应用 若要运行案例代码,你需要有: 操作系统:Ubuntu 16 以上 或者 Windows10 工…

第五篇、基于Arduino uno,获取超声波(HC04)传感器的距离数据——结果导向

0、结果 说明:先来看看串口调试助手显示的结果,显示的是一个距离值,如果是你想要的,可以接着往下看。 1、外观 说明:虽然超声波传感器形态各异,但是原理和代码都是适用的。 2、连线 说明:只…

秒杀系统常见问题—如何避免库存超卖?

大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 先看问题 首先上一串代码 …

Vue.js 比较重要知识点总结一

概述 谈一谈你对 Vue.js 的响应式数据的理解Vue3 出现解决了什么问题?它有哪些优势?Vue3 新特性有哪些vue2 和 vue3 的响应式有什么区别? 谈一谈你对 Vue.js 的响应式数据的理解 Vue 2.x 对象类型:通过 object.defineProperty(…

实时频谱-3.1实时频谱分析仪测量

RSA 测量类型 泰克RSA 可以在频域、时域、调制域和统计域中工作。 频域测量 基本频域测量是实时 RF 数字荧光显示(DPX)频谱显示测量、频谱显示测量和频谱图显示测量功能。 DPX 频谱 DPX 频谱测量对 RSA 发现其它分析仪漏掉的难检信号的能力至关重要。在所有泰克 RSA 中&am…

SAP-MM-内向外向交货单

1、内向&外向交货单概念 外向交货(outbound delivery)是用在客户与企业之间的交货单,而内向交货(inbound delivery)则是用在供应商与企业之间的交货单;换言之,外向交货多用于SD 模块&#…

PriorityQueue优先级队列

前言 优先级队列就是在堆的基础上进行改造,那么什么是堆,又什么是优先级队列呢? 我们一起来看看吧! 目录 前言 一、堆 (一)堆的创建 (二)堆的插入 (三)堆…

群晖DS920 video station使用教程

群晖DS920 video station使用教程 为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客http://www.huerpu.cc:7000 安装video station在群晖套件里点一下就好,这里不说了。 一、添加视频库 可以添加电视剧、电视节目等类型。 比如我在国产剧这个视频…

uniapp滚动加载 下拉刷新

前言 在日常开发中,滚动加载和下拉刷新是非常常见的功能,页面数据过多时,需要滚动加载优化性能,本篇技术分享博客将介绍如何在uniapp中实现滚动加载和下拉刷新。 预览 滚动加载 下拉刷新 一、滚动加载 滚动加载指的是当用户滑…