p2p视频点播系统开发案例――Myseelite

项目地址:http://sourceforge.net/projects/myseelite/

 

1. MySee公司倡导的开源项目,目前国内功能最强大的一个开源系统。

2. 一个直播(也支持轮播、点播)系统

3. 直播源支持从摄像头直接获取,也可以是mms流。

4. 文档齐全

5. 《P2P网络技术原理与C++开发案例》等书籍有提到该项目

 

MySee公司简介:

1. MySee依托全国强大的媒体合作伙伴以及自主GDBS的网络传输技术,具备传播影视节目资源的合法资质

2. MySee网络电视拥有上海文广,优度宽频,凤凰网,等主流媒体的优秀节目资源

3. MySee自主研发的GDBS播放系统,利用先进的P2P技术,完全超越了传统带宽+服务器的传播方式,在视频流播放速度上处于世界领先水平。

4. 领导团队全部具有清华大学,北京大学的强大技术背景;

 

 

Myseelite子系统定义:

1、Capture  其主要功能是获取直播流,在Myseelite中,capture可以从windows media encoder(WME)和windows media Server(WMS) Helix中获取节目流

2、Super Peer 其主要功能是接收capture传送的流,作为整个P2P系统的源节点和缓冲节点,为Client提供直播流

3、Tracker 其主要功能是为Client提供下载信息,接收Client的信息,返回Supper Peer地址和拥有此流的Client节点

4、Client 主要功能是从Supper和其他Client获取直播流,并进行播放。

系统结构图:

 

工作流程:

Capture获取直播节目流,经打包后传到Supper Peer;

Supper Peer将此节目流发布到Web Server,并且向Tracker注册此节目流;

Client登录Web Server,获取myseelite协议,从myseelite协议串中获得tracker的地址及节目信息。

Client登录Tracker,Tracker根据节目信息,返回Client要求节目的Supper Peer地址的Client列表。

Client依次连接Supper Peer和拥有此节目流的Client,获得节目流。

P2P视频播放器 详细制作实例 1. 说明 1) 客户向服务器发送请求, 每个请求的长度不定. 请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户. 3) 每个服务器为客户服务时, 通常是长期的, 会涉及多次请求-应答的来回. 这样的结构, 主要是为了能够支持大量并发客户连接而设计的. 在具有大量并发客户 连接时, 无论采用线程还是进程, 都无法进行有效的服务, 因此必须采用select 轮询方式. 2. 基本数据结构说明 对于每个客户端, 需要保存该客户端相应的一些信息. 目前的CPnew.c, SPnew.c 和TSnew.c的核心数据结构基本相同, 都由Session, SessionCluster (TSnew.c中) 或者 ServerDesc (CPnew.c和SPnew.c)构成. 其中, Session是每个客户端相关的数据, SessionCluster(或者是ServerDesc)是 有关每种服务的信息, 其中有一个指向该服务相关的各个Session的指针. Session 这一数据结构不是在有客户请求时动态分配的, 而是在最开始初始化时就已经分配 好的, 当有新客户请求到来时, 服务器搜索这一预先分配好的这些Session, 发现其中 有空闲则使用, 如果没有空闲就报告错误. 对于TS和CP(SP)来说, 最大的区别是TS使用UDP协议, 而CP和SP则使用TCP协议, 二者的 不同在于: 1) 对于TCP协议的客户端, 由于每个客户端都使用不同的socket, 因此select之后 只需要看各个客户端的fd_set是否置位就可以了, 而对于UDP客户端, 找到相应的 客户端需要进行一次查找过程. TS使用了一些措施来减轻查找所带来的开销. 2) TCP协议中, 发来得数据是流形式的, 因此需要进行消息分块, 有可能两个消息 在一次read中读完, 也有可能一个消息需要读很多次, 这两种情况都需要考虑, 因此 每个Session中都有一个buf, rstart, rlen, 用来存储读来但还没有处理的消息, 同样, 写的过程中也需要考虑写的时候有可能没有一次写完, 因此也需要每个Session中 保留wbuf, wstart, wlen三项. UDP中则不同, 在协议实现中假设每个UDP数据包中 所包含的消息都是完整的, 因此没有这几项. SessionCluster(或者是ServerDesc)来说, 描述了一个服务, 这个服务由这样几个 主要的部分构成 1) sock: 描述所所使用的socket 2) cur: 当前客户端的个数 3) max: 最多容纳客户端的个数 4) head: Session的头, head[0]为第一个Session, head[max-1]为最后一个session 5) init: 这一服务中每个Session需要执行的初始化操作. (函数指针) 6) process: 这一服务中消息的处理函数 7) closure: 这一服务中需要的析构函数 3. 主要结构说明 process_child: 主要函数, 这一函数主要用来 设置socks和wsocks, 对于SP和CP, 只有Session的wlen>0的时候才设置wsocks; select; 对于每个ServerDesc(或者SessionCluster), 进行process_type 在SP和CP中, 为了支持PUSHLIST操作, 在每一次循环前先要进行processJob 在CP中, 还周期进行periodCheck, 用来将过期的连结清除 在TS中, 周期进行periodLog, 用来将过期的客户连接清除 process_type: 对于每个Session, 检查是否可读. 如果可读, 检查是否有完整的消息, *(unsigned int *)(rbuf+rstart) 0, 则进行写 4. 其他重要的模块 1) 配置模块 配置模块主要由struct NamVal, read_config, free_config组成, NamVal结构中, Name是在cfg文件中的名字, ptr是指向存放的指针, type是数据的类型, 目前支持这样 几种类型 'd': 整数类型, ptr是一个整数指针 's': 字符串类型, ptr是一个指向指针的指针, (char **) 'b': 字符串buffer类型, ptr是一个char *, 使用这种类型时应
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值