直播P2P技术1-技术入门
1. 直播协议
直播协议主要有RTMP,HLS,MPEG-DASH,RTSP,HTTP-FLV等。每种协议都各有长短,比如RTMP延迟低,但诞生于Adobe,依赖于Flash Player,在如今FLash Player面临被淘汰的时代,RTMP前途未卜;HLS是苹果基于HTTP开发并主导的流媒体协议,它充分利用了HTTP的通用性,并能根据带宽自适应码率,但单个TS文件duration过大(一般为10s),延迟较高;MPEG-DASH类似于HLS,也是基于HTTP的,不同点是DASH单个片段duration灵活可变(如小至3s),且是开发性的流媒体协议,使其得到很多厂商的大力支持。
2. P2P技术
P2P技术是分布式系统的应用之一,通常表现为客户端之间直接进行数据交换共享。在P2P过程中,所有客户端的活动形成了一张逻辑上的虚拟网络,该网络结构被称为P2P模型的网络拓扑。一般网络拓扑结构有三种:完全网状,树状,基于DHT的环状,分别如下图1,2,3所示: 
P2P技术可用于文件共享,流媒体,点对点通信等,如常见的迅雷,视频网站的P2P插件。
3. 直播P2P技术
常见流媒体直播协议都属于C/S型,即所有客户端通过指定协议,从服务端获取直播数据。当客户端数量达到一定规模后,服务端将承受巨大的I/O和带宽压力。若服务器无法及时处理客户请求,客户端卡播率急剧上升,从而影响用户观看体验。
直播P2P技术,简单来说,就是客户端之间使用一定协议,交换和共享直播数据,通过减少对服务器的数据请求,来降低服务端的I/O带宽等方面压力,从而削减服务器带宽成本,降低客户端卡播率。
鉴于通用性与效率,一般很少从底层开始设计一套全新的流媒体直播P2P协议。惯用做法是基于通用协议,实现客户端的P2P网络。对基于HTTP的流媒体协议,如HLS,MPEG-DASH等,重写客户端数据下载逻辑即可;对非HTTP的流媒体协议实现P2P,如RTMP,RTSP,需要一套切片服务器,切片服务器负责持续地将数据流切成一个个数据片段(类似HLS的TS文件),客户端在P2P网络基础上进行数据片段的下载和交换共享。
设计直播P2P协议,通常关注两个要素:客户端延迟,P2P分享率。客户端延迟是指客户端播放到的最新数据时间戳与服务器最新产生的数据时间戳的差值,P2P分享率是指客户端从P2P网络获取的数据量与客户端完整观看所需的数据量的比值。
为了方便下面讨论的不同模型优缺点,作如下定义:
- 跳数:一个数据块传输过程中经过的节点数
- 控制请求:所有非实际数据块传输的请求
- 数据请求:一次实际数据块的传输请求
- Tc:一次控制请求的传输时间
- Td:一次数据请求的传输时间
- T:一个数据块从一个节点到另一个节点的总时间
- Tn:一个数据块经过n跳到达另一个节点的总时间
- B:直播码率
- Bu:节点上行带宽
- Bd:节点下行带宽
3.1 基于网状拓扑的直播P2P
网状拓扑模型,也称PULL模型,结构如上图1. 所示。此模型中网络节点完全对等,数据流动完全随机无序。节点对等,是指数据可以在节点之间双向流动,随机无序是指节点之间交换的所有数据的序列关系是随机无序的。节点之间交换数据一般由3子过程组成(如下图4.所示):向对方发送自己数据的bitmap,对比双方bitmap来决定从对方请求哪些数据块并发送请求,发送实际数据块给对方。

注:bitmap是一个bit数组,每一个bit位唯一标识了一个数据块的有无
PULL模型的优点是每个节点都参与数据的下载和上传过程,最大利用了节点的资源和计算能力。假设每个节点随机下载的数据量比例为R(R < 1),则理想情况下,单个节点Bu,Bd满足Bd>=R*B/8; Bu>=(R/(1-R))*B/8。
然而缺点也很明显:延迟高。假设从发送bitmap到接收bitmap请求的时间为Tc,发送数据获取请求到接受数据获取请求的时间为Tc,完全发送一个数据块到接受一个数据块的时间为Td,那么一块数据的单跳传输的时间T,必有T>2*Tc+Td。若一块数据经过n个节点,到达另外一个节点,那么数据块到达最后一个节点的时间Tn,必有Tn>nT=2n*Tc+n*Td。
PULL模型的特点,使其适合应用在延迟较高的直播P2P网络中,而不适合于延迟要求较低的场景。
3.2 基于树状拓扑的直播P2P
树状拓扑模型,也称PUSH模型,结构如图2. 所示。父节点相比子节点延迟低,下载速率块,上行带宽大。一旦两个节点通过订阅协议形成父子关系,父节点可以立即持续地向子节点推送数据。一个完整的过程如下图5. 所示:

