接收端的视频缓冲方法

来源:互联网 发布:在淘宝上卖油画好卖吗 编辑:程序博客网 时间:2024/04/30 18:55
一种网络视频服务系统接收端的视频缓冲方法
CN 102665131 A
摘要
本发明的网络视频服务系统接收端的视频缓冲方法,包括:a.建立缓冲队列;b.接收数据并分块;c.存入缓冲队列;d.比较前n个数据块的接收与播放时间的大小,判断当前网速大小;e.如网速足够,则按照正常速率播放;f.如网速不够,则进行进一步判断;g.降低播放速率。步骤f包括:f-1.如果缓冲队列中数据块个数大于n,则正常播放;f-2.如果连续k次不足n,则利用n+j代替n。本发明的视频缓冲方法,可自动感知网速环境,并根据网速环境自动调整缓冲长度及播放速率,有效地实现了视频服务系统最终用户在不同网速环境下的自适应带宽播放;同时保证了视频播放的较高连贯度,使得用户在不同网络环境下最终获得较高满意度的网络流媒体服务。
权利要求(5)
1. ー种网络视频服务系统接收端的视频缓冲方法,其特征在于,包括以下步骤: a.建立缓冲队列,在视频接收播放设备中建立用于存储视频数据的缓冲队列,以便对待播放的视频数据进行存储; b.接收数据井分块,以单个或多个视频帧为单元或者按照数据长度等分的形式将接收到的数据进行分块; c.存入缓冲队列,将分块后的数据存入缓冲队列中; d.网速环境检测,以缓冲队列中前η个数据块为检测单元,通过比较前η个数据块的接收时间与正常播放η个数据块所需时间的大小,来对当前网速进行判断,η为正整数; e.如果网速满足正常播放要求,则按照正常播放速率进行视频播放; f.如果网速不满足正常播放要求,在满足增加检测单元的条件下,则在暂停播放的情况下增加检测单元中数据块的个数n,利用n+j代替n,j为正整数; g.降低播放速率,则以低于每秒24帧的速率播放视频数据,維持这种低播放速率t时间段后,再进行正常速率的播放。
2.根据权利要求I所述的网络视频服务系统接收端的视频缓冲方法,其特征在于,步骤b中以单个视频帧为ー个数据块进行分块;所述步骤d包括以下步骤: d-Ι.判断存入到缓冲队列中的数据块个数是否等于n,如果小于n,则继续向缓冲队列中存入数据块,并进行计时; d-2.当存入到缓冲队列中的数据个数等于η时,计算接收这η个数据所花费的时间,设为T ;比较 'Tin与1/24的大小; d-3.步骤d-2中,如果77«小于或等于1/24,则认为网络宽带足够,满足正常播放要求; d-4.步骤d-2中,如果77«大于1/24,则认为网络宽带不够,不能满足正常播放要求。
3.根据权利要求I或2所述的网络视频服务系统接收端的视频缓冲方法,其特征在干,所述步骤f包括以下步骤: f-1.读取缓冲队列中数据块的个数;判断数据块的个数是否小于n,如果判断结果为否,则按照正常速率播放视频数据; f-2.如果步骤f-1中的判断结果为是,记录数据块个数小于η发生的次数,如果有连续k次不足η的情况发生,则利用n+j代替n ;k为大于等于2的正整数。
4.根据权利要求I或2所述的网络视频服务系统接收端的视频缓冲方法,其特征在于:步骤c中所述的缓冲队列位于视频接收播放设备的内存中,且缓冲队列的大小不高于播放设备内存的50% ;缓冲队列为具有先进先出功能的数组或链表形式的数据结构。
5.根据权利要求I或2所述的网络视频服务系统接收端的视频缓冲方法,其特征在干,步骤g中降低播放速率的方法为:以每秒20帧来播放视频数据10s,然后在将播放速率调回为每秒24帧。
说明

ー种网络视频服务系统接收端的视频缓冲方法

技术领域

[0001] 本发明 涉及ー种网络视频服务系统接收端的视频缓冲方法,更具体的说,尤其涉及一种自动感知网速环境、并根据网速环境动态调整视频数据缓冲的网络视频服务系统接收端的视频缓冲方法。

