基于点对点传输的流媒体直播系统同步播放方法

文档序号:7685116阅读:264来源:国知局
专利名称:基于点对点传输的流媒体直播系统同步播放方法
技术领域
本发明属于互联网音视频数据播放方法,具体涉及一种基于点对点
(P2P) ^tr的流媒体直播系统同步播放方法。 背景駄
目前利用互联网进行音视频数据直播的各主流点对点(P2P)系统如 PPlive、 QQlive、 PPstream等都存在播放不同步的问题,即不同客户观看 同1影片时画面不一致,有时相差在5秒左右,有时相差达120秒,随 机性 :。由于播放不同步,造,户,差。

发明内容
本发明的目的在于提供一种可以实现动态同步播放的基于点对点 (P2P)传输的流媒体直播系统同步播方M法。
实现本发明的目的方法是
以缓存服务器作为顶层,以各客户端PC枳组成的P2P网络作为第二层; 首先在缓存服务器对直播源音视M^进行封装,包括
(1) 将设定繊量的軒特视频繊合并成一个3P包,并对3P包 进fi^续递增且唯一的编号;
(2) 同步申请固定大小缓存区,用*^存^1纖的3 包;
(3) 当保存的3P包个ifc&iU offset时,确定PullPos和PlayPos, 有PullPos = PlayPos + offset; PullPos为拉包点,即客户端开^i青求 拉包的起点;PlayPos为播放点,即客户端开始播放的起点;offset为 3P包最小数量,即考虑拉包延时与播放最小缓存以皿片码率,数计算 的一个偏移值;
其次启动P2P网络客户端,包括
(4) P2P网络客户端启动后,先从父节点中取得PullPos,并申请固 定大小的缓存区用来保存3P包;
(5) 以PullPos为起始包,向父节点拉取3P包,当存在多个父节点 时,则同时请求多个3P包,从父节点取得的3P包按照包号依次保存到缓存中;
(6) 当保存的3P包个数满^i^播放offset要求时,f^人其中的一 个父节点取得PlayPos,客户端从PlayPos处开始播放;
(7) 播放开始后,根据PlayPos计算出PullPos,二者满足PullPos =PlayPos + offset,且与播方M^同步繊;
(8) 当缓存区t麟后对己经播放的3P包按照舰先出柳,进行删 除或覆盖等更新操作;
(9) 客户端拉^M如果小于码率,则需要进纟彌态调整,确定跳包点。
(10) 跳包后,当缓存中可以播放的3P包不存在时,播放将暂停,等 待拉包縦到播放要求时,重新从父节点中取f射翻iC点,并从播放点处重 新开始播放。
戶,(1)中的设定,量为不皿32Kbyte。
■ (9)中瑕抱点的确定是将PullPos和PlayPos置为O,表明M 点不能提微包点和播放点,同时以节点平均下载码率为参数计算跳包点。
基本原理当P2P网络直播的各客户端在同一时刻缓存的繊基糊 同,而且当某客户端因为性會嗟异(如网络带宽差异等)等原因出现缓存 异步时倉激^^态调整,则各客户端的播放是同步的。
本发明方法在已开发的P2P直播系统PowerLiveP2P VI. 4中得到完全 应用。测錄明不同客户端播放画面相差在l秒以内,完全实现了本发 明目的。
下面结合附图对本发明作进一步说明。


