默认
打赏 发表评论 12
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
浅谈开发实时视频直播平台的技术要点
阅读(146201) | 评论(12 收藏7 淘帖3 1
微信扫一扫关注!

前言


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

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


你以为调用几个Chrome的API就能直播了?

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

正确的方法是:

  • 1、你得有一个实现了WebRTC相关协议的客户端。比如Chrome浏览器。
  • 2、架设一个类似MCU系统的服务器。

具体的实现步骤是这样的:

  • 第一步,用你的客户端,比如Chrome浏览器,通过WebRTC相关的媒体API获取图像及声音信源,再用WebRTC中的通信API将图像和声音数据发送到MCU服务器。
  • 第二步,MCU服务器根据你的需求对图像和声音数据进行必要的处理,比如压缩、混音等。
  • 第三步,需要看直播的用户,通过他们的Chrome浏览器,链接上你的MCU服务器,并收取服务器转发来的图像和声音流。
  • 第四步,检查浏览器的兼容性。IE用的协议和Chrome不一样,不能互通。firefox和opera情况也不是很理想。

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

所以,别迷信 WebRTC,WebRTC只适合小范围(8人以内)音视频会议,不适合做直播。

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


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

实际上,你需要了解:

  • 摄像头采集;
  • 音视频编解码;
  • 流媒体协议;
  • 音视频流推送到流媒体服务器;
  • 流媒体网络分发;
  • 用户播放器;
  • 音视频同步;
  • 网络延迟自适应;
  • 需要录制,多种视频文件的格式和封装;
  • 语言:C、C++、html、php、mysql......
  • 开发环境:嵌入式,Linux,Windows,Web......

看到这里,还觉得这是一个人能完成的任务吗?

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

解决办法有3种:

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

视频信号从现场出发,到达分散在全国各地的观众,需要经过数据中心和各级节点的缓存加速,一路上马不停蹄,可以和杨贵妃的荔枝媲美。而信号在一路上各个环节所需要的时间总和,就是你看到的延迟。

用CDN加速,可以尽量减少延迟。目前业内水准来看,视频延迟都在3-6秒之间。也就是在视频直播时,你看到的是几秒以前的画面。

自己架服务器,如果你部署的数据中心不够多,那么遇上跨网、跨省的传输,还是得用CDN加速。那么为了尽可能降低延迟,你就需要在全国各省市都部署数据中心,来解决跨网、跨省的传输。这种解决方案,相较CDN,非常昂贵。

用云服务的话,就是别人把服务器给你架好了,你只要傻瓜式的用就行了。为防止广告嫌疑,有关实时直播云,现在有很多服务商提供这一块,具体情况请自行了解哦。

当然,不管用哪种方式,请综合权衡利弊,找到适合自已的方案就是最好的方案。

下面,开始讲,视频直播的究竟需要哪些环节,应该如何处理?

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


视频直播,可以分为:

  • 采集;
  • 前期处理;
  • 编码;
  • 传输;
  • 解码;
  • 渲染。

以上这几个环节,下面具体说明:

- 采集:iOS是比较简单的,Android则要做些机型适配工作(声网Agora.io目前适配了4000+Android机型)。PC最麻烦各种奇葩摄像头驱动,出了问题特别不好处理,建议放弃PC只支持手机主播,目前几个新进的直播平台都是这样的。

- 前期处理:现在直播美颜已经是标配了,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里传统的实时音视频一样,这样的技术都是音视频编解码+网络传输技术的综合应用体,没有一定的技术积累,确实有很多坎需要迈过去。。。

附录:更多实时音视频技术文章


[1] 开源实时音视频技术WebRTC的文章:
开源实时音视频技术WebRTC的现状
简述开源实时音视频技术WebRTC的优缺点
访谈WebRTC标准之父:WebRTC的过去、现在和未来
良心分享:WebRTC 零基础开发者教程(中文)[附件下载]
WebRTC实时音视频技术的整体架构介绍
新手入门:到底什么是WebRTC服务器,以及它是如何联接通话的?
WebRTC实时音视频技术基础:基本架构和协议栈
浅谈开发实时视频直播平台的技术要点
[观点] WebRTC应该选择H.264视频编码的四大理由
基于开源WebRTC开发实时音视频靠谱吗?第3方SDK有哪些?
开源实时音视频技术WebRTC中RTP/RTCP数据传输协议的应用
简述实时音视频聊天中端到端加密(E2EE)的工作原理
实时通信RTC技术栈之:视频编解码
开源实时音视频技术WebRTC在Windows下的简明编译教程
网页端实时音视频技术WebRTC:看起来很美,但离生产应用还有多少坑要填?
>> 更多同类文章 ……

[2] 实时音视频开发的其它精华资料:
专访微信视频技术负责人:微信实时视频聊天技术的演进
即时通讯音视频开发(一):视频编解码之理论概述
即时通讯音视频开发(二):视频编解码之数字视频介绍
即时通讯音视频开发(三):视频编解码之编码基础
即时通讯音视频开发(四):视频编解码之预测技术介绍
即时通讯音视频开发(五):认识主流视频编码技术H.264
即时通讯音视频开发(六):如何开始音频编解码技术的学习
即时通讯音视频开发(七):音频基础及编码原理入门
即时通讯音视频开发(八):常见的实时语音通讯编码标准
即时通讯音视频开发(九):实时语音通讯的回音及回音消除概述
即时通讯音视频开发(十):实时语音通讯的回音消除技术详解
即时通讯音视频开发(十一):实时语音通讯丢包补偿技术详解
即时通讯音视频开发(十二):多人实时音视频聊天架构探讨
即时通讯音视频开发(十三):实时视频编码H.264的特点与优势
即时通讯音视频开发(十四):实时音视频数据传输协议介绍
即时通讯音视频开发(十五):聊聊P2P与实时音视频的应用情况
即时通讯音视频开发(十六):移动端实时音视频开发的几个建议
即时通讯音视频开发(十七):视频编码H.264、VP8的前世今生
实时语音聊天中的音频处理与编码压缩技术简述
网易视频云技术分享:音频处理与压缩技术快速入门
学习RFC3550:RTP/RTCP实时传输协议基础知识
基于RTMP数据传输协议的实时流媒体技术研究(论文全文)
声网架构师谈实时音视频云的实现难点(视频采访)
浅谈开发实时视频直播平台的技术要点
还在靠“喂喂喂”测试实时语音通话质量?本文教你科学的评测方法!
实现延迟低于500毫秒的1080P实时音视频直播的实践分享
移动端实时视频直播技术实践:如何做到实时秒开、流畅不卡
如何用最简单的方法测试你的实时音视频方案
技术揭秘:支持百万级粉丝互动的Facebook实时视频直播
简述实时音视频聊天中端到端加密(E2EE)的工作原理
移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(二):采集
移动端实时音视频直播技术详解(三):处理
移动端实时音视频直播技术详解(四):编码和封装
移动端实时音视频直播技术详解(五):推流和传输
移动端实时音视频直播技术详解(六):延迟优化
理论联系实际:实现一个简单地基于HTML5的实时视频直播
IM实时音视频聊天时的回声消除技术详解
浅谈实时音视频直播中直接影响用户体验的几项关键技术指标
如何优化传输机制来实现实时音视频的超低延迟?
首次披露:快手是如何做到百万观众同场看直播仍能秒开且不卡顿的?
Android直播入门实践:动手搭建一套简单的直播系统
网易云信实时视频直播在TCP数据传输层的一些优化思路
实时音视频聊天技术分享:面向不可靠网络的抗丢包编解码器
>> 更多同类文章 ……

(原文链接:点此进入,原文有改动)

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:[思考] APP里的消息推送技术,对用户而言意味着什么下一篇:[观点] WebRTC应该选择H.264视频编码的四大理由

本帖已收录至以下技术专辑

推荐方案
评论 12
吓的我项目都要放弃了。。。
签名: 国庆长假还没有缓过来,请让我静一静,产品狗死远点...
引用:IMDeveloper 发表于 2016-08-08 16:19
吓的我项目都要放弃了。。。

搞实时音视频确实是这么麻烦
签名: 该会员没有填写今日想说内容.
搞实时音视频看着就怕,吓到我这吃瓜群众了。。
签名: 好想把妹!
看起来好难哦
要点很多啊,多谢分享
技术点还真多啊
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部