背景技术

[0002] 随着互联网技术的迅速发展,网络流媒体应用愈加广泛。网络中以流的方式传输的媒体称为流媒体,主要是指视频、音频等。中国互联网络信息中心2012年I月发布的《中国互联网络发展状况统计报告》指出,“截至2011年12月底,中国网络视频用户数量增至

3. 25亿,年增长率达到14. 6%,在网民中的使用率由上年底的62. 1%提升至63. 4%”,“(网络视频)目前已成为第五大互联网应用”。

[0003] 流媒体数据相较传统数据有着显著的区别及特征:1)流媒体的数据量远大于传统数据,以视频数据为例,典型的MPEG-I码流为I. 5Mbps, I分钟MPEG-I码流的数据量约

11. 25MB ;2)流媒体数据有明显的质量特征,如网络视频的清晰度等;3)流媒体数据有明显的时间相关性,比如视频中,帧间的时间间隔必须遵循用户感知的范围限制,否则用户将明显的感觉到视频的不连贯。基于以上特征,如何使得用户最终获得高满意度的网络流媒体服务成为网络和流媒体领域中ー项富有挑战性的研究课题。

[0004]目前,解决以上问题普遍的方案一般是着眼于以下几个方面:1)增加网络带宽,保证网络视频的流畅性满足用户需求;2)通过改进网络领域技木,特别是使用组播和P2P等相关技术来节约网络带宽;3)压缩技木,即通过減少流媒体本身的数据量来适应网络带宽的要求。以上三种解决方案都有其自身的局限性,增加网络带宽本身无法满足不同用户的个性化要求,而且本身带宽成本较高;使用P2P技术可以在整体上优化网络使用效率,但不能保证每个数据接收端的视频连贯性;使用压缩技术无法在根本上解决带宽不足的问题,而且会使视频本身的质量有所降低。

[0005] 在已有的视频缓冲领域中,因较少关注不同视频接收用户的带宽环境不一致,而造成缓冲模块缺乏个性化特点,无法根据不同网络环境自动调整缓冲区域大小和视频播放速率,而使缓冲机制无法有效发挥其自身的优势和功能。

发明内容

[0006] 本发明为了克服上述技术问题的缺点,提供了一种自动感知网速环境、井根据网速环境动态调整视频数据缓冲的网络视频服务系统接收端的视频缓冲方法。

[0007] 本发明的网络视频服务系统接收端的视频缓冲方法,其特别之处在于,包括以下步骤:a.建立缓冲队列,在视频接收播放设备中建立用于存储视频数据的缓冲队列,以便对待播放的视频数据进行存储山.接收数据井分块,以单个或多个视频帧为单元或者按照数据长度等分的形式将接收到的数据进行分块;c.存入缓冲队列,将分块后的数据存入缓冲队列中;d.网速环境检测,以缓冲队列中前η个数据块为检测单元,通过比较前η个数据块的接收时间与正常播放η个数据块所需时间的大小,来对当前网速进行判断,η为正整数;e.如果网速满足正常播放要求,则按照正常播放速率进行视频播放;f.如果网速不满足正常播放要求,在满足增加检测单元的条件下,则在暂停播放的情况下增加检测单元中数据块的个数n,利用n+j代替n,j为正整数;g.降低播放速率,以低于毎秒24帧的速率播放视频数据,維持这种低播放速率t时间段后,再进行正常速率的播放。

[0008] 视频接收播放设备为可以进行视频播放的終端设备,每个数据块中包含一个或多个视频帧,一般选取1-3个视频帧;数据块还可按照等分视频数据长度的方式来实现,等分后的数据块包含的视频长度不应超过200毫秒。步骤d中,通过比较接收η个数据块的耗时与正常播放η个数据块所用时间的大小,来判断当前网速环境。步骤f中,在暂停状态下,増加检测单元,有效增加了缓冲队列中数据块的数目。步骤g中,采用较低的速率对视频进行播放,而不是采用暂停,使得视频播放设备更加适应低带宽的网络环境播放,具有更强适应性。 [0009] 本发明的网络视频服务系统接收端的视频缓冲方法,步骤b中以单个视频帧为一个数据块进行分块;所述步骤d包括以下步骤:d-Ι.判断存入到缓冲队列中的数据块个数是否等于n,如果小于n,则继续向缓冲队列中存入数据块,并进行计时;d-2.当存入到缓冲队列中的数据个数等于η吋,计算接收这η个数据所花费的时间,设为T ;比较77«与1/24的大小;d-3.步骤d-2中,如果Th小于或等于1/24,则认为网络宽带足够,满足正常播放要求;d-4.步骤d-2中,如果'77«大于1/24,则认为网络宽带不够,不能满足正常播放要求。

