写这篇文章首先是想给自己一个总结、整理,还有就是给那些 没有特别明白直播是怎么回事的人一点 思路
最近公司想要做pc端直播,作为一个自认为很菜的前端实在是不知从何下手,所以只能用国人最爱的百度,搜索了很多资料、文章,得出的第一个结论就是 直播很烧钱,但是烧不烧钱 这个我可能管不了,我也没有办法管,所以只能继续探索我的直播之路,根据我的查找有了一些结论,当然这些结论可能多事别人说过的 ,我拿来用一下,总结一下,还望各位见谅,以下有一些都是我自己的见解。
首先直播分为两个端,主播端和看直播的一端(这是我自己的理解)
主播端肯定是录视频,将录的视频传给后台
看直播的一端 是从后台将视频拉取过来 播放 淡然 还有什么 评论、送礼物等等。
所以 总结一下 官方的说法就是 视频直播可以分为 采集、前处理、编码、传输、解码、渲染 这几个环节。
采集---一般都是移动端,IOS比较简单,机型比较同意,Android则相对复杂,因为有很多机型,需要做适配,PC最麻烦 ,各种不一样的摄像头,麦克风,比较凌乱 不好处理。
前处理 ---就是美颜什么的 ,得让主播好看,好多大牛都说美颜算法要用到GPU编程(这个还是不太了解)
编码 --- 应该是将录的视频做一下处理(还不太了解,自我理解是这样)
传输 --- 这个很贵 涉及到流量什么的
解码 --- 应该是观看直播时,将视频拉取过来要做一些处理(还不太了解,自我理解是这样)
渲染 --- 播放视频时 音画同步
直播包括 推流和拉流
目前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达成协议
独立作战,无法和社区一起演进
以上就是我在做直播准备时 找到资料,希望能对有些人有帮助,另外再次强调有一些是别人的话 借用一下 忘见谅