具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明提供的方法主要包括:将编码后的视频码流以数据包为单位发送至第一缓存单元进行缓存;根据预设的包队列长度与取包速率之间的对应关系,以第一缓存单元中缓存的当前包队列长度所对应的取包速率从第一缓存单元中读取数据包,其中包队列长度与取包速率之间的对应关系与当前要求的延时级别相关联;利用读取的数据包分别产生实况流和存储流。
下面结合具体实施例对上述方法进行详细描述。图3为本发明实施例提供的详细方法流程图,如图3所示,该方法可以包括以下步骤:
步骤301:DSP对数字视频流进行编码后,将编码后的视频码流以数据包为单位送入第一缓存单元进行缓存。
现有技术中DSP对数字视频码流进行编码时,要等一帧的视频码流都编码完成后才送入第一缓存单元,本发明中,DSP每编码完成一个数据包就送入第一缓存单元,即从原来以帧为单位送入第一缓存单元变更为以数据包为单位送入第一缓存单元。其中,第一缓存单元在图1中并没有示出,其可以是媒体流处理装置中的缓存单元,也可以是DSP和媒体流处理装置之间的缓存单元。
步骤302:根据预设的包队列长度与取包速率之间的对应关系,以第一缓存单元中缓存的当前包队列长度所对应的取包速率从第一缓存单元中读取数据包。
用户可以根据实况流的实时性要求、带宽需求和存储设备的存储需求预先设定视频流的编码码率BR,单位为bit/s,并且根据实况流的实时性要求设置当前的延时级别D。如果DSP编码产生的每个数据包大小为P,则如果不发生流量突发状况,则理想的取包速率S0为:S0=BR/8P,其中,8为字节和比特的换算单位。
然而,如果考虑流量突发状况,则在流量突发时会造成第一缓存单位中缓存的当前包队列长度发生突然的变化,因此,如果要克服流量突发现象,则需要在从第一缓存单位中读取数据包时,根据当前包队列长度动态的调整取包速率。本发明中可以参照理想的取包速率S0附加一个速率校正因子adj(M,D)的方式来获取当前取包速率S,即S=S0×adj(M,D)。
其中,adj(M,D)表征包队列长度与取包速率之间的对应关系,该对应关系是与当前要求的延时级别D相关联的,本实施例中可以采用
的形式,其中,Q为设定的延时级别的总级数,a为与当前延时级别D相关的参数值,b为预设的常量,该b可以根据试验或者仿真结果确定一个最优的值,M为第一缓存单元中缓存的当前包队列长度。
例如,当设定的延迟级别的总级数为5,当D=0时对应a为2,D=1时对应a为1,当4≥D≥2时对应a为0,固定选取b为2时,adj(M,D)可以为以下形式:
当用户设定的视频流的编码码流BR为2Mbps,每个数据包的大小为1000字节时,S0=BR/8P=262包/秒,对应各延迟级别D的速率校正因子adj(M,D)的曲线如图4所示。从图4中可以看出,第一缓存单元中缓存的当前包队列越多,流量突发状况越严重,因此,对应的S越大,便可以有效地平滑媒体流,解决流量突发状况。当D越小,初始取包速率越大,对应的S随着M的增大变化越快,说明延迟越小,流量突发越大,为了保证实时性要求,需要越快地动态调整取包速率。实时性要求高,则可以设置D的级别较小,但D越小流量突发状况越严重可靠性较低,因此,用户可以在实时性要求和可靠性要求之间找一个平衡点,从而设定一个合适的延时级别D。
实验证明,考虑实时性和编码码率前提下,当前包队列长度M以次幂的形式动态调整取包速率S带来的平滑性效果最佳。当D=4时采用本实施例产生的实况流的流量曲线和采用简单TCP方式的流量曲线可以如图5所示,显然,采用本实施例的方式对流量突发状况的平滑处理效果更加突出。
步骤303:分别将读取到的数据包,采用NAS或iSCSI协议打包成存储流,采用RTP打包成实况流。
将读取的数据包形成的视频码流采用NAS或iSCSI协议打包成存储流,采用RTP将媒体流打包成实况流,该步骤是应用层中的处理,与现有技术相同。
步骤304:通过TCP将存储流发送至第二缓存单元,通过UDP将实况流发送至网络。
对实况流以UDP方式打包发送至网络,对存储流以TCP方式打包送至第二缓存单元。本步骤是传输层的操作,实况流以UDP方式打包后直接通过网络进行传输以使得在该环节几乎没有延时,保证实时性要求。
步骤305:按照向令牌桶中输入令牌的速率所对应的取包速率从第二缓存单元读取存储流的数据包并发送至网络,其中,取包速率不能超过预设的最大取包速率,向令牌桶中输入令牌的速率恒定或者按照第二缓存单元当前的包队列长度实时调整。
由于对实况流进行平滑处理时,需要考虑延时因素,也就是说步骤302的处理主要是估计实况流而进行的平滑处理。对于存储流是不需要考虑延时因素的,理想情况是在任何情况下都做到最小流量突发,本步骤就是对存储流做进一步的平滑处理,保证存储流的流量突发状况得到进一步的缓解。
对第二缓存单元中数据包的发送可以与令牌桶相关联,如图6所示,第二缓存单元缓存存储流的数据包,在每个发送周期内,从第二缓存单元中读取与令牌桶中当前令牌数对应数量的数据包,也就是说,从第二缓存单元读取存储流的数据包的取包速率与向令牌桶中输入令牌的速率相对应。如果当前令牌桶中的令牌数对应的数据包数量大于或等于第二缓存单元中缓存的数据包,则从第二缓存单元中读取所有的数据包,并消耗对应数量的令牌;如果当前令牌桶中的令牌数对应的数据包数量小于第二缓存单元中缓存的数据包,则从第二缓存单元中读取与当前令牌数对应数量的数据包。
为了防止输入第二缓存单元的存储流不稳定,例如,在一段时间内输出较多数据包,那么如果令牌桶中有足够多的令牌,则在这段时间内会读取较大流量的存储流并发送至网络,从而造成流量突发。可以将从第二缓存单元读取存储流的数据包的取包速率限定在一个最大取包速率内,可以通过设定最大令牌消耗速率,使得在存储流的数据包取包速率对应的令牌消耗速率不能够超过该设定的最大令牌消耗速率。
该最大令牌消耗速率maxburst可以是一个定值,也可以根据第二缓存单元当前的包队列长度N进行实时调整,即maxburst=A×BR,其中,BR为预先设定的视频流的编码码率,A为与N相关的参数,与N的取值存在对应关系。
例如,可以为:
考虑最大令牌消耗速率maxburst时,该maxburst决定了每个发送周期的最大取包数量,在每个发送周期内,除了考虑第二缓存单元中当前缓存的数据包数量、当前令牌桶中的令牌数之外,进一步考虑了最大取包数量,即选取第二缓存单元中当前缓存的数据包数量、当前令牌桶中的令牌数对应的数据包数量以及最大取包数量三者中的最小值,从第二缓存单元中读取该最小值对应数量的数据包。
另外,对令牌桶中输入令牌时,可以采用恒定的输入速率。更优地,为了防止短时间内有大量的存储流输入第二缓存单元,而没有足够的令牌造成存储流的数据包溢出引起丢包现象,可以对令牌桶中输入令牌的速率按照第二缓存单元当前的包队列长度N进行实时调整,即rate=B×BR,其中,B为与N相关的参数,与N的取值之间存在对应关系。
例如,可以为:
事实上是以设定的视频流的编码码率BR为前提,根据第二缓存单元中当前的包队列长度N,自适应地调整向令牌桶中输入令牌的速率rate和最大令牌消耗速率maxburst,即能够解决流量突发问题,又能够进一步解决缓存溢出问题,其产生的存储流曲线图,如图7所示,与图5中所示的简单的TCP发送方式相比,有了明显的提高。
以上是对本发明所提供的方法进行的详细描述,下面对本发明所提供的处理媒体流的装置进行详细描述。图8为本发明实施例提供的装置结构图,如图8所示,该装置包括:第一缓存单元801、第一平滑处理单元802、实况流产生单元803和存储流产生单元804。
第一缓存单元801,用于缓存以数据包为单位发送来的编码后的视频码流。
第一平滑处理单元802,用于根据预设的包队列长度和取包速率之间的对应关系,以第一缓存单元801中的当前包队列长度所对应的取包速率从第一缓存单元801中读取数据包,其中,上述对应关系与当前要求的延时级别相关联。
实况流产生单元803,用于利用第一平滑处理单元802读取的数据包产生实况流。
存储流产生单元804,用于利用第一平滑处理单元802读取的数据包产生存储流。
其中,第一平滑处理单元802具体可以按照取包速率S=S
0×adj(M,D),从第一缓存单元801中读取数据包;其中,S
0=BR/8P,
BR为预设的编码码率,P为数据包的大小,M为第一缓存单元801中的当前包队列长度,Q为预设的延时级别的总级数,D为当前要求的延时级别,a为与当前要求的延时级别相关的参数,b为预设的常量。
更优地,在存储流产生单元804和网络之间,该装置还可以包括:第二缓存单元805和第二平滑处理单元806。
第二缓存单元805,用于缓存存储流产生单元804产生的存储流的数据包。
第二平滑处理单元806,用于按照向令牌桶中输入令牌的速率所对应的取包速率,从第二缓存单元805中读取数据包并发送至网络,同时消耗令牌桶中与读取的数据包数量对应的令牌;其中,向令牌桶中输入令牌的速率恒定或按照第二缓存单元805当前的队列长度实时确定。
具体地,取包速率对应的令牌消耗速率不超过预设的最大令牌消耗速率maxburst,其中,maxburst可以是定值,或者maxburst=A×BR,其中,A为与第二缓存单元805当前的包队列长度N存在对应关系的参数。
向令牌桶中输入令牌的速率rate=B×BR,其中,B为与第二缓存单元805中当前的包队列长度N存在对应关系的参数。
由以上描述可以看出,本发明提供的方法和装置考虑流量突发状况发生时会造成第一缓存单位中缓存的当前包队列长度发生突然的变化,因此,如果要克服流量突发现象,则需要在从第一缓存单位中读取数据包时,根据当前包队列长度动态的调整取包速率。即将编码后的视频码流以数据包为单位发送至第一缓存单元进行缓存;根据预设的包队列长度和取包速率之间的对应关系,以第一缓存单元中的当前包队列长度所对应的取包速率从第一缓存单元中读取数据包,其中上述对应关系与当前要求的延时级别相关联;利用读取的数据包分别产生实况流和存储流并发送至网络;从而能够抑制媒体流的流量突发现象,提高网络视频监控的服务质量。同时相比较TCP方式自身的拥塞避免算法和慢启动算法,进一步考虑了媒体流的延时要求,从而保证对实况流的实时性传输。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。