[0010] 通过步骤d-1、d-2计算出了接收η个数据块所用时间,Tin为接收单个视频帧所用时间,1/24为正常播放ー帧所用时间;通过比较Th与1/24的大小,即可有效地实现对当前网络宽带大小的判断。

[0011] 本发明的网络视频服务系统接收端的视频缓冲方法,所述步骤f包括以下步骤:f-Ι.读取缓冲队列中数据块的个数;判断数据块的个数是否小于n,如果判断结果为否,则按照正常速率播放视频数据ば-2.如果步骤f-Ι中的判断结果为是,记录数据块个数小于η发生的次数,如果有连续k次不足η的情况发生,则利用n+j代替n ;k为大于等于2的正整数。

[0012] 在得出网络宽带环境不足时,不是直接増加检测单元和降低播放速率处理,而是再进行进一歩的判断;当连续k次缓冲队列中数据块的个数不足η个时,再増加检测单元和降低播放速率。这是因为考虑到网速的不稳定性,可能前几块数据接收时网速暂时较慢。如果有连续k次不足η的情况发生,则视为满足满足増加检测单元的条件。

[0013] 本发明的网络视频服务系统接收端的视频缓冲方法,步骤c中所述的缓冲队列位于视频接收播放设备的内存中,且缓冲队列的大小不高于播放设备内存的50% ;缓冲队列为具有先进先出功能的数组或链表形式的数据结构。

[0014] 本发明的网络视频服务系统接收端的视频缓冲方法,步骤g中降低播放速率的方法为:以每秒20帧来播放视频数据10s,然后在将播放速率调回为毎秒24帧。虽然和原来的视频播放速率毎秒24帧相比较慢ー些,但在人体视觉感知上并没有強烈影响,而且保证了视频的连贯播放,不至于导致视频中断。[0015] 本发明的有益效果是:本发明的视频缓冲方法,可自动感知网速环境,井根据网速环境自动调整缓冲长度及播放速率,有效地实现了视频服务系统最终用户在不同网速环境下的自适应带宽播放;同时保证了视频播放的较高连贯度,使得用户在不同网络环境下最终获得较高满意度的网络流媒体服务。

附图说明

[0016] 图I为本发明的视频缓冲方法的流程图;

图2为本发明中是否增加检测单元长度的判断方法流程图;

图3为本发明中缓冲队列和检测单元的结构示意图。

具体实施方式

[0017] 下面结合附图与实施例对本发明作进ー步说明。

[0018] 如图I和图2所示,给出了本发明的视频缓冲方法以及其中的是否增加检测单元长度的判断方法的流程图,下面结合这两个流程图对本发明的视频缓冲方法详细地进行说明。

[0019] 本发明的网络视频服务系统接收端的视频缓冲方法,包括以下步骤:

a.建立缓冲队列,在视频接收播放设备中建立用于存储视频数据的缓冲队列,以便对待播放的视频数据进行存储;缓冲队列建立在视频接收播放设备的内存中,其可采用先进先出形式的数组或链表形式的数据结构,以不超过内存空间的50%为宜;

b.接收数据井分块,以单个或多个视频帧为单元或者按照数据长度等分的形式将接收到的数据进行分块;一般采用I〜3个视频帧为ー个数据块;采用视频数据等分时,形成的数据块长度应在200ms以内;

c.存入缓冲队列,将分块后的数据存入缓冲队列中;

d.网速环境检测,以缓冲队列中前η个数据块为检测单元,通过比较前η个数据块的接收时间与正常播放η个数据块所需时间的大小,来对当前网速进行判断,η为正整数;例如η取值为5 ;

