本文是我一年前做一个p2p解决方案的时候写的,现在翻出来有些基本概念已经忘记了,才知道以前竟然还做过这个,惊讶中啊:
简介:
此方案由开放源代码项目P2P-Radio修改而成,(P2P-Radio是一个点对点音频和视频广播系统,功能有freeloader检测,流式传输,SHOUTcast 支持,一个易于使用的GUI,以及一个单独的监视应用程序来显示当前P2P网络的结构。-----------摘自P2P-Radio项目文档)下图展示了一般网络结构:
该框架安排有一个监控模块,每个加入此P2P网络的节点都会在此模块有所表示从而全面展示了全网结构
工作原理:
1. 虚拟资源服务器启动,随即从真实资源所在地下载流数据。
2. 虚拟资源服务器启动TCP/UDP守护收发线程,等待客户连接。
3. 如果使能监控,则虚拟资源服务器第一个加入到监控服务的树形结构中。
4. 客户连接虚拟资源服务器,同时客户启动一个接收线程,实时接收媒体流并载入本地缓存,同时客户要启动同上虚拟资源服务器一样的TCP/UDP收发线程,这样它便可以作为资源提供者服务其它节点,如果使能监控,则每个连接节点都会作为被连接节点的子节点加入监控树形结构。
5. 如果使能监控,数据的每次传输以及发生的每个事件(如加入,退出,重定向等)都会在树形结构有所体现,并打印日志。
6. 默认地,代码中会启动本机默认播放器播放流媒体,但是也可以通过Web方式用浏览器插件播放,因为流媒体本身就是在http上传输的,这将非常方便。
优点:
音视频流在http上传输,点对点传输。对于播放实时流媒体可以节省大量带宽。网络拓扑监控与数据传输分离,有利于扩展。
缺点:
必须有资源服务器,因此存在资源服务器处的带宽瓶颈
测试
经过测试在局域网中性能很好,具体方案如下:
一台主机充当虚拟资源服务器,将资源从真正的服务器下载到本地缓存,连续下载,基于时间戳实时更新流数据,局域网内其他主机中的一台连接此虚拟资源主机,另外的主机可以随意彼此连接。
1. 节点1:ip-10.2.1.56,port-2000, 虚拟资源服务器 à 远程主机的音频
2. 节点2:ip-10.2.1.65,port-2000, 一般节点 à 节点1
3. 节点3:ip-10.2.1.62,port-2000, 一般节点 à 节点2
4. 节点4:ip-10.2.1.56,port-2490, 一般节点 à 节点3
5. 节点5:ip-10.2.1.62,port-2490, 一般节点 à 节点4
6. 节点6:ip-10.2.1.56,port-12533,一般节点 à 节点2
7. 节点7:ip-10.2.1.65,port-2490, 一般节点 à 节点3
8. 在节点2用windows media player打开http://10.2.1.62:2490/stream.mp3
9. 节点7自动打开windows media player播放http://10.2.1.62:2001/stream.mp3
以上测试通过,播放流畅,不足之处在于音乐有些走调,不知原因,解决中,另外就是偶尔有爆破音,不能确定原因,解决中。