9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

百度袁华良:百度开放云直播产品架构和关键技术

  • 2016-07-12
  • 本文字数:3173 字

    阅读完需:约 10 分钟

伴随着直播行业的迅猛发展和各种新特性的增加,直播再也不是仅仅满足于主播单向传播的模式,它的互动性和实时性更强。这也为技术上带来了新的挑战,越来越多的开发者开始关注如何快速搭建一个完整的直播系统。

在 7 月 2 号由百度开发者中心、百度开放云联合举办的第 64 期“百度开放云移动游戏和直播技术解读”沙龙上,来自百度开放云数字媒体解决方案架构师袁华良,介绍了百度直播产品 LSS 背后的技术,以及如何利用 LSS 快速搭建直播系统。

演讲者简介:

袁华良,百度开放云数字媒体解决方案架构师,加入百度前,担任华为公司云计算解决方案架构师,专注于交通、教育、医疗等行业云计算解决方案。目前主要负责百度开放云数字媒体解决方案的研究与设计工作,提供端到端的一系列解决方案。

一、背景:网红经济给移动直播带来的挑战

从早期的美女秀场直播,到电竞直播,再到今天几乎全民参与的泛娱乐直播,人们猎奇斗艳的精神需求,网络带宽和智能设备的快速普及,资本大鳄和 BAT 等巨头的竞相投入,让直播以迅雷不及掩耳之势成功跻身移动互联网风口浪尖。

泛娱乐直播被赋予了更多娱乐和社交的属性,只要你有一部能上网的手机,就可以随时随地发起或观看直播,而且今天的直播也不再满足于主播单向传播的模式,互动性和实时性更强,也为技术上带来了新的挑战。

  • 实时互动要求直播内容从主播端到观看端做到超低时延,目前业内最高水平可将时延控制在 1~3s。
  • 稳定流畅是评估直播性能的核心技术指标,但多种网络形式及带宽环境(WiFi,2G/3G/4G 等),以及不同的直播生产及消费工具的并存,给直播的稳定流畅性带来了诸多挑战。
  • 视频质量和带宽损耗一般成正比,即视频质量越高,带宽损耗越大。如何在最低的带宽损耗下获得最高的视频质量,就成为直播平台和云计算服务商追求的目标。同时,移动端有限的计算资源也给视频压缩的有效性带来一定的考验。
  • 美颜处理已成为全民直播的必备功能。人脸检测、皮肤检测、皮肤光滑等一系列计算复杂的像素处理过程,对实时性也是很大的挑战。

伴随着直播行业的迅猛发展,各大云服务商也纷纷推出了自己的直播云服务,而百度开放云早在去年 9 月就发布了一站式的视频直播解决方案——音视频直播 LSS。

二、百度直播产品架构

针对移动直播所带来的挑战,百度进行了一系列的探索,推出了直播产品 LSS。LSS 是一个直播 PaaS 平台, 提供直播从采集端到服务端,最后再到播放端的一站式全套 SDK。

LSS 的架构图如下图所示,前端可以通过手机、PC 端进行采集,推到离它最近的 CDN 节点,然后经过上传加速,传至云平台,进行一系列处理,再通过合并,还原到离用户最近的 CDN 节点中,发送到播放器端。

三、六大技术点

LSS 的关键技术点可以总结为:首屏秒开、上传下载加速、多码率满足复杂环境需求、分场景实时转码、全流程监控、智能多媒体处理六点。

首屏秒开

首屏秒开的原理:GOP Cache。

直播的数据,其实是一组图片,包括 I 帧、P 帧、B 帧,当用户第一次观看的时候,会寻找 I 帧,而播放器会到服务器寻找到最近的 I 帧反馈给用户。因此,GOP Cache 增加了端到端延迟,因为它必须要拿到最近的 I 帧。

那么怎么解决这个问题呢?难道我要牺牲 GOP Cache 长度来降低延时吗?通过以下表格的数据可以看到,GOP Cache 的长度越长,画面质量越好,难道说就不能兼得吗?答案当然是 NO。

那我们是怎么做的呢?如下图所示,我们会在第一个 I 帧接入的时候做处理,这样既满足画面质量又满足首屏秒开的要求。

