一种基于窄变带宽网络的实时视频流传输方法转让专利

申请号 : CN201110168770.3

文献号 : CN102244773B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘高平梁丰宋执环

申请人 : 浙江万里学院

摘要 :

本发明涉及一种基于窄变带宽网络的实时视频流传输方法,该方法通过在发送方设置视频数据缓存与数据发送缓存,同时设置两个并行运行的视频数据输入线程和视频数据发送线程,根据预设的最大等待发送时间与实时计算的网络传输速率动态调节缓存的大小以及在网络拥塞时有选择性地丢弃视频帧,最大限度地利用动态变化的网络带宽,从而保证视频能实时发送至接收方与平稳播放,该方法在窄变带宽网络环境下可有效地应用于实时传输视频监视。

权利要求 :

1.一种基于窄变带宽网络的实时视频流传输方法,其特征在于:

将发送方的缓存分成两个:一个为视频帧缓存,用于存储来自视频编码器的视频帧数据,另一个为视频帧发送缓存,用于暂存来自视频帧数据的一帧视频数据,等待TCP链路发送;

设置两个并行运行的线程,一个为视频数据输入线程,用于负责视频帧缓存中视频数据的输入;另一个为视频数据发送线程,用于负责视频帧发送缓存中视频数据的输入与输出;

所述视频数据输入线程的处理方法为:

视频帧缓存每次从编码器获得一帧视频数据后,首先判断所述视频帧缓存内中空闲空间大小能否容纳该帧视频数据,如果所述视频帧缓存中空闲空间大小足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存,以供视频数据发送线程发送;如果所述视频帧缓存中空闲空间大小不足以容纳该帧视频数据,则继续判断该帧视频数据是否为关键帧视频数据,如果该帧视频数据不是关键帧视频数据,则立即丢弃该帧视频数据,如果该帧视频数据是关键帧视频数据,则进一步判断之前是否丢弃过非关键帧视频数据,若之前没有丢弃过非关键帧视频数据,则直接将该帧视频数据丢弃,如果之前已经丢弃过非关键帧视频数据,进一步测试视频帧缓存中空闲空间大小能否存下该帧视频数据,如果所述视频帧缓存中空闲空间大小足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存;否则,清空视频帧缓存的空间,再将该帧视频数据存入视频帧缓存中;

在该线程中,当视频数据输入线程采集到第一帧视频数据后,立即启动所述视频数据发送线程;

所述视频数据发送线程的处理方法为:

所述视频数据发送线程将视频数据流按帧为单位进行发送,具体如下:视频数据发送线程将保存在视频帧发送缓存中的一帧视频数据发送至接收方,待视频帧发送缓存中视频数据发送完后,再从视频帧缓存中取得一帧保存时间最久的视频数据存入视频帧发送缓存,然后再次发送,即重复上述过程;

在所述视频数据输入线程的处理方法中,预设一个视频数据在发送方排队等待时间的最长时间T;视频帧缓存每次从编码器获得一帧视频数据后,根据网络平均发送视频数据速率V及预设的视频数据在发送方排队等待时间的最长时间T,计算出当前视频帧缓存的实际大小及空闲空间大小:当前视频帧缓存的实际大小等于网络平均发送视频数据速率V乘以视频数据在发送方排队等待时间的最长时间T,然后减去当前保存在视频帧发送缓存中的视频数据的大小;

当前视频帧缓存空闲空间大小等于前视频帧缓存的实际大小减去当前已经保存在视频帧缓存内视频数据的大小;

所述视频数据发送线程在发送视频数据过程中,如果发现视频帧发送缓存中视频数据发送完毕而视频帧缓存中无视频数据,则提示减小预设的视频数据在发送方排队等待时间的最长时间T。

2.根据权利要求1所述的基于窄变带宽网络的实时视频流传输方法,其特征在于:所述网络平均发送视频数据速率V根据以下方法得到:首先,在视频帧发送缓存发送时记录发送的第m帧数据长度Lm及其发送所需时间tm,其中,m=1,2,…,发送完成后计算数据字节数的累加值,记为Lsd,即Lsd=L1+L2+…+Lm;

当数据字节数的累加值Lsd大于或等于k×U值,U为TCP协议层的当前最大单元的字节数,k为整数,且k大于等于100,再利用下述公式计算当前网络平均发送视频数据速率V值:V=Lsd/(t1+t2+…+tm)=(L1+L2+…+Lm)/(t1+t2+…+tm)。

3.根据权利要求2所述的基于窄变带宽网络的实时视频流传输方法,其特征在于:利用实时计算的网络平均发送视频数据速率V和预设的视频数据在发送方排队等待时间的最长时间T,动态调整发送方的缓存,发送方的缓存记为L,则L=V﹡T。

