一种视频编码及网络传输方法和一种视频转发服务器
技术领域
本发明涉及多媒体信号处理领域,更具体的说,涉及一种视频编码及网络传输方法和一种视频转发服务器。
背景技术
互联网视频传输系统需要考虑的主要问题是带宽使用问题,视频数据带宽占用大和网络带宽有限一直是限制互联网视频传输系统的关键瓶颈。互联网的服务质量(QoS:Quality of Service)基本可以满足普通小数据业务处理,但是却无法有效保障视频大数据的端到端传输过程,对有一定实时性要求的视频传输来说,必须要解决互联网视频数据传输过程中IP网络的延时、抖动和丢包等问题。
在互联网网络环境中,视频传输质量需要依赖的环境因素包括带宽、延时抖动、丢包。带宽指网络的两个节点之间数据流的平均速率,一般来说,带宽越高,就能允许更多的视频数据传输,从而会提供更好的视频效果。由于互联网同时承载多种服务,主要是数据业务,而视频业务相对而言属于大数据,明显在数据流量和实时性上与互联网当前业务有较大差别,导致视频业务在互联网上的带宽非常不平稳。
延时指数据包在网络的两个节点之间传送的平均往返时间。互联网数据延时主要取决于由于网络的复杂性、网络流量的动态变化和网络路由的动态选择。网络延时随时都在不停的变化,这种变化称为抖动。网络延时和网络抖动越小,网络的质量就越好。互联网视频传输业务对实时性要求较高,对时延很敏感,如果时延过大或者抖动过大,视频接收端的视频体验就会大打折扣。
丢包指在网络传输过程中丢失报文的百分比,实际IP网络环境中由于网络设备拥塞而导致报文丢失,当有网络丢包时,将会影响视频质量,比如:图像产生花屏或马赛克、声音出现断续等,严重时会导致视频中断。如果我们在发送端持续不断发送的视频数据在互联网上严重丢包,视频接收端是无法得到良好的视频体验的。
为了解决上述问题,当前技术一般采用以下方式解决:
视频带宽预留:采用预先预留的固定带宽来传输视频数据,比如使用VPN通道,或者其他广域虚拟专网。若预留带宽充裕,视频传输质量可以稳定和清晰。目前市场很多视频会议采用带宽预留模式,缺点是成本较高,部署不够灵活。相对而言互联网上做视频传输成本更低,更加灵活。
超低码流传输:采用尽量小压缩视频的码流进行端到端传输。假设一个基准带宽,视频压缩尽量压缩到基准带宽的码流大小。检测基准带宽,保证压缩码流小于基准带宽,由于码流被压缩到基准带宽区域后,延时和丢包会减少,以此来满足视频QoS。缺点是码流只能适配最差网络带宽,视频质量整体不高,用户体验不好。
发明内容
本发明所要解决的技术问题是提供一种低成本、能改善不同带宽情况下视频质量的视频编码及网络传输方法和一种视频转发服务器。
本发明的目的是通过以下技术方案来实现的:
一种视频编码及网络传输方法,包括步骤:
A、对每一帧图像进行编码;按预设的显示制式生成基准码流;将能流畅播放基准码流的最低带宽定义为基准带宽;
B、判断实时带宽,如果实时带宽低于基准带宽,采用主动丢帧的方式从基准码流每秒显示的帧图像中抽离至少一帧的帧图像,生成对外传输的发送码流;如果实时带宽大于或等于基准带宽,对外传输基准码流。
显示制式定义了每秒显示的帧数,如PLA制式定义每秒显示25帧;NTSC制式定义每秒显示30帧;
进一步的,所述步骤B包括:将发送单帧需要的时间分成N个时间区段,针对每个时间区段,对应设置N种不同丢帧的场景,每个场景对应一种发送码流;如果实时带宽发送单帧需要的时间大于基准带宽发送单帧需要的时间,则根据实时带宽发送单帧所处的时间区段自动匹配对应的场景;反之,对外传输基准码流,所述N为整数且N≥2。由于现实中的网络经常处于波动状态,因此可以预先定义场景,每个场景对应一种发送码流,然后将不同的带宽区间跟场景一一对应,当实时带宽达到某一带宽区间后自动选择相应的场景。本技术方案在一定的带宽范围内保持发送码流不变,不需要频繁计算不同的带宽需要从基准码流中抽离多少帧图像,减轻了硬件的运算负担,有利于降低硬件成本,同时可以有更多的硬件资源来确保视频的实时传输,保障显示质量。
进一步的,所述步骤B中包括:设定待发送队列存储帧数的第一阈值,如果待发送队列存储的帧数超过第一阈值,直接选用丢帧更多丢帧的场景,反之,维持当前场景。此为一种根据服务器发送端的实时宽带判断策略,对于像采用如TCP通信协议的网络,可以从服务器端的待发送队列读取存储的帧数,如果存储的帧数过多,服务器的发送端会自动将多余的帧清除,这样就会导致接收端的图像不完整;因此本技术方案可以有效避免发送端拥堵导致被动丢帧的情况,确保视频显示流畅。
进一步的,所述步骤B中包括:
设定待发送队列存储帧数的第二阈值;
如果待发送队列里面的帧数始终小于或等于预设的第二阈值,或者待发送队列里面的帧数在预设的时间内先增加,后减小,最后待发送队列里面的帧数小于或等于第二阈值,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景。
实时带宽增加时,待发送队列存储的帧数会逐步减少,最终会小于或等于预设的第二阈值(一般为0或1),即便网络出现波动,等波动平缓以后仍然会小于或等于预设的第二阈值,此时可以采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像,即每隔一定的时间在发送码流中增加一帧,然后再判断待发送队列存储的帧数,如果仍然满足上述条件,继续加帧直到不满足条件为止;此时如果发送码流每秒发送的帧数达到更少丢帧的场景,则自动切换到丢帧更少的场景;反之,维持当前场景。当带宽增加时,本技术方案通过单次累加的方式来探测出其实际带宽,然后匹配最佳的场景,最大限度的利用当前的带宽资源,在带宽增加时给客户提供更高品质的视频图像。
进一步的,所述步骤B中包括:
设定待发送队列存储帧数的第三阈值;第三阈值大于或等于所述第二阈值;
采用单次累加的方式在发送码流中增加帧图像时,如果发送队列里面的帧数超过第三阈值,则采用逆向减帧的方式在发送码流中减少帧图像。
本技术方案提供了一种单次累加探测带宽的回退机制,在保持当前场景的基础上单次累加探测带宽,随着发送码流中帧数的增加,服务器发送端待发送队列存储帧数也开始增加,当数量达到一定数值(第三阈值)时,为了避免发送队列存储的帧数过多导致被动丢帧的情况,采用逆向减帧逐步减少发送码流中的帧图像,等发送队列存储的帧数小于或等于预设的第二阈值时再通过单次累加探测带宽。因此,本方案可以在确保视频实时流畅传输的前提下探测出实际带宽,然后匹配出最佳的丢帧模式。
进一步的,所述步骤B中包括:设定待发送队列存储帧数的第一阈值、第二阈值和第三阈值,所述第三阈值大于或等于第二阈值,小于第一阈值;
如果待发送队列存储的帧数超过第一阈值,直接选用丢帧更多丢帧的场景,反之,维持当前场景;
如果待发送队列里面的帧数始终小于或等于预设的第二阈值,或者待发送队列里面的帧数在预设的时间内先增加,后减小,最后待发送队列里面的帧数小于或等于第二阈值,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景;
采用单次累加的方式在发送码流中增加帧图像时,如果发送队列里面的帧数超过第三阈值,则采用逆向减帧的方式在发送码流中减少帧图像;
对于像采用如TCP协议通信的网络,可以从服务器端的待发送队列读取存储的帧数,如果存储的帧数过多,服务器的发送端会自动将多余的帧清除,这样就会导致接收端的图像不完整;因此本实施方式可以有效避免发送端拥堵导致被动丢帧的情况,确保视频显示流畅。
实时带宽增加时,待发送队列存储的帧数会逐步减少,最终会小于或等于预设的第二阈值(一般为0或1),即便网络出现波动,等波动平缓以后仍然会小于或等于预设的第二阈值,此时可以采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像,即每隔一定的时间在发送码流中增加一帧,然后再判断待发送队列存储的帧数,如果仍然满足上述条件,继续加帧直到不满足条件为止;此时如果发送码流每秒发送的帧数达到更少丢帧的场景,则自动切换到丢帧更少的场景;反之,维持当前场景。当带宽增加时,通过单次累加的方式来探测出其实际带宽可以适配服务器的缓冲策略,可以更加精准的匹配实时的发送效果,不需要复杂的实时带宽计算。因此,该实施方式最大限度的利用当前的带宽资源,在带宽增加时给客户提供更高品质的视频图像。
在保持当前场景的基础上单次累加探测带宽,随着发送码流中帧数的增加,服务器发送端待发送队列存储帧数也开始增加,当数量达到一定数值(第三阈值)时,为了避免发送队列存储的帧数过多导致被动丢帧的情况,采用逆向减帧逐步减少发送码流中的帧图像,等发送队列存储的帧数小于或等于预设的第二阈值时再通过单次累加探测带宽。因此,本方案可以在确保视频实时流畅传输的前提下探测出实际带宽,然后匹配出最佳的丢帧模式。
进一步的,所述步骤B中包括:服务器的发送端接收客户侧的接收端的反馈信息,如果反馈信息满足预设的触发条件,直接选用丢帧更多丢帧的场景,反之,维持当前场景。此为一种根据客户侧反馈信息来判断实时宽带的方式,适用于如UDP通信协议一类的网络,可以从客户端的反馈信息来判断实时带宽。
进一步的,所述反馈信息包括接收单帧数据的延时时间和丢包率,所述触发条件包括预设的第一时间值和第一丢包率;如果接收单帧数据的延时时间超过第一时间值或丢包率超过第一丢包率,直接选用丢帧更多丢帧的场景,反之,维持当前场景。接收单帧数据的延时时间如果过长,说明该帧有可能未被客户侧的接收端接收到,导致接收端的图像不完整;同理,客户侧的接收端会判断一段时间内的丢包率,如果丢包率过高,即便接收单帧数据的延时不长,仍然会被动丢失大量的帧图像,同样会影响图像的显示效果,因此本技术方案可以有效避免发送端拥堵导致被动丢帧的情况,确保接收端能接收到流程的视频图像。
进一步的,所述反馈信息包括接收单帧数据的延时时间,所述触发条件还包括预设的第二时间值和第二丢包率;如果接收单帧数据的延时始终小于或等于预设的第二时间值,且丢包率小于或等于第二丢包率,或者接收单帧数据的延时在预设的时间段内先增加,后减小,最后接收单帧数据的延时小于或等于第二时间值,且丢包率小于或等于第二丢包率,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景。
实时带宽增加时,接收单帧数据的延时时间会逐步缩短,最终会小于或等于预设的第二时间值,即便网络出现波动,等波动平缓以后仍然会小于或等于预设的第二时间值,此时可以采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像,即每隔一定的时间在发送码流中增加一帧,然后再判断接收单帧数据的延时时间及相应的丢包率如果仍然满足上述条件,继续加帧直到不满足条件为止;此时,如果发送码流每秒发送的帧数达到更少丢帧的场景,则自动切换到丢帧更少的场景;反之,维持当前场景。当带宽增加时,本技术方案通过单次累加的方式来探测出其实际带宽,然后匹配最佳的场景,最大限度的利用当前的带宽资源,在带宽增加时给客户提供更高品质的视频图像。
进一步的,所述步骤B中包括:
所述触发条件还包括预设的第三时间值和第三丢包率;第三时间值大于或等于所述第二时间值,第三丢包率大于或等于所述第二丢包率;
采用单次累加的方式在发送码流中增加帧图像时,如果接收单帧数据的延时超过第三时间值,或者丢包率大于第三丢包率,则采用逆向减帧的方式在发送码流中减少帧图像。
本技术方案提供了一种单次累加探测带宽的回退机制,在保持当前场景的基础上单次累加探测带宽,随着发送码流中帧数的增加,接收单帧数据的延时时间也开始增加,当时间上升到一定数值(第三时间值)时,为了避免时间过长导致被动丢帧的情况,采用逆向减帧逐步减少发送码流中的帧图像,等发送队列存储的帧数小于或等于预设的第二时间值时再通过单次累加探测带宽。因此,本方案可以在确保视频实时流畅传输的前提下探测出实际带宽,然后匹配出最佳的丢帧模式。
进一步的,所述步骤B中包括:所述触发条件包括第一时间值、第二时间值、第三时间值和基准丢包率,所述第三时间值大于或等于第二时间值,小于第一时间值;
如果接收单帧数据的延时超过第一时间值或丢包率超过基准丢包率,直接选用丢帧更多丢帧的场景,反之,维持当前场景;
如果接收单帧数据的延时始终小于或等于预设的第二时间值,且丢包率小于或等于基准丢包率,或者接收单帧数据的延时在预设的时间段内先增加,后减小,最后接收单帧数据的延时小于或等于第二时间值,且丢包率小于或等于基准丢包率,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景;
采用单次累加的方式在发送码流中增加帧图像时,如果接收单帧数据的延时超过第三时间值,或者丢包率大于基准丢包率,则采用逆向减帧的方式在发送码流中减少帧图像。
进一步的,所述步骤B中包括:所述触发条件包括第一时间值、第二时间值和第三时间值,所述第三时间值大于或等于第二时间值,小于第一时间值;
如果接收单帧数据的延时超过第一时间值,直接选用丢帧更多丢帧的场景,反之,维持当前场景;
如果接收单帧数据的延时始终小于或等于预设的第二时间值,或者接收单帧数据的延时在预设的时间段内先增加,后减小,最后接收单帧数据的延时小于或等于第二时间值,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景;
采用单次累加的方式在发送码流中增加帧图像时,如果接收单帧数据的延时超过第三时间值,则采用逆向减帧的方式在发送码流中减少帧图像。
此为一种仅依靠接收单帧数据的延时作为触发条件的技术方案。有利于简化控制,降低开发周期和成本。
进一步的,所述步骤B中包括:所述触发条件包括第一丢包率、第二丢包率和第三丢包率,所述第三丢包率大于或等于第二丢包率,小于第一丢包率;
如果接收数据的丢包率超过第一丢包率,直接选用丢帧更多丢帧的场景,反之,维持当前场景;
如果接收数据的丢包率始终小于或等于预设的第二丢包率,或者接收数据的丢包率在预设的时间段内先增加,后减小,最后接收数据的丢包率小于或等于第二丢包率,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景;
采用单次累加的方式在发送码流中增加帧图像时,如果接收数据的丢包率超过第三丢包率,则采用逆向减帧的方式在发送码流中减少帧图像。
此为一种仅依靠丢包率作为触发条件的技术方案。有利于简化控制,降低开发周期和成本。
进一步的,所述步骤B中包括:抽离的帧图像数据所在位置插入调换帧数据,调换帧数据包括在标准视频协议或私有协议下可以准确解码调换帧需要的的包括缓存操作在内的操作指令。标准解码器会根据每个接收到帧数据的包头信息,维护一个解码帧缓存(如H.264中的DPB buffer),保留正确的参考帧和显示顺序。如果中间缺少了帧图像的数据,有的解码器的解码帧缓存顺序会错,使时间顺序后的解码帧产生错误。为了适应所有标准解码器,我们在抽离的帧图像所在位置填入调换帧,这样帧序列仍然是连续的,无论抽离多少帧图像,都能产生像基准码流一样标准的码流。调换帧只需要包含准确的解码帧操作指令,保证所有标准解码器可解,数据量很小,如在H.264标准中,整个调换帧的数据量只有几个到30几字节。
进一步的,所述标准视频协议包括H.264或H.265视频标准,在H.264或H.265视频标准中,所述调换帧包括NAL数据包,所述操作指令集成在所述NAL数据包中。NAL(NetworkAbstraction Layer:网络抽象层)是H.264/AVC影像编码标准的一部份,以NAL-unit(NAL模组)为单位的方式来做为视讯编码层(Video Coding Layer,VCL)的运算单位。因此将操作指令集成到NAL数据包中有利于标准解码器进行解码操作。
一种视频转发服务器,所述视频转发服务器包括对每一帧图像进行编码;按预设的显示制式生成基准码流的编码模块;
判断实时宽带的检测模块;
根据检测模块的带宽信息,将基准码流转换成发送码流的自适应模块;
如果实时带宽低于基准带宽,自适应模块从基准码流每秒显示的帧图像中抽离至少一帧的帧图像形成发送码流;如果实时带宽大于或等于基准带宽,自适应模块输出基准码流;
所述基准带宽是指能流畅播放基准码流的最低带宽。
本发明以一个基准带宽对视频图像进行预先编码,生成基准码流,当实时带宽低于基准码流码流时,主动从基准码流抽离部分帧图像,以确保在当前带宽条件下能流畅播放。这样在实时带宽达到或超过基准带宽时,接收端可以流畅收看基准码流的视频;而当实时带宽低于基准带宽时,接收端仍然可以流畅收看发送码流的视频。虽然发送码流经过抽帧处理,但人眼对画质的变动和图像的卡顿现象比较敏感,在一定范围内对每秒帧数的变动不敏感,本发明每帧的画面品质并没有降低且能保障视频的流畅播放,因此能改善不同带宽情况下的视频质量;另外,不发明无须架设任何专线,完全可以基于普通的互联网来实施,不会增加额外的通信成本。
附图说明
图1是本发明视频编码及网络传输方法流程示意图;
图2是本发明视频转发服务器的原理框图;
图3是本发明实施例基于场景的视频编码及网络传输方法流程示意图;
图4是本发明实施例基于TCP协议场景的视频编码及网络传输方法流程示意图。
具体实施方式
如图1所示,本发明公开了一种视频编码及网络传输方法,包括步骤:
A、对每一帧图像进行编码;按预设的显示制式生成基准码流;将能流畅播放基准码流的最低带宽定义为基准带宽;
B、判断实时带宽,如果实时带宽低于基准带宽,采用主动丢帧的方式从基准码流每秒显示的帧图像中抽离至少一帧的帧图像,生成对外传输的发送码流;如果实时带宽大于或等于基准带宽,对外传输基准码流。
如图2所示,本发明还公开了一种视频转发服务器。视频转发服务器包括对每一帧图像进行编码;按预设的显示制式生成基准码流的编码模块;
判断实时宽带的检测模块;
根据检测模块的带宽信息,将基准码流转换成发送码流的自适应模块;
如果实时带宽低于基准带宽,自适应模块从基准码流每秒显示的帧图像中抽离至少一帧的帧图像形成发送码流;如果实时带宽大于或等于基准带宽,自适应模块输出基准码流;
基准带宽是指能流畅播放基准码流的最低带宽。
显示制式定义了每秒显示的帧数,如PLA制式定义每秒显示25帧;NTSC制式定义每秒显示30帧;
本发明以一个基准带宽对视频图像进行预先编码,生成基准码流,当实时带宽低于基准码流码流时,主动从基准码流抽离部分帧图像,以确保在当前带宽条件下能流畅播放。这样在实时带宽达到或超过基准带宽时,接收端可以流畅收看基准码流的视频;而当实时带宽低于基准带宽时,接收端仍然可以流畅收看发送码流的视频。虽然发送码流经过抽帧处理,但人眼对画质的变动和图像的卡顿现象比较敏感,在一定范围内对每秒帧数的变动不敏感,本发明每帧的画面品质并没有降低且能保障视频的流畅播放,因此能改善不同带宽情况下的视频质量;另外,不发明无须架设任何专线,完全可以基于普通的互联网来实施,不会增加额外的通信成本。
结合附图和较佳的实施例对本发明作进一步说明。
实施例一
如图3所示,本实施方式公开了一种视频编码及网络传输方法。该视频编码及网络传输方法包括步骤:
对每一帧图像进行编码;按预设的显示制式生成基准码流;将能流畅播放基准码流的最低带宽定义为基准带宽;
将发送单帧需要的时间分成4个时间区段,针对每个时间区段,对应设置4种不同丢帧的场景,每个场景对应一种发送码流;如果实时带宽发送单帧需要的时间大于基准带宽发送单帧需要的时间,则根据实时带宽发送单帧所处的时间区段自动匹配对应的场景;反之,对外传输基准码流。
如果发送端在该单位时间t之内发送s出超过一半不到全部s入,则需要将s入的数据折半为s入/2,丢弃一半的帧。
如果发送端在该单位时间t之内发送s出超过1/4不到1/2s入,则需要将s入的数据折半为s入/4,丢弃3/4的帧。
如果发送端在该单位时间t之内发送s出超过1/8不到1/4s入,则需要将s入的数据折半为s入/8,丢弃7/8的帧。
如果发送端在该单位时间t之内发送s出超过1/16不到1/8s入,则需要将s入的数据折半为s入/16,丢弃15/16的帧。
由于PAL制式视频每秒25帧,所以s入丢弃15/16的帧后,会产生1秒以上的帧间隔,严重影响用户的视觉体验,所以丢帧上限为15/16。再往上丢更多的帧意义不大,此时带宽无法支撑足够友好的视频体验,只能采用直接仅传I帧(关键帧)的模式,接收端画面长期停滞缓慢更新。300kbps码率格式D1的码流最多可以丢弃近似280kbps,剩余20kbps传输。
丢帧的方式,以一个关键帧I帧作为一个起始序号0,后面每个帧的序号为自动加1。丢1/2的帧需要保留可以被2的1次幂整除的序号的帧;丢3/4的帧需要保留可以被2的2次幂整除的序号的帧;丢7/8的帧需要保留可以被2的3次幂整除的序号的帧;丢15/16的帧需要保留可以被2的4次幂整除的序号的帧。如果不被2的n次幂整除的序号的帧中包含了关键帧,则保留关键帧。保留在基准码流中可以被2的n次幂整除的序号的帧为一种等间距的抽帧策略,每两个保留帧之间抽离的帧数相等,保障了画面的连续性;视频编码一般会设置关键帧和比较帧,关键帧采用帧内编码,而且比较帧是根据关键帧来编码,所以保留关键帧有利于保障视频图像的连贯性。
理想模式如下(按PAL制式帧率做参考):
丢15/16帧数的场景下,每640ms发送完一帧;否则只发I帧。
丢7/8帧数的场景下,每320ms发送完一帧;超过320ms时,如果该发送速率下发送时间小于640ms,则改为每640ms发送完一帧。
丢3/4帧数的场景下,每160ms发送完一帧;超过160ms时,如果该发送速率下发送时间小于320ms,则改为每320ms发送完一帧,如果该发送速率下发送时间小于640ms,则改为每640ms发送完一帧。
丢1/2帧数的场景下,每80ms发送完一帧;超过80ms时,如果该发送速率下发送时间小于160ms,则改为每160ms发送完一帧,如果该发送速率下发送时间小于320ms,则改为每320ms发送完一帧,如果该发送速率下发送时间小于640ms,则改为每640ms发送完一帧。
不丢帧的场景下,每40ms发送完一帧;超过40ms时,如果该发送速率下发送时间小于80ms,则改为每80ms发送完一帧,如果该发送速率下发送时间小于160ms,则改为每160ms发送完一帧,如果该发送速率下发送时间小于320ms,则改为每320ms发送完一帧,如果该发送速率下发送时间小于640ms,则改为每640ms发送完一帧。
由于现实中的网络经常处于波动状态,因此可以预先定义场景,每个场景对应一种发送码流,然后将不同的带宽区间跟场景一一对应,当实时带宽达到某一带宽区间后自动选择相应的场景。本技术方案在一定的带宽范围内保持发送码流不变,不需要频繁计算不同的带宽需要从基准码流中抽离多少帧图像,减轻了硬件的运算负担,有利于降低硬件成本,同时可以有更多的硬件资源来确保视频的实时传输,保障显示质量。当然,本发明的时间区段不局限于4个,可以根据具体需要进一步细分成更多个,如6个、8个;也可以适当缩减成1个、2个或3个;具体抽帧方式也不局限于2的n次幂整除的序号,还可以选用其他等间距的规则进行抽帧。在硬件资源足够的情况下,也可以不定义场景;直接根据带宽的变动实时选择最佳的抽帧方式。
抽帧方式意味着发送码流中的帧图像序号是不连续的,而标准解码器会根据每个接收到帧数据的包头信息,维护一个解码帧缓存(如H.264中的DPB buffer),保留正确的参考帧和显示顺序。如果中间缺少了帧图像的数据,有的解码器的解码帧缓存顺序会错,使时间顺序后的解码帧产生错误。为了适应所有标准解码器,我们在抽离的帧图像数据所在位置填入调换帧数据,这样帧序列仍然是连续的,无论抽离多少帧图像,都能产生像基准码流一样标准的码流。调换帧数据包括在标准视频协议或私有协议下可以准确解码调换帧需要的的包括缓存操作在内的操作指令,保证所有标准解码器可解,因此调换帧的数据量很小,如在H.264标准中,整个调换帧的数据量只有几个到30几个字节。
标准视频协议包括H.264或H.265视频标准,在H.264或H.265视频标准中,调换帧包括NAL数据包,所述操作指令集成在所述NAL数据包中。NAL(Network AbstractionLayer:网络抽象层)是H.264/AVC影像编码标准的一部份,以NAL-unit(NAL模组)为单位的方式来做为视讯编码层(Video Coding Layer,VCL)的运算单位。因此将操作指令集成到NAL数据包中有利于标准解码器进行解码操作。
在实际应用中,网络经常处于动态波动的状态,视频转发服务器并不能非常准确地获得带宽数据。以发送端具有缓冲的通信协议为例,可以设定待发送队列存储帧数的第一阈值、第二阈值和第三阈值,第三阈值大于或等于第二阈值,小于第一阈值。如果待发送队列存储的帧数超过第一阈值,直接选用丢帧更多丢帧的场景,反之,维持当前场景;如果待发送队列里面的帧数始终小于或等于预设的第二阈值,或者待发送队列里面的帧数在预设的时间内先增加,后减小,最后待发送队列里面的帧数小于或等于第二阈值,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像。
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景。
采用单次累加的方式在发送码流中增加帧图像时,如果发送队列里面的帧数超过第三阈值,则采用逆向减帧的方式在发送码流中减少帧图像。
如图3所示,对于像采用如TCP协议通信的网络,实际网络抖动对应用层的影响最终会反馈到单位时间发送成功的数据量。对应于该类型的协议,可以通过对单位时间发送成功数据量的参数采样来近似模拟互联网的带宽。
基于单位时间发送成功的数据量,大致有两种可能,一是发送速率比较平滑的上升或者下降,网络处在正常的平滑波动状态;二是发送速率相对以前出现了非常大幅度的突变,网络处在一个剧烈抖动状态。
待发送队列里面的待发送帧不能太多,否则意味着在发送端缓存了太多的视频,视频传送到接收端后实时性会收到较大影响。所以我们在发送端需要设置一定的阀值以保证待发送队列内待发送帧比较少。
先不考虑剧烈波动状态,假设为网络平滑波动。由于网络的波动基本在300ms以内,同时300ms也是会影响实时性效果的一个参考值。所以我们将8个视频帧的间隔320ms(对应于第二阈值)作为一个影响网络发送质量的重要阀值,尽量在这个阀值之内对视频的发送效果进行调整。
由于基于TCP协议,我们并不能实际获取底层最真实的发送速率,只能通过发送之后的反馈效果来估算。所以,由于倍数加帧必须根据最真实带宽才能得到判断依据,而在TCP下很难实时获取,所以我们的实际加帧策略为试探性不断累加式。这样试探的好处一是可以适配TCP协议栈的缓冲策略,二是可以更加精准的匹配实时的发送效果,三是不需要复杂的实时带宽计算。如果当前待发送队列出现0或1帧(对应第一阈值),此时可以基本认为网络实时发送无延迟,立即启动加帧,只要待发送队列的条件满足,以一帧为单元,每隔40ms加一帧,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧,按顺序添加即可。
由于加帧采用单次累加策略,所以大多数情况下实际发送的速率在两个场景之间。当加帧达到更少丢帧的场景后,场景自动变更,然后网络状况允许,则可以继续加帧。
减帧策略为直接向更少丢帧的场景变更,如果当前待发送队列超过320ms(如果处在丢15/16帧数的场景下,则为超过640ms),则触发场景直接变更到更少丢帧的场景。变更之后,继续出现当前待发送队列超过320ms,则继续触发场景变更。如果在变更时,判断发现瞬间发送速率出现剧烈减少,则与前1秒平均发送速率比对,根据倍数关系,选择变更的场景。
为了平滑,尽量匹配即时最大网络带宽,当前待发送队列只有0-1帧才加帧,当待发送队列超过延迟160ms(对应于第三阈值)的帧存在,则进行加帧操作的逆向减帧操作。这里是加帧操作的逆向操作,非减帧策略。目的是平滑匹配实时最大带宽。
实施例二
当然本发明不局限于TCP协议,还可以适用于UDP等通信协议。
UDP下没有待发队列,每帧数据均拆成固定大小的UDP网络发送包,发送到网络上,而不去管接收端是否收到,收到的顺序如何等。在UDP的上层,如RTP/RTCP,可以反馈UDP包从发送端到接收端的延时,即发送时间,及丢包率。通过这些数据,可以判断网络带宽。我们这里可以用发送端和接收端交互的反馈信息来判断网络拥堵状况。这些反馈信息包括接收单帧数据的延时及相应的丢包率。丢帧场景的设定等内容参见实施例一,在此不再赘述。下面主要讲述基于UDP协议的带宽判断和丢帧场景匹配的实施方式。
采用UDP协议的网络架构,其服务器的发送端接收客户侧的接收端的反馈信息,如果反馈信息满足预设的触发条件,直接选用丢帧更多丢帧的场景,反之,维持当前场景。
触发条件包括第一时间值、第二时间值和第三时间值;预设的第一丢包率,第二丢包率和第三丢包率;所述第三时间值大于或等于第二时间值,小于第一时间值;
如果接收单帧数据的延时超过第一时间值或丢包率超过第一丢包率,直接选用丢帧更多丢帧的场景,反之,维持当前场景;
如果接收单帧数据的延时始终小于或等于预设的第二时间值,且丢包率小于或等于第二丢包率,或者接收单帧数据的延时在预设的时间段内先增加,后减小,最后接收单帧数据的延时小于或等于第二时间值,且丢包率小于或等于第二丢包率,采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像;
当发送码流每秒发送的帧数达到更少丢帧的场景时仍然满足上一步骤的条件,自动切换到丢帧更少的场景;反之,维持当前场景;
采用单次累加的方式在发送码流中增加帧图像时,如果接收单帧数据的延时超过第三时间值,或丢包率大于或等于第三率,则采用逆向减帧的方式在发送码流中减少帧图像。
服务器端可以从客户端反馈的接收单帧数据的延时来判断,接收单帧数据的延时过长(超过第一时间值),客户端就有可能存在丢帧,这样就会导致接收端的图像不完整;同理,客户侧的接收端会判断一段时间内的丢包率,如果丢包率过高,即便接收单帧数据的延时不长,仍然会被动丢失大量的帧图像,同样会影响图像的显示效果,因此本实施方式可以有效避免发送端拥堵导致被动丢帧的情况,确保视频显示流畅。
实时带宽增加时,接收单帧数据的延时会逐步减少,最终会小于或等于预设的第二时间值,丢包率也随之下降,最终小于或等于第二丢包率,即便网络出现波动,等波动平缓以后仍然会小于或等于预设的第二时间值,且丢包率小于或等于第二丢包率,此时可以采用单次累加的方式在发送码流中增加帧图像,加帧的序号顺序是当前场景下的更少丢帧的场景需要添加的帧图像,即每隔一定的时间在发送码流中增加一帧,然后再判断接收单帧数据的延时,如果仍然满足上述条件,继续加帧直到不满足条件为止;此时如果发送码流每秒发送的帧数达到更少丢帧的场景,则自动切换到丢帧更少的场景;反之,维持当前场景。当带宽增加时,通过单次累加的方式来探测出其实际带宽可以适配服务器的缓冲策略,可以更加精准的匹配实时的发送效果,不需要复杂的实时带宽计算。因此,该实施方式最大限度的利用当前的带宽资源,在带宽增加时给客户提供更高品质的视频图像。
在保持当前场景的基础上单次累加探测带宽,随着发送码流中帧数的增加,接收单帧数据的延时也开始增加,当时间达到一定数值(第三时间值),或者丢包率达到一定数值(第三丢包率),为了避免大量被动丢帧的情况出现,采用逆向减帧逐步减少发送码流中的帧图像,等接收单帧数据的延时小于或等于预设的第二时间值,且丢包率小于或等于第二丢包率时再通过单次累加探测带宽。因此,本方案可以在确保视频实时流畅传输的前提下探测出实际带宽,然后匹配出最佳的丢帧模式。
本实施方式还有其他简化替代方案,比如第一~三时间值保持不变,将第一~三丢包率统一为基准丢包率;反之,第一~三丢包率保持不变,将第一~三时间值统一为基准时间值也是可行的。
同样的,本实施例中抽离的帧图像所在位置也可以插入调换帧,以保证所有标准解码器可解。
对于像采用如UDP协议通信的网络。由于发送端直接将接收到的帧图像信息都发送到外部网络,因此需要从客户侧的接收端反馈信息回来才能判断出实际带宽。此时,通过服务器的发送端和客户侧的接收端配合来获取实时带宽,本实施例仅介绍了基于接收单帧数据的延时和丢包率作为触发条件来判断带宽的方法,实际上,仅依靠接收单帧数据的延时或丢包率作为触发条件也是可行的,这样有利于简化控制,降低开发周期和成本。基于本发明构思的其他判断方式也在本发明的保护范围之内,在此不再赘述。本发明也可以应用于其他制式的显示,如NTSC制式。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。