1、高质量IP视频直播特点 
随着网络技术的发展与普及,全程数字化、网络化的视频直播业务已开始应用,如目前在开展的IPTV业务、PC终端上的实时广播业务、广播式远程会议业务等。这些业务由于实时性、视频质量要求均较高,所以在IP网络传输所占用的带宽也较高。 
2、组播技术在实现高质量视频直播存在的问题 

  利用流媒体技术把实时节目(如现场直播的体育节目)传送到用户端,由用户通过电脑或加上机顶盒的电视机收看是流媒体的重要应用。目前主要的网络传输方式包括单播和组播。由于单播需要建立服务器和客户端的点对点连接,对服务器及网络资源的要求较高,所以在大量用户同时收看同一实时节目的场合较适用组播技术。 
  (1)组播的可靠性不高 
  (2)设备对组播的支持不足 
  (3)组播的可控可管理能力较弱 
3、P2P技术在实现高质量IP视频直播存在的问题 
  P2P技术具有低成本、高扩展性、高服务质量、高安全性等先天优势,能够解决基于C/S架构和CDN架构存在的不可扩展性、投资回报率低、热点效应等问题。其成功部署应用将促进媒体服务的开展,有助于优化网络流量,提高现有资源利用率,节省投资,带来良好的经济和社会效益。但以P2P实现高质量视频直播承载也存在相当的劣势,主要包括: 
  3.1 在ADSL环境下成本优势不明显   
  3.2 网络流量流向难以控制 
  3.3 P2P与组播结合实现高带宽IP视频直播技术思路 
  通过前面章节分析可以发现,P2P与组播在承载高带宽IP视频直播方面各有优点,也均有不尽人意的地方。二者是否能结合在一起,利用各自的优点而克服其主要缺点?由于P2P是一种应用层的技术,而组播主要是网络层的技术,我们设计了一个P2P环境下的组播传输系统,很好地解决了高带宽IP视频直播目前的问题。 
其主要逻辑组件包括: 
  (1)组播服务器。组播服务器负责发送组播流。组播服务器可以是一个分级的逻辑结构,用户可通过多种方式从中心内容服务器取得内容,如直接与中心内容服务器建立组播路径,或中心内容服务器通过单播传送至边缘内容服务器,用户端到边缘服务器建立组播路径等,这由具体的网络实现决定。 
  (2)管理服务器。管理服务器负责对整个系统的用户进行管理。 
  (3)客户端。客户端提供内容的本地存储,并与其余客户端建立P2P关系,为对方提供节目。 
  客户端接收P2P环境下的组播关键流程如下: 
  (1)客户端1接收组播并缓存 
  客户端1通过IGMP(Internet Group Management Protocol,互联网组管理协议)请求加入组播组,缓存了一定时间的节目后再开始播放。 
  在客户端有两个缓存,一个缓存保存了接收到的数据包,称为原始缓存;另一个缓存把原始缓存的内容复制过来,并解包合成工作的内容,称为播放缓存。 
  原始缓存通过检查UDP包的包号知道哪些数据包是否缺失,如果原始缓存发现了有丢包时,就会向群内用户发送请求重发。当原始缓存的包完整后,原始缓存把数据包复制到播放缓存,由播放缓存解包合成图像内容。 
原始缓存及工作缓存的时间可根据网络的状况调整。缓存结构应与具体P2P应用软件的分片方式相适应,缓存的大小应为P2P应用软件分片大小的整数倍。缓存的数据先不进行拆包的工作,保留UDP包的包号,播放时把缓存的内容复制到播放缓存再进行拆包合成。 
  (2)多个客户端接收同一组播内容 
  客户端2同样加入这个组播组,其过程与客户端1相同。以后加入的客户端过程类似。 
  (3)管理服务器把客户端组成群 
  管理服务器把几个客户端归成一个群(数量可调,建议5个),在一个群内的用户建立点对点的关系。 
  群指一组建立点对点关系的客户端,建立群的目的是为了组播重传,当群中的一个用户丢失某个数据包时,它将向群内用户发送请求重发,群内用户从自己的缓存中为其提供相应数据。 
  考虑到组播丢包时可能是数据网的某个设备或节点出现问题,所以群内用户分布应跨城域网,以避免城域网内某个设备或节点出现问题时影响用户使用组播。 
  群的建立由管理服务器统一调度。 
  (4)群内组播重传机制 
  当客户端1发现缓存上的缺少了某个包时(通过包号检查),它向群内的所有用户发送广播包,询问哪个用户有这个包,如果群内的某用户有,它将向客户端1发送这个包,客户端把这个包放入缓存。如果有多个用户发送了数据过来,客户端1将忽略后到的包。重发机制的过程如下: 
  ①客户端向群内的所有用户发送请求,请求别的用户为自己发送丢失的数据包,请求信息包括需要的数据的UDP包号; 
  ②群内用户接收到请求后,检查自己的原始缓存,如果有该丢失数据包,则向请求用户发送该丢失数据包,发送时把丢失的整个UDP数据包(包括UDP包头)作为重传数据包的Payload(净荷)进行传送; 
  ③请求重发的客户端接收到重传的数据包后,把它放入原始缓存相应队列; 
  ④请求重发的客户端只使用首先收到的重发数据包,丢弃其余数据。