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