著录项信息
专利名称 | 一种自适应网络带宽的视频流传输控制方法 |
申请号 | CN201110309203.5 | 申请日期 | 2011-10-13 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-01-18 | 公开/公告号 | CN102325274A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | H04N21/647 | IPC分类号 | H;0;4;N;2;1;/;6;4;7查看分类表>
|
申请人 | 浙江万里学院 | 申请人地址 | 浙江省宁波市鄞州区钱湖南路8号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 浙江万里学院 | 当前权利人 | 浙江万里学院 |
发明人 | 刘高平 |
代理机构 | 宁波诚源专利事务所有限公司 | 代理人 | 张一平;邓青玲 |
摘要
本发明涉及一种自适应网络带宽的视频流传输控制方法,该方法通过在发送方设置视频数据缓存与数据发送缓存,同时设置两个并行运行的视频数据输入线程和视频数据发送线程,根据网络带宽的变化分别设置视频传输过程中视频丢帧、视频码率上调与下调的三个主要控制方法,其中,为了避免传输过程中视频“碎帧”出现,控制方法中设置一个帧地址数组实现视频数据按帧传输与丢弃;为了确保视频码率调整的正确性,控制方法采用时间为参数的加权累加方法来判断视频数据积累的变化趋势。该发明能保证视频码率随网络带宽波动或在可变码率下随视频场景变化而自适应调整,可有效地应用于动态带宽网络环境下实时视频监视。
一种自适应网络带宽的视频流传输控制方法\n技术领域\n[0001] 本发明涉及一种自适应网络带宽的视频流传输控制方法。\n背景技术\n[0002] 目前,RTP是流媒体传输常用的协议,但是由于RTP是建立在不进行任何拥塞控制的UDP协议基础上,需要在应用层上加入拥塞控制方法,因此不能直接应用于窄变带宽网络环境下实时视频监视。为了克服上述问题,许多文献提出了不同的方法。在已有的传输控制方法中,解决方法主要分两种:视频流码率控制与网络传输控制。前者根据网络传输信道的情况来调整编码参数,以生成适合当前网络传输的视频流,从而使视频传输需要的带宽尽可能小并能充分利用动态变化的带宽;后者根据网络传输带宽自适应地调节视频数据的发送量,当网络带宽良好时,减小视频数据丢弃率,增加数据发送速率。反之,增加视频数据丢弃率,减小数据发送速率。此类控制方法的关键是如何计算网络速率变化情况以及视频数据丢弃策略,以减少视频流的抖动,提高播放的平稳特性。但这些控制方法均未将视频流特点与网络传输控制方法进行结合,前者重点阐述视频码率的控制方法,而对视频传输过程中如何触发码率调整以及码率切换过程中视频数据如何平滑传输未作分析;后者重点阐述根据网络带宽变化调节视频数据发送与丢弃的策略,而对如何利用视频流码率调整实现视频流随网络带宽变化自适应传输均未探讨。因此,这些方法还不能直接应用于实际网络中传输视频流,上述视频流适用于H.264、MPEG4。\n[0003] 在发明专利“一种自适应网络带宽实时视频传输方法”(专利申请号:\n201010103951.3)中,本发明依据网络传输过程中获取的时延和丢包率统计信息,并设定了一个时延与丢包临界点,分析出当前网络传输带宽,从而依据网络传输带宽调整视频编码器编码输出大小。在该发明中需要视频接收方提供时延和丢包率,当网络带宽变小时,发送方得到这些信息的延迟较大。发送方利用这些较早的信息调整视频编码器编码参数,可能与当前网络状况不符合,甚至相反。因此,该发明提供的方法在实际动态带宽网络中传输视频难于达到理想效果。\n[0004] 理想情况下,视频编码器输出数据的速率与网络带宽相同,并能随着网络带宽的变化而相应变化,以便视频数据能实时地传输给接收方。但实际情况下由于网络带宽与视频场景随机变化,视频码率不可能完全与网络带宽完全相同,视频码率调整总是延迟于网络带宽的变化。因此,一个有效的视频传输控制方法必须解决如下问题:\n[0005] 其一,能及时发现网络带宽的变化,并控制视频码率作相应调整,使得视频码率尽可能最大;\n[0006] 其二、能处理好因网络带宽变小时在发送方积累的视频数据。\n发明内容\n[0007] 本发明所要解决的第一个技术问题是针对上述现有技术提供一种具有较好视频数据丢帧策略的自适应网络带宽的视频流传输控制方法。\n[0008] 本发明所要解决的第二个技术问题是针对上述现有技术提供一种具有较好视频数据丢帧策略、同时能根据网络拥堵情况及时下调视频编码器输出码率的自适应网络带宽的视频流传输控制方法。\n[0009] 本发明所要解决的第三个技术问题是针对上述现有技术提供一种具有较好视频数据丢帧策略、同时能根据网络拥堵或空闲情况及时下调或上调视频编码器输出码率的自适应网络带宽的视频流传输控制方法。\n[0010] 本发明解决上述第一个技术问题所采用的技术方案为:该自适应网络带宽的视频流传输控制方法,将发送方的缓存分成两个:一个为视频数据缓存,用于存储来自视频编码器的视频帧数据Md,另一个为视频发送缓存Ms,用于暂存来自视频数据缓存Md的一帧视频数据,等待传输链路发送;\n[0011] 设置两个并行运行的线程,一个为视频数据输入线程,用于负责视频数据缓存中视频数据的输入;另一个为视频数据发送线程,用于负责视频发送缓存中视频数据的输入与输出;\n[0012] 其特征在于:\n[0013] 在视频数据缓存Md中设置一个帧计数器n,将视频数据缓存Md中存有的n帧视频数据,分别记为M1、M2、...、Mn,若第i帧最后一个字节在视频数据缓存中的地址为Pi,则视频数据缓存Md中的视频数据的地址会构成一个帧地址数组{Pi}(i=1,...n),且P1<P2<...<Pn,每次视频发送缓存Ms从视频数据缓存Md获取视频数据时,从视频数据缓存Md中取得最前面一帧视频数据,同时将帧计数器减1;\n[0014] 对视频数据缓存Md设置一个最大保存数据长度警戒线长度LH,其中LH=H×Ld,其中H=0.7~0.9,Ld为所述视频数据缓存的总字节长度;\n[0015] 所述视频数据输入线程的处理方法为:\n[0016] 步骤1、获取一帧视频编码器输出的视频数据Mf;\n[0017] 步骤2、如果L+Lf>Ld,则执行步骤3;其中L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度,Lf为当前从视频编码器输出的一帧视频数据Mf的长度;Ld为所述视频数据缓存的总字节长度;\n[0018] 步骤3、判断当前从视频编码器输出的一帧视频数据Mf是否为关键帧视频数据,如果该帧视频数据Mf不是关键帧视频数据,则立即丢弃该帧视频数据,并转回步骤1;如果该帧视频数据Mf是关键帧视频数据,设置第一中间参数k的初值,设k=0,并转步骤4;\n[0019] 步骤4、如果Pn-k>LH/2,置k=k+1,然后返回步骤4;否则,将视频数据缓存Md中后续k片视频数据清除,即置n=n-k、L=Pn+1,并将当前从视频编码器输出的一帧视频数据Mf转存至视频数据缓存Md,然后转回步骤1;其中Pn-k为视频数据缓存Md中第n-k帧视频数据的地址,LH为视频数据缓存Md的最大保存数据长度警戒线长度,n为视频数据缓存Md中设置的帧计数器所记录的数字;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;Pn为视频数据缓存Md中第n帧视频数据的地址;k表示第一中间参数;\n[0020] 所述视频数据发送线程的处理方法为:\n[0021] 所述视频数据发送线程将视频数据流按帧为单位进行发送,具体如下:视频数据发送线程将保存在视频发送缓存中的一帧视频数据发送至接收方,待视频发送缓存中视频数据发送完后,再从视频数据缓存中取得一帧保存时间最久的视频数据存入视频发送缓存,然后再次发送,即重复上述过程。\n[0022] 本发明解决上述第二个技术问题所采用的技术方案为:在第一技术问题所采用的技术方案基础上,增加如下技术方案:\n[0023] 在所述步骤2中,首先设置第二中间参数Fd为“假”,设置第三中间参数a、第四中间参数M1H,第五中间参数S1H,其中第二中间参数Fd用作视频码率处于下调过程的标志位,第三中间参数a为大于等于1的整数,一般取a=4~8,第四中间参数M1H用来调整触发视频编码器下调输出码率的敏感度,一般取M1H=0.1~0.3之间;第五中间参数S1H为第三中间参数a乘以视频数据流中关键帧出现的周期帧数;\n[0024] 然后再判断L+Lf与Ld之间的关系,如果L+Lf>Ld,则执行步骤3;如果L+Lf≤Ld,则执行步骤2.1;其中,L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;\nLf为当前从视频编码器输出的一帧视频数据Mf的长度;Ld为所述视频数据缓存的总字节长度;\n[0025] 步骤2.1、判断第二中间参数Fd是否为“真”,如果第二中间参数Fd为“假”,则置第二中间参数Fd为“真”,然后执行步骤2.2;如果第二中间参数Fd为“真”,则执行步骤2.3;\n[0026] 步骤2.2、命令视频编码器下调输出码率,同时设置第六中间参数LT、第七中间参数N1、第八中间参数S1,且置LT=L+Lf,N1=0、S1=0,并转步骤2.4;其中,第六中间参数LT用作观察视频数据缓存Md中数据长度变化趋势时的对比标准,第七中间参数N1表示在视频编码器输出S1H帧视频数据这段时间内出现L+Lf>LT的次数;第八中间参数S1为计算第七中间参数N1值的加权系数;\n[0027] 步骤2.3、判断L+Lf与第六中间参数LT之间的关系,如果L+Lf>LT,置N1=N1+S1,然后转步骤2.5;如果L+Lf≤LT,直接转步骤2.5;\n[0028] 步骤2.4、将当前从视频编码器输出的一帧视频数据Mf转存至视频数据缓存Md,并置Pn+1=Pn+Lf、L=L+Lf、n=n+1,然后转回步骤1;其中Pn为视频数据缓存Md中第n帧视频数据的地址;Pn+1为视频数据缓存Md中第n+1帧视频数据的地址,Lf为当前从视频编码器输出的一帧视频数据Mf的长度;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;n为视频数据缓存Md中设置的帧计数器的读数;\n[0029] 步骤2.5、计算第八中间参数S1=S1+1,如果第八中间参数S1等于第五中间参数S1H,转步骤2.6;否则,转步骤2.4;\n[0030] 步骤2.6、如果第七中间参数N1值大于M1H×S1H×(S1H+1)/2,转步骤2.2;否则,置第七中间参数N1=0、第八中间参数S1=0,然后转步骤2.4。\n[0031] 本发明解决上述第三技术问题所采用的技术方案为:在所述第二技术问题所采用的技术方案基础上,增加如下技术方案:\n[0032] 在所述步骤1执行完后,先执行以下步骤:\n[0033] 步骤1.1、如果L+Lf>LH,先设置第九中间参数Fu为“假”,设置第十中间参数b、第十一中间参数M2H,第十二中间参数S2H,再执行步骤2;如果L+Lf≤LH,则执行步骤1.2;其中第九中间参数Fu用作视频码率处于上调过程的标志位;第十中间参数b为大于第三中间参数a的整数,一般取b=12~24,第十一中间参数M2H用来调整触发视频编码器上调输出码率的敏感度,一般取M2H=0.1~0.3之间;第十二中间参数S2H为第十中间参数b乘以视频数据流中关键帧出现的周期帧数;\n[0034] 步骤1.2、设置第二中间参数Fd为“假”;\n[0035] 步骤1.3、判断第九中间参数Fu是否为“真”,如果第九中间参数Fu为“假”,转步骤\n1.4,否则转步骤1.5;\n[0036] 步骤1.4、如果视频数据缓存Md中帧计数器n为0,置第九中间参数Fu为“真”,同时设置第十三中间参数N2、第十四中间参数S2,且置N2=0、S2=0;然后转步骤1.9,否则直接转步骤1.9;其中第十三中间参数N2表示在视频编码器输出S2H帧视频数据这段时间内出现L等于0的次数、第十四中间参数S2为计算第十三中间参数N2值的加权系数;\n[0037] 步骤1.5、如果视频数据缓存Md中帧计数器n为0,置第十三中间参数N2=N2+S2,然后转步骤1.6,否则直接转步骤1.6;\n[0038] 步骤1.6、置第十四中间参数S2=S2+1;\n[0039] 步骤1.7、如果S2=S2H,置第九中间参数Fu为“假”,然后转步骤1.8,否则转步骤\n1.9;\n[0040] 步骤1.8、如果第十三中间参数N2>M2H×S2H×(S2H+1)/2,通知视频编码器将视频码率上调,然后转步骤1.9;否则,直接转步骤1.9;\n[0041] 步骤1.9、将Mf转存至Md中,并置Pn+1=Pn+Lf、L=L+Lf、n=n+1,然后转步骤1;\n其中Pn为视频数据缓存Md中第n帧视频数据的地址;Pn+1为视频数据缓存Md中第n+1帧视频数据的地址,Lf当前从视频编码器输出的一帧视频数据Mf的长度;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;n为视频数据缓存Md中设置的帧计数器的读数。\n[0042] 作为改进,将视频编码器输出的视频码率设置多级,视频编码器每次接收到视频码率上调或下调命令时,只将视频编码器输出的视频码率在当前输出的视频码率的基础上上调一级或下调一级。\n[0043] 与现有技术相比,本发明的优点在于:本方法能保证视频码率随网络带宽波动或在可变码率下随视频场景变化而自适应调整,可有效地应用于动态带宽网络环境下实时视频监视。\n附图说明\n[0044] 图1为本发明实施例一中视频数据缓存之间的数据转移关系图。\n[0045] 图2为本发明实施例一中视频数据输入线程的处理流程图。\n[0046] 图3为本发明实施例一中视频数据发送线程的处理流程图。\n[0047] 图4为本发明实施例二中视频数据输入线程的处理流程图。\n[0048] 图5为本发明实施例三中视频数据输入线程的处理流程图。\n具体实施方式\n[0049] 以下结合附图实施例对本发明作进一步详细描述。\n[0050] 实施例一:\n[0051] 本发明提供了一种自适应网络带宽的视频流传输控制方法,其将发送方的缓存M分成两个:一个为视频数据缓存,记为Md,用于存储来自视频编码器的视频帧数据,另一个为视频发送缓存,记为Ms,用于暂存来自视频数据缓存的一帧视频数据,等待传输链路发送;如果Md、Ms的总字节长度记为Ld、Ls,则发送方的缓存M的长度即为Ld+Ls。图1为视频传输时缓存之间的数据转移关系示意图,其中,Md为先入先出的流缓存,Mf为视频编码器输出的一帧视频数据缓存,Mr为数据接收缓存,Mp为视频播放缓存,图中的双线箭头表示数据流传递方向,单线箭头表示算法对视频编码器控制方向;参见图1所示。\n[0052] 在上述操作中,每次从视频数据缓存Md中取出一帧视频数据至视频发送缓存Ms而非取出一段视频数据,这是为了防止发送方在网络拥塞时丢弃视频数据时不会产生碎帧,以致于接收方不能正确解码,并造成不必要的网络数据传输;为了实现视频数据缓存向视频发送缓存数据转移按帧为单位进行,在视频数据缓存中设置一个帧计数器,将视频数据缓存中存有的n帧视频数据,分别记为M1、M2、...、Mn,若第i帧最后一个字节在视频数据缓存中的地址为Pi,则视频数据缓存中的视频数据的地址会构成一个帧地址数组{Pi}(i=\n1,...n),且P1<P2<...<Pn,每次视频发送缓存从视频数据缓存获取视频数据时,从视频数据缓存中取得最前面一帧视频数据,同时将帧计数器减1\n[0053] 设置两个并行运行的线程,一个为视频数据输入线程,用于负责视频数据缓存中视频数据的输入;另一个为视频数据发送线程,用于负责视频发送缓存中视频数据的输入与输出;\n[0054] 为了尽快发现网络带宽比视频码率小,避免视频数据在发送方积累过多而造成视频频繁丢帧,对视频数据缓存Md设置一个最大保存数据长度警戒线长度LH,其中LH=H×Ld,其中H=0.7~0.9,Ld为所述视频数据缓存的总字节长度;\n[0055] 所述视频数据输入线程参见图2所示,具体的处理方法为:在视频数据缓存Md向视频发送缓存Ms发送视频数据时,如果发现视频发送缓存Ms中无数据,立即将M1帧转存至Ms,然后将M2,M3,...,Mn逐帧前移,而当视频编码器Mf有数据输入时,判断L+Lf的大小,如果L+Lf>Ld,再根据Mf是否为关键帧有选择性地丢弃部分视频数据,具体步骤如下:参见图\n2所示\n[0056] 步骤1、获取一帧视频编码器输出的视频数据Mf;\n[0057] 步骤2、如果L+Lf>Ld,则执行步骤3;其中L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度,Lf为当前从视频编码器输出的一帧视频数据Mf的长度;Ld为所述视频数据缓存的总字节长度;\n[0058] 步骤3、判断当前从视频编码器输出的一帧视频数据Mf是否为关键帧视频数据,如果该帧视频数据Mf不是关键帧视频数据,则立即丢弃该帧视频数据,并转回步骤1;如果该帧视频数据Mf是关键帧视频数据,设置第一中间参数k的初值,设k=0,并转步骤4;\n[0059] 步骤4、如果Pn-k>LH/2,置k=k+1,然后返回步骤4;否则,将视频数据缓存Md中后续k片视频数据清除,即置n=n-k、L=Pn+1,并将当前从视频编码器输出的一帧视频数据Mf转存至视频数据缓存Md,然后转回步骤1;其中Pn-k为视频数据缓存Md中第n-k帧视频数据的地址,LH为视频数据缓存Md的最大保存数据长度警戒线长度,n为视频数据缓存Md中设置的帧计数器所记录的数字;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;Pn为视频数据缓存Md中第n帧视频数据的地址;k表示第一中间参数;\n[0060] 在上述处理步骤中,将视频数据缓存Md中后面n-k帧丢弃而保留k帧视频数据,而不将视频数据缓存Md中的数据全部清除,一是为了适当减少视频数据缓存Md中的数据量,以免下次视频编码器Mf输入时又出现L+Lf>Ld的情况;二是为了避免视频码率下调起作用后,视频数据缓存Md中数据量快速减小而又要求视频码率调高;另外,只有当Mf为关键帧时才开始视频数据丢弃并将Mf保存,这是因为一个H.264视频编码图像由一个或多个片(Slice)组成,H.264视频片共有5种不同的类型,即I片、P片、B片、SP片、SI片,一个I片可以单独解码,而其它片需要依赖之前的视频片才能完整解码。在进行视频传输时,如果I片丢失后,后续接收到的非I片则无法完整解码;但非I片丢失后,如果在后续视频中接收到I片,可以重新开始解码。上述指的关键帧为包含I片的视频帧。在MPEG4中,也同样存在上述特征的关键帧。因此,在视频实时传输时,如果出现网络拥塞,可以适当丢弃非关键帧,减少数据传输量,同时又最大限度地减少对接收方视频播放的影响。\n[0061] 所述视频数据发送线程的处理方法为:\n[0062] 所述视频数据发送线程将视频数据流按帧为单位进行发送,具体如下:视频数据发送线程将保存在视频发送缓存中的一帧视频数据发送至接收方,并将发送成功的数据清除,待视频发送缓存中视频数据发送完后,再从视频数据缓存中取得一帧保存时间最久的视频数据存入视频发送缓存,然后再次发送,即重复上述过程。参见图3所示。\n[0063] 实施例二:\n[0064] 与实施例一不同的是:\n[0065] 将视频编码器输出的视频码率设置多级,当视频编码器有视频数据Mf输入给视频数据缓存Md时,检测视频数据缓存Md中已有数据的长度L,如果当L+Lf>LH时,立即通知编码器将视频码率调低一级;但在此之后的一段时间内,当视频数据缓存接收到视频编码器输出的视频数据Mf时,仍然会检测到L+Lf>LH,其可能由下面2种原因造成的:①由于视频码率下调生效延迟,需要一段时间后L+Lf才会不超过LH;②网络带宽过小,视频码率必须下调2级或以上。如果只是第1种情况,就无须再对视频编码的码率作下调,而对第2种情况,则必须通知视频编码器继续下调视频码率。\n[0066] 在通知视频编码器下调视频码率后,如果视频数据缓存Md接收到视频编码器输出的一帧新视频数据Mf时仍然出现L+Lf>LH,则对视频数据缓存Md中实际已经保存的数间据长度L变化趋势进行观察一段时间。如果变化趋势是下降的,说明视频数据缓存Md中缓存的数据量正在减少,则不再要求编码器下调视频码率;反之,则说明视频数据缓存Md中缓存的数据量未减少,需要再次下调一级视频码率,下调之后再次重复这个判断过程,直至L+Lf<=LH。具体步骤如下:参见图4所示\n[0067] 所述步骤2中,首先设置第二中间参数Fd为“假”,设置第三中间参数a、第四中间参数M1H,第五中间参数S1H,其中第二中间参数Fd用作视频码率处于下调过程的标志位,第三中间参数a为大于等于1的整数,第四中间参数M1H用来调整触发视频编码器下调输出码率的敏感度,一般取M1H=0.1~0.3之间;第五中间参数S1H为第三中间参数a乘以视频数据流中关键帧出现的周期帧数;\n[0068] 然后再判断L+Lf与Ld之间的关系,如果L+Lf>Ld,则执行步骤3;如果L+Lf≤Ld,则执行步骤2.1;其中,L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;\nLf为当前从视频编码器输出的一帧视频数据Mf的长度;Ld为所述视频数据缓存的总字节长度;\n[0069] 步骤2.1、判断第二中间参数Fd是否为“真”,如果第二中间参数Fd为“假”,则置第二中间参数Fd为“真”,然后执行步骤2.2;如果第二中间参数Fd为“真”,则执行步骤2.3;\n[0070] 步骤2.2、命令视频编码器将输出码率下调一级,同时设置第六中间参数LT、第七中间参数N1、第八中间参数S1,且置LT=L+Lf,N1=0、S1=0,并转步骤2.4;其中,第六中间参数LT用作观察视频数据缓存Md中数据长度变化趋势时的对比标准,第七中间参数N1表示在视频编码器输出S1H帧视频数据这段时间内出现L+Lf>LT的次数;第八中间参数S1为计算第七中间参数N1值的加权系数;\n[0071] 步骤2.3、判断L+Lf与第六中间参数LT之间的关系,如果L+Lf>LT,置N1=N1+S1,然后转步骤2.5;如果L+Lf≤LT,直接转步骤2.5;\n[0072] 步骤2.4、将当前从视频编码器输出的一帧视频数据Mf转存至视频数据缓存Md,并置Pn+1=Pn+Lf、L=L+Lf、n=n+1,然后转回步骤1;其中Pn为视频数据缓存Md中第n帧视频数据的地址;Pn+1为视频数据缓存Md中第n+1帧视频数据的地址,Lf当前从视频编码器输出的一帧视频数据Mf的长度;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;n为视频数据缓存Md中设置的帧计数器的读数;\n[0073] 步骤2.5、计算第八中间参数S1=S1+1,如果第八中间参数S1等于第五中间参数S1H,转步骤2.6;否则,转步骤2.4;\n[0074] 步骤2.6、如果第七中间参数N1值大于M1H×S1H×(S1H+1)/2,转步骤2.2;否则,置第七中间参数N1=0、第八中间参数S1=0,然后转步骤2.4。\n[0075] 在上述步骤中,参数LT是判决开始时L+Lf的值,用作观察视频数据缓存Md中数据长度变化趋势时的对比标准。所取的一段时间为编码器输出S1H帧视频数据的时间,即T1=S1H/M0,其中S1H=a×N0、a为整数,且a>=1,N0为视频流中关键帧出现的周期帧数,M0为编码器输出的视频帧率。其中,设置经过a个N0帧(即S1H)后再进行判决,是因为在视频流中关键帧的数据量明显比非关键帧数据量大,完整周期的视频帧输入可以提高检测的可靠性。选取a值越大,判决的可靠性越高,但在观察时间T内出现丢帧的概率也越大,一般取a=4~8。另外,在对视频编码器输出的视频数据Mf输入时出现L+Lf>LT的次数N1计算中,采用时间为参数的线性加权累加方法,加权系数为S1,即时间越靠后加权系数越大,对N1值的影响更大,因此,N1值的大小反映了出现L+Lf>LT次数的变化趋势。另外,N1的最大值为S1H×(S1H+1)/2,对N1值判决时阈值采用参数M1H×S1H×(S1H+1)/2,其中M1H可以用来调整触发视频码率下调的敏感度,一般取M1H=0.1~0.3之间。\n[0076] 实施例三:\n[0077] 与实施例二不同的是,\n[0078] 当网络带宽变大或在可变码率方式下视频场景变化趋于稳定时,视频码率会变得比网络带宽小,Mf数据转存至Md后立即发送出去,Md中无视频数据积累现象。由于视频码率越高,视频流总体画面质量越好,因此,控制方法将在网络带宽允许的范围内将对视频码率进行上调。\n[0079] 在实施例二中,一旦出现L+Lf>LH,立即就将视频码率下调,而此处如果也一旦出现Md中无数据(即L=0),就立即调高视频码率,很可能使得Md中积累的数据量急剧增多。\n因为之前Md中无数据有可能是因为网络不稳定的短暂带宽变大或视频场景短暂的平稳原因造成的,当带宽变成正常情况或视频场景又开始变化时,再加上视频码率又进行了调高,Md中肯定会出现越来越多的数据积累,从而又要求编码器下调视频码率。如果采取Md中无数据就立即上调视频码率的控制策略,那么视频码率“上调——下调——上调”的过程会因为网络带宽或视频场景的变化反复出现。为了避免此现象发生,本发明采用如下处理方法:\n[0080] 考虑到即使网络带宽大于视频码率的情况发生,短时间内不上调视频码率,不会很大程度上影响控制方法的效果,因此,本发明的方法将在比实施例二中更长的一段时间内观察Md中数据长度的变化趋势。当Mf输入时,如果出现L=0(或n=0)的次数越来越多,并达到一定的数量,说明网络带宽允许视频码率上调。同视频码率下调策略一样,在通知编码器将视频码率调高后,很可能也会继续出现L=0的情况,此时又需要重新观察Md中数据长度L的变化趋势。具体步骤如下:参见图5所示\n[0081] 在所述步骤1执行完后,先执行以下步骤:\n[0082] 步骤1.1、如果L+Lf>LH,先设置第九中间参数Fu为“假”,设置第十中间参数b、第十一中间参数M2H,第十二中间参数S2H,再执行步骤2;如果L+Lf≤LH,则执行步骤1.2;其中第九中间参数Fu用作视频码率处于上调过程的标志位;第十中间参数b为大于第三中间参数a的整数,第十一中间参数M2H用来调整触发视频编码器上调输出码率的敏感度,一般取M2H=0.1~0.3之间;第十二中间参数S2H为第十中间参数b乘以视频数据流中关键帧出现的周期帧数;\n[0083] 步骤1.2、设置第二中间参数Fd为“假”;\n[0084] 步骤1.3、判断第九中间参数Fu是否为“真”,如果第九中间参数Fu为“假”,转步骤\n1.4,否则转步骤1.5;\n[0085] 步骤1.4、如果视频数据缓存Md中帧计数器n为0,置第九中间参数Fu为“真”,同时设置第十三中间参数N2、第十四中间参数S2,且置N2=0、S2=0;然后转步骤1.9,否则直接转步骤1.9;其中第十三中间参数N2表示在视频编码器输出S2H帧视频数据这段时间内出现L等于0的次数、第十四中间参数S2为计算第十三中间参数N2值的加权系数;\n[0086] 步骤1.5、如果视频数据缓存Md中帧计数器n为0,置第十三中间参数N2=N2+S2,然后转步骤1.6,否则直接转步骤1.6;\n[0087] 步骤1.6、置第十四中间参数S2=S2+1;\n[0088] 步骤1.7、如果S2=S2H,置第九中间参数Fu为“假”,然后转步骤1.8,否则转步骤\n1.9;\n[0089] 步骤1.8、如果第十三中间参数N2>M2H×S2H×(S2H+1)/2,通知视频编码器将视频码率上调一级,然后转步骤1.9;否则,直接转步骤1.9;\n[0090] 步骤1.9、将Mf转存至Md中,并置Pn+1=Pn+Lf、L=L+Lf、n=n+1,然后转步骤1;\n其中Pn为视频数据缓存Md中第n帧视频数据的地址;Pn+1为视频数据缓存Md中第n+1帧视频数据的地址,Lf当前从视频编码器输出的一帧视频数据Mf的长度;L为所述视频数据缓存Md内当前已经实际保存的视频数据总长度;n为视频数据缓存Md中设置的帧计数器的读数。\n[0091] 在上述步骤中,所取的一段时间为编码器输出S2H帧视频数据的时间,即T2=S2H/M0,其中M0为编码器输出的视频帧率,S2H=b×N0、b为整数,且b>a>=1,选取b值越大,判决的可靠性越高,但网络带宽的利用率会有所降低,一般取b=12~24,M0、N0的定义与“(2)视频码率下调”相同。设置经过b个N0帧(即S2H)后再进行判决,是因为在视频流中关键帧的数据量明显比非关键帧数据量大,完整周期的视频帧输入可以提高检测的可靠性。另外,在Mf输入时出现L=0的次数N2计算中,采用时间为参数的线性加权累加方法,加权系数为S2,即时间越靠后加权系数越大,对N2值的影响更大,因此,N2值的大小反映了出现L=0次数的变化趋势。另外,N2的最大值为S2H×(S2H+1)/2,对N2值判决时阈值采用参数M2H×S2H×(S2H+1)/2,其中M2H可以用来调整触发视频码率上调的敏感度,一般取M2H=0.1~0.3之间。
法律信息
- 2013-08-21
- 2012-03-14
实质审查的生效
IPC(主分类): H04N 21/647
专利申请号: 201110309203.5
申请日: 2011.10.13
- 2012-01-18
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |