实时媒体流丢包补偿方法
技术领域
本发明涉及信息处理领域,尤其涉及一种实时媒体流丢包补偿方法。
背景技术
目前,随着移动互联网的发展,各种基于互联网通讯的APP广泛应用,而这些APP都不可避免要面对互联网上传输实时流媒体的丢包问题,而丢包是影响音视频质量的主要因素。
互联网丢包的特点:
1、瞬时丢包:丢包不严重,偶尔丢1到3个包,如图1,此种情况对语音质量影响较小。
2、连续随机丢包:丢包较严重,影响到语音质量,如图2,此种丢包完全可以通过FEC技术恢复丢包。
解决丢包问题的现有方法有两种,服务器间拉专线或者流媒体发送端静态发送冗余包。
拉专线是解决丢包的有效方法,但成本高,维护困难;发送端静态发送冗余包,占用带宽增倍,带宽成本高。
发明内容
为了克服现有技术的不足,本发明的目的在于提供一种实时媒体流丢包补偿方法,从而解决丢包补偿与低成本的问题。
本发明的目的采用以下技术方案实现:
一种实时媒体流丢包补偿方法,包括:
接收方实时检测丢包的步骤;
当接收方检测到丢包后,接收方发送平滑丢包率给发送方的步骤;
发送方根据接收的平滑丢包率大小选择相应冗余倍数,并根据选择的冗余倍数发送相应冗余包的步骤;
接收方根据接收的冗余包恢复数据的步骤。
优选的,所述接收方实时检测丢包的步骤具体为接收方动态实时检测丢包。
优选的,所述接收方动态实时检测丢包的步骤具体为:
在无丢包模式下,进行高频率的检测,当检测到有丢包之后,丢包检测的间隔相对于无丢包模式下的检测间隔变大。
优选的,所述平滑丢包率的计算规则为:
当前状态在无丢包模式下,检测到有丢包,则平滑丢包率固定为100%以启动最大冗余;当前状态在丢包模式下,按照历史的平滑丢包率与当前实时丢包率与平滑系数做运算,得出平滑丢包率,计算公式为:
当前平滑丢包率=上次平滑丢包率*a+当前实时丢包率*(1-a),
a为平滑系数。
优选的,所述a设定为0.7。
优选的,所述当接收方检测到丢包后,接收方发送平滑丢包率给发送方的步骤中,采用确认机制,该确认机制具体为:接收方发送平滑丢包率给发送方时,如发送方收到平滑丢包率,发送方则发送确认信息给接收方,若接收方没有收到确定信息则加速重传。
优选的,所述加速重传,具体为,在第一设定时间段内,判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,然后在第二设定时间段内,继续判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,然后在第三设定时间段内,继续判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,且第二设定时间段小于第一时间段,第三设定时间段小于第二设定时间段。
优选的,所述第一设定时间段为30ms,所述第二设定时间段为20ms,所述第三设定时间段为10ms。
优选的,所述发送方根据接收的平滑丢包率大小选择相应冗余倍数,具体为平滑丢包率越高,则选择的冗余倍数越高。
优选的,所述接收方根据接收的冗余包恢复数据的步骤,具体为:以接收端的接收缓存匹配对冗余包进行智能判断,即在冗余倍数高的情况下,每一个传输丢包有多次的恢复机会,在恢复数据时,将发送缓存后接收的冗余包与前面接收的冗余包进行对比,从而将后接收的冗余包内与前面接收的冗余包内重复的传输丢包删除。
相比现有技术,本发明的有益效果在于:
本发明技术方案采用动态的丢包补偿,即在有丢包的情况下,立刻发送冗余包,无丢包的情况下不需发送冗余包,发送方不必一直发送冗余包,只有在发现丢包的情况下才启动丢包补偿机制,而无丢包的情况下能够关闭丢包补偿机制,从而很好地解决了丢包补偿与低成本的问题。
而丢包检测的间隔相对于无丢包模式下的检测间隔变大,在于减少由于丢包率的变动而接收方频繁通知发送方的次数。从而进一步降低带宽成本。
而确认机制,能保证丢包率的通知顺利到达发送方,加速重传,可以确保丢包在最坏的情况仍然可以恢复。
附图说明
图1为现有技术中瞬时丢包的示意图;
图2为现有技术中连续随机丢包的示意图;
图3为网络通信原型图;
图4为本发明具体实施所述的实时媒体流丢包补偿方法的原理图;
图5为本发明具体实施所述的丢包补偿方法的原理框图;
图6为本发明具体实施所述的动态实时丢包检测通知流程图;
图7为本发明具体实施所述的丢包率平滑示意图;
图8为本发明具体实施所述的加速通知确认机制示意图;
图9为本发明具体实施所述的接收方恢复数据包中丢包恢复示意框图。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
一种实时媒体流丢包补偿方法,包括:
接收方实时检测丢包的步骤;
当接收方检测到丢包后,接收方发送平滑丢包率给发送方的步骤;
发送方根据接收的平滑丢包率大小选择相应冗余倍数,并根据选择的冗余倍数发送相应冗余包的步骤;
接收方根据接收的冗余包恢复数据的步骤。
在丢包检查中接收端设定一个固定的丢包检测定时器。
本方法应用的环境如图3所示。优选的,对流媒体进行动态实时检查,动态丢包补偿方法,如图4所示,主要分为四个步骤:接收方动态实时丢包检测、接收方通知发送方平滑丢包率、发送方发送冗余数据包和接收方恢复数据包。
下文结合一个具体的实施方式对该动态丢包补偿方法工作原理进行说明:在没有丢包的场景下,接收端设定一个80毫秒的丢包检测定时器,如果在这个时间内检测到任何丢包,则马上通知发送端一个很大的丢包率(如100%),发送方收到此通知后,立刻启用丢包补偿机制,发送最大冗余倍数(如5倍)媒体包。考虑到接收端通知到发送端一般延时20ms,5倍的冗余包能够在最坏的情况下,80毫秒的数据包中序号最前的丢包也可以恢复出来。
如图5所示,详细的描述了此丢包补偿机制的流程。整个流程中假设1号包发送接收成功,丢包率为0,后续的2、3和4号包全部被丢弃,5号包到达后,丢包检测80毫秒超时计算,发现丢包率为75%(4个包中丢了三个),接收方马上通知发送方。假设通知的过程用了20ms,这时正在发送7号包,7号包冗余2、3、4、5和6号包发送,如果7号包在接收方成功到达,则可以恢复2、3、4和6号包。8号包继续冗余前5包,即3、4、5、6和7号包,如果7号包也被丢弃,8号包成功接受,恢复3、4、6和7号包,丢弃的2号包已不能通过冗余恢复。所以此方法能够如保证100%恢复的能力下最大抗连续丢包为3个。
优选的,接收方动态实时检测丢包的步骤如图6所示具体为:
在无丢包模式下,进行高频率的检测,当检测到有丢包之后,丢包检测的间隔相对于无丢包模式下的检测间隔变大。
接收方在接收数据包同时每隔一个时间段计算一个丢包率,这个时间段根据不同情况动态改变。在无丢包模式下,保持高频率的检测,比如每80毫秒检测一次,对于G729 20毫秒打包编码的媒体包,也就是4个包的间隔。当检测到有丢包之后,丢包检测的间隔变大,比如变为500ms,也就是25个包的间隔。此目的在于减少由于丢包率的变动而接收方频繁通知发送方的次数。
接收方检测到任何丢包,立刻发送一个平滑丢包率给发送方,发送方根据平滑丢包率大小发送相应倍数的冗余包。优选的,平滑丢包率计算规则为,当前状态在无丢包模式下,检测到有丢包,则平滑丢包率固定为100%以启动最大冗余,尽可能的恢复在这次检测中的丢包;当前状态在丢包模式下,按照历史的平滑丢包率与当前实时丢包率与平滑系数做运算,得出平滑丢包率,计算公式为:
当前平滑丢包率=上次平滑丢包率*a+当前实时丢包率*(1-a)。
a为平滑系数,根据经验调整大小,经实际环境验证,优选的,该参数设置为0.7后,效果比较明显。丢包率平滑如图7所示。
优选的,当接收方检测到丢包后,接收方发送平滑丢包率给发送方的步骤中,采用确认机制,该确认机制具体为:接收方发送平滑丢包率给发送方时,如发送方收到平滑丢包率,发送方则发送确认信息给接收方,若接收方没有收到确定信息则加速重传。
优选的,加速重传,具体为,在第一设定时间段内,判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,然后在第二设定时间段内,继续判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,然后在第三设定时间段内,继续判断接收方是否收到确定信息,若接收方没有收到确认信息,接收方重新发送平滑丢包率给发送方,且第二设定时间段小于第一时间段,第三设定时间段小于第二设定时间段。
优选的,第一设定时间段为30ms,第二设定时间段为20ms,第三设定时间段为10ms。
具体的为:接收方通知发送方的机制采用快速重传确认机制如图8所示,在丢包的网络环境下,不能保证通知反馈包一定要顺利到达对方。这时,采用确认机制。在没有收到发送方的确认信息,加速重传(第一次是30ms,第二次是20ms,第三次是10ms)。30ms的设计目的在于普通的网络环境下,两节点的回环传输时间是30ms。如果30ms内没收到,则这个包可能在传输过程中丢弃。所以马上启用重传。以后的每次重传间隔在上一次压缩10ms,保证通知快速的通知对方。这样确保丢包在最坏80ms的情况还可以恢复。
优选的,发送方根据接收的平滑丢包率大小选择相应冗余倍数,具体发送方根据接收方的丢包情况,选择不同的冗余倍数。随着丢包率越高,冗余倍数越高。这样设计的目的在于在保证恢复效果的前提下,尽量的减轻由于冗余给网络带来的负载压力。在丢包与网络压力两者之间寻求最佳的平衡点。目前丢包与冗余倍数的阶梯如表1所示,总共分六级。适当的情况下,可以增加阶梯。
表1丢包率与冗余对照表
阶梯号 |
平滑丢包率百分比 |
前向冗余倍数 |
1 |
0 |
0 |
2 |
<=5 |
1 |
3 |
<=10 |
2 |
4 |
<=30 |
3 |
5 |
<=50 |
4 |
6 |
>50 |
5 |
优选的,所述接收方根据接收的冗余包恢复数据的步骤,具体为:以接收端的接收缓存匹配对冗余包进行智能判断,即在冗余倍数高的情况下,每一个传输丢包有多次的恢复机会,在恢复数据时,将发送缓存后接收的冗余包与前面接收的冗余包进行对比,从而将后接收的冗余包内与前面接收的冗余包内重复的传输丢包删除。
在媒体数据接收端,在冗余5倍的情况下,每一个传输丢包最多有5次的恢复机会。在冗余包恢复的过程中,不是把所有的冗余包都恢复,而是智能的判断,以接收端的接收缓存匹配。如图9所示,最先的丢包7号包,是在接收端的第一个冗余包中恢复出来,也就是10号包。后续的冗余包12号包中尽管还保留着7号包的信息,但是在10号包中已经恢复。收到12号包后,把7号的冗余内容去除。对于7号包而言,8、9、10、11和12这五个包都拥有7号包的信息,但8和9这个包在传输的过程中也丢失。在最先到达的10号恢复7号包。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。