浅谈开发实时视频直播平台的技术要点

前言

现在大大小小的公司,甚至个人开发者,都想开发自己的直播网站或App,本文会帮你理清,开发视频直播平台,你需要注意哪些技术要点。

开源WebRTC能做实时视频直播吗?

你以为调用几个Chrome的API就能直播了? WebRTC用的不是插件,是Chrome自带的功能,是原生js的API,也没有什么浏览器自带的插件。获取图像信源之后不应该用websocket发送图像数据,而是直接用WebRTC的通信相关API发送图像和声音(这套API是同时支持图像和声音的)数据。

最后:如果按照这个方法折腾完了,你认为会得到什么结果呢?1人广播,39人收看,在一台i3 + 4G + Centos6.4 mini的机器上跑MCU,连续运行48小时没有出现问题,CPU的使用率大概在60%左右。跟现在动辄上十万的直播相比,是不是弱爆了。 所以,别迷信 WebRTC,WebRTC只适合小范围(8人以内)音视频会议,不适合做直播。

开发实时视频直播需要哪些技术?

自负前端开发人员会以为:“熟悉HTML5、1个人大约7个工作日内就可以开发出来了”。面对这样的想法,只有一句话:少年,谦虚点。

如果你天赋异禀,一个人解决了以上技术问题。那么,你还需要解决传输问题。传输好坏,也就是视频是否延迟、卡顿,取决于网络条件好坏。而公共互利网复杂的网络环境就不用说了吧。在家玩游戏不卡,看视频就卡。聊QQ斗地主无压力,看视频就卡。这怎么办? 解决办法有3种:

  • 用CDN加速;
  • 花钱自己架服务器;
  • 或者用别人的云服务。

视频信号从现场出发,到达分散在全国各地的观众,需要经过数据中心和各级节点的缓存加速,一路上马不停蹄,可以和杨贵妃的荔枝媲美。而信号在一路上各个环节所需要的时间总和,就是你看到的延迟。 用CDN加速,可以尽量减少延迟。目前业内水准来看,视频延迟都在3-6秒之间。也就是在视频直播时,你看到的是几秒以前的画面。 自己架服务器,如果你部署的数据中心不够多,那么遇上跨网、跨省的传输,还是得用CDN加速。那么为了尽可能降低延迟,你就需要在全国各省市都部署数据中心,来解决跨网、跨省的传输。这种解决方案,相较CDN,非常昂贵。 用云服务的话,就是别人把服务器给你架好了,你只要傻瓜式的用就行了。为防止广告嫌疑,有关实时直播云,现在有很多服务商提供这一块,具体情况请自行了解哦。 当然,不管用哪种方式,请综合权衡利弊,找到适合自已的方案就是最好的方案。 下面,开始讲,视频直播的究竟需要哪些环节,应该如何处理?

开发实时视频直播的流程是什么?

- 前期处理:现在直播美颜已经是标配了,80%的主播没有美颜根本没法看。美颜算法需要懂图像处理算法的人,没有好的开源实现,要自己参考论文去研究。算法设计好了还要优化,无论你打算用CPU还是GPU优化,算法优化本身也需要专业知识支持。GPU虽然性能好,但是也是有功耗的。GPU占用太高会导致手机发烫,而手机发烫会导致摄像头采集掉帧,iPhone6尤其明显。因为iPhone6的CPU和前置摄像头很近,在算法开发、算法优化、效果平衡上需要大量的开发调试工作。而这一切都是需要经验支撑。 - 编码:如果你要上720p,肯定要采用硬编码。软编码720p完全没希望,硬件编码不灵活。兼容性也有问题。如何适应纷繁复杂的网络和纷繁复杂的上下行设备?安卓和芯片的坑,开发过的人都知道。那有人问,要求不高,上软编码低分辨率360p行不行?就算上低分辨率,软编码还是会让CPU发烫,CPU过热烫到摄像头,长期发烫不仅直接反应是费电。既然是手机直播,插着电源和充电器实在说不过去吧。还有,CPU发烫会降频,怎么办?这还是只说性能方面。和前处理只影响图像质量和功耗不同,视频编解码技术还关联成本计算和网络对抗。考虑性能、功耗、成本、网络这四个之后你编码的码率、帧率、分辨率。软硬件开发该如何选择?

