为什么小米连不到wifi

> 网心科技李浩:如何快速搭建超火爆的直播系统
网心科技李浩:如何快速搭建超火爆的直播系统
在国内错综复杂的网络情况下,如何构建一个高并发、稳定、低延时的直播系统?在12月21日,网心科技直播技术负责人李浩做客CSDN网络公开课,为数百名技术人员现场解答关于直播系统搭建方面的一系列问题。李浩总结,要搭建一个能够为用户稳定提供优秀观看体验的直播系统,一定要注意三大关键指标,即卡顿、延时和首屏打开速度。而针对目前如火如荼的直播市场,李浩认为,无论内容和运营手段如何花样翻新,如果没有核心技术作为保障,不能保证这三大指标的合格,直播平台依然很难取得市场竞争的胜利。以下为李浩的课程内容整理:一.不同直播业态对应不同的技术要求直播平台细分为各种不同的业态。目前主流的几种业态,分别是秀场类、游戏类、生活类这三种直播。此外事件类、互动类、教育类、监控类直播这几种业态也较为常见。尽管这些业态里基本上都有10亿级独角兽公司产生,但每一种业态对系统的核心要求却是完全不一样的:秀场和生活类直播:主播和观众网络环境相对更复杂,因此核心体验是流畅度,可以牺牲码率来提高流畅度,自适应码率、帧率等都是常见的优化手段;游戏类直播:为了保证体验效果,要求的是高清晰度和高流畅度,端到端延时可以做出一些让步来换取压缩率更高的编码参数,容纳更高帧率和清晰度的内容;事件类直播:核心要求是稳定性,包括高可靠上行;互动类直播:核心要求则是端到端的延时,为此网络波动时丢弃视频帧等是可以接受的。因此需要注意不同的业务形态,后端所用的技术是完全不一样的。如互动类的直播的超低延时方案,4K和VR这种对用户带宽满载利用率的直播场景,通用CDN技术可能无法做到覆盖。尽管如此,李浩还是认为现在搭建一个直播系统要远比之前来的容易,因为大量工作已经被CDN和终端服务商帮忙解决了,需要自己动手的地方少了很多。二.直播系统的核心业务需求那么搭建直播系统时,需要重点关注的核心功能都有哪些?李浩对此一一进行了解析。A.采集和播放 目前视频的采集已经相对容易许多,因为手机功能相对完整,不像PC时代需要面对不同的摄像头驱动,所以需要核心处理的技术点是网络适配。技术人员需要根据自身的网络条件去调整编码参数,以及多协议的拉流、软硬件的解码、多分辨率追帧等基础需求。如果在此基础之上,还能解决好对缓存的管理、数据同步等高端需求的话,那直播的整体播放体验就比较流畅了。B.分发和媒体处理 分发和媒体处理的工作,现在除了“特别特别大”的平台,一般都直接由CDN服务商来解决了。因为目前CDN服务已比较完善,跟直播匹配的一些功能,如上下线通知、协议转换、弱网传输,以及像转码、水印、增益、截图、录制这样的功能都已提供。C.功能系统 需要直播平台自身核心打造的,是功能系统。除去账户系统,还有如人气、道具、打赏、支付、抽奖等功能系统都是必备的。特别是弹幕功能,是对直播平台最核心的技术挑战。主要是弹幕的发送量会很大,直播在线人数动辄几十万,弹幕的发送频率又很高,1、2秒就会发一条消息,巨大的广播量对系统压力很大。所以一般直播平台都会采取分区的方式来加以解决,而如何分区,又在什么情况下合并分区,以维持合适的人气,这里面还是有很多逻辑上的问题是要去解决的。D.运营系统 运营系统也非常核心。视频的黄反审查,聊天内容的审核,还有一键断播、数据统计、质量监控这些都必不可少,因为一要面对内容监管审查的压力,其次是要能监测到全国不同区域的质量效果。不过李浩指出,即便是把上述功能都实现了,也只能说搭建出一个基本可以跑的一个直播产品而已,需要提升的地方还很多。三.直播的关键性技术知识接下来,李浩对直播的一些关键性知识进行了详细的解释:A.视频帧视频帧其实就是一个一个的视频单元,视频单元分成三种,分别叫I、P、B帧。I帧可以简单的理解为就是一张图片,体积也会比较大,B帧和P帧它是一个参考帧。对一个直播流来说,最核心的帧是I帧,由I帧引申出来的就叫GOP。通常在直播上看到的延时,其实是内部直播流缓存延时,叫GOP
cache。对于一个CDN系统来说,传输延时只是延时的一小部分,还有一部分是产生在用户流里面的GOP
cache。所以直播平台如果要降低延时,首先建议调一下上行流的编码参数,调低I帧间隔。B.码率码率也分三种,CBR、VBR、ABR。CBR是固定码率,可用于保证网络专线带宽是可控的场景。VBR是可变码率,它不好的地方在于,画面变化剧烈,它的码率跳变会特别大。所以在直播的实际应用中,ABR用的最多,即在质量和码率上做一个均分,控制一个平均值。C.编码、封装、传输封装的功能相当于一个桶,它可以把不同编码格式的音视频装在一起,好的封装格式是能兼容很多种的音视频的编码格式的。编码的功能是把原始数据压缩的更小,像视频编码这种原始信息量大的,目前的编码方式已经把信息冗余度做的很低,如果出现丢帧,会导致视频的花屏。李浩提醒直播技术人员,一定要了解这些基础知识,否则你很难理解直播的延迟产生在哪,以及为什么会发生卡顿。四.直播的系统架构对一个直播平台来说,主播就相当于是一个数据源,各地不同的观众相当于是订阅者,其实就是生产者和订阅者模型。怎么样把这个生产者生产的信息,比较高效的送到订阅者手上,其实就是一个应用层的组播结构,需要做很多应用层层面的一些考量,比如中转跳数、网络距离、中转带宽成本和汇聚效果等。推流模式就是主播直接把流推到CDN节点,CDN节点经过自己的网页加速,分发到真正观看的用户。直播所有的功能,像转码水印,转存截图、转点播,所有的这种功能,包括数据统计对外提供一些API,都会在CDN里面做。一家直播厂商可能会选用多家CDN,或者是有自建的CDN。每个CDN最核心的一点,是怎么在国内这种错综复杂这个网络环境内,去组一张分发比较快速、容灾性能比较强,然后相对节省成本的一张虚拟网。所以在整个CDN里面,最核心的就是传输组网,其次是在于功能系统的健壮。一个CDN、一个直播系统做的好坏,成败其实一部分在于传输的顺畅,另外一部分在于你是否稳健。五.直播的三大核心指标虽然直播对技术的要求错综复杂,但李浩还是表示,直播的关键的指标其实只有三个:卡顿、延时、首屏打开速度。做好这三大关键指标,直播的用户体验就有了保证。A.卡顿卡顿的解决与延时则在一定程度上是矛盾的。卡顿产生的原因有三种,第一是主播上行卡顿,所有的观众都会卡;第二是CDN内部网络带来的卡顿,例如中转网络产生了波动,节点负载没控制好,或者是一些组网策略出问题,第三就是被调度和终端网络问题,好比DSN错配、或者最后一跳网络抖动。要有监控手动能发现主要问题点针对性处理。B.延时除了前面说的视频GOP缓存,其次延迟主要来自累积,除了做跳帧等逻辑以外,还可以通过改变传输协议的方法来提高,对于延时控制要求高的直播业务,如互动类直播,根本不会采用TCP这样的协议来做传输,而会选择UDP协议。因为对于这种直播来说,视频的所有数据都可以放弃,但要优先保证音频的即时性。C.首屏打开速度首屏打开则考验的是直播CDN的组网方式、网络覆盖率和传输协议的优化程度。李浩特别提醒说,今年对首屏打开速度的要求越来越高,秒开已经是去年的指标要求,今年要细化到几百毫秒,做不到这个级别就没有竞争优势。在这一点上,选择一个靠谱的CDN就尤为重要了。李浩简介:李浩,网心科技视频直播技术负责人,2015年加入网心科技,负责星域CDN直播平台的构建,并获得多项创新专利。曾任腾讯高级工程师,负责腾讯云的游戏和移动的技术解决方案研发,期间主导过腾讯大数据多维实时分析、信鸽移动推送、腾讯云移动加速等项目。
{{news.author}}
{{news.timeFormat}}
正在加载......你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。& & & & 如今,现代互联网软件应用已经成为一项需要很多人一起构建与维护的庞大工程。 我们是怎么构建复杂软件系统的呢?&
& & & & 一切源于对人类生存处境和现实问题的洞察和思考。 计算机溯源于大量科学计算的需求。起初, 通过硬件电路直接实现计算;紧随后,软件的编写替代硬件开始成为商业应用的主要解决方案;接着, 通信成为重要驱动力; 紧接着, 万维网与分享成为主流, 搜索引擎助力; &然后, 智能手机催生了移动时代的来临, 进而引起云计算和大数据的技术变革; 在云计算和大数据之上,构建智能精准的业务。 &
& & & &软件技术的重要里程碑
& & & &可编程: & 使得硬件成为&百变天后&, 通过程序可变幻出多样的功能;&
& & & &编译器: & 使得程序员可以使用高级语言和接近自然语言的领域语言来表达现实世界;
& & & &结构与算法: &计算世界的基石, 现实问题的求解方案通常表达成高效的结构与算法;
& & & &操作系统: &计算资源分配与调度的核心, 使应用可以更加专注于任务层面;
& & & &数据库: & 用户企业数据的有序存储、组织、统计; 几乎所有现代应用都依赖于数据库;
& & & &开发库: & 使得日常任务及成熟方案可以通过几行代码反复使用,站在巨人的肩膀上,极大地提升了软件开发的效率;
& & & &应用框架: &使得构建现代应用可以直接从 40% 起步,甚至从 80% 起步;
& & & &中间件: & 使得基础技术组件化和服务化,为大规模系统的构建提供了强大的基础设施;
& & & &运维独立: &当今大规模软件世界得以持久稳定运行的重要护航力量;
   & 多样强大的开发工具,极大地延展了人的固有能力,即使几岁的小孩都有能力做出像样的应用;&