上传下载加速

提到上传下载加速,不得不提的是 CDN。CDN 的数量以及采用的调度算法都是决定分发效果的重要因素。

百度自建的 CDN 节点接入了市面上几乎所有的运营商,有一万多台的缓存服务器,同时还融合了第三方国外的 CDN 节点。

很多人有一个误解,认为 CDN 节点的数量越多,质量就越好。其实,影响其质量的,不仅仅是 CDN 节点的数量,还有 CDN 节点质量及其采用的调度算法,否则无法达到良好的分发效果。视频直播 LSS 所采用的 CDN 节点调度算法,和百度搜索的算法是相同的,可以达到毫秒级响应。

如下图所示,详细来说,我们第一个节点是推流到离用户最近的 CDN 节点,推流到 CDN 结点之后,会通过上传加速到北京和广州的两个集群,然后推给用户播放。这里的处理有一个亮点:传统的 RTMP 使用 TCP 时,三步握手等都会导致启动非常慢。比如 AIMD 在网络情况不好的时候,为了避免拥塞,在遇到连续丢包时,TCP 的拥塞窗口就会呈现指数下降,传输数据的吞吐率就会显著下降,那么直播的画面就会卡顿。所以,我们采用了百度自有的私有协议,在 CDN 的边缘节点与原站之间加速上传下载,可以将传输的速率增大五到十倍,去保证直播延时在三秒之内。

多码率

最终的观众所处的网络情况是非常复杂的,有可能是 WiFi,有可能 4G、3G、甚至 2G,那么怎么满足多方需求呢?

如下图所示,我们采用的是推流的最佳配制。主播一路推流, 可同时输出多路直播流, 可通过转码模板定制每路输出的音视频处理细节, 最多支持 5 路. 未来,我们还会支持主播根据当前网络环境推荐最佳推流配置。

分场景的实时转码

场景的分类是非常细致的,包括户外视频、电影、电视剧、动画、人像等,它们有什么区别呢?
户外视频,是由摄像机拍摄采集。摄像机实际上是一个低通滤波器,图像内物体边界比较平滑,而游戏、教育更多的是电脑合成的视频,这种画面的内会包含非常锐化的边界。

对于人像,我们需要对肤色进行调整,在不同场景下的编转码的参数也应该进行调整。

比如说我可能在户外视频、电影、电视剧我推荐的 GOP length 是 5 秒,但是在在线教育类直播中,由于使用相对静止的课件教学,GOP 的长度可以更长。再比如说下图的 Deblocking filter(去块效应滤波器),在户外直播的情况下,因为边界不是非常锐化,那么 Deblocking filter 的强度可以相对较大,来去除分块边界效应。而如果在游戏直播画面,采用跟户外相同强度的去块效应滤波器的话,那么边界会模糊,用户观看的视觉效果也会受到影响。

如下图所示,这是一个真实的截图。一个游戏场景,通过调整与优化编转码的策略,峰值信噪比提高 1.5dB 从效果上看,清晰度有明显提升的。

全流程的监控

监控的目的保证上传和下载的流畅性。传统的监控系统监控的数值可能是时间、标准等。对于视片流的监控,则要针对帧率、码率、包括首帧时间等方面做监控。

监控上传流畅性,我们有一套算法,我们会对整个的上传的流畅性进行打分。如果能平滑到 30 帧每秒的话,可以打 100 分,以此类推,我们可以监控与评估线上每条流的流畅性。

智能多媒体处理

智能多媒体处理在直播中的应用是比较广泛的,通过智能的多媒体增加直播话题的趣味性,提供美颜和直播道具。百度的深度学习研究院比较擅长机械学习、人脸识别、语音识别等等。他们可以帮助我们识别到人的几个特征点,包括鼻子、眼睛、嘴巴等。LSS 和他们进行了深度结合,通过识别,再添加上各种各样的道具、模型,就形成了下图中的画面。

智能多媒体处理另外一个用途是黄反检测。如何保证平台不会涉及到色情的问题呢?色情图片,例如露点、低俗的图片,和一些正常图片,如婴儿的裸体、艺术裸体图片的差别是比较小的。怎么提高准确性,保证用户的内容不会被误判为色情内容呢?