如果步骤b中以单个视频帧为ー个数据块进行分块;那么该步骤的网速环境检测可以通过以下步骤来实现:

d-Ι.判断存入到缓冲队列中的数据块个数是否等于n,如果小于n,则继续向缓冲队列中存入数据块,并进行计时;

d-2.当存入到缓冲队列中的数据个数等于η时,计算接收这η个数据所花费的时间,设为T ;比较77»与1/24的大小;

d-3.步骤d-2中,如果77«小于或等于1/24,则认为网络宽带足够,满足正常播放要

求;

d-4.步骤d-2中,如果77«大于1/24,则认为网络宽带不够,不能满足正常播放要求;

e.如果网速满足正常播放要求,则按照正常播放速率进行视频播放;

f.如果网速不满足正常播放要求,则在暂停播放的情况下增加检测单元中数据块的个数n,利用n+j代替n,j为正整数;

该步骤f可以通过一下步骤来实现:f-1.读取缓冲队列中数据块的个数;判断数据块的个数是否小于n,如果判断结果为否,则按照正常速率播放视频数据;

f-2.如果步骤f-1中的判断结果为是,记录数据块个数小于η发生的次数,如果有连续k次不足η的情况发生,则利用n+j代替n ;k为大于等于2的正整数;其中k、j的值可均取为2,替代前后的缓冲队列和检测单元的结构示意图如图3所示;

经过步骤f-Ι和f_2,在网速不满足正常播放要求的情况下,不直接増加检测单元的长度和降低播放速率,而是通过判断缓冲队列中是否有连续k次不足η的情况发生,来进ー步确定当前网速不足以满足正常的播放;

g.降低播放速率,以低于毎秒24帧的速率播放视频数据,維持这种低播放速率t时间段后,再进行正常速率的播放;采用降低播放速率而非暫定的处理方法,保证了视频播放的 较高连贯度,使得用户在不同网络环境下最终获得较高满意度的网络流媒体服务。

[0020] 其中,视频数据接收及分块是为整个缓冲方法提供基础数据;缓冲队列入队是为基础数据提供缓冲队列的数据结构,并为感知网速和动态调整播放速率做基础准备;感知网速环境是本发明所述方法的核心,通过感知网速环境来判断视频接收端用户所在的网络带宽,并据此进行进ー步的操作;根据感知网速环境所判断出的结果,如果结果是当前用户所在网络带宽不足,则对缓冲队列进行调整;对缓冲队列进行调整后,也要对视频读取播放速率进行调整,之后对视频数据进行读取和播放;如果根据步骤S3判断的结果为当前用户所在网络带宽满足视频连贯播放需求,则直接对缓冲队列中的视频数据进行读取和播放。

[0021] 为了更为详尽的说明,在采用编程语言C++的情况下,以在已有的视频会议程序中増加可以自动感知网速环境并根据网速环境自动调整缓冲长度及播放速率的视频数据缓冲模块为具体的实施例,进行进一步的说明。

[0022] 由于本发明所涉及的缓冲方法集成于已有的视频服务系统接收端中,针对原有数据接收端的数据流结构不同,采用不同的分块方法。每个数据块中包含有ー帧的视频数据,每个数据块中包含的视频播放时间长度约为41. 7毫秒(I秒/24帧)。

[0023] 缓冲队列是ー种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(FIFO — first in first out)的线性表。实现缓冲队列数据结构的方式可有多种,主要可以使用数组和链表等数据结构实现。

[0024] 具体地,采用链表作为缓冲队列的实现方式,为了方便本例的实现,可采用如下结构体:

struct node{

unsigned char bdata[30000]; int bsize ; int T; int D;

struct node 氺next;

};

struct bufferlink {node 氺front; node 氺rear; int count;

};

以上程序片段中,结构体node代表存储每一个数据分块的节点,节点除了包含视频数据bdata、数据长度bsize和视频长度T外,还包含链 表结构中该节点的下一个节点的指针next,另外D是记录每个数据块接收到的系统时间,这个参数是为感知网速环境所准备的。结构体bufferlink是由node组成的链表,该链表存储在接收端计算机内存中,本实施例中,count定义为1000,也就是说该链表最大存储数据块个数为1000个,不大于本实施例运行计算机的内存的50%。

