CN101304351A - 基于点对点传输的流媒体直播系统同步播放方法 - Google Patents
基于点对点传输的流媒体直播系统同步播放方法 Download PDFInfo
- Publication number
- CN101304351A CN101304351A CNA200810031616XA CN200810031616A CN101304351A CN 101304351 A CN101304351 A CN 101304351A CN A200810031616X A CNA200810031616X A CN A200810031616XA CN 200810031616 A CN200810031616 A CN 200810031616A CN 101304351 A CN101304351 A CN 101304351A
- Authority
- CN
- China
- Prior art keywords
- bag
- point
- client
- playpos
- pullpos
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种基于点对点传输的流媒体直播系统同步播放方法,它是以缓存服务器作为顶层,以各客户端PC机组成的P2P网络作为第二层:首先在缓存服务器对直播源音视频数据进行封装,其次启动P2P网络客户端,使各客户端在同一时刻缓存的数据基本相同,而且当某客户端因为性能差异(如网络带宽差异等)等原因出现缓存数据异步时能进行动态调整,实现各客户端的同步播放。
Description
技术领域
本发明属于互联网音视频数据播放方法,具体涉及一种基于点对点(P2P)传输的流媒体直播系统同步播放方法。
背景技术
目前利用互联网进行音视频数据直播的各主流点对点(P2P)系统如PPlive、QQlive、PPstream等都存在播放不同步的问题,即不同客户观看同一部影片时画面不一致,有时相差在5秒左右,有时相差达120秒,随机性较大。由于播放不同步,造成用户体验差。
发明内容
本发明的目的在于提供一种可以实现动态同步播放的基于点对点(P2P)传输的流媒体直播系统同步播放方法。
实现本发明的目的方法是:
以缓存服务器作为顶层,以各客户端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包不存在时,播放将暂停,等待拉包数达到播放要求时,重新从父节点中取得播放点,并从播放点处重新开始播放。
所述(1)中的设定数据量为不超过32Kbyte。
所述(9)中跳包点的确定是将PullPos和PlayPos置为0,表明该节点不能提供拉包点和播放点,同时以节点平均下载码率为参数计算跳包点。
基本原理:当P2P网络直播的各客户端在同一时刻缓存的数据基本相同,而且当某客户端因为性能差异(如网络带宽差异等)等原因出现缓存数据异步时能进行动态调整,则各客户端的播放是同步的。
本发明方法在已开发的P2P直播系统PowerLiveP2P V1.4中得到完全应用。测试表明:不同客户端播放画面相差在1秒以内,完全实现了本发明目的。
下面结合附图对本发明作进一步说明。
附图说明
图1是发明方法的原理框图。
图2是缓存服务器封装算法流程图。
图3是客户端同步缓存算法流程图。
具体实施方式
见图1,基于点对点(P2P)传输的流媒体直播系统同步播放方法,以缓存服务器1作为顶层,以各客户端PC机3(如第1、第2、第m和第n客户PC机)组成的P2P网络2作为第二层;
首先在缓存服务器1对直播源音视频数据(即sample)进行封装,按照不超过32Kbyte大小将若干个sample合并成一个3P包,并对3P包进行编号,编号是递增且唯一的,各3P包头结构P2P_3PPACK_HEAD中保存了编号和3P包的SHA1哈希值等参数,哈希值用于客户端验证3P包的正确性。缓存服务器在启动时申请固定大小缓存区,用来保存若干连续的3P包。当保存的3P包个数达到最小数量(offset)时,确定拉包点(PullPos)和播放点(PlayPos)。拉包点和播放点随着封装同步推进。PullPos为客户端开始请求拉包的起点;PlayPos为客户端开始播放的起点,PullPos=PlayPos+offset;offset为考虑拉包延时与播放最小缓存以及影片码率等参数计算的一个偏移值,即3P包最小数量。
其次对客户端,客户端PC机3启动后先从父节点中取得PullPos,并申请固定大小的缓存区用来保存3P包。然后以PullPos为起始包,向父节点拉取3P包。当存在多个父节点时,则同时请求多个3P包。从父节点取得的3P包按照包号依次保存到缓存中。当保存的3P包个数满足连续播放最小数量(offset)要求时,就从其中的一个父节点取得PlayPos,客户端从PlayPos处开始播放。播放开始后,根据PlayPos计算出PullPos,二者满足:PullPos=PlayPos+offset,且与播放速度同步推进。PullPos和PlayPos用来给下级节点提供拉包点和播放点。当缓存区填满后对已经播放的3P包按照先进先出的顺序进行删除或覆盖等更新操作。根据PullPos和PlayPos填充和更新的各客户端缓存基本相同。
再次,客户端PC机3拉包速度如果小于码率,则需要进行动态调整。此时,将PullPos和PlayPos置为0,表明该节点不能提供拉包点和播放点。同时采用一定算法函数进行跳包计算,跳包计算函数以节点平均下载码率为参数,确定跳包点。跳包后,当缓存中可以播放的3P包不存在时,播放将暂停,等待拉包数达到播放要求时,重新从父节点中取得播放点,并从播放点处重新开始播放。
结构定义与实现算法
1结构定义
1.13P包头结构
struct P2P_3PPACK_HEAD
{
BYTE HashVal[20];//哈希值(SHA1)
DWORD dwChnlNO ;//频道编号
DWORD64 dw3PPackNO;//3P包编号
WORD wSampleNumbers;//包含的sample个数
DWORD dwSize;//该P包的数据大小(不包含此头大小)
};
1.2sample头结构
struct P2P_SAMPLE_HEAD
{
DWORD dwDataSize;//Sample的数据大小(不包含此头大
小)
WORD wSampleStreamNum; //Sample流编号
DWORD64qwSampleTimeStamp;//Sample时间戳
DWORD64qwSampleTimeDuration;//Sample时长
DWORD SampleFlags;//Sample标志
DWORD dwCustomTimeStamp; //根据服务器Tick计算的时间戳
};
1.3缓存循环队列结构
struct STRUCT_3P_IDX
{
DWORD ChnlNum;//频道编号
DWORD64 PackNum;//3P包编号
DWORD DataSize;//3P包总大小(包头+Sample大小)
BYTE*p3PData;//3P包起始地址
};
1.4邻居节点信息存储结构
struct P2P_NODE_ADDR
{
DWORD64 qwNodeID;//点编号
DWORD dwWanIP;//外网IP地址
DWORD dwLanIP;//内网IP地址
USHORT uTCPPort;//TCP监听端口
int nNodeType;//节点类型
};
struct PEER_NODE_INFO
{
P2P_NODE_ADDR addrNode;//节点信息
time_t timeStamp;//时间戳
DWORD dwExchangeCount;//节点信息交换次数
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_HFAD sampleHead;//sample头
P2P_3PPACK_HEAD packHead;//3P包头
CArray<STRUCT_3P_IDX>m_aryIdx;//3P包索引数组
Initialize(m_aryIdx);//初始化m_aryIdx
while(1)
{
If(systemexit)//系统退出
Break;//结束封装
If(iSize+iSamplesize<32*1024)
{
SetValue(sampleHead);//设置sampleHead各值
Update(packHead);//更新packHead中各值
Merge(sample);//将sample合并到当前3P包
}
Else
{
Update(packHead);//更新packHead中各值
Finish3PPack(qwNum);//完成当前3P包封装
Save3PPack(qwNum);//将当前完成封装的3P包保存到m_aryIdx
Number++;
If(Numbet=-offset)
{
PullPos=Number;
PlayPos=1;
}
Else if(Numbet>offset)
{
PullPos++;
PlayPos++;
}
qwNum++;
Create3PPack(qwNum);//生成一个新3P包,置为当前3P包
SetValue(sampleHead);//设置sampleHead各值
Update(packHead);//更新packHead中各值
Merge(sample);//将sample合并到当前3P包
}
}
3客户端同步缓存算法伪代码
typedef
CMap<QWORD,QWORD,PEER_NODE_INFO,PEER_NODE_INFO>CPeerNodeMap;
CPeerNodeMap m_mapCurFather;//当前父节点列表
PEER_NODE_INFO father;//当前父节点
QWORD qwNum ;//3P包编号
QWORD PullPos;//拉包点
QWORD PlayPos;//播放点
DWORD Offset;//PlayPos与PullPos偏移值
CArray<STRUCT_3P_IDX>m_aryIdx;//3P包索引数组
For(;;)
{
PullPos=GetPullPosFromFather(mapCurFather);//从父节点取拉包点
If(PullPos>0)
Break;//如果成功取得拉包点,跳出循环
}
Initialize(m_aryIdx);//初始化m_aryIdx
qwNum=PullPos;
while(1)
{
If(systemexit)//系统退出
Break;//结束
For(;;)
{
Father=GetFather(mapCurFather);//从父节点列表取一个父节
点
If(InValid(Father))//父节点无效表明遍历了一遍父节点列表,
跳出
Break;
Request3PPack(qwNum,father);//从父节点请求3P包
Save3PPack(qwNum);//将取得的3P包保存到m_aryIdx
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_aryIdx);//维护3P包索引数组:删除旧的3P包
If(needAdjust())//判断是否需要进行动态调整
{
PullPos=Jump();//进行动态调整:跳包到一个新拉包位置
PlayPos=0;
}
}
4算法流程图
4.1缓存服务器封装算法流程图
缓存服务器封装算法流程图如图2所示。
4.2客户端同步缓存算法流程图
客户端同步缓存算法流程图如图3所示。
Claims (3)
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)中的设定数据量为不超过32Kbyte。
3、根据权利要求1或2所述的基于点对点传输的流媒体直播系统同步播放方法,其特征是所述(9)中跳包点的确定是将PullPos和PlayPos置为0,表明该节点不能提供拉包点和播放点,同时以节点平均下载码率为参数计算跳包点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200810031616XA CN101304351A (zh) | 2008-06-30 | 2008-06-30 | 基于点对点传输的流媒体直播系统同步播放方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200810031616XA CN101304351A (zh) | 2008-06-30 | 2008-06-30 | 基于点对点传输的流媒体直播系统同步播放方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101304351A true CN101304351A (zh) | 2008-11-12 |
Family
ID=40114074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200810031616XA Pending CN101304351A (zh) | 2008-06-30 | 2008-06-30 | 基于点对点传输的流媒体直播系统同步播放方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101304351A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011097762A1 (en) * | 2010-02-12 | 2011-08-18 | Thomson Licensing | Method for synchronized content playback |
CN107682715A (zh) * | 2016-08-01 | 2018-02-09 | 腾讯科技(深圳)有限公司 | 视频同步方法及装置 |
WO2018041092A1 (zh) * | 2016-08-29 | 2018-03-08 | 上海交通大学 | 一种基于异构网络的多媒体资源同步推送方法 |
CN107801103A (zh) * | 2016-08-29 | 2018-03-13 | 上海交通大学 | 异构网络下基于网络状况的多媒体资源自适应同步方法 |
CN109314631A (zh) * | 2016-06-24 | 2019-02-05 | 雅马哈株式会社 | 同步设定装置、传送系统、同步设定方法及程序 |
-
2008
- 2008-06-30 CN CNA200810031616XA patent/CN101304351A/zh active Pending
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011097762A1 (en) * | 2010-02-12 | 2011-08-18 | Thomson Licensing | Method for synchronized content playback |
CN102714708A (zh) * | 2010-02-12 | 2012-10-03 | 汤姆森特许公司 | 用于同步内容播放的方法 |
CN102714708B (zh) * | 2010-02-12 | 2016-06-01 | 汤姆森特许公司 | 用于同步内容播放的方法 |
US9686570B2 (en) | 2010-02-12 | 2017-06-20 | Thomson Licensing | Method for synchronized content playback |
CN109314631A (zh) * | 2016-06-24 | 2019-02-05 | 雅马哈株式会社 | 同步设定装置、传送系统、同步设定方法及程序 |
CN107682715A (zh) * | 2016-08-01 | 2018-02-09 | 腾讯科技(深圳)有限公司 | 视频同步方法及装置 |
CN107682715B (zh) * | 2016-08-01 | 2019-12-24 | 腾讯科技(深圳)有限公司 | 视频同步方法及装置 |
WO2018041092A1 (zh) * | 2016-08-29 | 2018-03-08 | 上海交通大学 | 一种基于异构网络的多媒体资源同步推送方法 |
CN107801103A (zh) * | 2016-08-29 | 2018-03-13 | 上海交通大学 | 异构网络下基于网络状况的多媒体资源自适应同步方法 |
CN107801103B (zh) * | 2016-08-29 | 2020-04-03 | 上海交通大学 | 异构网络下基于网络状况的多媒体资源自适应同步方法 |
US11265587B2 (en) | 2016-08-29 | 2022-03-01 | Shanghai Jiao Tong University | Multimedia resource synchronous pushing method based on heterogeneous network |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104113727B (zh) | 一种监控视频播放的方法及设备、系统 | |
CN107846633A (zh) | 一种直播方法及系统 | |
CN101304351A (zh) | 基于点对点传输的流媒体直播系统同步播放方法 | |
TWI596926B (zh) | 包括圖幅的視訊檔經由同儕協助視訊輸送系統之分佈方法和裝置以及包括圖幅的視訊檔從同儕協助視訊輸送系統之接收方法和裝置 | |
US9521214B2 (en) | Application acceleration with partial file caching | |
US20140095593A1 (en) | Method and apparatus for transmitting data file to client | |
CN109889543A (zh) | 视频传输的方法、根节点、子节点、p2p服务器和系统 | |
BR112012001150B1 (pt) | Método para implementar serviço de transmissão baseado em http | |
CN111343511B (zh) | 一种通过组播实现的hls直播系统及方法 | |
ZA200504757B (en) | Embedding a session description message in a real-time control protocol (RTCP) message | |
JP6338709B2 (ja) | ストリーミング装置とその方法、これを用いたストリーミングサービスシステム及びコンピュータ読み取り可能な記録媒体(Streaming apparatus and method thereof,streaming service system using the streaming apparatus and computer readable recording medium) | |
US9407723B2 (en) | Smart packaging for mobile applications | |
CN114301602B (zh) | 一种基于区块链的视频保护方法及装置 | |
WO2011150644A1 (zh) | 一种启动阶段的流媒体数据获取、发送方法及装置 | |
US10237075B2 (en) | Reconstructable content objects | |
Seema et al. | WVSNP-DASH: Name-based segmented video streaming | |
CN104618738A (zh) | 一种智能电视节目播放方法及装置 | |
WO2014048198A1 (zh) | 倍速播放方法、装置及系统 | |
CN112218128B (zh) | 广告视频的播放方法、播放客户端及可读存储介质 | |
KR20010028861A (ko) | 자바를 이용한 동적 멀티미디어 웹 카타로깅 시스템 및 그 방법 | |
CN109413371A (zh) | 视频帧率计算方法及装置 | |
US9438664B2 (en) | Application acceleration | |
EP3780632B1 (fr) | Systeme de distribution d'un contenu audiovisuel | |
CN101179705B (zh) | 伙伴资源节点选择方法和装置 | |
Bhambri et al. | Design of distributed prefetching protocol in push-to-peer video-on-demand system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
DD01 | Delivery of document by public notice |
Addressee: Tang Xinchun Document name: Notification that Application Deemed to be Withdrawn |
|
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20081112 |