4.根据权利要求1所述的基于窄变带宽网络的实时视频流传输方法,其特征在于:为了实现视频帧缓存向视频帧发送缓存数据转移按帧为单位进行,在视频帧缓存中设置一个帧计数器,将视频帧缓存中存有的n帧视频数据,分别记为M1、M2、...、Mn,若第i帧最后一个字节在视频帧缓存中的地址为Pi,则视频帧缓存中的视频数据的地址会构成一个帧地址数组{Pi}(i=1,…n),且P1

说明书 :

一种基于窄变带宽网络的实时视频流传输方法

技术领域

[0001] 本发明涉及一种基于窄变带宽网络的实时视频流传输方法。

背景技术

[0002] 近年来,随着网络的发展,网络带宽越来越大,为数字视频网络实时传输提供了基础。视频监视是视频实时传输在安全监视领域的典型应用之一,其特点是实时性与可靠性,即监视现场在短时间快速到达监视中心,到达监视中心的图像必须清晰,并保证播放流畅,但是由于清晰的视频监视数据量太大,而实际使用的网络带宽无法保证,因此视频监视无法达到理想的实时性与可靠性,经常出现延时过大、甚至由于网络拥塞而瘫痪。
[0003] 为了克服上述问题,许多文献提出了不同的方法。目前,RTP协议是流媒体传输常用的协议,一种解决方法是采用RTP协议作为流媒体传输的协议,但是由于RTP协议是建立在不进行任何拥塞控制的UDP协议基础上,因此需要在应用层上加入拥塞控制算法,不能直接应用于窄变带宽网络环境下实时视频监视。
[0004] 在已有的实时视频流传输方法中,解决方法主要分两种:视频流码率控制与网络传输控制。前者根据网络传输信道的情况来调整编码参数,以生成适合当前网络传输的视频流,从而使视频传输需要的带宽尽可能小并能充分利用动态变化的带宽;后者根据网络传输带宽自适应地调节视频数据的发送量,当网络带宽良好时,减小视频丢帧率,增加数据发送速率,反之,增加视频丢帧率,减小数据发送速率,此类算法的关键是如何计算网络速率变化情况以及视频数据丢帧策略,以减少视频流的抖动,提高播放的平稳特性。如在通信与网络国际会议(原名:Communication and Networking InternationalConference)文献中发表的一篇名为《Priority Early Frame Discard Algorithm for TCP-BasedVideo Streaming》的文章,从TCP实时流媒体传输性能与减少等待延时和发送延时入手,研究了一种采用多缓存减少端到端的延时,并能确保速率能够匹配网络可用带宽自适应的实时视频传输,但该方法中在传输缓存中只设置一帧视频数据长度的空间,且未结合视频帧的特点,在网络拥塞时容易造成视频数据频繁丢弃,易造成接收方视频播放不流畅,甚至在丢弃视频关键帧时无法正确解码。中南大学的熊永华发表的一篇名为《基于TCP的实时流媒体自适应传输策略及其应用研究》的论文,介绍了一种基于TCP协议传输的MPEG4视频监控系统,其传输算法可以根据网络带宽与播放终端性能在网络拥塞时自适应丢弃视频帧,以便保持合适的视频帧速率进行播放,但是在该算法中视频数据传输延迟时间采用另外一个传输链路RTT(Round Trip Time,回路响应时间)值来估算,在窄变带宽网络中不但不能正确计算出视频传输本身的延迟时间,从而造成视频丢帧不正确,而且网络拥塞时在视频数据传输之外再增加一个计算RTT的传输链路会加剧网络拥塞的程度。

发明内容