[0025] 本实施例中,数据分块后存入缓冲队列的程序片段如下所示: if(bufferlinkl->count==0)

{

P= (struct node 木)malloc(sizeof(struct node)); for (int i=0;i〈=30000;i++)

{p->bdata[i]=vdata[i];} p->bsize=retvalue; p->T=42; p->next=NULL; bufferlinkl->front=p; bufferlinkl->rear=p; bufferlinkl_>count++;

}

else

{

P= (struct node 木)malloc(sizeof(struct node)); for (int i=0;i〈=30000;i++)

{p->bdata[i]=vdata[i];} p->bsize=retvalue; p->T=42;

p->next=bufferlinkl->rear->next; bufferlinkl->rear->next=p; bufferlinkl->rear=p; bufferlinkl_>count++;

}

需要指出的一点,由于本实施例是基于视频采集设备按帧发送传输数据,因此结构体node中每个数据块包含视频长度都是42。不失一般性,这里介绍一下如果基于其他分块方式,rO是如何记录并存入缓冲队列的。对于采用RTP/RTCP协议、RSTP协议的网络视频服务系统可以直接在接收到的报文中读出,并在存入各node中记录,即在缓冲队列存入时用“P->T= Timesatmp;”赋值语句替换掉上述程序片段中的“p->T=42;”。对于采用其他自编协议进行数据传输的网络视频服务系统,由于采用公式m)=Size(i) (T(total)/Size (total))进行估算,所以先将视频总时间TotalTime和视频数据总大小TotalSize以及当前数据块大小bsize读取出来,然后可以用“p->T= p->bsize* (TotalTime/TotalSize); ”赋值语句替换掉上述程序片段中的“p_>T=42; ”。

[0026] 在数据接收和分块以及存入缓冲队列完成后,在进行网速环境检測。如图3所示,整个缓冲队列被分为两部分,缓冲队列的前η块为判断网速环境所需的检测单元,其数据块的数量为η。在初始状态下,整个缓冲队列为空队列,在缓冲队列存入前η个视频数据时,是不进行以后步骤的,也就是不给播放视频的功能提供数据。以实施例为例,实施例中ri=5。判断条件为:

while (bufTeriinK:l->countノηノ

当缓冲队列的前η块已被填满后,需要计算接收到此时填满的时间。结构体node中,參数D的作用是当每一个数据块被存入缓冲队列中时,记录当时的系统时间(百毫秒级)并赋值给D。也就是说,在缓冲队列中,每ー个节点接收到的时间我们都已经记录下来,计算前η块数据块填满的时间只需要采用如下公式即可:

Σ D=D (n)-D(X)

网速带宽是否足够的判断过程是通过前η块数据接收时间与数据正常播放所需时间的比较来实现的,以此来判断网速情況。数据正常播放所需时间也就是前η块数据块中记录的τα)之和rrcノ。如果r 入则表示前η块数据接收的时间比播放所需时

间短,当前的网络带宽可以满足正常播放该视频的要求;如果Γ似rrG入则表示当前网速环境不满足正常播放该视频的要求,需要进ー步调整缓冲队列及播放速率。

[0027] 由于数据是按帧分块的,每秒播放24帧数据,相当于每帧播放速率为I秒/24帧^ 41. 7毫秒。如果前5块数据是在41. 7毫秒*5=208. 5毫秒内接收完成的,可以判断出当前的网络环境是能够满足视频播放连贯的要求的,即每秒播放24帧数据。如果前5块数据接收时间大于208. 5毫秒,则可以判断出当前网络环境的网络带宽无法满足视频连贯播放。

[0028] 如果判断结果为当前网络环境符合视频播放要求,则按照正常播放速率进行视频播放;如果判断结果为当前网络带宽不足以满足视频播放要求,先暂不直接调整缓冲队列的长度,这是因为考虑到网速的不稳定性,可能前几块数据接收时网速暂时较慢,但此时应启动调整缓冲队列长度的预处理过程。