& & & & &结构化、函数式、对象编程思想继续引领编程领域,成为构建可扩展的复杂系统的思想基石;&
& & &  开源自由软件运动,使得软件技术突破商业公司的壁垒,大量开源软件、技术博客分享成为技术学习与进步的天堂。
   在基础软件技术支撑下,更高级而综合的技术及应用应运而生:
& & &  物联网: &移动设备充当连接万物的媒介, 联接人们所能触及的世界;&
& & &   云计算: &硬件资源聚合重用,提供弹性而强大的基础计算能力,成为大规模软件世界的发电厂;
& & &   大数据: &通过数据分析挖掘提炼出智能、精准的未来业务,为企业决策提供数据支持,适配人们的习惯和个性;
& & &   人工智能: 让计算机学习人的认知和判断能力, 胜任非指令式的、需灵活自主调节自身的复杂场景的工作,成为可与人协作的小伙伴;
& & & &&现代软件应用的挑战
& & & & 现代软件应用通常源于解决一个有潜力的用户市场所面临的痛点问题;这个用户市场有一定规模,可以构建起基本的业务系统并生成一定规模的数据集;
& & & & & &
& & & & & & &软件系统的研发牵涉到对现实世界的认知和建模;
   & & & 如何去认识行业领域以及业务?
& & & &   &如何理清纷繁的事物关联, 把握重要的主线,做好规划?
     如何将业务层面的解决方案转化为技术层面的架构设计和实现?
   & & & 如何将软件使用中遇到的问题转化为重要的驱动力并保持软件和企业持续长久运行?
   & & & 从不同视角去探索这个答案, 会产生不同的解决方案、发展方向和执行路径,获取到不同的数据集。 