由于一次订阅后,父节点可持续地立即地推送数据给子节点,整个过程快速高效。单跳数据的到达时间T,有T~=Td, n跳数据达到的整体时间Tn,Tn~=n*T。
PUSH模型形成的网络并不是一个对等的P2P网络,数据流动只能从父节点到子节点。这样关系直接导致顶层节点P2P上行负载大,非顶层节点未参与P2P下行过程,底层节点(叶子节点)既未参与P2P下行,也未参与P2P上行过程。实际生产环境中,用户上行带宽往往是受限制的,即使通过完美算法,使上、下行能力不同的节点,演化到树中合适的一个位置,也无法弥补压力集中在少部分非叶子节点上的天生弱点。假设直播的数据码率为B,对于1-N树状模型(指一个父亲点最多可以有N个子节点)而言,非叶子节点的上行带宽Bu,必须满足Bu>=N*B/8,下行带宽Bd,必须满足Bd>=B/8,若B成倍增长,对应的Bu,Bd也将成倍增长。当实际Bd,Bu无法满足要求时,整棵树将坍塌。
所以基于树状拓扑的模型是一个较理想的网络拓扑模型,适合于低码率的直播P2P网络,而不适合码率较高的直播场景。
3.3 基于一致哈希的环状拓扑直播P2P
直播P2P技术1-技术入门的更多相关文章
- 直播P2P技术2-低延迟模型
低延迟模型 由上一篇文章我们知道:网状拓扑虽最大化利用了所有节点的资源却无法降低数据延迟,而树状拓扑尽管数据传输效率高,延迟低,但只利用了少部分节点的带宽资源,不适应高码率的直播P2P网络. 那么如何 ...
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...
- PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
XPAth技术 XPath的设计的核心思想,可以通过xpath迅速简介的定位到你希望查找的节点.主要目的是描述节点相对其他节点的位置,可以取得所有符合条件的节点,成为[位置路径]. Xapth主要用来 ...
- C#面向服务编程技术WCF从入门到实战演练
一.WCF课程介绍 1.1.Web Service会被WCF取代吗? 对于这个问题阿笨的回答是:两者在功能特性上却是有新旧之分,但是对于特定的系统,适合自己的就是最好的.不能哪一个技术框架和行业标准作 ...
- kafka技术分享02--------kafka入门
kafka技术分享02--------kafka入门 1. 消息系统 所谓的Messaging System就是一组规范,企业利用这组规范在不同的系统之间传递语义准确对的消息,实现松耦合的异步数据 ...
- 20151028整理罗列某种开发所包括对技术(技术栈),“较为全面”地表述各种技术大系的图表:系统开发技术栈图、Web前端技术栈图、数据库技术栈图、.NET技术栈图
———————————— 我的软件开发生涯 (10年开发经验总结和爆栈人生) 爆栈人生 现在流行说全栈.每种开发都有其相关的技术.您是否觉得难以罗列某种开发所包括对技术(技术栈)呢? 您是否想过: ...
- 直播P2P技术3-伙伴节点质量评估及子流订阅
以上模型,暂且称之为W-P2P吧.
- java技术小白的入门
一.入门书籍 1,疯狂java讲义 2,java编程思想 3,Maven权威指南 4,Spring 3.0就是这么简单 5,Spring技术内幕 6,Spring实战 7,Maven实战 二.入门业务 ...
- JVM插庄之一:JVM字节码增强技术介绍及入门示例
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术. 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修 ...
随机推荐
- JavaScript的BOM和DOM
JavaScript的BOM和DOM 1,window对象,所有浏览器都支持window对象,它表示浏览器窗口 BOM(browser Object Model)是指浏览器对象模型,它使JavaScr ...
- bsd socket 网络通讯必备工具类
传输数据的时候都要带上包头,包头有简单的又复杂的,简单的只要能指明数据的长度就够了. 这里我写了一个工具类,可以方便地将整型的数据长度转换为长度为 4 的字节数组. 另一方面,可以方便的将长度为 4 ...
- 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化
在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中. 今天我们就简单讲一下Python下如何创建文件.文件夹,今后就可以用上 ...
- Python学习笔记(三)windows下安装theano
2016.6.28补充: 不论是实验室的电脑还是我的笔记本,只要是windows下,theano.test()都是不通过的.虽然能使用一些theano中的函数,但是我感觉很不好. 所以还是转Ubunt ...
- alert弹窗方法1
1.代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv=&quo ...
- 第六课作业——主从复制和sentinel高可用
第六课时作业 静哥 by 2016.3.21~2016.4.3 [作业描述] 1.配置主从复制,截图看日志 2.配置一个哨兵,一主一从结构,并实现主宕机从接管的过程,截图显示 3.总结哨兵的原理 ...
- Springboot中读取自定义名称properties的
Springboot读取自定义的配置文件时候,使用@value,一定要指定配置文件的位置! 否则报错参数化异常!
- CSS3选择器:nth-child与:nth-of-type区别
一.:nth-child 1.1 说明 :nth-child(n)选择器匹配属于其父元素的第N个子元素,不论元素的类型.n可以是数字.关键词或公式. 注意:如果第N个子元素与选择的元素类型不同则样式无 ...
- Qt 如何获取一个文件的 Icon 图标?
#include <QPixmap> #include <QString> #include <QFileInfo> #include <QFileIconP ...
- Vue表格中时间的处理
Vue中表格的数据应该来自后台数据库,然后从数据库中读取到的数据,时间格式可能有些不同,我们可以根据实际需要来对这个时间进行转化. 这里介绍一个js库,它提供了强大的日期处理功能,功能强大且只有2k大 ...