[0029] 调整缓冲队列长度的预处理过程如图2所示。即在播放取出缓冲队列的数据时首先进行判断,判断当前缓冲队列中是否还有超过η个已缓冲的数据。如果仍有η个数据,则继续进行读取数据并播放数据;如果已经少于η块数据,则不取出数据,并对这种情况发生的次数进行计数。如果连续k次(k大于等于2,一般取k=2)无法取出数据,即连续k次缓冲队列内数据个数都少于n,则认为当前网速环境下,已有的缓冲队列长度不够。在这种情况下,程序自动调整缓冲队列η的长度,调整后的n’ =n+j,可以取k=j。调整前后的缓冲队列分别入图3中的上下两图所示。如果连续两次读取数据时,缓冲队列中数据块个数都少于5个时,则暂停播放读取数据,同时调整缓冲队列的长度n=7。

[0030] 暂停播放读取数据的过程采用ー个开关參数OK实现,也就是OK=I时可以正常播放,OK=O时,则暂停播放。具体的程序片段如下: if(0K!=0)

{

OK=O;

if(bufferlinkl->count>n)

{

q=bufferlinkl->front;

((CVideoNetDlg *)pdlg)->DisplayRemoteFrame(q->bdata, q->bsize);

OK=I;

};

else

{

n=n+j ;

}

}

调整播放视频速率步骤,在默认情况下,视频数据读取并播放的速率为每秒24帧,当进行完缓冲队列调整后,如果不调整视频数据读取和播放的速率,则会导致调整后的缓冲队列内视频数据块的个数一直不足η块,导致视频暂时中断播放,影响用户正常观看视频。为此,本发明在进行完缓冲队列调整后,需要适当调整视频数据读取及播放的速率,在不强烈影响用户的视频服务感受基础上,对其进行微量调整,即当且仅当在调整缓冲队列长度之后,调整读取的时间间隔S⑴=β S(i-V,其中依-U表示读取的当前数据块与前ー个数据块的时间间隔。对于已经记录了每个数据块所包含的视频时间长度,可以取ノニ re-1 入即可以取上一块数据块中所包含视频时间长度来定义当前快读取的时间间隔。β表示调整系数,一般取".2。在以此速率播放10秒时间后,将调整系数O在调整为1,即以调整之前的播放速率进行数据读取和视频播放。

[0031] 具体地,默认的播放速率为42毫秒,也就是每秒约24帧数据。由于本实施例中每一块数据就是视频的ー帧,所以读取的速率也是每隔42毫秒读取一次。当调整完缓冲队列后,在原视频读取的程序后添加如下程序,使得读取速率变低。

[0032] ......

N=L 2*42;

Sleep(N);

其中,“N=L 2*42; ”表不原来甸隔42晕秒基础上,调整为I. 2*42晕秒的间隔时间。这样调整的结果使得读取和播放速率达到每秒约20帧,虽然和原来的视频播放速率毎秒24帧相比较慢ー些,但在人体视觉感知上并没有強烈影响,而且保证了视频的连贯播放,不至于导致视频中断。在启动上述程序的同时启动计时器,当计时器记录时间10秒后,将N调整为41,并关闭计时器。来使视频数据读取和播放的速率恢复为调整之前的状态。

[0033] 经过上述步骤的处理后,可以由原有的视频服务系统接收端来读取数据并进行播放。也可以将本发明所述方法的缓冲队列中数据读取后发送给原有的视频服务系统数据接收端进行处理。具体地,在本实施例中,采用直接读取缓冲队列中的视频数据后,调用原有的播放功能,进行播放。在读取视频数据后,将该数据在缓冲队列中删除。具体的程序片段如下:

q=bufferlinkl->front;

((CVideoNetDlg 氺)pdlg)->DisplayRemoteFrame(q->bdata,q->bsize);

if (bufferlinkl->front->next!=NULL) bufferlinkl->front=bufferlinkl->front->next; bufferlinkl->count—;

free;

在上述程序片段中,读出缓冲队列第一个数据块后,直接调用原有的视频播放函数DisplayRemoteFrame进行数据播放,同时将缓冲队列第一个数据块删除,并释放其内存,同时将原缓冲队列第二个数据块当做新缓冲队列的第一块,以待下ー块数据的播放。

0 0
原创粉丝点击