& & & &企业要生存,多样化、灵活的业务是直接驱动力;业务可扩展能力和低维护成本是应对业务变化的主要法宝,软件因为业务的扩张和拓展而快速成长和变得复杂;此时的复杂是多样化的业务流程与规则导致的;
& & & &当数据流量达到现有技术能承载的临界规模时,性能、成本与稳定性就成为必要的内在驱动因素; 在海量互联网用户的时代更是如此;
& & & &以尽可能少的成本, 安全高效地驾驭海量数据,是恒常的非功能性需求;
& & & &因此,软件的复杂性通常是由业务多变的&质&与数据规模的&量&共同构成的。
   & 软件的能力有"刚与柔"之分;
   & 刚性能力体现在软件的性能:单位时间内处理多少请求,每个请求的响应时间,占用多少资源,请求处理的成功率等;
   & 柔性能力体现在健壮性和可维护性:&健壮性使得应用更友好地处理错误,减少用户烦恼和困惑;&可维护性良好的软件才有健康稳定成长的潜力。
& & &&软件技术与工程实践     &
& & & &对于多变的业务,并没有通用的方案来解决,人们通常是通过模块化、组件化、服务化的方案将复杂系统分而治之;再辅以适当的设计模式、代码规范保证系统的可维护性和柔韧性;&海量数据规模的处理,催生了一系列可复用的实用技术。
& & & & &技术是人们用于解决一类问题的整体框架方案和可行措施;
& & & & &技术是软件开发的战车,帮助人们碾过荆棘,渡过长河,长驱直入。
  & & 并发与异步成为现代软件应用的基础技术;
