本申请涉及计算机领域,尤其涉及一种数据发送的控制方法及设备。
背景技术:
随着信息技术的发展,使得人们通过网络视频会议与公司同事或者朋友进行沟通。这种沟通可能是异地的远程会议,也有可能发生在同一个公司不同的办公室之间。过去,为了保证通话的质量,通常要求网络通讯使用公司专用网络。而现在,越来越多的用户是使用平板或者手机直接进行通讯,家庭或者公司的无线办公网络成为上述通讯的主要连接方式,但这种连接方式并不能提供未定可靠的传输带宽,其结果就是网络会议经常断线。
在这种情况下,因无法要求所有的用户都按照某个标准来组建网络的,所以目前已经有一些软件会根据网络带宽,通过降低画质和帧率的方式来解决这个问题,比如即时通讯视频等。通过该方式虽然解决了部分问题,但会造成视频模糊不清的问题,用户体验差。
申请内容
本申请的一个目的是提供一种数据发送的控制方法及设备,解决现有技术中通过降低画质和分辨率的方式降低带宽需求的同时造成视频模糊不清的问题。
根据本申请的一个方面,提供了一种数据发送的控制方法,该方法包括重复如下步骤:
将所获取的指令数据、音频数据、视频数据分别进行处理成数据包,对应放入指令队列、音频队列和视频队列中;
判断所述指令队列中是否存在待发送的数据包,若是,则发送所述待发送的数据包,并在发送完成后计算当前的加权平均网络带宽;
判断所述音频队列中是否存在待发送的音频数据包,若是,则比较所述当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽;
判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽。
进一步地,所述计算当前的加权平均网络带宽,包括:
根据最近所发送的一个数据包的发送信息确定当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息,其中,所述发送信息包括所发送的一个数据包的长度和发送时间;
根据所述统计队列中的数据包的发送信息分别计算所发送的最近n个数据包的第一平均发送速率、所发送的最近m个数据包的第二平均发送速率、所发送的最近w个数据包的第三平均发送速率,其中,n、m和w均为正整数,且n>m>w;
将所述当前发送速率、所述第一平均发送速率、所述第二平均发送速率和所述第三平均发送速率进行加权平均,得到加权平均网络带宽。
进一步地,判断所述音频队列中是否存在待发送的音频数据包,若是,则比较当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,包括:
判断所述音频队列中是否存在待发送的音频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设音频带宽阈值;
若小于等于,则选择对应的音频发送方案为不发送所述待发送的音频数据包,并将所述音频数据包从所述音频队列中取出;
若大于,则根据所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包。
进一步地,判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,包括:
判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设视频带宽阈值;
若小于等于,则选择对应的视频发送方案为不发送所述待发送的视频数据包,并将所述视频数据包从所述视频队列中取出;
若大于,则根据所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包。
根据本申请的另一方面,还提供了一种数据发送的控制设备,该设备包括:
获取装置,用于将所获取的指令数据、音频数据、视频数据分别进行处理成数据包,对应放入指令队列、音频队列和视频队列中;
控制指令装置,用于判断所述指令队列中是否存在待发送的数据包,若是,则发送所述待发送的数据包,并在发送完成后计算当前的加权平均网络带宽;
音频数据发送装置,用于判断所述音频队列中是否存在待发送的音频数据包,若是,则比较所述当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽;
视频数据发送装置,用于判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽。
进一步地,所述控制指令装置、音频数据发送装置和视频数据发送装置均用于:
根据最近所发送的一个数据包的发送信息确定当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息,其中,所述发送信息包括所发送的一个数据包的长度和发送时间;
根据所述统计队列中的数据包的发送信息分别计算所发送的最近n个数据包的第一平均发送速率、所发送的最近m个数据包的第二平均发送速率、所发送的最近w个数据包的第三平均发送速率,其中,n、m和w均为正整数,且n>m>w;
将所述当前发送速率、所述第一平均发送速率、所述第二平均发送速率和所述第三平均发送速率进行加权平均,得到加权平均网络带宽。
进一步地,所述音频数据发送装置用于:
判断所述音频队列中是否存在待发送的音频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设音频带宽阈值;
若小于等于,则选择对应的音频发送方案为不发送所述待发送的音频数据包,并将所述音频数据包从所述音频队列中取出;
若大于,则根据所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包。
进一步地,所述视频数据发送装置用于:
判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设视频带宽阈值;
若小于等于,则选择对应的视频发送方案为不发送所述待发送的视频数据包,并将所述视频数据包从所述视频队列中取出;
若大于,则根据所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包。
与现有技术相比,本申请通过重复如下步骤:将所获取的指令数据、音频数据、视频数据分别进行处理成数据包,对应放入指令队列、音频队列和视频队列中;判断所述指令队列中是否存在待发送的数据包,若是,则发送所述待发送的数据包,并在发送完成后计算当前的加权平均网络带宽;判断所述音频队列中是否存在待发送的音频数据包,若是,则比较所述当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽;判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽。采用根据不同的网络状态,改变控制指令、音频数据和视频数据的发送优先级,适用于网络视频会议,当调整优先级无法保证视频传输的时候将自动降低视频的帧率,尽量保证控制指令流和音频流的控制方式,随着用户带宽的继续降低,可以降低音频的采样频率等方式来尽可能小的带宽下保证音频流畅,避免了采取降低画质和分辨率的方式造成的视频模糊不清的问题,适应用户的需求。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个方面的一种数据发送的控制方法的流程示意图;
图2示出本申请一实施例中改变控制指令、音频数据和视频数据的发送优先级的流程示意图;
图3示出本申请一实施例中计算加权平均网络带宽的流程图;
图4示出本申请实施例中根据当前的网络状态选择对应的音频发送方案的流程图;
图5示出本申请实施例中根据当前的网络状态选择对应的视频发送方案的流程图;
图6示出根据本申请又一个方面的一种数据发送的控制设备的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出根据本申请一个方面的一种数据发送的控制方法的流程示意图;所述方法包括重复步骤S11~步骤S14:
步骤S11,将所获取的指令数据、音频数据、视频数据分别进行处理成数据包,对应放入指令队列、音频队列和视频队列中;在此,初始化四个队列:指令队列(在以下实施例中控制指令队列与指令队列可替换使用)、音频队列和视频队列以及一个发送数据统计队列。当视频通话开始的时候,抓取用户的桌面或者摄像头并压缩成数据包,添加至视频队列中;同时还会从声卡中获取当前的音频数据并压缩编码,然后将压缩编码后的数据包添加至音频队列中,所有用户的操作和控制指令都会封装成数据包存放到指令队列中。
步骤S12,判断所述指令队列中是否存在待发送的数据包,若是,则发送所述待发送的数据包,并在发送完成后计算当前的加权平均网络带宽;在本申请实施例中,初始化上述四个队列时,还会启动一个数据发送线程,专门用于发送指令、音频数据包和视频数据包,该线程首先查看控制指令队列中是否有数据包要发送,如果没有就检查音频队列,如果有就调用发送函数(Send TcpMesg函数)将所有的控制指令队列中的数据包全部发出。Send TcpMesg函数的主要功能是将数据发送给其他设备,同时还要对当前的网络发送带宽进行评估,当调用该函数将数据包发送完成后,对当前的网络发送带宽进行评估,得到当前的加权平均网络带宽。
步骤S13,判断所述音频队列中是否存在待发送的音频数据包,若是,则比较所述当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽;在本申请的实施例中,检查音频队列中是否有数据包要发送,如果没有则跳过,如果有则先调用音频数据发送函数(CouldSendAudioNow函数)来检查是否可以发送音频数据包,该函数会根据当前的网络状态,即将当前的加权平均网络带宽与预设音频带宽阈值进行比较,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,如选择不发送或连续发送等音频发送方案,并在发送完成后重新计算当前的加权平均网络带宽。
在步骤S14中,判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽。在本申请实施例中,确定音频队列中不存在需要发送的音频数据包后,需要检查视频队列中是否有视频数据包需要发送,如果没有则直接跳过,如果有视频数据包要发送,则先调用视频数据发送函数(CouldSendVideoNow函数)来检查是否可以发送视频数据包,检查的具体过程为将当前的加权平均网络带宽与预设视频带宽阈值进行比较,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送。
图2示出本申请一实施例中改变控制指令、音频数据和视频数据的发送优先级的流程示意图。首先,启动数据发送线程,在程序未退出的情况下判断网络连接是否正常,如果不正常需要重新连接,在网络连接正常的情况下判断控制指令队列是否有数据要发送,若是,则调用SendTcpMesg函数发送数据,并重新计算网络带宽;若否,则判断音频数据队列是否有数据要发送,若是,则调用CouldSendVideoNow函数来检查是否可以发送音频数据,该函数根据当前的网络状态返回一个值iRetValue,判断该返回值是否大于0,若是,则取音频数据队列的第一包数据,调用SendTcpMesg函数发送函数,并重新计算网络带宽;当音频数据队列中没有要发送的数据时,需要判断视频数据队列中是否有数据要发送,若是,则取视频数据队列的第一包数据,调用CouldSendVideoNow函数来检查是否可以发送视频数据,根据当前的网络状态确定返回值iRetValue2,判断该返回值是否大于0,若否,则丢弃这一包数据,若是,则调用SendTcpMesg函数发送函数,并重新计算网络带宽,到此一个发送周期完成,程序再回到线程开始再次检查是否有控制指令需要发送。上述所述的数据发送的控制方法优选应用于视频会议,采用根据不同的网络状态,改变控制指令、音频数据和视频数据的发送优先级,避免了因采取降低画质和分辨率的方式来降低带宽的需求所造成的视频模糊不清的问题。
需要说明的是,上述实施例中以返回值是否大于0进行判断仅为本申请的返回值阈值的一个举例,也可以设置为其他值,其他现有的或今后可能出现的返回值阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
继续参考图2,计算网络带宽是为评估当前的网络状态,通过计算当前的加权平均网络带宽实现,具体过程为:根据最近所发送的一个数据包的发送信息确定当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息,其中,所述发送信息包括所发送的一个数据包的长度和发送时间;根据所述统计队列中的数据包的发送信息分别计算所发送的最近n个数据包的第一平均发送速率、所发送的最近m个数据包的第二平均发送速率、所发送的最近w个数据包的第三平均发送速率,其中,n、m和w均为正整数,且n>m>w;将所述当前发送速率、所述第一平均发送速率、所述第二平均发送速率和所述第三平均发送速率进行加权平均,得到加权平均网络带宽。
在此,根据最近所发送的一个数据包的长度和发送时间得到当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息之前,包括:判断所发送的数据包是否发送成功,若否,则关闭网络连接,清空所述统计队列中的发送信息。
在本申请一实施例中,每当发送完一个数据包后,根据发送数据包的长度和耗费的时间可以计算出当前发送速率framerate1;同时,所述在统计队列中记录所述数据包的发送信息,包括:将所发送的数据包的长度和发送时间压入所述统计队列的末尾;判断所述统计队列中所记录的数据包的发送信息个数是否超过预设的阈值,若是,则将超过所述预设的阈值所对应的最早保存的所述数据包的发送信息进行删除。在此,将发送长度和时间压到统计队列的末尾,统计队列只保存最近300包数据的值,如果超过就将最早的数据删除。需要说明的是,最近300包为预设的阈值的一个举例,也可设置为其他数值。
然后,遍历统计队列所有记录的数据,分别统计最近300包数据的平均发送速率framerate2,最近30包数据的平均发送速率framerate3,最近10包数据的平均发送速率framerater4,然后根据下面的公式来计算加权平均网络带宽:
加权平均网络带宽=权重1*framerate1+权重2*framerate2+权重3*framerate3+权重4*framerate4,
该加权平均网络带宽为整个网络数据发送速度控制的核心数据,具体的流程图如图3所示:调用SendTcpMesg发送数据,若发送失败,则关闭网络连接并清空统计队列,返回值为-1;若发送成功,则根据发送数据长度和发送时间计算本包数据发送速率framerate1,接着,将本次发送的长度和发送时间放进统计队列尾部,判断统计队列的长度是否超过10包,若否,则返回1,若是,则判断统计队列的长度是否超过300包,若是,则将统计队列的最早一包统计数据删除,当统计队列中所统计的长度不超过300包时,分别根据统计队列计算最近300包的平均发送速率framerate2,不足300包数据则直接将framerate2赋值为默认值,在此,默认值可以为根据统计队列的所有的统计包的平均速率确定的,例如只有200包数据,则计算200包的平均发送速率;根据统计队列计算最近100包的平均发送速率framerate3,不足100包数据则直接将framerate3赋值为默认值;根据统计队列计算最近10包的平均发送速率framerate4,不足10包数据则直接将framerate4赋值为默认值,根据以上计算的各平均发送速率及各自的权重进行加权平均网络带宽的计算。
步骤S13中,判断所述音频队列中是否存在待发送的音频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设音频带宽阈值;若小于等于,则选择对应的音频发送方案为不发送所述待发送的音频数据包,并将所述音频数据包从所述音频队列中取出;若大于,则根据所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包。
本申请一实施例中,如图2所示,在进行发送音频数据包时需要根据当前的网络状态选择对应的音频发送的方案发送待发送的音频数据包,通过比较当前的加权平均网络带宽与第一预设音频带宽阈值,确定一个返回值,该值如果小于0或等于0,则表示不能发送数据,则直接将取出的数据抛弃,如果该值大于0,则表示可以连续发送的音频数据包的个数,那么根据该返回值连续发送几个音频数据包。
当返回值大于0,根据当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包,在步骤S13中,当前的加权平均网络带宽所在的预设音频带宽阈值的范围为步骤S131~步骤S133中任一种出现的带宽范围,其中,步骤S131,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围为大于等于第二音频预设带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第一采样值的双通道,按照所述音频采样参数发送所述音频数据包。步骤S132,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围为小于第二预设音频带宽阈值且大于等于第三预设音频带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第二采样值的双通道,按照所述音频采样参数连续发送所述音频数据包。步骤S133,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围小于第三预设音频带宽阈值且大于等于第一预设音频带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第三采样值的单通道,按照所述音频采样参数连续发送所述音频数据包。
在本申请一实施例中,如图4所示的根据当前的网络状态选择对应的音频发送方案的流程图,发送音频数据之前要先调用CouldSendAudioNow函数来确定发送速度的快慢以及调整音频采样参数来适应网络带宽。由于系统默认的采样参数需要的带宽为196KB/s;当加权平均网络带宽大于196KB/s时,音频数据就可以以最大速度发送;当网络带宽小于196KB/s且大于48KB/s的时候就需要将音频的采样频率降低到16K,这样可以保证音频流畅的同时也为视频传输留出了适当的带宽;当网络带宽小于48KB/s且大于8KB/s的时候,就需要将音频的采样频率降低到8K,并采用单通道采样,这样可以在极低带宽下保证音频流畅;当带宽进一步下降时,则暂时中断音频传输,全力保证控制指令的传送。需要说明的是,上述实施例中第一预设音频带宽阈值为8KB/s,第二预设音频带宽阈值为196KB/s,第三预设音频带宽阈值为48KB/s,各预设音频带宽阈值仅为举例,其他现有的或今后可能出现的各预设音频带宽阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
步骤S14中,判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设视频带宽阈值;若小于等于,则选择对应的视频发送方案为不发送所述待发送的视频数据包,并将所述视频数据包从所述视频队列中取出;若大于,则根据所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包。
本申请又一实施例中,如图2所示,在进行发送视频数据包时需要根据当前的网络状态选择对应的视频发送的方案发送待发送的视频数据包,通过比较当前的加权平均网络带宽与第一预设视频带宽阈值,确定一个返回值,该值如果小于0或等于0,则表示抛弃本包数据不进行发送,如果该值大于0,则调用SendTcpMesg发送本包数据。
当返回值大于0,根据当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包,在步骤S14中,当前的加权平均网络带宽所在的预设视频带宽阈值的范围为步骤S141~步骤S145中任一种出现的带宽范围,其中,步骤S141,若所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为大于等于第二预设视频带宽阈值,则选择对应的视频发送方案为以当前最大的速率进行连续发送所述待发送的视频数据包。步骤S142,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第二预设视频带宽阈值且大于等于第三预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则发送所述当前待发送的视频数据包,若否,则当所述视频队列中缓存的帧数小于等于预设帧数时,发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或当所述视频队列中缓存的帧数大于预设帧数时,则丢弃所述当前待发送的数据包。步骤S143,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第三预设视频带宽阈值且大于等于第四预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若否,则发送所述当前待发送的视频数据包,若是,则丢弃所述当前待发送的数据包。步骤S144,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第四预设视频带宽阈值且大于等于第五预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则判断距离上一帧发送的时间是否超过第一预设时间阈值,若是,则发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或判断距离上一帧发送的时间未超过第一预设时间阈值,则丢弃所述当前待发送的数据包。步骤S145,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第五预设视频带宽阈值且大于等于第六预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则判断距离上一帧发送的时间是否超过第二预设时间阈值,若是,则发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或判断距离上一帧发送的时间未超过第二预设时间阈值,则丢弃所述当前待发送的数据包。
在本申请一实施例中,如图5所示的根据当前的网络状态选择对应的视频发送方案的流程示意图,在发送视频数据包之前要先调用CouldSendVideoNow函数,该函数根据加权平均网络带宽来确定是否可以发送本包数据。基于压缩算法和用户屏幕分辨率的考虑,系统默认需要1MB/s的带宽;当加权平均网络带宽大于1MB/s时,视频数据就可以以最大速度发送;当加权平均网络带宽小于1MB/s且大于300KB/s时,则需要抛弃部分视频数据,如果当前的数据是关键帧则可以发送,如果是非关键帧,则根据视频数据队列中待发数据包的数量进行确定,如果缓冲的数据较少就可以发送,如果较多就必须抛弃当前数据,例如判断视频数据队列中缓存的帧数是否大于预设帧数10,若否,则可以发送数据;当加权平均网络带宽小于300KB/s且大于196KB/s时,只能发送关键帧,而其他所有非关键帧全部丢弃;当加权平均网络带宽小于196KB/s且大于48KB/s时,则每隔第一预设时间阈值3秒发送一个关键帧,而其他数据全部丢弃;当加权平均网络带宽小于48KB/s且大于16KB/s时,则每隔第二预设时间阈值10秒发送一个关键帧,而其他数据全部丢弃;当带宽进一步下降时,则暂时中断视频传输,全力保证控制指令和音频数据的传送。需要说明的是,图5中的Key-Frame为关键帧,上述实施例中,第一预设视频带宽阈值为16KB/s,第二预设视频带宽阈值为1MB/s,第三预设视频带宽阈值为300KB/s,第四预设视频带宽阈值为196KB/s,第五预设视频带宽阈值为48KB/s,各预设视频带宽阈值仅为举例,其他现有的或今后可能出现的各预设视频带宽阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
综上所述,通过本申请所述的数据发送的控制方法,采用根据不同网络状态,改变控制指令、音频数据和视频数据的发送优先级,当调整优先级无法保证视频传输的时候将自动降低视频的帧率,尽量保证控制指令流和音频流的控制方式;随着用户带宽继续降低,可以降低音频的采样频率等方式尽可能小的带宽下保证音频流畅。
图6示出根据本申请又一个方面的一种数据发送的控制设备的结构示意图;所述设备包括:
获取装置11,用于将所获取的指令数据、音频数据、视频数据分别进行处理成数据包,对应放入指令队列、音频队列和视频队列中;在此,初始化四个队列:指令队列(在以下实施例中控制指令队列与指令队列可替换使用)、音频队列和视频队列以及一个发送数据统计队列。当视频通话开始的时候,抓取用户的桌面或者摄像头并压缩成数据包,添加至视频队列中;同时还会从声卡中获取当前的音频数据并压缩编码,然后将压缩编码后的数据包添加至音频队列中,所有用户的操作和控制指令都会封装成数据包存放到指令队列中。
控制指令装置12,用于判断所述指令队列中是否存在待发送的数据包,若是,则发送所述待发送的数据包,并在发送完成后计算当前的加权平均网络带宽;在本申请实施例中,初始化上述四个队列时,还会启动一个数据发送线程,专门用于发送指令、音频数据包和视频数据包,该线程首先查看控制指令队列中是否有数据包要发送,如果没有就检查音频队列,如果有就调用发送函数(Send TcpMesg函数)将所有的控制指令队列中的数据包全部发出。Send TcpMesg函数的主要功能是将数据发送给其他设备,同时还要对当前的网络发送带宽进行评估,当调用该函数将数据包发送完成后,对当前的网络发送带宽进行评估,得到当前的加权平均网络带宽。
音频数据发送装置13,用于判断所述音频队列中是否存在待发送的音频数据包,若是,则比较所述当前的加权平均网络带宽与预设音频带宽阈值,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽;在本申请的实施例中,检查音频队列中是否有数据包要发送,如果没有则跳过,如果有则先调用音频数据发送函数(CouldSendAudioNow函数)来检查是否可以发送音频数据包,该函数会根据当前的网络状态,即将当前的加权平均网络带宽与预设音频带宽阈值进行比较,得到比较结果,根据比较结果选择对应的音频发送方案将所述待发送的音频数据包发送,如选择不发送或连续发送等音频发送方案,并在发送完成后重新计算当前的加权平均网络带宽。
视频数据发送装置14,用于判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽与预设视频带宽阈值,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送,并在发送完成后重新计算当前的加权平均网络带宽。在本申请实施例中,确定音频队列中不存在需要发送的音频数据包后,需要检查视频队列中是否有视频数据包需要发送,如果没有则直接跳过,如果有视频数据包要发送,则先调用视频数据发送函数(CouldSendVideoNow函数)来检查是否可以发送视频数据包,检查的具体过程为将当前的加权平均网络带宽与预设视频带宽阈值进行比较,得到比较结果,根据比较结果选择对应的视频发送方案将所述待发送的视频数据包发送。
所述设备用于控制数据的发送,控制方法如图2所示,图2示出本申请一实施例中改变控制指令、音频数据和视频数据的发送优先级的流程示意图。首先,启动数据发送线程,在程序未退出的情况下判断网络连接是否正常,如果不正常需要重新连接,在网络连接正常的情况下判断控制指令队列是否有数据要发送,若是,则调用SendTcpMesg函数发送数据,并重新计算网络带宽;若否,则判断音频数据队列是否有数据要发送,若是,则调用CouldSendVideoNow函数来检查是否可以发送音频数据,该函数根据当前的网络状态返回一个值iRetValue,判断该返回值是否大于0,若是,则取音频数据队列的第一包数据,调用SendTcpMesg函数发送函数,并重新计算网络带宽;当音频数据队列中没有要发送的数据时,需要判断视频数据队列中是否有数据要发送,若是,则取视频数据队列的第一包数据,调用CouldSendVideoNow函数来检查是否可以发送视频数据,根据当前的网络状态确定返回值iRetValue2,判断该返回值是否大于0,若否,则丢弃这一包数据,若是,则调用SendTcpMesg函数发送函数,并重新计算网络带宽,到此一个发送周期完成,程序再回到线程开始再次检查是否有控制指令需要发送。上述所述的数据发送的控制方法优选应用于视频会议,采用根据不同的网络状态,改变控制指令、音频数据和视频数据的发送优先级,避免了因采取降低画质和分辨率的方式来降低带宽的需求所造成的视频模糊不清的问题。
需要说明的是,上述实施例中以返回值是否大于0进行判断仅为本申请的返回值阈值的一个举例,也可以设置为其他值,其他现有的或今后可能出现的返回值阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
继续参考图2,计算网络带宽是为评估当前的网络状态,通过计算当前的加权平均网络带宽实现,具体过程为:根据最近所发送的一个数据包的发送信息确定当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息,其中,所述发送信息包括所发送的一个数据包的长度和发送时间;根据所述统计队列中的数据包的发送信息分别计算所发送的最近n个数据包的第一平均发送速率、所发送的最近m个数据包的第二平均发送速率、所发送的最近w个数据包的第三平均发送速率,其中,n、m和w均为正整数,且n>m>w;将所述当前发送速率、所述第一平均发送速率、所述第二平均发送速率和所述第三平均发送速率进行加权平均,得到加权平均网络带宽。
在此,所述设备还包括清空装置15(未示出),用于根据最近所发送的一个数据包的长度和发送时间得到当前发送速率,并在统计队列中记录所述最近一个数据包的发送信息之前,判断所发送的数据包是否发送成功,若否,则关闭网络连接,清空所述统计队列中的发送信息。
在本申请一实施例中,每当发送完一个数据包后,根据发送数据包的长度和耗费的时间可以计算出当前发送速率framerate1;同时,将所发送的数据包的长度和发送时间压入所述统计队列的末尾;判断所述统计队列中所记录的数据包的发送信息个数是否超过预设的阈值,若是,则将超过所述预设的阈值所对应的最早保存的所述数据包的发送信息进行删除。在此,将发送长度和时间压到统计队列的末尾,统计队列只保存最近300包数据的值,如果超过就将最早的数据删除。需要说明的是,最近300包为预设的阈值的一个举例,也可设置为其他数值。
然后,遍历统计队列所有记录的数据,分别统计最近300包数据的平均发送速率framerate2,最近30包数据的平均发送速率framerate3,最近10包数据的平均发送速率framerater4,然后根据下面的公式来计算加权平均网络带宽:
加权平均网络带宽=权重1*framerate1+权重2*framerate2+权重3*framerate3+权重4*framerate4,
该加权平均网络带宽为整个网络数据发送速度控制的核心数据,具体的流程图如图3所示:调用SendTcpMesg发送数据,若发送失败,则关闭网络连接并清空统计队列,返回值为-1;若发送成功,则根据发送数据长度和发送时间计算本包数据发送速率framerate1,接着,将本次发送的长度和发送时间放进统计队列尾部,判断统计队列的长度是否超过10包,若否,则返回1,若是,则判断统计队列的长度是否超过300包,若是,则将统计队列的最早一包统计数据删除,当统计队列中所统计的长度不超过300包时,分别根据统计队列计算最近300包的平均发送速率framerate2,不足300包数据则直接将framerate2赋值为默认值,在此,默认值可以为根据统计队列的所有的统计包的平均速率确定的,例如只有200包数据,则计算200包的平均发送速率;根据统计队列计算最近100包的平均发送速率framerate3,不足100包数据则直接将framerate3赋值为默认值;根据统计队列计算最近10包的平均发送速率framerate4,不足10包数据则直接将framerate4赋值为默认值,根据以上计算的各平均发送速率及各自的权重进行加权平均网络带宽的计算。
音频数据发送装置13用于,判断所述音频队列中是否存在待发送的音频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设音频带宽阈值;若小于等于,则选择对应的音频发送方案为不发送所述待发送的音频数据包,并将所述音频数据包从所述音频队列中取出;若大于,则根据所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包。
本申请一实施例中,如图2所示,在进行发送音频数据包时需要根据当前的网络状态选择对应的音频发送的方案发送待发送的音频数据包,通过比较当前的加权平均网络带宽与第一预设音频带宽阈值,确定一个返回值,该值如果小于0或等于0,则表示不能发送数据,则直接将取出的数据抛弃,如果该值大于0,则表示可以连续发送的音频数据包的个数,那么根据该返回值连续发送几个音频数据包。
当返回值大于0,根据当前的加权平均网络带宽所在的预设音频带宽阈值的范围选择对应的音频发送方案发送所述待发送的音频数据包,音频数据发送装置13用于以下三种情况中的任一种出现的带宽范围:第一种情况,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围为大于等于第二音频预设带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第一采样值的双通道,按照所述音频采样参数发送所述音频数据包。第二种情况,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围为小于第二预设音频带宽阈值且大于等于第三预设音频带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第二采样值的双通道,按照所述音频采样参数连续发送所述音频数据包。第三种情况,若所述当前的加权平均网络带宽所在的预设音频带宽阈值的范围小于第三预设音频带宽阈值且大于等于第一预设音频带宽阈值,则选择对应的音频发送方案为将音频采样参数设置为带宽为第三采样值的单通道,按照所述音频采样参数连续发送所述音频数据包。
在本申请一实施例中,如图4所示的根据当前的网络状态选择对应的音频发送的方案的流程图,发送音频数据之前要先调用CouldSendAudioNow函数来确定发送速度的快慢以及调整音频采样参数来适应网络带宽。由于系统默认的采样参数需要的带宽为196KB/s;当加权平均网络带宽大于196KB/s时,音频数据就可以以最大速度发送;当网络带宽小于196KB/s且大于48KB/s的时候就需要将音频的采样频率降低到16K,这样可以保证音频流畅的同时也为视频传输留出了适当的带宽;当网络带宽小于48KB/s且大于8KB/s的时候,就需要将音频的采样频率降低到8K,并采用单通道采样,这样可以在极低带宽下保证音频流畅;当带宽进一步下降时,则暂时中断音频传输,全力保证控制指令的传送。需要说明的是,上述实施例中第一预设音频带宽阈值为8KB/s,第二预设音频带宽阈值为196KB/s,第三预设音频带宽阈值为48KB/s,各预设音频带宽阈值仅为举例,其他现有的或今后可能出现的各预设音频带宽阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
视频数据发送装置14用于,判断所述视频队列中是否存在待发送的视频数据包,若是,则比较当前的加权平均网络带宽是否大于第一预设视频带宽阈值;若小于等于,则选择对应的视频发送方案为不发送所述待发送的视频数据包,并将所述视频数据包从所述视频队列中取出;若大于,则根据所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包。
本申请又一实施例中,如图2所示,在进行发送视频数据包时需要根据当前的网络状态选择对应的视频发送的方案发送待发送的视频数据包,通过比较当前的加权平均网络带宽与第一预设视频带宽阈值,确定一个返回值,该值如果小于0或等于0,则表示抛弃本包数据不进行发送,如果该值大于0,则调用SendTcpMesg发送本包数据。
当返回值大于0,根据当前的加权平均网络带宽所在的预设视频带宽阈值的范围选择对应的视频发送方案发送所述待发送的视频数据包,视频数据发送装置14用于以下五种情况中的任一种出现的带宽范围:第一种情况,若所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为大于等于第二预设视频带宽阈值,则选择对应的视频发送方案为以当前最大的速率进行连续发送所述待发送的视频数据包。第二种情况,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第二预设视频带宽阈值且大于等于第三预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则发送所述当前待发送的视频数据包,若否,则当所述视频队列中缓存的帧数小于等于预设帧数时,发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或当所述视频队列中缓存的帧数大于预设帧数时,则丢弃所述当前待发送的数据包。第三种情况,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第三预设视频带宽阈值且大于等于第四预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若否,则发送所述当前待发送的视频数据包,若是,则丢弃所述当前待发送的数据包。第四种情况,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第四预设视频带宽阈值且大于等于第五预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则判断距离上一帧发送的时间是否超过第一预设时间阈值,若是,则发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或判断距离上一帧发送的时间未超过第一预设时间阈值,则丢弃所述当前待发送的数据包。第五种情况,当所述当前的加权平均网络带宽所在的预设视频带宽阈值的范围为小于第五预设视频带宽阈值且大于等于第六预设视频带宽阈值时,选择对应的视频发送方案为判断当前待发送的视频数据包是否为关键帧,若是,则判断距离上一帧发送的时间是否超过第二预设时间阈值,若是,则发送所述当前待发送的视频数据包;若当前待发送的视频数据包为非关键帧或判断距离上一帧发送的时间未超过第二预设时间阈值,则丢弃所述当前待发送的数据包。
在本申请一实施例中,如图5所示的根据当前的网络状态选择对应的视频发送方案的流程示意图,在发送视频数据包之前要先调用CouldSendVideoNow函数,该函数根据加权平均网络带宽来确定是否可以发送本包数据。基于压缩算法和用户屏幕分辨率的考虑,系统默认需要1MB/s的带宽;当加权平均网络带宽大于1MB/s时,视频数据就可以以最大速度发送;当加权平均网络带宽小于1MB/s且大于300KB/s时,则需要抛弃部分视频数据,如果当前的数据是关键帧则可以发送,如果是非关键帧,则根据视频数据队列中待发数据包的数量进行确定,如果缓冲的数据较少就可以发送,如果较多就必须抛弃当前数据,如判断视频数据队列中缓存的帧数是否大于预设帧数10,若否,则可以发送数据;当加权平均网络带宽小于300KB/s且大于196KB/s时,只能发送关键帧,而其他所有非关键帧全部丢弃;当加权平均网络带宽小于196KB/s且大于48KB/s时,则每隔第一时间阈值3秒发送一个关键帧,而其他数据全部丢弃;当加权平均网络带宽小于48KB/s且大于16KB/s时,则每隔第二时间阈值10秒发送一个关键帧,而其他数据全部丢弃;当带宽进一步下降时,则暂时中断视频传输,全力保证控制指令和音频数据的传送。需要说明的是,图5中的Key-Frame为关键帧,上述实施例中,第一预设视频带宽阈值为16KB/s,第二预设视频带宽阈值为1MB/s,第三预设视频带宽阈值为300KB/s,第四预设视频带宽阈值为196KB/s,第五预设视频带宽阈值为48KB/s,各预设视频带宽阈值仅为举例,其他现有的或今后可能出现的各预设视频带宽阈值如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
综上所述,通过本申请所述的数据发送的控制方法,采用根据不同网络状态,改变控制指令、音频数据和视频数据的发送优先级,当调整优先级无法保证视频传输的时候将自动降低视频的帧率,尽量保证控制指令流和音频流的控制方式;随着用户带宽继续降低,可以降低音频的采样频率等方式尽可能小的带宽下保证音频流畅。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。