China Open source community
站内导航:
站内排行前50热点文章

精华文章  GDB调试精粹及使用实例
普通文章  STL中map用法详解
精华文章  负载均衡软件比较(Hapr...
普通文章  头文件的重复引用
普通文章  递归函数的调用过程
普通文章  TCP三次握手/四次挥手详解
普通文章  贪心策略的理论基础——...
普通文章  BMH算法原理与实现(模...
普通文章  排列组合与回溯算法
普通文章  DP动态规划
精华文章  Android线程模型
普通文章  Linux socket编程之套接字
普通文章  Linux内核中的红黑树
精华文章  linux下使用minicom的几...
普通文章  Java开源Html解析类库
精华文章  enum类型的本质
普通文章  memcached server LRU ...
普通文章  linux设置环境变量的方法
普通文章  android核心模块及相关...
普通文章  linux源代码包(.tar.g...
普通文章  L.A.M.P配置过程
普通文章  在ubuntu9.10下安装QT4...
普通文章  C/C++程序员常见面试题...
普通文章  gcc编译过程概述
普通文章  python的memcache和jso...
普通文章  应用程序二进制接口---ABI
普通文章  linux内核编译问题
普通文章  Java多线程实现简单实例
普通文章  Python程序员常用的IDE...
普通文章  brk和sbrk详述
普通文章  优化C语言代码(程序员必...
普通文章  python非贪婪,多行匹配...
普通文章  函数指针传递和全局指针...
普通文章  Unix操作系统的历史演变
普通文章  网络编程之C10K问题
普通文章  发行版发布:CentOS 5.4
普通文章  在windows中构建gtk开发...
普通文章  i++循环与i--循环的执行...
普通文章  关于Qvariant类--万能的...
普通文章  Debian sudo 设置
普通文章  busybox1.15.x 交叉编译
普通文章  关于僵死进程zombie
普通文章  递归思想的妙用
普通文章  判断链表是否存在环并找...
普通文章  Android Porting Exper...
普通文章  关于/etc/bashrc和$HOM...
普通文章  [翻译]Django初窥
普通文章  Python list的排序
普通文章  Django实现大数据量分页...
普通文章  Debug方式取代printf满...

 
 
 
当前位置: 首页 >> 网络协议与安全 >> P2P直播的技术原理和改进
 
 

P2P直播的技术原理和改进

作者:      来源:zz     发表时间:2006-07-25     浏览次数:      字号:    

原文地址:http://bbs.tvkoo.com/dispbbs.asp?boardID=3&ID=4017&page=1

最近对P2P直播技术进行了一些研究,谈谈个人对Tvkoo软件的优缺点的看法,一方面希望Tvkoo能做的更好,另一方面也抛砖引玉一下:

P2P直播的技术难点有:
一、防火墙的穿透:超过90%的电脑都在防火墙后面,如果让2台在防火墙后面的电脑能够实现P2P互联,这是一个技术的难点。有2种方式:

1. 要求用户配置TCP端口:BT和电驴采用的方式,配置需要网络专业知识。一般做法是通过在防火墙上开启TCP端口来实现,如果开启了端口或者本身有Internet IP地址的,为高联通性电脑;在防火墙内并且没有开启TCP端口的电脑,为低联通性电脑。高联通性电脑可以和其它的高联通性电脑已经低联通性电脑进行P2P;而低联通电脑只能和高联通性电脑进行P2P。因此在BT、电驴中,有Internet IP或者已经在防火墙上开启端口的电脑速度很快,而在防火墙后面的电脑(一般为局域网上网方式)就比较慢了。而通过局域网方式上网的电脑超过70%,如果没有网络基础,或者没有网管特殊配置,只能处于低联通性,速度很慢。

2. 防火墙自动穿透。无需用户配置,自动让2台在防火墙后面的电脑能P2P互联。P2P连接可以使用TCP和UDP 2种方式。由于WinXP SP2限制了一个应用程序的TCP连接数,因此采用TCP方式进行P2P的话,要安装TCP限制的破解软件。而Tvkoo是使用UDP进行数据传送的,因此不会有TCP限制。这是为什么有些用户说:通过Netstat看不到很多的TCP连接而怀疑Tvkoo是不是P2P软件的原因。

Tvkoo的P2P穿透力是我见到最强的软件了,当然由于没有使用TCP,使得在仅允许HTTP访问的防火墙后面的计算机没有办法访问。Skype在P2P穿透时有一个技巧,让一些有Internet IP的电脑使用TCP的80端口,在仅允许HTTP访问的防火墙后面的电脑通过类似HTTP的访问方式连接这些80端口的电脑进行P2P连接。Tvkoo也可以考虑一下这个方式。

二、WMV格式的分析

目前P2P直播都是使用WMV格式,通过模拟HTTP服务器的方式,把WMV数据流传送给Media Player。这是P2P直播的关键点。需要将Media Encoder发出的HTTP数据进行拆包,然后组成30秒-1分钟的P2P数据块,然后通过P2P方式将数据块发送给Tvkoo客户端,Tvkoo模拟成HTTP服务器将传输完成的数据块发送给Media Player。这部分Tvkoo做的也不错。

三、如何有效的选择P2P的节点

这是Tvkoo的弱项。因为一台电脑在P2P传输时,最多连接几十台其它的电脑。当几万台电脑同时传送一个P2P数据块时,要有一个优化算法。比如:美国有5000个用户,中国电信有5000个用户,中国网通有5000个用户,而每个用户最多只能连30-50个节点,如果不凑巧,一个电信的用户连接了20个网通的用户和30个美国的用户,就不断的出现断断续续的情况了。这就是为什么人一多,Tvkoo就卡,并且Tvkoo要把国外IP封掉的原因了。

有什么好的方式解决这个问题呢?我先抛砖引玉一下:

(1)    作为P2P直播的营运商,可以多设几台P2P种子服务器,分布在不同的网段中。比如:北方网通设一台(组),南方电信设一台(组),种子的内容是一样的。种子服务器多了,可以降低优化算法的难度。

(2)    种子服务器和普通节点的优先级:种子服务器的优先级总数低于普通节点的,如果普通节点的速度快了,就减少从种子服务器获取的数据量。

(3)    全球IP地址表。P2P节点仲裁服务器中,应该有一个全球IP地址表,分中国大陆、香港、台湾、北美、欧洲、澳洲、其它。中国大陆先按照营运商分:电信、网通、铁通、联通、教育网等,再按照省份分类。(网上有下载,可以整理)

(4)    高速网段表。在P2P访问中,节点动态地将速度快的其它节点IP地址传回服务器,服务器根据全球IP地址表算出网段,以网段-网段的方式记录在数据库中。

(5)    当一个新用户连入节点时,在全球IP地址表中找到最近的节点,按照比例依次分配最快网段的节点;最近的节点;差一个级别的稍近的节点;随机节点以及种子服务器。

(6)    P2P在数据传送中,可以将30秒视频作为1块数据包;数据包中按照每16KB作为一个数据块。每个时间段(如2秒),本节点向其它节点交换一下数据块的传送情况,然后计算一下数据包中每个数据块的拥有率,优先传送拥有率低的数据块。在拥有率相当的情况下,随机选择。

(7)    在数据交换中,对于传送慢的节点,定期剔除,然后问节点仲裁服务器要新的节点。

(8)    如果数据包中小于10%的数据块没有传送完毕,在时间充足的情况下,对于余下的数据块,可以同一个数据块向多个节点请求。

(9)    节点仲裁服务器也会将新的P2P节点强行加载到另一个节点上,但不能超过节点最大连接数。

编辑 webmaster

 
 
 
评论
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •  
    中国源码网 - www.YuanMa.org - 中国 开放源代码+编程 社区