- 传输:自己做不现实,交给第三方服务商吧。 - 解码:如果你用硬解码,一定要做容错处理,一定要做适配。突然一个crash导致手机重启不好吧。安卓的硬解码,不说了。如果你加了网络目前手机的硬解码还不一定支撑用软解码,功耗发热的问题又来了。 - 渲染:为什么手机明明解码出好多帧数据。就是渲染不出来。为什么画面就是不同步。 好了,以为完了吧? 还有音频呢。mic资源被抢占怎么办?为什么录音线程老是出问题?音频的前处理更复杂。什么时候开启三A引擎噪声抑制?回声消除?增益控制?为什么AAC比Opus质量好?什么是aac,he-aac,heaacv2?如何选择?要不要加混响?播放和录音模式该如何选择?如果你想互动回声消除就要适配N多机型。 以上是媒体模块,还有信令控制,登录、鉴权、权限管理、状态管理等等,各种应用服务,消息推送,聊天,礼物系统,支付系统,运营支持系统,统计系统等。 后台还有数据库,缓存,分布式文件存储,消息队列,运维系统等。

小结

以上技术要点的小结,确实能说明开发一个能用于生产环境的实时视频直播平台确非易事,跟IM里传统的实时音视频一样,这样的技术都是音视频编解码+网络传输技术的综合应用体,没有一定的技术积累,确实有很多坎需要迈过去。。。

原文发布于微信公众号 - IT技术精选文摘(ITHK01)

原文发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏金融民工小曾

我们需要什么样的人机交互方式?

自从有了计算机,便有了人机交互,人机交互的发展史也是一部消费级电子产品的发展史。键盘繁荣了DOS,鼠标繁荣了Mac和Windows,体感手柄和平衡板成就了Wii...

881
来自专栏互联网数据官iCDO

手把手教你用Excel分析网站流量(实例讲解)

前言:随着运营精细化发展,如何通过品牌沉淀的数据挖掘出更多优化可能,是每个运营、产品甚至技术的必修课。这篇文章将主要阐述我是如何通过发现问题、提出猜测、验证猜想...

39015
来自专栏Java学习网

程序员获取编程灵感的 10 种方式

有时我会陷入读着编程书但编不了程的陷阱。我不能总是找到一个可工作的有趣项目,即使我知道有大量的机会。如果你有相同的问题,这里的一些提示可能会有所帮助。 ? 1....

3325
来自专栏软件开发 -- 分享 互助 成长

浅谈保证软件工程质量的一些心得体会

Itwolf原创博客,转载请标明出处,谢谢

2999
来自专栏资深Tester

软件测试人员应该如何解决面试中不会回答的问题

2326
来自专栏腾讯大讲堂的专栏

下一代的全能广告系统架构

引言:6.14日“腾讯创新日:科技年技术盛宴”代表腾讯各个事业群技术实力的四级专家、腾讯微创新2016年度创意获奖团队欢聚一堂,一起畅谈AI、系统安全、架构设计...

3696
来自专栏FreeBuf

基于开源程序漏洞的攻击在2017年将增长20%

现在,无论是商业软件还是程序员自行开发的小程序,开源代码已经变得越来越普遍了,而开源似乎也已经成为了一种趋势。但需要注意的是,Black Duck软件公司的研究...

2048
来自专栏腾讯移动品质中心TMQ的专栏

众测实战经验小结

随着互联网浪潮的推进,手机 App 进入了高速发展期,随之而来 App 的“不可替代性”也越来越弱化。

2361
来自专栏Crossin的编程教室

【读者投稿】数据说话,Python 的就业状况如何

不少读者在学习编程之后,做了一些自己的练手项目,或者积累了一些学习经验和心得,希望可以与更多的学习者交流分享。 因此,我们决定新增一个小栏目,提供给大家一个展...

3056
来自专栏haifeiWu与他朋友们的专栏

2016学习总结

2016,一年过去了。在这一年里做了很多事情,也收获颇多。参加软件设计大赛、去南京总决赛(当然还有玩儿)、学习研究敲代码、复习基础准备面试、写简历、找工作、工作...

1112

扫码关注云+社区