图1是发明方法的原理框图。
图2是缓存服务^f装算法流程图。
图3是客户端同步缓存算法流程图。
见图l,基于点对点(P2P)传输的流媒体直播系统同步播M"法,以 缓存服务器l作为顶层,以各客户端PC机3 (如第l、第2、第m和第n 客户PC机)组成的P2P网络2作为第二层;
首先在缓存服务器1对直播源音视频 (即sample)进行封装,按照不超过32Kbyte大小将^T个sample合并成一个3P包,并对3P舰行 编号,编号是递增且唯一的,各3P包头结构P2P—3PPACK—HEAD中保存了编 号和3P包的SHA1哈希值^#数,哈希tOT于客户端衞正3P包的正确性。 缓存服务驗启动时申请固定大小缓存区,用来保存軒纖的3P包。当 保存的3P包个数达到最小数量(offset)时,确定拉包点(PullPos)和 播放点(PlayPos)。拉包点和播放点随^ij"装同步,。PullPos为客户 端开始请求拉包的起点;PlayPos为客户端开始播放的起点,PullPos = PlayPos + offset; offset为考虑拉包延时与播放最小缓存以及影片码率 等参数计算的一个偏,,即3P包最小M。
其次对客户端,客户端PC机3启动后M父节点中取得PullPos,并 申请固定大小的缓存区用来保存3P包。然后以PullPos为起始包,向父节 点拉取3P包。当存在多个父节点时,则同时请求多个3P包。从父节点取 得的3P包按照包号依次保存到缓存中。当保存的3P包个数满^^f放 最小数量(offset)要求时,就从其中的一个父节点取得PlayPos,客户 端从PlayPos处开始播放。播放开始后,根据PlayPos计算出PullPos, 二者满足PullPos = PlayPos + offset,且与播方M^同步鹏。PullPos 和PlayPos用来给下级节点M^包点和播放点。当缓存区i臭满后对已经 播放的3P包按照先进先出的顺序进行删除或覆盖等更新操作。根据 PullPos和PlayPos ±真充和^§ 的各客户端缓存基 |同。
再次,客户端PC机3拉^g如果小于码率,则需要进糊态调整。 此时,将PullPos和PlayPos置为0,表明節点不能JI^包点和播放 点。同时采用一定算法函繊行跳包计算,瑕抱计算函数以节点平均下载 码率为参数,确定跳包点。瑕抱后,当缓存中可以播放的3P包不存在时,
播放将暂停,等待拉包idii鹏放要求时,重新从父节点中取#^放点,
并从播放点处重新开始播放。
结构定义与实现算法 1结构定义 1.13P包头结构 struct P2P—3PPACK—HEAD
BYTEHashVal [20]; 〃哈希值(SHA1)DWORD dwChnlN0: 〃频道编号
DW0RD64 dw3PPackN0; 〃3P包编号
WORD wSampleNumbers; 〃包含的sample个数
DWORDdwSize; 〃该P包的数据大小(不包含此头大小)
};
1.2 sample头结构 struct P2P—SAMPLE—HEAD
DWORD dwDataSize; 〃Sample的f[Jg大小(不包含此头大
小)
WORD wSampleStreamNum; 〃Sample流编号
DW0RD64 qwSampleTimeStamp; 〃Sample时间戳
DW0RD64 qwSampleTimeDuration;〃Sample时长
DWORD SampleFlags; 〃Sample标志
DWORD dwCustomTimeSt卿; 〃根据月艮务器Tick计算的时间戳
1. 3缓^t盾环队列结构 struct STRUCT—3P—皿
DWORD ChnlNum; 〃频道编号
DW0RD64 PackNum; 〃3P包编号
DWORD DataSize; 〃3P包总大小(包头+Saraple大小)
BYTE *p3PData; 〃3P爐鄉舰
1.4邻居节点信息存储结构 struct P2P—NODE—ADDR
DW0RD64 qwNodeID;
DWORD dwWanIP;
DWORD dwLanIP;
USHORT uTCPPort;
〃点编号 〃外网IP地址 〃内网IP地址 〃TCP监听端口int nNodeType; 〃节点类型
};
struct PEER_N0DE_INF0
P2P—NODE—ADDR addrNode; 〃节点信息 time_t timeStamp; 〃时间戳 DWORD dwExchangeCount; 〃节点信息交换7, BYTE chWanType; 〃节点公网属性 BYTE chLanType; 〃节点内网属性
};
2缓存服务器的3P敏装算鄉代码
QWORD qwNum;〃3P包编号
int iSize;〃3P包大小
int iSamplesize;//sample的大小
QWORD PullPos;〃拉包点
QWORD PlayPos;〃播放点
DWORD Number; 〃3P包个数
DWORD Offset;〃PlayPos与PullPos偏移值
P2P—SAMPLE—HEAD sampleHead; 〃sample头
P2P—3PPACK—HEAD packHead; 〃3P包头
CArray〈STRUCT_3P—IDX〉 m—aryldx; 〃3P包索弓傲组
Initialize(m_aryldx);〃初始化nLaryldx
while (1)
If (systemexit) 〃系^ii出
Break ;〃结^f装 If(iSize+ iSaraplesize 〈 32*1024)
SetValue (sampleHead);〃设置sampleHead Update (packHead): 〃^§ packHead中^^ft Merge (sample) ;//将sample合并至!j当前3P包Else
Update (packHead); 〃gff packHead中^Hl
Finish3PPack(qwNum);〃完成当前3P ^if装
Save3PPack (qwNum); 〃将当前完成封装的3P包保存到m—aryldx
Numb6r+"h
If (Numbet=offset)
PullPos=Number; PlayPos二l;
Else if(Numbet〉offset)
PullPos++; PlayPos卄;
qwNum++;
Create3PPack (qwNum); 〃,一个新3P包,置为当前3P包 Set Value (sampleHead) ;〃"^S sampleHead Update (packHead); 〃^f packHead中^SHl Merge (sample); 〃将sample合并至!j当前3P包
3客户端同步缓存算鄉代码 typedef
CMap〈QW0RD, QWORD, PEER—NODE—INFO, PEER—NODE_INFO>CPeerNodeMap; CPeerNodeMap mjnapCurFather; 〃当前父节点歹!]表 PEER—NODE—INFO father; 〃当前父节点 QWORD qwNum;〃3P包编号 QWORD PullPos;〃拉包点QW0RD PlayPos;〃播放点
DWORD Offset; 〃PlayPos与Pul lPos偏雜
CArray<STRUCT_3P—IDX〉 m_aryIdx; 〃3P包索弓傲组
For(;;)
Pul 1Pos^GetPul IPosFromFather (mapCurFather); 〃从父节点取拉包点 If(PullPos〉0)
Break ;〃如果成功取得拉包点,瑕咄循环
Initialize (m—aryldx);〃初始化m—aryldx qwNum = PullPos; while (1)
If (systemexit) 〃系,出
Break ;〃结束 For(;;)
Father = GetFather (mapCurFather); 〃从父节点列表取一1^I节

