写这篇文章首先是想给本身一个总结、整理,还有就是给那些 没有特别明白直播是怎么回事的人一点 思路前端
最近公司想要作pc端直播,做为一个自认为很菜的前端实在是不知从何下手,因此只能用国人最爱的百度,搜索了不少资料、文章,得出的第一个结论就是 直播很烧钱,可是烧不烧钱 这个我可能管不了,我也没有办法管,因此只能继续探索个人直播之路,根据个人查找有了一些结论,固然这些结论可能多事别人说过的 ,我拿来用一下,总结一下,还望各位见谅,如下有一些都是我本身的看法。 web
首先直播分为两个端,主播端和看直播的一端(这是我本身的理解)算法
主播端确定是录视频,将录的视频传给后台编程
看直播的一端 是从后台将视频拉取过来 播放 淡然 还有什么 评论、送礼物等等。浏览器
因此 总结一下 官方的说法就是 视频直播能够分为 采集、前处理、编码、传输、解码、渲染 这几个环节。ide
采集---通常都是移动端,IOS比较简单,机型比较赞成,Android则相对复杂,由于有不少机型,须要作适配,PC最麻烦 ,各类不同的摄像头,麦克风,比较凌乱 很差处理。优化
前处理 ---就是美颜什么的 ,得让主播好看,好多大牛都说美颜算法要用到GPU编程(这个仍是不太了解)
编码
编码 --- 应该是将录的视频作一下处理(还不太了解,自我理解是这样)spa
传输 --- 这个很贵 涉及到流量什么的 视频
解码 --- 应该是观看直播时,将视频拉取过来要作一些处理(还不太了解,自我理解是这样)
渲染 --- 播放视频时 音画同步
直播包括 推流和拉流
目前web上主流的视频直播方案有HLS和RTMP,移动端主要以HLS为主(HLS存在延迟性问题,也能够借助video.jscaiyong RTMP),PC端主要用RTMP 为主 实时性较好(这段话是从别人的博客里看到的 可是忘记是谁了 做者看到 见谅)
下面说一下 推送协议
1.RTMP(Real Time Messaging Protocol)实时消息传输协议
该协议基于TCP
优势:
CDN支持良好,主流的CDN厂商都支持
协议简单,在各平台上实现容易
缺点:
基于TCP,传输成本高,在弱网环境丢包率高的状况下问题显著
不支持浏览器**
Adobe私有协议,Adobe已经再也不更新
2.WebRTC 名称源自网页即时通讯(英语:Web Real-Time Communication)的缩写
是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被归入万维网联盟的W3C推荐标准。
优势
W3C标准,主流浏览器支持程度高
Google在背后支撑,并在各平台有参考实现
底层基于SRTP和UDP,弱网状况优化空间大
能够实现点对点通讯,通讯双方延时低
缺点
ICE,STUN,TURN传统CDN没有相似的服务提供
3.基于UDP的私有协议
有些直播应用会使用UDP作为底层协议开发本身的私有协议,由于UDP在弱网环境下的优点经过一些定制化的调优能够达到比较好的弱网优化效果,但一样由于是私有协议也势必有现实问题:
优势
更多空间进行定制化优化
缺点
开发成本高
CDN不友好,须要自建CDN或者和CDN达成协议
独立做战,没法和社区一块儿演进
以上就是我在作直播准备时 找到资料,但愿能对有些人有帮助,另外再次强调有一些是别人的话 借用一下 忘见谅