短视频近两年一直处于流量的风口,各大平台纷纷涉足。内容丰富、体验好是短视频火爆的原因,这与其背后的技术有密不可分的关联。存储、带宽、编解码等技术,每年都在更新迭代; 5G 的普及也对短视频技术的各种性能问题提出了新的挑战;AI 更不用说,从特效到内容的分发、推荐,都在不断助力短视频的发展。
从生产到播放环节,短视频 App 的开发者如何优化用户体验?如何解决码率和清晰度这两个看似互斥的问题?短视频技术未来的发展趋势有哪些?QCon 全球软件开发大会(广州站)邀请到了阿里 UC 事业部的无线开发专家王文槿,来聊一聊短视频背后的黑科技。
莲叔:视频技术是一个持续发展的领域,无论是行业编解码标准,还是终端围绕解码播放体验的技术,亦或是云端围绕存储、带宽、转码的技术,每年都在快速地演进。但万变不离其宗,技术演进方向的核心还是在围绕业务形态的发展,不同的业务形态对技术有不同的诉求。例如,优酷、爱奇艺这样的长视频站点关注的是尽可能减少播放中的卡顿,降低用户 Seek 的耗时;直播关注的是如何保证实时性;而短视频关注的则更多是快开、流畅等性能问题。当然有一些问题是所有业务都可能面临的,比如画质、清晰度,以及视频内容背后的高额带宽等问题。
伴随着近些年移动端短视频类应用的发展,视频技术也衍生出来一系列新的挑战。从端的视角来看,比如,视频如何从“快开”做到“直出”,即用户的感受不是加载很快,而是完全不需要加载。这就对播放器整个开播链路提出了很高的要求。再比如,众所周知,视频清晰度越高,码率就越高,消耗的带宽也就越多,如何在保证清晰度水平不打折扣的前提下,持续优化带宽成本,也是一个非常值得研究的命题。
莲叔:正如我刚才所说,快开一直是短视频业务的核心。用户的选择具有偏随机性和探索性,对于加载等待的容忍度低。提升视频加载速度的常见手段就是预加载,即在用户播放之前,预先下载好一部分数据,这样在视频开播的时候就不需要等待网络请求。
这里面有两个挑战,一个是预加载需要下载多少数据才算够呢?下载多了,浪费带宽;下载少了,不够拿来开播,也就无法满足快开的要求。拿 MP4 来说,要解码出首帧,首先需要解析完 moov(可以理解为 header),而 moov 的大小则和视频的长度相关。所以需要针对不同的视频计算出不同的预加载大小。第二个是即便视频数据已经预先下载完毕,但在开播前播放器的创建,外壳 view 的布局,内核中的 MP4 解封装、解码、渲染仍然会导致有数百毫秒级别的耗时,在全屏沉浸式的场景中仍然能被用户感知到加载过程。为了实现极致的快开体验,我们实现了多实例的播放器,在预加载的基础上更极致地缩减开播耗时,实现了直出的开播体验。一般情况下,卡顿和视频清晰度是互斥的,清晰度越高,视频码率越高,用户越容易遇到缓冲卡顿。为了一个指标牺牲另一个指标是不被接受的。我们的视频内容在下发前会在云端预先转码成多档清晰度,并在端的播放器实现了一套在播放过程中基于用户的网络类型、平均网速、视频时长等指标动态升级或降级清晰度的策略,保证了绝大多数用户都能观看到匹配自己网络条件、最高清晰度的视频,在提升整体视频质量的同时守住了卡顿率。
莲叔:就我们团队的经验来聊一聊,要说用户喜欢的,首当其冲就是美颜功能,其次是和一些热门活动相关的有趣贴纸,这些贴纸一来可以降低用户的拍摄门槛,二来也能一定程度保证用户拍摄内容的基本消费价值。技术层面,性能是视频生产要关注的核心指标。首先是拍摄过程,因为整个拍摄过程会同时运行大量的计算,比如摄像头数据、贴纸的渲染、人脸姿态识别以及美颜瘦脸相关的计算,再加上录制写盘的 I/O 操作,其中任何一个环节耗时都会导致最终的录制 FPS 变低,让用户感觉到卡顿。我们通过优化实现纹理异步队列、shader 算法优化、相机曝光补偿参数调优等方式,实现了在低端机器上也能有非常流畅的拍摄体验。另外,视频编解码效率的问题,这个在 Android 上尤为明显,视频裁剪和特效合成在最初的软编下性能非常令人着急,切换为硬编之后合成速度提升了 70%, 剪辑速度提升了 50%。
莲叔:美颜依赖于人脸特征点的标定,其相关技术的选择有两种,一种是直接购买商业 SDK,比如商汤;一种是自研。随着深度学习的发展,自研的成本相比以前已经下降很多,目前主流的方法有 Faster RCNN 以及 MTCNN,两种方式都有比较多开源的实现可以参考,唯一需要做的工作可能就是移植到移动端的推理框架,如 NCNN。当然,AI 对于短视频的赋能并不仅限于人脸标定,被用于推荐自然不用说,其他比如通过 CNN 的方式来做视频画质的打分,用于区分一些高码率但低画质的“伪高清”视频;另一个比较常见的应用场景就是 ROI 编码。一个视频在下发到手机端之前,都会经过转码,之前说过码率和清晰度是一个互斥的关系,要在保证清晰度的前提下降低码率,其中一个可行的方式就是 ROI 编码,通过 AI 的手段定位出视频的 ROI 区域(可以理解为用户核心关注的区域),ROI 区域(比如游戏视频中,团战的区域)用较高的码率来编码,非 ROI 区域(比如游戏视频中的背景区域)可以适当降低码率,这样就能实现在不降低用户主观感受的前提下降低视频的平均码率。
莲叔:这个问题比较大,这里我就说一下我个人的看法,从围绕视频的基础技术到围绕短视频的产品技术两个层面来看。基础技术的层面,首先是视频编解码技术,可见的新编解码标准主要就是 H.266,但目前距离影响产业还需要时间。相反,更多的技术创新将会围绕如何基于现有编解码标准 (H.264/H.265) 定制创新编码器,解决码率和画质这两个互斥的命题:如 ROI 编码,窄带高清等应用未来会更普及。另外,5G 的普及意味着超大的用户带宽和更高的速率,除了能够显而易见地支持更高清晰度的视频外,对于成本、编解码性能、渲染性能也都提出了新的挑战。
短视频的产品技术,一定是跟着业务形态走的。一个明显的趋势是,视频处理链路前端化,短视频近年最明显的业务趋势就是视频生产从 PGC 逐步覆盖到 UGC,越来越多的用户通过手机拍摄、编辑、上传视频。过去手机端的视频技术框架只能比较单一,只要搞定播放即可,即完成下载、解码、渲染等几个模块就万事大吉了。但是现在视频生产也在手机端了,这就要求在播放的基础上,还需要完成视频数据的采集、特效处理、编码、上传等环节,这就要求曾经围绕工作站和 PC 构建的视频编辑转码流程需要改造为适合在手机端运行的流程,充分利用手机平台的特性,比如利用手机的 GPU 来做硬编码等。第二个趋势就是,AI 技术将继续深刻影响整个短视频的技术链路,其中比较确定的两点是视频增强与修复以及视频内容理解,视频增强与修复是利用人眼视觉特征以及超分辨率等技术对模糊低质视频进行处理,提升画质。而视频内容理解则是自动化地从视频内容中提取结构化信息,辅助大数据推荐做更精准的下发。
本质来说,视频技术的发展从来都是围绕用户体验和业务形态,短视频也不例外,当然,有价值的挑战也非常多。
我将在 QCon 全球软件开发大会(广州站)分享话题:「动静相宜—使用 JS 和 C++ 实现无线端高性能、强动态的视频 AR 拍摄框架」,届时将进一步分享如何使用 C++ 和 JS 实现了高性能、跨平台的渲染引擎以及一套能力完备的 AR 特效贴纸开发的 DSL,感兴趣的同学可以重点关注下。扫描下图二维码或点击阅读原文,提前 get 干货信息!有任何问题请联系小助手鱼丸,电话:13269078023 (微信同)。
莲叔,阿里 UC 事业部无线开发专家,真名王文槿,QCon 全球软件开发大会(广州站)出品人和讲师,莲叔是 Swift 社区给予的亲切名号。目前负责 UC 短视频的无线端技术,主要包括视频拍摄 / 播放组件,贴纸美颜系统等方面的技术。曾经创业四年,期间主要使用 Swift 来快速构建移动应用,以及使用 Python 后端全家桶(redis、mongodb、zmq 等)来构建后台服务。
编程语言主要关注 Swift 和 JS,3 年前加入 SwiftGG 翻译组后一直致力于 Swift 语言的布道和最佳实践的讨论。其中对利用 Swift 的函数式特性改进工程实践的方面以及 Swift 结合机器学习的应用研究较多,JS 则更多是关注如何与原生结合来提升灵活性。
1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“InfoQ”微信公众号,文章版权归InfoQ公众号所有。