推流环节对直播链路的影响很是大,若是推流网络不稳定,就算前期在音视频处理、编码和封装上作何种优化,用户体验都会很糟糕。所以接下来,小编就以一对一直播软件开发为例,为你们讲述下推流过程当中涉及的协议、实现方案等。android
更多Android高级面试合集放在github上面了(更多面试文档,项目下载,源码)
https://github.com/xiangjiana/androids
须要更多项目下载,源码 的小伙伴能够点击关于我 联系我获取
推流实际上就是在把封装好的视频和音频传输到服务器的过程。换句话说,就是将现场的视频信号传到网络的过程。此外,推流这个环节对网络的要求比较高,若是网络不稳定,直播的效果就会不好,像是遇到卡顿、延时等状况。git
根据使用案例,一对一直播软件开发中,接触到的推送协议有如下几个:程序员
一、RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT、RTMPS、RTMPE等多种变种。RTMP是一种设计用来进行实时数据通讯的网络协议,主要用来在Flash平台和支持RTMP协议的流媒体之间进行音视频和数据通讯。支持该协议的软件包括Adobe Media Server、Ultrant Media Server、red5等。github
RTMP是目前主流的流媒体传输协议,普遍用于直播领域,能够说市面上大多数的直播平台都应用了这个协议。优势:CDN厂商基本都支持此协议,兼容性强,且在各平台上实现容易。缺点:传输成本高,在弱网环境下比较容易丢包;不支持浏览器推送;最重要的一点是RTMP是Adobe的私有协议,可是Adobe已经再也不更新。面试
二、WebRTC
WebRTC,即网页即时通讯的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它目前已经开源而且在Google、Mozilla、Opera支持下被归入万维网联盟的W3C推荐标准。相对于一对一直播软件,它更多的是普遍应用在各类视频会议中。此协议的优势是:因为是归入W3C标准,主流浏览器对它的支持逐渐提升,相比起RTMP来说,它在弱网状况下的空间优化较大,并且支持点对点通讯,从而下降了总体延迟。可是缺点也比较棘手,就是目前传统CDN中没有相似的服务提供。浏览器
三、基于UDP的私有协议
有些一对一直播软件开发商会使用UDP做为底层协议开发本身的私有协议,由于UDP在弱网环境下,经过一些定制化的调优能够达到比较好的弱网优化效果,但一样由于是私有协议也势必会有现实问题:开发成本高,每每须要自建CDN或者和CDN达成协议,另外因为兼容性较差,在面对升级时可能得不到技术支持。服务器
一、在推流传输方面所有由开发商本身搭建,花费较大,整体来讲不太现实。
二、在直播软件开发中,能够和一些主流CDN厂商或者云视频服务商合做,它们每每会提供推流的“一条龙”服务。
三、大多数直播平台都会同时接入多个视频云服务提供商,这样能够作拉流线路互备,对推流后视频集群再进行优化也可提升直播的流畅性和稳定性。
以上,就是一对一直播软件开发中,一些关于推流的简单介绍网络
更多Android高级面试合集放在github上面了优化
须要的小伙伴能够点击关于我 联系我获取编码
很是但愿和你们一块儿交流 , 共同进步
也能够扫一扫, 目前是一名程序员,不只分享 Android开发相关知识,同时还分享技术人成长历程,包括我的总结,职场经验,面试经验等,但愿能让你少走一点弯路。