开发者学堂课程【高校精品课-华中科技大学 -智能媒体计算:P2P 视频流与 HTTP 视频流】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/811/detail/15720
P2P 视频流与 HTTP 视频流
内容介绍
一、P2P 视频流
二、HTTP 流媒体
一、P2P 视频流
目前视频直播软件使用的技术主要是 p2p 视频流或者 HTTP 数据流。1、基本思想
组播的技术,利用组播参与的终端主机叫对等体,a 在看相应的内容,b 也在看相应的内容的时候,即可利用终端主机贡献上行链路带宽。使用数据的可用性来指导数据流,而不是在高度动态的环境中不断的复制结构,这是与运用层组播不同的地方。
2、与运用层组播对比,P2P 视频流有两个特点。
(1)没有建立和维护用户传输数据的显示结构。
(2)设计简单,不需要管理每一个数的结构,而运用层组播中维护树有很大代价。
3、发展
(1)P2P 流的算法已经有大概二十年,早期是用 gossip 算法,就是推的技术,叫push。节点将新的消息发送给一组随机的节点,随机推送就会导致高带宽的视频冗余。不能直接应用于视频内容分布,因此冗余度较高。
(2)随着技术的发展,目前改用 pull 即拉的方式,推是被动的,而拉是主动的。每一个节点维护一组合作伙伴,定期交换可用的数据来避免冗余,鲁棒性较强,同时设计简单,这种比较容易实现。
(3)P2P 早期在直播里面应用很多,比如一个寝室都在观看相同的足球比赛,如果不用 P2P 的技术就都要从远端的服务器,无论是代理缓存还是 cdn,都要在最近的服务器上取相应的内容。
而 P2P 视频流,播放的终端会缓存或者存储一部分已经播过的数据。装了 P2P 软件以后就会去寻找最近的哪些主机也在播放相应的内容,尤其是直播,直播在相应的时间段,大家都在看相应的内容。
比如世界杯,隔壁寝室或者旁边的同学就在看,那只要有一个人取到,另外一个同学不用再向代理缓存或 cdn 去取数据,在主机里传输数据即可。如此主干网络不需要占用,远端的主机负载就小。
4、典型事例
以早期的 coolstreaming 举例,它是第一个用于视频流的大规模数据驱动的 P2P 系统。
(1)它采用了基于网格的拉动式技术,有三个主要模块。
①成员管理,就是维护其他覆盖节点的局部视图。哪些人同时在用这个终端软件,是不是在看类似相同的内容,这就是成员的管理。
②合作伙伴的管理,就是管理,建立和维护其他已知节点的局部视图。
③调度器,调度视频数据的传输,从哪一个主机,成员里调用哪些内容给特定的节点使用。
(2)成员和合作伙伴的关系
每一个节点都有唯一的标识符,维护一个成员缓存,叫做 member cache。通常mcache 就是一个成员。新节点加入的时候首先要联系源节点,源节点就在 Mcache里面选择一个代理节点,将新的节点重定向到代理节点上,从而创建 Mcache。
每个节点定期生成一个成员消息。成员消息不存在说明创建条目成功,显示存在就是重复。不存在则点击同意创建,更新 mcache 的列表,新成员即可加入进来。
通过 gossiping 算法将成员信息转发给其他节点,节点充当代理,同时条目存在于伙伴列表里。
(3)缓冲区的映射表示和交换。视频流被分成均匀长度的片段,片段在每一个成员的终端主机里存留一点,实际上是以终端主机的存储核心换取播放或者带宽的需求。
缓冲区中的片段的可用性,由缓冲区的映射进行表示,成员之间读取时,哪一个主机上有特定的片段,映射表里会记载清楚,每个阶段节点不断地与合作伙伴交换缓冲区映射,可以维护资源列表,同时可以对资源进行调度。
(4)调度算法
①与文件下载的区别。文件下载时视频流的播放是有顺序的,前面播放过的在实时点播里就不用再播放。文件下载时,bittorrent 下载软件技术把一个文件分成很多片段,没有先后顺序,下载完成后再进行拼接。但是在视频播放的时候,一定是先观看的内容先传输,后观看的内容后同步。
②用途。调度算法用途是给定节点及其合作伙伴的缓冲区,生成用于获取预取片段的调度。调度也可以在同构和静态网络里,是一个简单的循环调度。
如果在异构和动态网络里有智能调度算法,异构环境下,存的东西的质量不同,网络带宽不同,就要在映射表的成员里找到满足相应节点的数据是哪个成员的哪一段数据,要选择一个最适合的。
③现在 P2P 的技术把这个问题处理的很好,它满足两个约束条件,一个是每个段的播放截止时间,还有来自伙伴的异构流的带宽。
④它采用启发式的方式来快速响应。
计算每个段潜在的供应商或者潜在的伙伴是谁,有多少个数量可以选取,选择具有最高带宽和足够可用时间的成员来提供数据。
(5)故障恢复和伙伴关系的细化。
①针对情况
在网络传输中,有的点播放过程中网络出问题,或者机器出问题从而关机重启,原来那个就不存在了,假如另一个人正在用这台机器的数据就会掉,因此有故障时要想办法从其他节点选数据。
②恢复机制
节点可能会遇到意外故障,正常或者突然离开,就要有恢复机制,让受影响的节点利用其余伙伴缓冲区的映射来重新进行调度。
③伙伴关系的细化,就是每一个节点定期从成员列表中随机选取节点来建立新的伙伴关系。所以节点随时可能出问题,出问题以后要从其他的伙伴中获取到内容。
5、长处与问题
(1)混合树和网格覆盖
如果用 P2P 中树的结构进行组播,虽然有效,但代价较大,并且不稳定,维护开销大,带宽利用不足。
为避免此问题,P2P 中采用了网格概念,这个结构比较简单,但是会频繁交换缓冲区,导致大量开销。
若利用树状和网格两个性能,把树和网格覆盖算法进行合并,在树的基础上增加网格即可改善。把流分成不同的切片,通过单独的树进行传输,基于主干的方案进一步组成网格覆盖。
左边是混合算法。
比如A节点出问题掉了,原来从 A 取数据的就要从旁边去取,比如说 B 节点出故障,那通过网格,原来跟上面节点和左边节点的交互就没有了。那依赖于 B 节点的就可以选择其他的方式重新构建。
(2)问题
P2P 方式在直播里也好,还是在组播中,特定的时间里不同用户的间隔时间不是很长的情况下,也可以用组播的技术。
①但问题是易用性不足,必须要装客户端的软件用于实现前面讲述的功能。比如用哈希表来进行维护,也需要安装客户端软件,不能打开浏览器使用。
②另外还有版权的问题,看这个视频是因为有版权,而其他的成员可能没有版权获取片段,会造成侵权,用户之间自主交换内容就会导致非法的文件共享,版权难以控制,如果要控制,系统就要做复杂。
③另外有安全的威胁,通过开放的端口可以在两个方向进行穿越,逃开 nat。既然有这样的情况,互联网为了保证安全,就会在防火墙里加以限制,交换就会被阻断。
为了避免这种情况,可以基于 HTTP 的方式进行流媒体的播放。
二、HTTP 流媒体
HTTP 流媒体是超文本传输协议。利用它的优势来传输资料,原本超文本传输协定是用来传输多媒体内容的。
1、好处
(1)HTTP 是防火墙友好方式,不会被限制。
(2)服务器资源广泛
(3)web 的基础设施完善,成本低,不需要装客户端软件。
2、不足。
它本身也存在自己的不足。
(1)不是为流媒体设计的。它本来是为文本设计的。
(2)缺少为交互式流控制提供的信令机制。底层的协议 TCP 最初也不是为连续的流媒体设计的。
3、支持关键
(1)要服务器传输视频,视频要在缓冲区里面分成一定的片段。把流媒体分解成一系列小的片段,不够小就不能用这个协议。
(2)每个下载包括流的很小的一部分。
(3)使用 HTTP 的一系列的 get 指令,播放已经下载的小文件的同时,采用预取技术逐步下载其他的小文件。
4、动态自适应流传输
HTTP 上的动态自适应传输 dash 有效地解决了对于流媒体的支持。相关技术可以查阅相关资料。
(1)它是 Mpeg 专家组开发的,在2012年四月正式发布。
(2)它定义了一系列的服务器,用户,描述文件,实现这种协议有效提升了流媒体传输的性能。dash 具体的自适应算法留给了自适应的应用去实现。
(3)如果做一个应用,可以利用这里面的协议算法,自己写算法来实现。
作为一个新兴且开放的标准,它是一个非常好的研究方向,在近几年应用得比较好,例如速率的适应原件,速率的适应策略,自适应视频传输等都很好地用在了 http 流媒体传输上。