[0005] 本发明所要解决的技术问题是针对上述现有技术提供一种在窄变带宽网络环境下可有效地应用于实时传输视频监视的基于窄变带宽网络的实时视频流传输方法。
[0006] 本发明解决上述技术问题所采用的技术方案为:该基于窄变带宽网络的实时视频流传输方法,其特征在于:
[0007] 将发送方的缓存分成两个:一个为视频帧缓存,用于存储来自视频编码器的视频帧数据,另一个为视频帧发送缓存,用于暂存来自视频帧数据的一帧视频数据,等待TCP链路发送;
[0008] 设置两个并行运行的线程,一个为视频数据输入线程,用于负责视频帧缓存中视频数据的输入;另一个为视频数据发送线程,用于负责视频帧发送缓存中视频数据的输入与输出;
[0009] 所述视频数据输入线程的处理方法为:
[0010] 视频帧缓存每次从编码器获得一帧视频数据后,首先判断所述视频帧缓存内中空闲空间大小能否容纳该帧视频数据,如果所述视频帧缓存中空闲空间大小足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存,以供视频数据发送线程发送;如果所述视频帧缓存中空闲空间大小不足以容纳该帧视频数据,则继续判断该帧视频数据是否为关键帧视频数据,如果该帧视频数据不是关键帧视频数据,则立即丢弃该帧视频数据,如果该帧视频数据是关键帧视频数据,则进一步判断之前是否丢弃过非关键帧视频数据,若之前没有丢弃过非关键帧视频数据,则直接将该帧视频数据丢弃,如果之前已经丢弃过非关键帧视频数据,进一步测试视频帧缓存中空闲空间大小能否存下该帧视频数据,如果所述视频帧缓存中空闲空间大小足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存;否则,清空视频帧缓存的空间,再将该帧视频数据存入视频帧缓存中;
[0011] 在该线程中,当视频数据输入线程采集到第一帧视频数据后,立即启动所述视频数据发送线程;
[0012] 所述视频数据发送线程的处理方法为:
[0013] 所述视频数据发送线程将视频数据流按帧为单位进行发送,具体如下:视频数据发送线程将保存在视频帧发送缓存中的一帧视频数据发送至接收方,待视频帧发送缓存中视频数据发送完后,再从视频帧缓存中取得一帧保存时间最久的视频数据存入视频帧发送缓存,然后再次发送,即重复上述过程。
[0014] 作为改进,在所述视频数据输入线程的处理方法中,预设一个视频数据在发送方排队等待时间的最长时间T;视频帧缓存每次从编码器获得一帧视频数据后,根据网络平均发送视频数据速率V及预设的视频数据在发送方排队等待时间的最长时间T,计算出当前视频帧缓存的实际大小及空闲空间大小:
[0015] 当前视频帧缓存的实际大小等于网络平均发送视频数据速率V乘以视频数据在发送方排队等待时间的最长时间T,然后减去当前保存在视频帧发送缓存中的视频数据的大小;当前视频帧缓存空闲空间大小等于前视频帧缓存的实际大小减去当前已经保存在视频帧缓存内视频数据的大小;
[0016] 所述视频数据发送线程在发送视频数据过程中,如果发现视频帧发送缓存中视频数据发送完毕而视频帧缓存中无视频数据,则提示减小预设的视频数据在发送方排队等待时间的最长时间T。
[0017] 所述网络平均发送视频数据速率V根据以下方法得到:
[0018] 首先,在视频帧发送缓存发送时记录发送的第m帧数据长度Lm及其发送所需时间tm,其中,m=1,2,…,发送完成后计算数据字节数的累加值,记为Lsd,即Lsd=L1+L2+…+Lm;
[0019] 当数据字节数的累加值Lsd大于或等于k×U值,U为TCP协议层的当前最大单元的字节数,k为整数,且k大于等于100,再利用下述公式计算当前网络平均发送视频数据速率V值:
[0020] V=Lsd/(t1+t2+…+tm)=(L1+L2+…+Lm)/(t1+t2+…+tm)。
[0021] 利用上述实时计算的网络平均发送视频数据速率V和预设的视频数据在发送方排队等待时间的最长时间T,动态调整发送方的缓存,发送方的缓存记为L,则L=V﹡T。
[0022] 为了实现视频帧缓存向视频帧发送缓存数据转移按帧为单位进行,在视频帧缓存中设置一个帧计数器,将视频帧缓存中存有的n帧视频数据,分别记为M1、M2、...、Mn,若第i帧最后一个字节在视频帧缓存中的地址为Pi,则视频帧缓存中的视频数据的地址会构成一个帧地址数组{Pi}(i=1,…n),且P1
[0023] 与现有技术相比,本发明的优点在于:本方法通过在发送方设置视频数据缓存与数据发送缓存,根据预设的最大等待发送时间与实时计算的网络传输速率动态调节缓存的大小以及在网络拥塞时有选择性地丢弃视频帧,最大限度地利用动态变化的网络带宽,从而保证视频能实时发送至接收方与平稳播放,该方法在窄变带宽网络环境下可有效地应用于实时传输视频监视。

附图说明

[0024] 图1为本发明实施例中视频数据缓存之间的数据转移关系图。
[0025] 图2为本发明实施例中视频数据输入线程的处理流程图。
[0026] 图3为本发明实施例中视频数据发送线程的处理流程图。

具体实施方式

