Peercast
文章平均质量分 60
bbisonic
这个作者很懒,什么都没留下…
展开
-
关于Peercast注释版的最后声明
Peercast注释版是我在做本科毕业设计时分析Peercast的一些成果,当时阅读代码的时候做了注释,然后写了一些分析文章。本来想发到自己的博客上保留一份记录的,不想后来竟成了很多人参考Peercast的资料。这点上我是有些惭愧的,因为很多不成熟的想法和不正确的观点可能会误导大家,也希望大家能够分辨吧。本来想形成一份比较完整的注释版,但后来由于毕业以及转变研究方向等因素已经没有继续做下去了。不过原创 2008-01-21 13:08:00 · 4924 阅读 · 3 评论 -
Peercast整体架构分析
现在的P2P流媒体主要有两种架构:1.基于树的架构。这是由流媒体的多播演化而来的,也就是播放同一频道的节点组成一棵树,提供广播的源节点为这棵树的根。每个节点可以为下层几个节点提供数据。但这种架构仍然会对上层的结点造成太大的负担,而且在节点动态加入和退出的情况下树不易维护。另外还存在传输延迟问题,所以树的高度不能太大。2.基于图(MESH)的架构。通过邻居发现寻找相关的节点。这种架构可以实现原创 2006-04-18 16:40:00 · 6384 阅读 · 11 评论 -
Peercast收听电台的源代码流程分析
以收听JOKV-FM(TEST)为例,在YP上点击Play,则其URL地址为peercast://pls/25838B9F1EAE27079B793C9FBA0E4156?tip=222.148.187.176:7144case WM_COPYDATA: { COPYDATASTRUCT *pc = (COPYDATASTRUCT *)lParam; LOG_DEBUG("UR原创 2006-04-12 19:19:00 · 4483 阅读 · 24 评论 -
用Peercast广播视频文件(WMV格式)
1.安装Windows media encoder2.新建会话中选择自定义会话3.源来自选择文件,在文件名中点击浏览选择要广播的视频(WMV)4.在输出中选择自编码器拉传递,端口号填80805.点击应用6.在Peercast的Broadcast页面中URL填入http://localhost:8080,其他项根据你的选择设置,然后点击Create Relay7.在WIndo原创 2006-04-12 16:40:00 · 3551 阅读 · 12 评论 -
关于Peercast注释的声明
由于Peercast注释的工作还在进行中,预计五月份注释完毕。所以希望得到Peercast源代码注释版的朋友请耐心等到五月份的发布。另外,由于源代码量庞大,所以注释工作量也挺大。所以我希望以一种开源的方式,大家一起参与进来注释代码。每个人注释一到几个文件,这样我们可以更好地为后来的朋友们服务。有兴趣参与注释代码的朋友请在我的博客上留言。或者联系我。邮箱:hcwang@cuc.edu.c原创 2006-04-11 12:24:00 · 1649 阅读 · 13 评论 -
Peercast各个版本的更新记录
v0.102New release: Fixed: A problem where channels could connect back to themselves and endlessly stream in a loop. Fixed: Initial auto-Find retry problem. Sometimes it would just give up and yo原创 2006-04-12 16:30:00 · 6099 阅读 · 2 评论 -
Sys.h源代码分析
String类:完成字符串的一些定义和操作Random类:可调用next方法返回随机数Sys类:提供一些系统功能,如线程操作、返回随机数、返回时WEvent类:WLock类:对临界区操作的封装,用于线程同步ThreadInfo类:线程信息原创 2006-04-06 16:07:00 · 5536 阅读 · 0 评论 -
Peercast的命令行使用方式
Peercast也可以从命令行启动,有如下几种参数选择Peercast:正常方式启动Peercast -inifile:启动,并设置配置文件参数Peercast -kill:启动后立即关闭Peercast -url:按照频道的URL地址启动Peercast并播放相应电台Peercast -multi:以非互斥方式启动具体实现如下:int APIENTRY WinMain原创 2006-04-06 14:25:00 · 2414 阅读 · 0 评论 -
Peercast的http.h源文件分析
定义HTTP消息:static const char *HTTP_SC_OK = "HTTP/1.0 200 OK";static const char *HTTP_SC_NOTFOUND = "HTTP/1.0 404 Not Found";static const char *HTTP_SC_UNAVAILABLE = "HTTP/1.0 503 Service Unavailabl原创 2006-04-04 21:36:00 · 1787 阅读 · 2 评论 -
Peercast的日志实现
这里以输出DEBUG信息为例子。输出日志函数为LOG_DEBUG。具体使用方法为LOG_DEBUG("Play request: %s",pc->lpData);void LOG_DEBUG(const char *fmt,...){ if (servMgr) { if ((servMgr->showLog & (1pauseLog)) { va_list ap; va_s原创 2006-04-06 18:50:00 · 2607 阅读 · 8 评论 -
Peercast中用到的几种数据结构
链表:Channel类、ChannelHit类均用到了链表数据结构以Channel类为例class Channel{ Channel* next;}ChanMgr维护一份Channel的链表,并完成添加、删除、统计等操作。这里用链表而不用数组是考虑到频道频繁的添加删除操作和空间的节省。其中channel为头指针,添加新频道采用头插法,统计频道数目采用遍历的方法。class原创 2006-04-24 15:18:00 · 1471 阅读 · 8 评论 -
Peercast中“流”概念的分析
流在Peercast中是一个很重要的概念。凡是数据从一个地方传输到另一个地方的操作都是流的操作,所以就网络交换数据而言,例如包的发送和接收,都可视为流操作。Peercast中用Stream类来提供一个界面。其继承类有FileStream和ClientSocket。Stream类提供读取和写入各种不同类型数据(ID4类型、字符型、整型、字符串)的操作,例如 long readLong()原创 2006-04-25 21:25:00 · 1510 阅读 · 2 评论 -
Peercast播放模块分析
这里以YP上的JOKV-FM(TEST)为例当点击YP上的一个频道时,其访问地址为peercast://pls/25838B9F1EAE27079B793C9FBA0E4156?tip=222.148.187.176:7144peercast://指的是peercast协议,由于peercast注册了此协议,所以在IE中输入这个地址时会自动启动peercast并把这个地址传送给peerca原创 2006-05-02 16:17:00 · 5131 阅读 · 49 评论 -
如何下载Peercast源代码
由于Peercast源代码是用的SVN下载方式,所以可能还有很多朋友们不知道如何下载最新的Peercast源代码,在这里我简单地介绍一下SVN是个版本管理工具,开源代码的版本管理一般采用CVS和SVN工具如果在WINDOWS环境下:1.下载 Tortoise SVN:http://prdownloads.sourceforge.net/tortoisesvn/TortoiseSVN-1原创 2006-07-04 14:54:00 · 6020 阅读 · 25 评论 -
阅读Peercast源代码的一些经验
Peercast源代码是我第一次看超过2万行的代码,在这期间收获很大,也积累了一些经验。Peercast源代码是我第一次看超过2万行的代码,在这期间收获很大,也积累了一些经验,在此与大家分享,希望为大家看源代码提供一些帮助和参考.这里主要介绍的是在Visual Stdio6.0环境下,看Peercast的win32版本代码的一些经验1.拿到源代码的第一个步骤是编译并运行,而且你首先要对如何原创 2006-07-04 13:41:00 · 4654 阅读 · 6 评论 -
Peercast核心代码执行流程
执行的流程大致如下:Peercast启动时创建servMgr对象servMgr启动两个服务器线程,分别为servProc和idleProcservProc启动两个监听servent,分别用于监听7144和7145端口监听servent启动服务器监听线程Servent::servProc当服务器监听线程监测到有新连接进入时,给这个连接分配新的servent新的servent初始化连接信息,并启动in原创 2006-07-03 15:27:00 · 4022 阅读 · 1 评论 -
PCP协议实现详解
PCP协议,也就是Peercast Protocol,是Peercast用来在节点间传送信息所定义的协议。协议定义的字段在pcp.h中,本文以如何在节点间传递节点信息(也就是ChanHit)来解释PCP协议的定义、运行及如何编程。//ChanHit信息static const ID4 PCP_HOST = "host";static const ID4 PCP_HOST_ID = "id"原创 2006-06-06 12:13:00 · 13142 阅读 · 23 评论 -
五天
我惊讶于博客已经五天没有更新了,而我却没有一点感觉.我以为昨天我还在写博客呢,那么,这五天的时间我究竟做了些什么?人有时候就是这样,不是你没有时间,而是你没有心情,却总拿没有时间来做借口.那我也暂时写个借口吧,忙于论文,真是,没有时间啊!然后觉得再不上来冒个泡别人都以为我人间蒸发还是怎么的,所以没什么内容可写,也就上来逛逛咯. 等6月份论文答辩完毕还会推出源码分析的部分文章,请原创 2006-05-26 12:48:00 · 1482 阅读 · 12 评论 -
关于Peercast一些观点的更新
Peercast原本是基于Gnutella协议的。但发展到现在,已经跟Gnutella没有多大关系了。相关的地方只是在广播机制上采用的仍然是泛洪机制。Gnutella协议是基于图的协议。 而现在的Peercast是基于树的转发机制,类似于IP组播。所以严格来说Peercast并不能称之为P2P流媒体,因为只从一个源获得数据,无法体现P2P中加入人数越多越流畅的优势。 P原创 2006-05-16 13:05:00 · 2496 阅读 · 14 评论 -
在局域网中搭建自己的YP服务器
有些朋友想做一些Peercast在局域网中的应用,使每个人可以发布自己的网络电台,并可通过YP来查找和访问已发布的网络电台.这里介绍如何在在局域网内搭建自己的YP服务器.本方案的平台是WinXP+IIS5.1+PHP5.1.4,至于其他平台如Apache+PHP方式大家可以参考网上的相关文档所谓YP指的是Yellow Page,也就是一个目录服务器.1.安装IIS服务器2.安装PH原创 2006-05-13 08:12:00 · 17511 阅读 · 185 评论 -
Peercast的改进分析
Peercast可以说是一个实验的产品,而不是一个稳定的商业版本。所以无论在稳定性还是在性能上都存在一定的问题。这里提出Peercast存在的一些问题,并考虑相应的改进方法。希望可以为大家改进Peercast提供一些帮助。先解释几个名词:父节点:也就是此时你在向别人传输数据。一个节点可以同时是父节点和子节点。子节点:也就是此时你在接收父节点传输给你的数据。基于文件传输的流媒体传输:原创 2006-05-02 10:53:00 · 3397 阅读 · 3 评论 -
今天做了一下Peercast的电视直播测试
硬件设备:服务器+视频采集卡+普通电视软件设备:Windows XP + Windows Media Encoder 9.0 + Peercast实现步骤:1.用视/音频线将电视AV输出连接到视频采集卡上。2.在Windows media encoder中新建会话选择广播实时事件,设备选项中选取相应的视频采集卡,广播方法中选择自编码器拉传递,广播连接端口选择8080(其他未用端口也原创 2006-05-01 00:29:00 · 2781 阅读 · 3 评论 -
WinSock I/O方法的非阻塞模式
原创 2006-04-06 15:26:00 · 1377 阅读 · 0 评论 -
wsocket.h源文件分析
WSAClientSocket继承自ClientSocket,完成对基本WinSock函数的封装。ClientSocket只是提供一个接口,具体实现由其继承类WSAClientSocket(WINDOWS)和UClientSocket (UNIX)实现这里先介绍一下Host类:unsigned int ip; //主机IPunsigned short port; //主机端口号 u原创 2006-04-06 13:00:00 · 3330 阅读 · 0 评论 -
Peercast接收到GnuPacket的处理过程
对于包是丢弃、广播或者是继续路由是通过设置R_TYPE类型来判断的。这是在GnuStream类中定义的,其中GnuStream完成收包、发包、处理包等操作enum R_TYPE { R_PROCESS, R_DEAD, R_DISCARD, //丢弃 R_ACCEPTED, //接受 R_BROADCAST, //广播 R_ROUTE, //路由 R_DUPLICATE,原创 2006-04-02 14:11:00 · 1448 阅读 · 0 评论 -
如何用peercast实现转播
如果你想转播一个在网上已经存在的音频或视频流,那么这个操作非常简单。首先在peercast菜单中选择Advanced->Broadcast在弹出的页面中填上相关的信息,最重要的URL项填上已经存在的音视频流地址,例如http://ccd.zjonline.com.cn/mp3/agtbw.mp3,再填上其他的相关信息点击Create Relay,创建成功后你可以在GUI窗口中看到你正在原创 2006-04-02 09:45:00 · 1421 阅读 · 0 评论 -
Peercast的PUSH实现方式
防火墙后的客户机 并非总是在初始化一个文件下载后都可以与Gnutella客户机建立直接连接。客户机可能在防火墙后并不允许通过它的Gnutella端口进入的连接。如果一个直接连接不能建立,客户机若想下载文件可能会请求共享文件的客户机采用“推送”方式来代替。一个客户机可以通过发送一个Push文件推送请求到发送QueryHit请求的客户机处来实现。作为Push请求目标的客户机(在客户机标志区标示原创 2006-04-01 16:50:00 · 1759 阅读 · 0 评论 -
Peercast的XML记录
xml version="1.0" encoding="utf-8" ?> - peercast> servent uptime="88" /> bandwidth out="0" in="0" /> connections total="1" relays="0" direct="0" /> - channels_relaye原创 2006-04-01 14:46:00 · 1422 阅读 · 0 评论 -
如何用Peercast发布和收听电台
如何实时广播MP3:所需软件:Peercast + Winamp + ShoutcastDSP1.安装Peercast(下载地址http://www.peercast.org/download.php)2.安装Winamp3.安装ShoutCastDSP4.打开Peercast5.配置ShoutcastDSP。在Winamp中点击选项->参数,在参数面版左边选择插件中的DSP音效,可以在右边看原创 2006-04-01 14:02:00 · 3845 阅读 · 30 评论 -
Peercast源代码文件结构分析
Peercast分为两个目录: core目录主要完成核心的操作 ui目录实现界面其中ui下面又可分为html目录和win32目录 html目录主要是一些网页,用来完成Peercast的相关配置,其中en为英文版本。 以下就en下的一些文件做一些介绍: win32目录下的文件: Simple.cpp 负责窗口界面的生成及一些相关启动管理 gu原创 2006-04-01 12:54:00 · 2086 阅读 · 0 评论 -
通过日志文件分析Peercast的HANDSHAKE过程
[DBUG] ShoutCast clientvoid Servent::handshakeHTTP(HTTP &http, bool isHTTP){ LOG_DEBUG("ShoutCast client"); handshakeICY(Channel::SRC_SHOUTCAST,isHTTP);}void Servent::handshakeICY(Channel::SRC_TYP原创 2006-04-02 19:32:00 · 1643 阅读 · 0 评论 -
Stream.h源文件分析
Stream.h包括四个类,分别是Stream、MemoryStream、FileStream、IndirectStream。其中MemoryStream、FileStream、IndirectStream均继承自Stream类。流涉及三个基本操作: 可以读取流。读取是从流到数据结构(如字节数组)的数据传输。 可以写入流。写入是从数据结构到流的数据传输。原创 2006-04-02 10:57:00 · 2191 阅读 · 0 评论 -
Peercast电台收听日志记录
Sun Apr 02 19:49:47 2006 [DBUG] URL request: 65051E037A7A2A3433090065051E037A?tip=211.132.83.9:7144"Sun Apr 02 19:49:47 2006 [DBUG] cmd: tip, arg: 211.132.83.9:7144"Sun Apr 02 19:49:47 2006 [DBUG] Add原创 2006-04-02 19:53:00 · 1504 阅读 · 0 评论 -
Peercast简介
PeerCast.org成立于2002年四月,它是一个非盈利性的站点,提供免费的P2P电台软件。这个项目的目标是创建一个容易使用、简单的和可靠的软件客户端,从而使任何人都可以广播流媒体,而不必耗费昂贵的服务器或者带宽。 PeerCast为广播者提供相当可观的节省,因为他们不必提供带宽给所有的接听者。一个单独的56K调制解调器即可用来为整个网络广播一个电台。 PeerCa翻译 2006-04-01 12:14:00 · 3050 阅读 · 8 评论 -
Peercast电台发布日志记录
Sat Apr 01 14:19:19 2006 [DBUG] Peercast v0.1216, Win32 Sat Apr 01 14:19:19 2006 [DBUG] SessionID: 00BDB06587292D7EAC25E32FA4086BA1Sat Apr 01 14:19:19 2006 [DBUG] BroadcastID: 0076C32245C53309317CD8CE原创 2006-04-01 14:31:00 · 2006 阅读 · 1 评论 -
CGI的基本编程要素
CGI的工作流程: 服务器根据客户端发送的请求方法(GET/POST/HEAD),将信息发送给CGI脚本。CGI脚本进行信息处理并将结果返回给服务器。服务器再对返回结果进行分析,然后发送给客户端。CGI脚本的解析流程:1.判断方法类型,根据不同类型做相应处理(GET/POST/HEAD)2.若方法为GET,则只需往页面中写入相应的HTML代码3.若方法为POST,先分析P原创 2006-04-05 22:51:00 · 1324 阅读 · 1 评论 -
通过日志文件分析Peercast频道的创建过程
由ChanMgr创建新频道并加入到当前的频道列表中[CHAN] New channel createdChannel *ChanMgr::createChannel(ChanInfo &info, const char *mount){ Channel *nc=NULL; nc = new Channel(); nc->info = info; nc->next = chann原创 2006-04-02 19:14:00 · 1580 阅读 · 0 评论 -
Channel.h源代码分析
ChanInfo类:保存频道信息::String name; GnuID id,bcID; int bitrate; TYPE contentType; PROTOCOL srcProtocol; unsigned int lastPlayStart,lastPlayEnd; unsigned int numSkips; unsigned int createdTime; STATUS原创 2006-04-02 19:04:00 · 1397 阅读 · 0 评论 -
IniFile.h源文件分析
peercast.ini的格式如下[Server]serverPort = 7144autoServe = YesforceIP = isRoot = NomaxBitrateOut = 0maxRelays = 2maxDirect = 0IniFile类定义三个字符串变量,currLine,nameStr,valueStrcurrentLine对应INI文件中的一行,例如serve原创 2006-04-02 13:20:00 · 2238 阅读 · 0 评论 -
common.h源文件分析
GeneralException类:其中StreamException继承自GeneralException,而SockException、EOFException、CryptException、TimeoutException均从StreamException继承GnuID、GnuIDList、Host类GnuID是唯一标识GnuPacket的ID号。由16位组成主要方法有voi原创 2006-04-02 11:30:00 · 2218 阅读 · 0 评论