If(InValid(Father)) 〃父节点无效表明遍历了一遍父节点列表, 跳出
Break;
Request3PPack (qwN卿father); 〃从父节点i青求3P包 Save3PPack (qwNum); 〃将取得的3P包保存到m_aryldx qwNum++;〃Next 3P包
If (! PlayReady ()) 〃判断是否可以播放
Continue ;〃还不會離放 while (PlayPos<=0) 〃如果没有成功取#|番放点,继续取播放点
PlayPos^GetPlayPosFromFather (mapCurFather); 〃从父节点取播包点
If(PlayPos〉=0)
PullPos=PlayPos+ Offset;
Play3PPack(PlayPos);〃从PlayPos开始播放
PullPos++;
PlayPos++;
Update (m—aryldx);〃维护3P包索弓l数组删除旧的3P包
If (needAd just ()) 〃判断是否需要进摘态调整
PullPos = Jump();〃謝彌态调整跳包到一个新拉包隨 PlayPos = 0;
4算法流程图
4.1缓存服务器封装算法流程图 缓存服务器封装算法流程图如图2戶B。 4. 2客户端同步缓存算法流程图 客户端同步缓存算法流程图如图3戶B。
权利要求
1、一种基于点对点传输的流媒体直播系统同步播放方法,其特征是以缓存服务器作为顶层,以各客户端PC机组成的P2P网络作为第二层首先在缓存服务器对直播源音视频数据进行封装,包括(1)将设定数据量的若干个音视频数据合并成一个3P包,并对3P包进行连续递增且唯一的编号;(2)同步申请固定大小缓存区,用来保存若干连续的3P包;(3)当保存的3P包个数达到offset时,确定PullPos和PlayPos,有PullPos=PlayPos+offset;PullPos为拉包点,即客户端开始请求拉包的起点;PlayPos为播放点,即客户端开始播放的起点;offset为3P包最小数量,即考虑拉包延时与播放最小缓存以及影片码率等参数计算的一个偏移值;其次启动P2P网络客户端,包括(4)P2P网络客户端启动后,先从父节点中取得PullPos,并申请固定大小的缓存区用来保存3P包;(5)以PullPos为起始包,向父节点拉取3P包,当存在多个父节点时,则同时请求多个3P包,从父节点取得的3P包按照包号依次保存到缓存中;(6)当保存的3P包个数满足连续播放offset要求时,就从其中的一个父节点取得PlayPos,客户端从PlayPos处开始播放;(7)播放开始后,根据PlayPos计算出PullPos,二者满足PullPos=PlayPos+offset,且与播放速度同步推进;(8)当缓存区填满后对已经播放的3P包按照先进先出的顺序进行删除或覆盖等更新操作;(9)客户端拉包速度如果小于码率,则进行动态调整,确定跳包点;(10)跳包后,当缓存中可以播放的3P包不存在时,播放将暂停,等待拉包数达到播放要求时,重新从父节点中取得播放点,并从播放点处重新开始播放。
2、 根据权利要求1所述的基于点对点传输的流媒体直播系统同步播放方法,其特征是戶,(1)中的设定i^量为不皿32Kbyte。
3、根据权利要求1或2所述的基于点对点传输的流媒体直播系统同步 播放方法,其特征是戶;M (9)中跳包点的确定是将PullPos和PlayPos置为o,表明该节点不能^m包点和播放点,同时以节点平均下载码率为参数计算跳包点。
全文摘要
本发明公开了一种基于点对点传输的流媒体直播系统同步播放方法,它是以缓存服务器作为顶层,以各客户端PC机组成的P2P网络作为第二层首先在缓存服务器对直播源音视频数据进行封装,其次启动P2P网络客户端,使各客户端在同一时刻缓存的数据基本相同,而且当某客户端因为性能差异(如网络带宽差异等)等原因出现缓存数据异步时能进行动态调整,实现各客户端的同步播放。
文档编号H04L12/28GK101304351SQ20081003161
公开日2008年11月12日 申请日期2008年6月30日 优先权日2008年6月30日
发明者刘戊开, 唐新春, 岳新雨, 李兴平, 王龙波, 谦 陈, 谱 陈 申请人:湖南创智数码科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1