[0027] 以下结合附图实施例对本发明作进一步详细描述。
[0028] 本发明提供了一种基于窄变带宽网络的实时视频流传输方法,其将发送方的缓存M分成两个:一个为视频帧缓存,记为Md,用于存储来自视频编码器的视频帧数据,另一个为视频帧发送缓存,记为Ms,用于暂存来自视频帧数据的一帧视频数据,等待TCP链路发送;如果Md、Ms的长度记为Ld、Ls,则有L=Ld+Ls。图1为视频传输时缓存之间的数据转移关系示意图,其中,Md为先入先出的流缓存,Mf为编码器输出的一帧视频数据缓存,Mr为数据TCP接收缓存,Mp为视频播放缓存,图中的双线箭头表示数据流传递方向,单线箭头表示算法对视频编码器控制方向;
[0029] 在上述操作中,每次从视频帧缓存Md中取出一帧视频数据至视频帧发送缓存Ms而非取出一段视频数据,这是为了防止发送方在网络拥塞时丢弃视频数据时不会产生碎帧,以致于接收方不能正确解码,并造成不必要的网络数据传输;为了实现视频帧缓存向视频帧发送缓存数据转移按帧为单位进行,在视频帧缓存中设置一个帧计数器,将视频帧缓存中存有的n帧视频数据,分别记为M1、M2、...、Mn,若第i帧最后一个字节在视频帧缓存中的地址为Pi,则视频帧缓存中的视频数据的地址会构成一个帧地址数组{Pi}(i=1,…n),且P1
[0030] 设置两个并行运行的线程,一个为视频数据输入线程,用于负责视频帧缓存中视频数据的输入;另一个为视频数据发送线程,用于负责视频帧发送缓存中视频数据的输入与输出;
[0031] 所述视频数据输入线程参见图2所示,具体的处理方法为:
[0032] 预设一个视频数据在发送方排队等待时间的最长时间T;
[0033] 视频帧缓存Md每次从编码器获得一帧视频数据后,根据网络平均发送视频数据速率V及预设的视频数据在发送方排队等待时间的最长时间T,计算出当前视频帧缓存的实际大小Ld及空闲空间大小Lf:
[0034] 当前视频帧缓存的实际大小Ld等于网络平均发送视频数据速率V乘以视频数据在发送方排队等待时间的最长时间T,然后减去当前保存在视频帧发送缓存中的视频数据的大小Ls,即Ld=VT-Ls;当前视频帧缓存空闲空间大小Lf等于前视频帧缓存的实际大小Ld减去当前已经保存在视频帧缓存内视频数据的大小Ldx;
[0035] 首先判断所述视频帧缓存内中空闲空间大小Lf能否容纳该帧视频数据,如果所述视频帧缓存中空闲空间大小Lf足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存,以供视频数据发送线程发送;如果所述视频帧缓存中空闲空间大小不足以容纳该帧视频数据,则继续判断该帧视频数据是否为关键帧视频数据,如果该帧视频数据不是关键帧视频数据,则立即丢弃该帧视频数据,如果该帧视频数据是关键帧视频数据,则进一步判断之前是否丢弃过非关键帧视频数据,若之前没有丢弃过非关键帧视频数据,则直接将该帧视频数据丢弃,如果之前已经丢弃过非关键帧视频数据,进一步测试视频帧缓存中空闲空间大小能否存下该帧视频数据,如果所述视频帧缓存中空闲空间大小足够容纳该帧视频数据,则将该帧视频数据存入视频帧缓存;否则,清空视频帧缓存的空间,再将该帧视频数据存入视频帧缓存中;
[0036] 在该线程中,当视频数据输入线程采集到第一帧视频数据后,立即启动所述视频数据发送线程;
[0037] 所述视频数据发送线程参见图3所示,具体的处理方法为:
[0038] 所述视频数据发送线程将视频数据流按帧为单位进行发送,具体如下:视频数据发送线程将保存在视频帧发送缓存中的一帧视频数据发送至接收方,待视频帧发送缓存中视频数据发送完后,再从视频帧缓存中取得一帧保存时间最久的视频数据存入视频帧发送缓存,然后再次发送,即重复上述过程;如果发现视频帧发送缓存中视频数据发送完毕而视频帧缓存中无视频数据,则提示减小预设的视频数据在发送方排队等待时间的最长时间T。
[0039] 网络平均发送视频数据速率V根据以下方法得到:
[0040] 首先,在视频帧发送缓存发送时记录发送的第m帧数据长度Lm及其发送所需时间tm,其中,m=1,2,…,发送完成后计算数据字节数的累加值,记为Lsd,即Lsd=L1+L2+…+Lm;
[0041] 当数据字节数的累加值Lsd大于或等于k×U值,U为TCP协议层的当前最大单元MTU(Maximum Transmission Units)的字节数,k为整数,且k大于等于100,再利用下述公式计算当前网络平均发送视频数据速率V值:
[0042] V=Lsd/(t1+t2+…+tm)=(L1+L2+…+Lm)/(t1+t2+…tm);
[0043] 利用上述实时计算的网络平均发送视频数据速率V和预设的视频数据在发送方排队等待时间的最长时间T,动态调整发送方的缓存,发送方的缓存记为L,则:L=V﹡T。