移动端实时音视频直播技术中推流和传输详解
推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕。所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识。
推送协议
下面就先介绍一下都有哪些推送协议,他们在直播领域的现状和优缺点:
RTMP;
WebRTC;
基于 UDP 的私有协议。
RTMP
RTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant Media Server/red5 等。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议。
优点:
CDN 支持良好,主流的 CDN 厂商都支持;
协议简单,在各平台上实现容易。
缺点:
基于 TCP ,传输成本高,在弱网环境丢包率高的情况下问题显著;
不支持浏览器推送;
Adobe 私有协议,Adobe 已经不再更新。
WebRTC
WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的 API。
优点:
W3C 标准,主流浏览器支持程度高
Google 在背后支撑,并在各平台有参考实现;
底层基于 SRTP 和 UDP,弱网情况优化空间大;
可以实现点对点通信,通信双方延时低。
缺点:
ICE、STUN、TURN 传统 CDN 没有类似的服务提供。即时通讯
基于 UDP 的私有协议
有些直播应用会使用 UDP 做为底层协议开发自己的私有协议,因为 UDP 在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但同样因为是私有协议也势必有现实问题。即时通讯开发
优点:
更多空间进行定制化优化。
缺点:
开发成本高;
CDN 不友好,需要自建 CDN 或者和 CDN 达成协议;
独立作战,无法和社区一起演进。
传输网络
我们推送出去的流媒体需要传输到观众,整个链路就是传输网络,类比货运物流就是从出发地到目的地见的所有路程了,如果道路的容量不够,会引发堵车也就是网络拥塞,这时我们会改变路程也就是所谓的智能调度,但是传输网络会站在全局的角度进行调度,所以会比原子世界的调度有更好的效果,可以想象有一个上帝在天空中俯视出发地和目的地间的所有的路况信息,而且还是实时的,然后给出你一条明路,何等的神奇,但这些我们在 LiveNet 中都已经实现了。
这里先回顾一下传统的内容分发网络。
为什么要有内容分发网络,内容分发网络的由来
互联网起源于美国军方的一个内部网络,Tim Berners-Lee 是互联网发明者之一,他很早就预见到在不久的将来网络拥塞将成为互联网发展的最大障碍,于是他提出了一个学术难题,要发明一种全新的、从根本上解决问题的方法来实现互联网内容的无拥塞分发,这项学术难题最终催生出一种革新性的互联网服务——CDN 。
直播传输网络有别于传统 CDN 的痛点
随着 Live 时代的到来,直播成为当前 CDN 厂商的又一个主要的战场,那么 Live 时代 CDN 需要支持什么样的服务呢?
流媒体协议的支持,包括 RTMP,HLS ,HTTP-FLV 等;
首屏秒开,从用户点击到播放控制在秒级以内;
1~3 延迟控制,从推流端到播放端,延迟控制在 1~3 秒之间;
全球全网智能路由,可以利用整个 CDN 网络内的所有节点为某一单一用户服务,不受地域限制。随着全球一体化进程不断推进,跨区域、跨国家、跨洲的直播正变为常态,很可能主播在欧美,而用户在亚洲;
天级别的节点按需增加,中国公司出海已成大势,CDN 需要更多的海外节点,如今比拼的更多的是海外节点可以快速部署,从提出节点增加需求到节点入网提供服务,需要达到一天之内,对 CDN 运维和规划提出非常高的要求。原有的月级别规划和入网满足不了先进的要求。
传统 CDN 的链路路由
CDN 基于树状网络拓扑结构,每一层都有 GSLB (Global Server Load Balancing) 用于同一层内的多个 CDN 节点负载均衡,这样有什么好处呢?
前面提到的众多 CDN 的应用场景中,网页加速、视频加速、文件传输加速,都是同时依赖 GSLB 和 Cache 系统的,Cache 系统是整个 CDN 系统中的成本所在,设计树形结构可以最大化的节省 Cache 系统的资本投入。因为只有中心节点需要保持机会所有的 Cache 副本,向下逐级减少,到了边缘节点只需要少量的热点 Cache 就可以命中大部分 CDN 访问请求,这样极大的降低了 CDN 网络的成本,也符合当时 CDN 用户的需求,可谓双赢。
但是到了 Live 时代,直播业务是流式业务,很少涉及到 Cache 系统,基本都是播完就可以释放掉存储资源,即使因为政策原因有存储的需求也都是冷存储,对于存储的投入相对非常低廉,而且不要求存储在所有节点中,只要保证数据可回溯,可用即可。
这里的假设是:
用户能访问的最快节点一定是该区域内的边缘节点,如果该区域没有边缘节点则最快的一定是逻辑相邻的区域内的边缘节点;
边缘节点能访问的最快节点一定是该区域内的区域节点,一定不会是其他区域的节点;
区域节点到中心节点一定是最快的,这个链路的速度和带宽都是最优的。
但实际真的如此么?引入了如此多的假设真的正确么?
实际上就算理论上我们可以证明以上假设有效,但是节点规划和区域配置大都依赖于人的设计和规划,我们知道人多是不靠谱的,而且就算当时区域规划正确,谁能保证这些静态的网络规划不会因为铺设了一条光纤或者因为某些 IDC 压力过大而发生了改变呢?所以我们可以跳出树状网络拓扑结构的桎梏,探索新的适合直播加速的网络拓扑结构。
移动端实时音视频直播技术中推流和传输详解相关推荐
- 移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...
- 【音视频第6天】基础知识-移动端实时音视频直播技术详解和开源工程WebRTC的技术原理和使用浅析
本文是系列文章中的第1篇,本系列文章的大纲如下: <移动端实时音视频直播技术详解(一):开篇> <移动端实时音视频直播技术详解(二):采集> <移动端实时音视频直播技术详 ...
- 即时通讯开发时移动端实时音视频直播技术之处理
视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,比如打上时间戳或者公司 Logo 的水印,祛斑美颜和声音混淆等处理.在主播和观众连 ...
- 浅析即时通讯开发之移动端实时音视频直播技术编码和封装
视频编码是本系列一个重要的部分,如果把整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要,它的速度和压缩比对物流系统的意义非常大,影响物流系统的整体速度和成本.同样,对 ...
- 实时音视频直播带货中影响用户体验的Bug根因
VOL 131 05 2020-06 今天距2021年209天 这是ITester软件测试小栈第131次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 ...
- 即时通讯开发之网页端实时音视频技术WebRTC
WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音通话或视频聊天的技术,是谷歌2010年以6820万美元收购Globa ...
- 移动端实时音视频详解(三):编码和封装
移动端实时音视频详解(三):编码和封装 视频编码是本系列一个重要的部分,如果把整个流媒体比喻成一个物流系统,那么编解码就是其中配货和装货的过程,这个过程非常重要,它的速度和压缩比对物流系统的意义非常大 ...
- 移动端实时音视频详解(二):处理
移动端实时音视频详解(二):处理 视频或者音频完成采集之后得到原始数据,为了增强一些现场效果或者加上一些额外的效果,我们一般会在将其编码压缩前进行处理,比如打上时间戳或者公司 Logo 的水印,祛斑美 ...
- 音视频直播--技术架构
前言 今天和大家讲一下音视频直播技术架构.之前的关注点主要放在客户端如何采集音频数据上,经过这两天的思考,我觉得应该先给大家讲一下音视频直播技术架构,这样更容易从整体上理解视频直播技术是如何运转的,之 ...
最新文章
- selenium 中装饰器作用
- XBodhi(技术框架)——序
- 什么是你的不可替代性和核心竞争力
- C语言 编写程序:请将Fibonacci数列前30项中的偶数值找出来,存储到一维数组中。其中,Fibonacci数列如下:1,1,2,3,5,8,13,21,34...该数列除前两项之外,其他任意
- 数据结构-排序-分配类排序-知识点总结归纳3
- oracle不空顺序输出,Oracle应用笔记
- android 自定义布局 根据布局获取类,阿里高级Android面试题解析:Android自定义View—布局过程的自定义...
- python经典程序-python经典趣味24点游戏程序设计
- 安装genymotion模拟器
- java timezone_详解Java中的时区类TimeZone的用法
- 各种控制方法在抗干扰方面的区别
- oracle定时频率,Oracle 定时任务 — 定时执行存储过程
- 开闭原则的例子_开闭原则
- caj转换成word转换器下载后如何操作?
- 网站视频直播中p2p流媒体的应用
- 来闯关吗?一个有趣的 Python 解谜网站!我已经懵逼了!
- gmap 支持python吗_GMAP使用
- TensorFlow Allocation of 1511424000 exceeds 10% of system memory
- tensorflow学习笔记(4)------北京大学 曹健
- Storybook(一)
热门文章
- android百度地图定位文字表述,Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用...
- 计算机原理探险系列(一)CPU
- 半年成长 —— 任平生
- bamtools拆分bam文件
- 【产品面试】经典的一些面试题回顾
- 与其去雄安买房,不如找中企动力建自己的平台
- DSP快速复盘——时钟系统总结(基本知识+核心代码)基于TMS2802x处理器
- 秒杀竞拍屡创网络神话:馅饼还是美丽陷阱
- 转 js控制excel打印完美解决方案
- 如何使用计算机word,电脑系统教程:电脑Word分栏怎么用