百度通过贴吧、搜索、图库、视频等产品,存储了大量的百万级的图片,通过人工智能深度学习算法不断地训练、优化,形成了黄反检测的机制,用于视频直播方面,可以保证不会误判。

如何提高产品流量和曝光度

LSS 还与百度相关产品进行了生态的结合,来提高流量及品牌曝光度。包括百度搜索、百度贴吧、百度推广等。百度贴吧有用户群人物画像,可以精准的引流;百度推广,可以提供视频直播平台的推广;百度搜索,可以进行线上的实时的直播处理,例如,华为 P9 发布会当天,如果用户在线上搜索其相关内容,就可以看到它的直播。

百度云计算战略发布会】将于 7 月 13 日拉开帷幕,李彦宏将亲自揭秘百度在云计算领域的布局版图。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2016-07-12 02:003048
用户头像

发布了 28 篇内容, 共 16.3 次阅读, 收获喜欢 29 次。

关注

评论

发布
暂无评论
发现更多内容

手撕二分查找及其变种,就是干!

我是程序员小贱

想要成功,你需要的是目标与动机,目标是你的助攻,动机是你的爱人。

叶小鍵

成功学 心理学 海蒂·格兰特·霍尔沃森

Dubbo2.7试用

心平气和

dubbo 灰度 hessian

Flexible Box Layout 原理剖析

double U

CSS 大前端

中本聪原始比特币论文解读:点对点的电子现金系统

韩超

比特币 区块链

源码分析 | 咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?

小傅哥

Java 字节码插桩 asm bytebuddy

手把手教你从零开始使用python编写大型冒险类游戏01之游戏介绍

Geek_8dbdc1

记一次腾讯云(西安)后台开发面试经历

z小赵

面试 分布式 高并发

MySQL 架构与历史

多选参数

MySQL 数据库 MySQL优化

Serverless:为我们到底带来了什么

刘宇

Serverless 云原生

架构师训练营 - 第十周作业

坂田吴奇隆

非科班学习编程一定得知道这几个网站!

我是程序员小贱

契约测试:解决微服务测试的问题

陈磊@Criss

Python中的单下划线和双下划线使用场景

王坤祥

Python Python基础知识 Python基础

抽象类、接口、Trait

书旅

接口 面向对象 抽象 对象 Trait

国内与国外区块链关键技术现状及差异

CECBC

区块链 应用技术

知道时间轮算法吗?在Netty和Kafka中如何应用的?为什么不用Timer、延时线程池?

yes

kafka Netty Timer ScheduledThreadPool 时间轮

微博基于 Flink 的机器学习实践

Apache Flink

flink

Flink 中的应用部署:当前状态与新应用模式

Apache Flink

flink

数据治理第一步,摆脱“手工作坊”

KAMI

大数据 数据治理 数据开发 数据平台

Golang+Flutter实现聊天APP

Alber

IM Go 语言

Github被攻击。我的GitPage博客也挂了,紧急修复之路,也教会你搭建 Jekyll 博客!

小傅哥

Java GitHub 小傅哥 博客

一文了解对称加密与非对称加密

我是程序员小贱

安全

为什么修改hosts不立即生效?--浏览器DNS缓存机制分析

陈磊@Criss

MySQL-技术专题-共享锁与排他锁

洛神灬殇

MySQL-技术专题-InnoDB存储引擎

洛神灬殇

区块链一新基建 新动能 新发展大会将在南昌举办

CECBC

新基建 区块链技术

用故事去理解「文件 I/O」

小林coding

操作系统 异步 文件系统 同步 非阻塞网络I/O

Git命令可视化展示,代码管理再也不愁了,建议收藏!

诸葛小猿

git git merge git rebase git fetch git reset

Go: Goroutine, 系统线程和CPU管理

陈思敏捷

mpg Go 语言

Git设置分支保护实现CodeReview卡点

陈磊@Criss

  • 扫码添加小助手
    领取最新资料包
百度袁华良:百度开放云直播产品架构和关键技术_移动_韩婷_InfoQ精选文章