嵌入式多通道无线视频传输的码率自适应算法
2020-06-01罗际炜邓徳祥
罗际炜,瞿 涛,邓徳祥*
(1. 武汉大学电子信息学院,武汉430079; 2. 武汉大学计算机学院,武汉430079)
(∗通信作者电子邮箱ddx@whu.edu.cn)
0 引言
视频和图像作为人们接收信息的载体,一直是嵌入式系统数据采集、处理和传输的基础对象,所以视频的压缩和传输技术一直是人们的研究重点。同时随着物联网应用的不断扩展,以无线网络和视频压缩与传输技术为核心的嵌入式系统也在不断增多。但是在无线传输时,网络质量和状态会发生动态变化,在这时保证视频压缩和传输的服务质量(Quality of Service,QoS)就成了人们必须要解决的问题。
解决该问题的方法之一就是码率自适应。传统的传输系统往往通过三个方向[1]来实现自适应算法:
1)网络带宽。一般是通过统计每个历史视频片段的发送时间来预估传输带宽,然后根据带宽调整视频码率。如文献[2]中根据历史片段信息构建了未来时间段内的数据量(BWE);文献[3]中统计了大量会话数据得到了一个隐马尔可夫模型;文献[4]中使用视频片段长度和其发送时间之比,等作为预估依据。这种方法的优点是缓存上溢的概率较低,缺点是带宽利用率低,同时未来带宽的不确定性也为这种方法带来了风险[5]。
2)传输缓存,也就是根据缓存的剩余容量来不断调整码率,保证缓存的使用量稳定在某一个区间。如文献[6]中设计了码率和缓存使用量的特定映射关系的BBA(Buffer-Based Algorithm);文献[7]中基于体验质量(Quality of Experience,QoE)矩阵,使用Lyapunov 方法设计了一个在线控制模型;文献[8-9]中设置了多个缓存阈值,依据当前状态和缓存等级确定码率。这些方法的优点是容易保证缓存的稳定性,但缺点是存在码率的切换滞后和频繁切换[10]问题。
3)两种方法相结合,目的是同时利用两者的优点。比如文献[10]中基于缓存状态、估算带宽和当前码率确定马尔可夫决策的状态,再根据QoE参数确定奖励函数,然后转为最优化问题来计算码率调整的最优解;文献[11]使用探测方法得到估算带宽,使用滑动窗口来对带宽进行平滑处理,再根据缓存状态来确定调度策略并得到调整码率;文献[12]对文献[11]进行改进,使用缓存状态作为平滑因子,并利用缓存和带宽的关系确定调度策略,提高了带宽利用率和平均视频质量。
但它们都是根据网络状态本身对码率进行优化,并且大部分都基于PC和大型移动网络(如手机网络)平台,没有针对嵌入式平台的特点进行调整,所以在嵌入式环境中的表现不是很优秀。
同时在遇到多客户端竞争带宽的拥塞状态[12]时,由于传输控制协议(Transmission Control Protocol,TCP)的拥塞控制机制,客户端会出现带宽剧烈波动的情况。为了解决这个问题,文献[13]中使用QoE参数构建了马尔可夫模型,在进行状态预测时,将用户分成了多类,进行类内预测。文献[14]中先使用探测方法估算带宽,再使用三个协同效率函数来进行流量整形(Traffic Shaping),最后利用缓存状态计算得到阈值来调整码率。虽然这些方法在一定程度上缓解了拥塞问题,但这些算法只会在客户端进行统计和调整,没有考虑服务器的状态,就很难保证瓶颈状态下多客户端的公平、效率和稳定性[15]。
由于嵌入式平台经常需要实现一些定制性功能,因此对于效率和稳定性的要求更高,但也使得任务需求以及对网络的收发两端情况也更为清晰,因此可以通过嵌入式平台的特点进行方法的改进。
本文中的嵌入式平台有三个特点:1)实时编码。不同于HTTP平台(在服务器端预先将视频编码成不同码率并存成多个文件),本文平台的编码和传输操作是同时进行的,这样的优点在于不占用空间,并且码率的调整范围更加精细和灵活。2)发送端和接收端是多对一的关系。文献[1-9]中的带宽与缓存统计和码率调整都仅限于视频接收端,这对于它们来说是合理的。因为它们的服务器往往对应了多个客户端,并且客户端的数量是不确定并且庞大的。而本文平台的情况是一个接收端对应多个发送端,而且发送端的数量是有限的,所以发送和接收端都可以参与状态统计和码率调整。3)更加不稳定的WiFi网络。WiFi的信号质量会随着距离的远近、墙壁的遮挡和信道繁忙程度而产生很大变化,进而引起带宽的剧烈变化。但是通过一些现有的驱动接口可以实时获取WiFi 状态信息,利用这些信息可以减少网络状态变化带来的影响。
基于上面的三个特点,本文的自适应算法在前人研究的基础上进行改进,采用了带宽和缓存结合的调整方法,实现发送和接收双端参与的调整机制。其中发送端的带宽估计和文献[16]中使用MDI(McGinely Dynamic Indicator)作为估计工具不同,本文基于高斯函数对过去的网络速率进行加权,从而得到了更加可信的网络平均速率。发送端的缓存调整和文献[6]中使用一种线性分段函数(BBA)不同,本文使用了分段反函数进行码率控制,并且函数参数由估算码率动态决定;同时还使用加权移动平均来平滑码率,得到了更好的性能并增强了缓存的稳定性。除此之外,本文在接收端使用了相较于文献[17]更加简单而有效的极大值抑制和极小值激励的方法,保证了在瓶颈状态下多通道传输的公平和稳定性。
1 无线视频传输系统设计
1.1 硬件环境
系统的核心是TMS320DM368,它的主核是具有432 MHz的ARM9,外置128 MB 的DDR2内存,自带有视频压缩功能的视频协处理器。由于该视频协处理器的存在,使得DM368 可以以更小的体积、成本和功耗完成其他同类芯片的视频处理任务。芯片上运行Linux 系统,可以得到很多开源软件的支持。同时芯片带有常用的UART、SPI、I2C、USB、EMIF 等与外设的通信接口,其中的VPFE(Video Processing Front End)具有16 位宽,最高为120 MHz,可以实现1 080 P 30 frame/s 的原始视频输入和处理。
系统的硬件框架如图1 所示。其中现场可编辑逻辑门阵列(Field Programmable Gate Array,FPGA)使用的是Spartan6 XC6SLX150,具有功能完善、低成本、高容量和低功耗的特点。其他的重要外设有:用于图像采集的CMV4000 的图像传感器,支持最大2 048×2 048 的分辨率采集;RT3070 的WiFi 芯片,支持54 Mb/s 的802.11b 的无线网络通信;128 MB 的NAND FLash 用于程序存储,MAX1036 用于统计电池使用状态。
如图2 所示,系统主要由三个子模块组成:WiFi 相机、控制单元和上位机。其中WiFi 相机和控制单元的硬件架构基本一致,只不过控制单元没有图像传感器CMV4000。三个子模块分工明确,WiFi 相机作为发送端,负责采集图像并压缩成H264,然后通过网络发送给控制单元。其中每帧的图像数据除了H264 码流外,还根据控制需要添加了额外的帧头信息,包括相机标识、帧计数、时间戳等。控制单元作为接收端,会将接收到的H264 视频通过低电压差分信号(Low-Voltage Differential Signal,LVDS)传送给外设部件互连(Peripheral Component Interconnect,PCI)标准采集卡,这样上位机就不必关心网络传输的相关状态了,所有的自适应调整都在嵌入式端完成。上位机通过PCI 采集卡得到H264 数据。该数据除了会存储在本地的存储设备上,还会根据帧头信息实时解码显示至对应的WiFi 相机窗口上,并在该窗口显示图像的帧信息。
图1 系统硬件框架Fig. 1 System hardware framework
图2 系统设备组成Fig.2 System equipment composition
1.2 软件数据流
CMV4000 的采集由SPI 接口控制。图像的输入格式为bayer 格式,需要在FPGA 上进行YUV422 转换,然后再进入DM368 的VPFE 进 行 处 理。DM368 的H264 压 缩 是 通 过 使 用VISA 接口调用协处理器实现的,在压缩过程中不占用CPU,所以在进行压缩的同时仍然可以进行其他处理。WiFi 相机侧的数据流如图3所示。
图3 WiFi相机侧数据流图Fig.3 WiFi camera side data flow diagram
从线程角度讲,WiFi相机侧的DM368上有4个关键线程:VPFE 采集线程、H264压缩线程、网络发送线程和自适应算法线程。为了保证图像数据的正确性和程序的稳定性,这4 个线程均设置为实时线程,并且线程优先级为VPFE>H264>网络>自适应算法。
控制单元侧的3 个实时线程分别为网络接收、负载平衡算法和EMIF 发送。其中线程优先级为:EMIF>网络>算法。各个实时线程间的数据均通过先进先出(First Input First Output,FIFO)队列进行传递,以保证线程之间不相互依赖和干扰,并且实现资源互斥和数据同步。在启动时,系统会将所有的FIFO 队列清空并初始化,然后按照优先级大小的顺序创建线程。
图4 控制单元侧数据流图Fig.4 Control unit side data flow diagram
1.3 码率调整与网络传输
DM368 的码率改变是通过VISA(Virtual Instrument Software Architecture)接口实现的。VISA 接口可以实时指定单位为Kb/s 的码率压缩,但压缩后的得到的输出码率不会完全准确。码率压缩只是尽量以指定码率为目标,会有一定的上下浮动。因为浮动的范围是有限的,所以本文在实际调整码率时会留有一定余量(一般为20%)。
网络传输使用TCP,接口为标准socket。由于是无线网络,本文可以通过WiFi 芯片的驱动接口获取网络状态信息。如WiFi 相机侧可以通过IOCTL 接口获取连接质量,控制单元可以通过驱动获取网络负载、丢包率、信道状态等信息。这些信息都可以作为自适应算法中网络带宽的评价标准。
网络传输的数据分为视频数据和心跳控制指令,两种数据分别在不同的TCP通道中传输。其中心跳控制主要有三个作用:1)在心跳正常连接后,发送交互指令用于建立视频通道链接(类似于FTP协议);2)检测相机和控制单元的连接状态,在超时后主动断开;3)控制单元主动向WiFi 相机发送抑制指令。在接收到抑制指令后,WiFi 相机会根据指令信息调整压缩码率。
2 码率自适应算法
本文自适应算法的假设有两个:1)相机端视频采集的帧率是固定的,所以每一帧的压缩数据都会准时送到网络的发送缓存中;2)控制单元对于接收到的压缩图像的处理是瞬时的,不会出现接收的到图像处理不过来的情况。这样对于缓存,本文只需要考虑相机端的状态就可以了,对于相机端来说,缓存中数据过多意味着发送不过来了,需要降低码率。缓存中数据过少,会导致缓存出现下溢,降低带宽利用率并造成卡顿,需要提高码率。
本文的码率自适应算法的最终目标是保证缓存稳定、码率平滑调整、获得最好的QoS。本文的带宽估计、缓存算法和码率改变都是在相机端进行的。控制单元所做的就是从心跳包中获取所有相机的当前码率,同时通过心跳包发送控制信号影响相机端的调整码率,以保证每个相机公平地竞争带宽。
2.1 基于网络状态的带宽估计方法
为了估计当前的网络带宽,本文首先会统计过去一段时间内的网络速率。为了方便统计,系统的数据发送机制为分包发送。每一包限制最大长度为N(当前为16 KB),当一帧视频数据长度小于等于N时,则将该帧当作一包发送;如果帧长度大于N,则分成多包发送。这样假设当前有一包数据并且长度为n,本文会在发送前和发送完成时分别获取时间戳tstart和tend,所以瞬时发送速率sinstant的计算如式(1)所示:
但是在实际测试中这个瞬时速率的波动会很大:一方面,这个瞬时速率是不可信的,因为这个速率会被很多因素所影响,如信道被占用、TCP 丢包重发等;另一方面,波动很大的瞬时速率也是不可用的,因为不断波动的速率会导致码率频繁并剧烈地调整,影响算法的QoS。所以为了把速率波动控制在一定范围内,本文采用基于瞬时速率的一种平均速率,同时为了保证速率的可信性,在计算平均时速时会加上权重。本文认为越接近当前时间的瞬时速率越具参考性,分配的权重应该更大,所以使用了高斯函数来计算权重。相对于马尔可夫模型,使用高斯函数加权相当于进行了一次高斯滤波,能增加预测结果的平滑性从而提高稳定性。平均速率saver的计算如式(2)所示:
其中:可调节的参数有N 和c,N 决定了使用过去多少个数据包的瞬时速率,c 决定了高斯曲线的胖瘦程度,也就是对最近瞬时速率的关心程度。本文实验时设定的N和c为100和12。根据saver就可以通过式(3)得到依据带宽估算得到的码率rband:
其中:a是2.3节提到的余量。
WiFi 连接质量也可以作为带宽估算的一个参考。在信号质量不断变化过程中,通过信号强度信息,可以得到当前带宽的一个较为可靠的上限。信号强度被分为1~10个等级,本文使用开源工具iPerf 对每个等级下的平均带宽进行实际测试和统计,得到对应的WiFi 模块吞吐量等级表。这个吞吐量将作为带宽估算的saver的上限smax。
表1 WiFi模块吞吐量等级Tab. 1 WiFi module throughput rank
在控制单元可以通过心跳包获取每个已连接相机的已用带宽。为了保证相机带宽的公平竞争,控制单元会定期向占用带宽最大的相机发送抑制信号,向占用带宽最小的相机发送激励信号。同时如果有新的相机接入控制单元,单元会向所有其他相机发送抑制信号,以保证新来的相机可以获得足够的带宽。相机接收到抑制信号会降低带宽估算时速率的标准,接收到激励信号则会尝试增加估算带宽。
2.2 结合缓存状态的码率平滑方法
如果每次估算出来的带宽都恰好正确,并且输出码率也符合理想值,那就不担心关心缓存问题了。因为每帧视频都会按计划产生并发送完成,缓存中的数据就不会增加或减少。但不管是码率还是带宽都不可能准确地控制和估计,实际的输出码率会在指定参数的一定范围内上下浮动,带宽也会因为复杂的网络环境而变得不符合预期。如果仅仅使用带宽估计的方法,那么必然会出现缓存的上溢(导致丢帧)或下溢(导致卡顿),从而影响方法的QoS 指标,所以结合缓存状态来调整码率是必要的。
根据图5 可知码率自适应的目标是维持缓存中的数据量维持在dt附近。总缓存量为dmax,本文实验中设定为8 MB。dt并不是一个定值,因为本文为了保证视频帧率的稳定性,将视频传输延时T 设置为500 ms。所以在码率为4 Mb/s 的情况下,缓存量dt应约为256 KB。但在实际运行过程中码率是动态变化的,根据时延和码率得到的dt也会不断变化,所以dt的计算公式如下:
其中:ri-1是本次调整前的码率。在缓存低于dt时,说明传输快了,应该增大码率来获得更高的带宽利用率,同时防止视频传输帧率升高而导致缓存下溢;缓存高于dt,说明传输慢了,应该降低码率,以防止传输帧率降低导致缓存上溢。这是基于缓存的码率调整策略,为了实现这样的效果,本文使用了一个简单的分段函数,如式(5)所示:
其中:x 为当前缓存的余量;rband为根据带宽估算方法计算出来的当前码率;ri′就是调整之后的码率。本文会为码率分别设置一个上限rmax和下限rmin,以防止码率无限制地上升或下降。如果在实现中直接使用式(5)会出现码率骤降或骤升的问题,而码率的急剧变化会影响用户的观看体验,进而降低QoS 的评价。产生这个问题的原因之一在于:在通过式(5)得到新的码率后,新的码率会进而影响dt。假设x >dt,则计算出的ri会小于ri-1,根据式(3)可知dt也会变小。在x 变化不大的情况下,根据式(4)在计算ri+1时就会因此而被缩小,所以这种缩小会随着一次次新的码率调整而不断传递,最终导致码率迅速下降。当x <dt时,同理码率会被放大。
图5 缓存量和码率的关系Fig.5 Relationship between buffer size and rate
所以为了减少这种影响,实现码率的平滑调整,也就是把码率的变化幅度控制在指定范围内,本文将ri-1也作为码率调整的一个参考:
其中:1- p 为ri-1的权重,决定了码率的最大变化幅度,本文实验中设定p 为0.4;b 是3.1 节提到的控制单元传来的码率调整信号,b >1 则为激励信号,b <1 则为抑制信号,默认b= 1;ri即为调整后的码率。
2.3 算法流程
控制码率调整的频率是必要的,因为码率调整频率过高或过低都会引入新的问题。每一次频率调整都会引入一个新的I 帧,所以频率过高会导致I 帧占比增加,导致数据量增大,降低码率调整的准确性。调整频率过低会导致码率的骤增或骤降,同时也容易使视频帧率发生抖动。所以在实际调整过程中,最合适的调整时机是在程序的下一帧就是I 帧时。系统当前设置的I帧间隔为30帧,因此码率调整的间隔Rinterval=30最为合适。
WiFi相机侧的算法的流程如下:
1)设置当前码率ri为R(默认码率,本文实验中设定值为4 Mb/s)。
2)在新的一包发送完成后,按照式(1)统计当前包的瞬时速率si。
3)如果当前包计数为小于N 或者当前帧的下一帧不是I帧,则返回步骤2)。
4)以历史瞬时速率si-N+1到si为窗口,按照式(2)计算当前的平均速率saver。
5)如果saver>smax,则saver= smax,并按照式(3)计算带宽估算码率rband。
6)统计当前缓存的用量x,并根据式(4)~(5)计算缓存调整码率ri′。
7)检查控制单元心跳包中的码率调整信号b,并根据式(6)计算得到平滑后的码率ri。
8)将ri设为当前码率,返回步骤2)。
如图6 所示,控制单元的码率控制流程分为两个循环,T1和T2分别是两个循环的时间窗口大小。其中的抑制和激励信号是通过网络心跳包进行传递,信号的大小是可以预设的参数,该信号将会影响相机的下一次码率调整。第一个循环控制T1用于为新相机快速空出可用带宽,减小新相机加入时对网络产生的影响,实现新相机的快启动,保证网络稳定性;第二个循环T2用于平均码率,防止出现单一相机占用大量带宽,而某些相机却得不到带宽的情况,保证网络的公平性。
图6 控制单元的码率控制流程Fig.6 Control unit rate control flowchart
3 实验与结果分析
3.1 评价指标
本文的自适应算法分为三个部分,每个部分都有自己的作用和目标:带宽估计算法是为了准确估计当前带宽,根据带宽来得到一个基础码率;缓存状态算法是为了控制缓存的上下浮动,减少码率调整和带宽的不准确性带来的影响;平滑方法是为了防止码率出现骤升或骤降。这些方法的性能需要一些指标来进行评价。
评价视频传输质量的指标有很多,但提高这些指标,往往要求算法参数向相反的方向调整,所以本文需要在这些指标之间作出权衡。参考文献[18],本文使用QoS 指标作为视频传输质量的评价标准。QoS 是一种用来解决网络延时和阻塞的技术,它的评价指标则是一个通用的用于评价传输质量的标准。QoS主要有以下五个关键指标:
1)吞吐量/带宽利用率。
从WiFi 相机的角度讲,本文的目标是提高每个相机的吞吐量;从控制单元的角度讲,本文的目标是提高带宽的利用率。通过统计相机每次发送的数据数量di即可得到相机吞吐量ti:
其中:T为统计的时间窗口大小。
影响吞吐量的主要因素是缓存下溢。正常情况下,缓存中都应该是有数据的,但如果码率估计不足,会导致发送比缓存增长快,然后缓存下溢,造成某次发送时没有取到数据。
在控制单元统计每个相机的吞吐量,吞吐量的总和与带宽B之比就是带宽利用率bu:
2)时延。
时延是指相机从拍摄到上位机显示一帧图像之间所产生的时间差。而在本文中能够控制的时延是WiFi 相机产生一帧压缩数据,到控制单元接收到一帧数据的时间差。本文会在两个地方分别打上时间戳,所以时延的计算方法如下:
影响时延的主要因素是缓存中的数据量,缓存中的视频帧数越多,则时延越大。但本文倾向于在缓存中保留一定的帧数,这样可以防止缓存出现下溢而导致时延抖动。
3)丢帧率。
导致丢帧的根本原因是缓存上溢。丢帧是很严重的问题,视频一旦丢帧,意味着到下一个I 帧到来之前,视频都会不正常,所以在任何情况下都应该避免丢帧。本文通过帧计数的跳变fcount来统计丢帧率,每分钟内的跳变次数即为丢帧率plose:
其中:T为统计的时间窗口大小。
4)抖动。
缓存中的数据量骤增或骤减都会导致抖动,这里的抖动是指时延抖动。本文通过统计每帧的时延ti计算一段时间窗口内的时延标准差vt来评价抖动指标,其中N 为统计的帧窗口大小,-t为窗口内的时延均值:
同时本文还会统计缓存中数据量的标准差di来侧面评价抖动指标:
其中:T为统计的时间窗口大小;-d为窗口内的数据量均值。5)平滑性。码率的频繁切换或者剧烈波动都会导致用户的观看体验下降[19],所以码率调整的平滑性也是评价算法可用性的重要指标。假设ri是某次调整后的码率,那么码率的平滑指标vsmooth(数值越小越平滑)可以这样计算:
3.2 结果分析
本文为自定义的嵌入式实验平台,一个控制单元对应多个相机,拓扑结构如图2 所示。网络配置为802.11g(使用iperf 工具测试,状态良好的情况下,无线网络的平均速率为17 Mb/s,峰值速率为22 Mb/s,本文将此峰值速率作为带宽上限)。控制单元作为热点,相机启动时自动连接。控制单元为视频唯一接收端,相机为视频发送端,采用TCP,视频帧格式为自定义帧头+H264帧数据,其中帧头的数据量可忽略。
为了保证实验质量,本文的实验在室外进行。相机对街道场景进行拍摄,产生分辨率为1 080 P 的30 frame/s 的H264视频流。设置视频码率上限为12 Mb/s,下限为2 Mb/s。控制单元接收到的视频流会转发至上位机。上位机可以解析视频的帧头信息来获得如时间戳、长度、相机id 等信息,从这些信息可以统计出QoS指标;同时在上位机也可以实时观看视频,评价视频质量。
为了控制变量,本文将分别实验五种情况(时间均为3 min):
1)单相机拍摄,模拟在没有瓶颈下的拍摄(1S)。
2)单相机拍摄,拉远拉近距离时的情况,模拟信号质量动态变化(2S)。
3)多相机拍摄,相机数量逐渐增加,模拟相机遇到瓶颈时和有新相机加入(3S)。
4)多相机拍摄,相机数量固定为最大值4,模拟多相机竞争带宽(4S)。
5)多相机拍摄,拉远拉近距离时的情况,模拟信号质量动态变化(5S)。
在这几种情况下分别统计QoS的五个指标。
3.2.1 带宽估计
为了控制变量,本文将分别对两个算法模块进行替换,然后进行性能评估。其中带宽估计模块分别用MDI[16]、使用最后的历史片段速率作为预估带宽IB(Instant Bandwidth)、使用最后的N 个历史片段的平均速率作为预估带宽MB(Mean Bandwidth)和本文加了高斯权重的平均速率的GB(Gauss Bandwidth)进行性能比较。其中参数N 设为100,c 设为12(参考3.1节)。
由图7的情况2S可知相机吞吐量会随信号质量的变化而变化,由情况3S 可知吞吐量也会受到其他相机接入的影响。由图8 可知情况1S 下相机吞吐量还没有达到带宽瓶颈,估算出来的带宽超过了码率上限。所以在码率保持最大的情况下,四个方法的平均吞吐量相差不大。情况2S、3S、4S和5S中遇到了带宽瓶颈。在这种情况下,吞吐量的大小和缓存下溢的时间有关,而缓存的稳定性取决于带宽估计的准确性。在这四种情况下,GB 方法的吞吐量都高于其他方法,证明了GB方法带宽估计的准确性较高。
如图9 所示,本文统计码率变化图时,是按照每3 s 得到一次当前的调整码率,而不是3 s时间段内的平均码率。其中本文的GB方法相比其他两种,码率的波动明显较小。同时根据表2 可知,平滑性会受到信号状态变化和带宽竞争而变差,而在这几种情况下GB 的码率平滑性都显著小于其他三种方法,可以提供更好的视频质量。这说明带宽的估计的准确性会影响码率调整的平滑性,准确的带宽估计可以增加缓存的稳定性。
图7 GB的吞吐量随时间的变化Fig.7 GB throughput changing with time
图8 各带宽估计方法的吞吐量直方图Fig.8 Throughput histogram of each bandwidth estimation method
图9 各带宽估计方法码率时间变化(情况4S下)Fig.9 Rate changing with time of each bandwidth estimation method(situation 4S)
表2 各带宽估计方法的平滑性统计Tab. 2 Smoothness statistics of each bandwidth estimation method
3.2.2 缓存模块
缓存模块将用禁用缓存模块DB(Disable Buffer)、缓存的分段线性函数BBA[6]和本文的缓存的分段反比例函数SFB(Segmentation inverse Function Buffer)进行性能比较。
本文中的BBA 因为针对的是相机端(发送端)的缓存,缓存和码率的映射变化和接收端的情况正相反,所以BBA 的映射关系如图10 所示,其中参数rmax为12 Mb/s,rmin为2 Mb/s,b1为32 KB,bm为4 MB,bmax为8 MB。
如图11所示,SFB方法的码率调整更加平稳。DB因为没有缓存调整,只能根据估算的带宽来调整码率,但由于TCP机制存在着短期和长期的波动,还有估算的不确定性,导致其码率波动很大。根据表3可知,SFB码率调整的平滑性在几种情况下都好于其他方法,同时在吞吐量上也有显著优势(见图12)。
图10 本平台下的BBA的缓存和码率映射图Fig.10 BBA buffer and rate mapping diagram on the proposed platform
图11 各缓存模块方法码率时间变化(情况2S)Fig.11 Rate changing of each buffer method(situation 2S)
图12 各缓存模块方法的吞吐量统计Fig.12 Throughput histogram of each buffer method
表3 各缓存模块方法的平滑性统计Tab. 3 Smoothness statistics of each buffer method
如图13 所示,本文统计缓存变化图时,是按照每3 min 得到一次当前缓存的数据量,而不是3 min时间段内的缓存平均数据量。其中可以看到DB 的缓存量比较低,且经常缓存下溢,造成吞吐量下降。根据表4~5 可知,SFB 缓存量稍高,但波动较小,可以减少缓存和时延抖动,同时保持较高的吞吐量,得到更好的QoS。BBA 的波动最大,同时存在缓存下溢和上溢(丢帧,见表6)的情况,所以虽然吞吐量比DB 大,总体QoS并不算好。
图13 缓存数据量时间变化(情况5S)Fig.13 Buffered data scale changing with time of each method(situation 5S)
表4 缓存抖动统计表 单位:KB Tab. 4 Buffer jitter statistics unit:KB
表5 平均时延/时延抖动统计 单位:ms Tab. 5 Average delay/delay jitter statistics unit:ms
表6 丢帧率统计(平均每分钟的丢帧数量)Tab.6 Frame loss rate statistics(dropped frames per minute)
3.2.3 控制单元
控制单元将分别启用(EC)和禁用(DC)码率控制模块进行测试,并根据测试结果来分析接收端的码率控制对性能是否有影响。其中EC 的抑制信号参数设为0.9,激励信号参数为1.1。
EC 中由于加入了旧相机抑制、新相机激励的方法,实现了相机的“快启动”。新相机在建立连接后,可以更快地获得基础带宽,并且迅速稳定下来。其中EC的平均“启动”时间约为4 s,DC 则至少需要10 s,并且DC 的带宽本身就难以稳定下来。
由图14~15 可知,在控制单元的码率控制模块的作用下,EC 的4 个相机占用带宽比较稳定,相机能够更加公平地竞争带宽。而DC 由于没有进行控制,出现了带宽分配不公,某些相机占用了大量带宽,其他相机却得不到足够带宽的情况。同时可以看到图15 中DC 的每个相机的带宽波动剧烈,这是因为相机端算法的调整会造成吞吐量和码率的频繁波动。这就证明了在多通道情况下控制单元端的码率控制模块的有效性和必要性。
图14 带宽利用率折线堆积图(EC,4S情况)Fig.14 Bandwidth utilization stacked line chart(EC,in 4S)
图15 带宽利用率折线堆积图(DC,4S情况)Fig.15 Bandwidth utilization stacked line chart(DC,in 4S)
表7 带宽利用率统计 单位:%Tab.7 Bandwidth utilization statistics unit:%
4 结语
本文在相机端设计了一个结合带宽估计和缓存状态的码率自适应算法。其中带宽估计使用高斯函数对历史速率进行加权,得到较为可信的估算带宽;缓存状态使用分段反比例函数(函数参数由估算码率动态决定),得到了一个缓存和码率的映射关系,同时利用加权移动平均法对码率进行平滑;控制单元端加入了多相机码率控制的方法,从接收端对码率进行调整。实验结果表明:在本文的嵌入式环境下,相对于MDI的带宽估计方法,本文所使用的GB 方法能更好地估计带宽,不但能达到更高的吞吐量码率也更加地平滑;而对于缓存模块部分,本文也在提出了SFB的方法,缓存和时延抖动都比BBA方法更小。由于在这两个方向都进行了优化,本文算法的QoS 提升更加明显,缓存的稳定性更强,码率的平滑性和带宽利用率也更高。同时在新相机加入时实现了快启动,在多相机竞争带宽的情况下,也实现了带宽的公平性和稳定性。
对于算法的应用范围而言,本文的GB带宽估计方法在不同应用下的网络发送端都能够得到更加平滑且准确的估计效果,而SFB部分虽能得到更加平稳优越的性能,但由于缓存量较高,在复杂网络状态下有缓存上溢的风险,最后的抑制和激励部分则需要在接收端可控的情况下实现。以后将在更多的嵌入式平台以及复杂网络上进行实验,验证算法的适应性,改进以提高缓存的稳定性和算法的性能。