& & & & 分布式计算成为构建大规模互联网应用的主流技术;&
& & & & 缓存是提升查询性能的必备技术;
   KV 系统用于不规则数据的存储;
& & & & 尽可能减少数据不一致成为维护现代应用的主要挑战。
& & & & 智能是未来的憧憬, 通过智能、精准的技术来适配人的行为特性;
& & & & 实时搜索与调控能力在部分领域是重要的驱动力;
& & & & 子系统之间的交互标准化规范化也是重要的组成部分; SOA, Restful 开始广泛使用;大型软件应用常常是依靠多个子应用相互协作而良好运转;
& & & & 黑客与安全技术一直是最容易被忽视但决不可轻视的组成要件之一;
& & & &逻辑严密与测试工程自动化与规模化是必不可少的。当数据量级达到千万甚至几十亿级规模之后,即使很小的逻辑缺陷都会充分放大,变成很多的工单;十几的工单量算是客气的;这些必须在测试阶段尽可能地被消灭掉;核心和常用业务是不允许出现功能性BUG的,哪怕是极小的;
& & & &最后但也是非常重要的, 大规模的、敏捷的、稳定的、用户无感知的软件热升级、发布与部署技术是必不可少的; Docker &应运而生; 这需要与运维工程师紧密配合。
& & & &互联网软件已经渗入到每个人的生活,并且每个人都逐渐成为这个世界的参与者、贡献者;
& & & &产品经理是洞察人们处境和需求的先锋队,是产品成长的守护者; 项目经理组织协调资源,在可接受的成本下督导项目与产品的完成;&程序猿与媛是实现产品的主力团队; 视觉、交互设计做出人性化的交互展示效果,使产品更易用; 运维工程师保障软件日常的稳定运行和高峰期的正常运行; 客服同学为用户答疑解惑,帮助用户解决困惑和问题; 运营同学通过策划使得产品获得更大的效用; 行政、财务、HR 保障整个组织的正常运行; 销售同学将产品推向市场,开拓新的市场领域;普通的消费者用户成为软件数据的生产者和传播者。&
& & & &人们从最初的&需求-分析-概要设计-详细设计-编码实现-测试-发布-反馈& 的瀑布流程, 演进到&用户故事-场景-测试用例-迭代-反馈&的敏捷流程;UML、系统时序图等用于描述系统特征与行为, 甘特图、燃尽图等用于描述项目进度; 思维导图用于规划系统与行动全景图。
  结语&&
& & & 软件开发是一门幸运的学问。物理学为电子世界构建了可靠的硬件基础; 数学为计算机软件构建了严谨的理论基础;在两大源远流长的自然基础学科的肩膀上,借助分工、分层、重用、缓存、多核、分布式等技术机制,开源自由运动的"分享共筑"的理念和行动,以及产品技术人永不止步的精神动力, 构建起如今恢弘壮丽的软件天网。
阅读(...) 评论()

我要回帖

 

随机推荐