CN102752193B - 一种直播流的快速缓冲方法 - Google Patents
一种直播流的快速缓冲方法 Download PDFInfo
- Publication number
- CN102752193B CN102752193B CN201210166973.3A CN201210166973A CN102752193B CN 102752193 B CN102752193 B CN 102752193B CN 201210166973 A CN201210166973 A CN 201210166973A CN 102752193 B CN102752193 B CN 102752193B
- Authority
- CN
- China
- Prior art keywords
- data
- stream
- array
- live
- queue
- 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.)
- Expired - Fee Related
Links
Landscapes
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本发明公开了一种直播流的快速缓冲方法,它采用非循环的队列形式构建循环队列,利用定点存取的方式进行缓冲存取处理,即采用数组的方式构建循环缓冲队列,利用连续seq为基点快速定位数据存放位置,使循环缓冲队列的连续查找时间复杂度降为O(1)。在实现了快速缓冲的同时,有效地减少了服务的性能开销。步骤包括:在移动流媒体系统中设置直播流缓冲池,对流媒体数据进行缓冲,以供移动终端平滑播放直播流;采用数组的方式构建循环缓冲队列,以连续的数据标识序列号(Seq)作为基点来定位数据存放位置。
Description
技术领域
本发明涉及网络多媒体技术领域,尤其涉及一种用于移动通信网络的直播流快速缓冲的方法。
背景技术
在现场直播类的流服务中,传统PC应用上可以使用PC的大缓存完美处理平滑播放的问题。然而手机上由于内存相对较小,需要服务端更多的参与平滑播放的处理,所以在服务端需要缓冲一大部分直播数据以保证随时连接的手机都有数据可以播放,对每个连接都需要不同的缓冲读取位置和连续播放的处理,每次读取位置的查找性能将成为服务主要性能开销。
传统的音视频流服务中,对于成帧的直播类服务,在服务端设计一个音视频流的缓冲池,通常的缓冲队列设计是以stl(标准模板库)实现中的list(队列)为基础,结合一些数据元素构成数据基础节点,然后采用“去头存尾”的方式对缓冲队列进行数据循环更新。当需要存取数据时,根据数据基础节点的时间戳或者序列号为关键值对list进行查找,由于队列循环更新,查找时除了在完全匹配情况下,其他情况不能使用stl中的一些既有算法,只能采用循环遍历的方法进行,时间复杂度为O(n),当缓冲队列较长,同时需要服务大并发量用户时,致使性能开销很大。
公开日为2011年07月27日、公开号为CN102137124A的专利文献公开了这样的技术方案,一种P2P流媒体直播方法和系统,该方法包括:监测直播流媒体的数据缓冲区的状态;当数据缓冲区的数据未填满数据安全区域时,客户节点优先向补偿服务器请求对应的直播流媒体数据;当数据缓冲区的数据填满数据安全区域时,客户节点根据上层节点的评分向上层节点请求直播流媒体数据。该技术方案需要增加补偿服务器等设备,以及检测缓冲区、对上层节点进行评分分级等操作,使得系统结构复杂、过程繁琐,性能开销大。
发明内容
本发明提供一种直播流的快速缓冲方法,它使得每个连接的缓冲位置查找复杂度为O(1),在实现了快速缓冲的同时,有效地减少了服务的性能开销。
本发明针对现有技术问题主要是通过下述技术方案得以解决的,一种直播流的快速缓冲方法,包括:
A. 在移动流媒体系统中设置直播流缓冲池,对流媒体数据进行缓冲,以供移动终端平滑播放直播流;
B. 采用数组的方式构建循环缓冲队列,以连续的数据标识序列号(Seq)作为基点来定位数据存放位置;
C. 按存放位置对流媒体数据进行缓冲存取操作。
在移动流媒体系统中,比如在手机移动电视系统中,设置较大容量的缓冲池。在缓冲队列的查找方法上,查找时间为常量的算法是最快的。因此,本技术方案采用数组下标访问的方式,使查找时间为常量,查找时间不会随数组的大小而变化,因而效率最高,时间复杂度为常数阶O(1)。
操作中,以数组为数据基础单元集合的存储形式,在数据的保存上不使用STL(标准模板库)中的pushback(从队尾处存入)等通用方式,而是采用了非连续的存入方式。取数据时,根据数据标识序列号对数组长度的取模操作,确定数据基础单元在数组中的存放位置。这种缓冲队列设计,可以允许每个连接用户在查找某个数据基础单元时,在完全命中情况下时间复杂度为O(1),在不完全命中情况下为O(1+n/3)。有效地加快了查找速度,减少了CPU的工作量。
作为优选,数组是指针数组,数组长度根据所需的缓冲队列大小确定。数组的长度根据缓冲队列实际需求来确定。
作为优选,缓冲队列大小根据设定时长以及视频帧率确定。比如可以根据15分钟时长以及视频帧率计算缓冲队列大小。
作为优选,数组的基础单元包括数据标识序列号(Seq)、时间戳(pts)和一个指向实际流媒体数据的指针。
本发明带来的有益效果是,采用非循环的队列形式构建循环队列,利用定点存取的方式进行缓冲存取处理,即采用数组的方式构建循环缓冲队列,利用连续seq为基点快速定位数据存放位置,使循环缓冲队列的连续查找时间复杂度降为O(1)。在实现了快速缓冲的同时,有效地减少了服务的性能开销。
发明内容
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体说明。
实施例1: 如图1所示,本发明是一种直播流的快速缓冲方法,基本流程包括:
步骤101,在服务器上设置缓冲池,对流媒体数据进行缓冲,以供移动终端平滑播放直播流;
步骤102,根据设定时长以及视频帧率确定缓冲队列大小;
步骤103,存数据,流媒体数据的基础单元根据序列号Seq值存入数组中对应的位置;
步骤104,取数据,根据数据标识序列号Seq对数组长度的取模操作,确定流媒体数据的基础单元在数组中的存放位置;
按上述存、取位置对流媒体数据进行缓冲存取处理。
图2所示为数据结构图,缓冲队列主要由三部分构成:
a. 一个指针数组,其数组长度根据所需的缓冲队列大小(实际需求)而定,本实施例中是根据15分钟时长以及视频帧率计算得到。
b. 流媒体数据的基础单元结构体,该结构体包括有seq序列号、pts时间戳和一个指向实际流媒体数据的指针。
c. 流媒体数据的物理内存存放结构,此结构的实现可以多种多样,本实施例使用连续的内存块存储,由流媒体数据的基础单元结构体b来区分不同的数据帧。
实施例2,采用类C语言实现缓冲的数据保存、数据查找的方法:
1、数据保存方法:
void Push(BStruct* package)
{
/*ppAarray为图一中表示的A数组*/
if (ppAarray为空)
{
/*创建ppAarray数组*/
ppAarray = new BStruct*[maxLen];
}
/*获取BStruct结构内的seq序列号元素*/
DWORD seq = package->seq();
/*这步是关键,流媒体数据基础单元根据自身的数据标识序列号Seq存入数组中相应位置的单元内,序列号超出数组最大长度的,对最大长度取余*/
ppAarray[seq对manLen取余] = package;
/*更新当前队列的队尾*/
TailIdx = seq % maxLen;
/*队列头部被尾部咬到了,头得往前挪一下*/
if (seq > maxLen && HeadIdx == TailIdx){
HeadIdx = (TailIdx + 1) % maxLen;
}
}
数据保存方法中的关键是流媒体数据的基础单元要根据数据标识序列号Seq值保存入数组中对应的位置,数组本身不需要进行内部数据移位等操作,这相对于动态数组或LIST的pushback来说,性能上体现也较佳。
2、数据查找方法:
void Find(int seq, int pts, DataType& refVec)
{
/*DataType为BStruct指针的动态数组类型*/
if (maxLen <=0){
/*判断缓冲队列是否有数据,没有则直接返回失败*/
return;
}
int dwptsprv = pts;
/*根据seq参数计算查找数据在数组中存放的位置*/
int dwindex = seq % maxLen;
BStruct* pPack = NULL;
/*如果序列号为0,表示从队列头开始 */
if (0 == dwseqprv){
dwindex = HeadIdx % maxLen;
}
/*从数组中直接获取流媒体数据基础单元*/
pPack = ppAarray[dwindex];
if (pPack){
/*判断首次匹配的数据是否完全匹配*/
DWORD packpts = pPack->GetPts();
if (packpts >= dwptsprv){
refVec.push_back(pPack);
}
}else{
/*如果首次匹配位置上数组中并没有存入数据,则比较队列尾部数据是否有效*/
pPack = ppAarray[TailIdx];
if (seq >= pPack->GetSeq()){
/*如果尾部数据时间戳还小于要求值,说明数据缓冲未准备好,直接退出查找*/
return;
}
}
/*首次匹配不命中情况下,在首次匹配的位置后进行遍历查找*/
for (;;){
/*从dwindex位置开始到TailIdx之间遍历匹配查找,这个操作只会在首次查找时出现,后续的查找由于seq的连续存取前提条件,都会进入完全匹配的逻辑*/
}
}
有了数据保存时按Seq存入的基础,数据的取出就变得非常简单,根据Seq对数组长度的取模操作,就可以确定流媒体数据基础单元在数组中的存放位置。由于缓冲队列是循环更新的缘故,首次查找时,有可能不会完全匹配,需要从队列的头部开始往下遍历,这种情况下最长的查找距离是队列的长度n,当第二次查找时,由于seq是连续的,查找长度将会变为1。
所以本发明具有以下特征:采用非循环的队列形式构建循环队列,利用定点存取的方式进行缓冲存取处理,即采用数组的方式构建循环缓冲队列,利用连续seq为基点快速定位数据存放位置,使循环缓冲队列的连续查找时间复杂度降为O(1)。在实现了快速缓冲的同时,有效地减少了服务的性能开销。
附图说明
图1所示为本发明的一种基本流程图;
图2所示为本发明的一种数据结构图。
Claims (1)
1.一种直播流的快速缓冲方法,其特征在于包括:在服务器上设置缓冲池,对流媒体数据进行缓冲,以供移动终端平滑播放直播流;
根据设定时长以及视频帧率确定缓冲队列大小;
存数据,流媒体数据的基础单元根据序列号Seq值存入数组中对应的位置;
取数据,根据数据标识序列号Seq对数组长度的取模操作,确定流媒体数据的基础单元在数组中的存放位置;
按上述存、取位置对流媒体数据进行缓冲存取处理,
缓冲队列主要由三部分构成:
一个指针数组,其数组长度根据所需的缓冲队列大小而定,
流媒体数据的基础单元,该流媒体数据的基础单元包括有seq序列号、pts时间戳和一个指向实际流媒体数据的指针,流媒体数据的物理内存存放结构,使用连续的内存块存储,由流媒体数据的基础单元来区分不同的数据帧。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210166973.3A CN102752193B (zh) | 2012-05-23 | 2012-05-23 | 一种直播流的快速缓冲方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210166973.3A CN102752193B (zh) | 2012-05-23 | 2012-05-23 | 一种直播流的快速缓冲方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102752193A CN102752193A (zh) | 2012-10-24 |
CN102752193B true CN102752193B (zh) | 2015-07-29 |
Family
ID=47032097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210166973.3A Expired - Fee Related CN102752193B (zh) | 2012-05-23 | 2012-05-23 | 一种直播流的快速缓冲方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102752193B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103096131B (zh) * | 2013-02-06 | 2016-06-08 | 天脉聚源(北京)传媒科技有限公司 | 一种直播流处理方法和装置 |
CN110996057B (zh) * | 2019-12-02 | 2021-11-16 | 腾讯云计算(北京)有限责任公司 | 媒体数据处理方法、装置、计算机设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101022628A (zh) * | 2007-03-21 | 2007-08-22 | 中兴通讯股份有限公司 | 一种移动多媒体广播终端及其获取业务配置表的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1595404B1 (en) * | 2003-02-18 | 2014-10-22 | Nokia Corporation | Picture decoding method |
-
2012
- 2012-05-23 CN CN201210166973.3A patent/CN102752193B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101022628A (zh) * | 2007-03-21 | 2007-08-22 | 中兴通讯股份有限公司 | 一种移动多媒体广播终端及其获取业务配置表的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102752193A (zh) | 2012-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11303970B2 (en) | Systems and methods for internet video delivery | |
US10986387B1 (en) | Content management for a distributed cache of a wireless mesh network | |
US20170149860A1 (en) | Partial prefetching of indexed content | |
US10305947B2 (en) | Pre-buffering audio streams | |
US10313626B2 (en) | Techniques and system for multiple display media presentations | |
US8219711B2 (en) | Dynamic variable rate media delivery system | |
US20160189752A1 (en) | Constrained system real-time capture and editing of video | |
EP2875635B1 (en) | Just-in-time distributed video cache | |
US8370520B2 (en) | Adaptive network content delivery system | |
US20210067578A1 (en) | Streaming media segments | |
US11758203B2 (en) | Adaptive bitrate video cache | |
CN103024593A (zh) | 一种网络视频点播加速系统及其播放方法 | |
WO2009143741A1 (zh) | 媒体文件的点播方法、系统和设备 | |
US11089103B1 (en) | Content management in a distributed cache of a wireless mesh network | |
BR112014000597B1 (pt) | Método e sistema para download de arquivo multimídia | |
CN102438004B (zh) | 获取媒体文件的元数据信息的方法、系统及多媒体播放器 | |
CN111859218B (zh) | 数据下载方法、装置、计算机设备和计算机可读存储介质 | |
CN102868936B (zh) | 存储视频日志的方法和系统 | |
US20130305276A1 (en) | System and method for in-stream advertising on an internet connected device | |
CN102387347A (zh) | 基于ip-san直存技术的视频存储及即时回放系统 | |
Xie et al. | Dynamic threshold based rate adaptation for HTTP live streaming | |
CN102752193B (zh) | 一种直播流的快速缓冲方法 | |
CN103595694A (zh) | 流媒体播放方法和系统、内存服务器 | |
WO2016063161A1 (en) | Partial prefetching of indexed content | |
US20200186878A1 (en) | Efficient Prefetching of Common Video Clips |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150729 Termination date: 20170523 |