发明内容
本发明提供了一种数据接收和发送方法、装置及数据传输系统,解决了无法在合理占用网络资源的同时实现对数据包丢失的可靠处理的问题。
一种数据接收方法,包括:
在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包;
如果能够恢复丢失的媒体包,则恢复丢失的媒体包;或,
如果不能恢复丢失的媒体包,则向流媒体服务器发送丢包信息,请求流媒体服务器重新发送丢失的媒体包。
进一步的,所述在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包的步骤之前,还包括:
设置判定门限,具体为设定丢包门限及重传门限。
进一步的,所述在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包具体为:
获取所述媒体数据分组的丢包率;
如果所述媒体数据分组的丢包率大于丢包门限且小于重传门限,则确定能够恢复丢失的媒体包;
如果所述媒体数据分组的丢包率不小于重传门限,则确定不能够恢复丢失的媒体包。
进一步的,所述媒体数据分组包括媒体包和前向纠错(FEC)包,该方法还包括:
设置FEC包的冗余度,具体为将FEC包的冗余度设置为不大于5%。
一种数据发送方法,包括:
发送媒体数据分组,并在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存;
根据接收端反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和FEC包。
进一步的,所述数据发送方法还包括:
为所述对应的媒体包产生FEC包,在所述新的媒体数据分组中发送所述FEC包。
一种客户端,包括:
丢包检测模块,用于在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包;
数据恢复模块,用于在所述丢包检测模块判定能够恢复丢失的媒体包时,恢复丢失的媒体包;
丢包信息上报模块,用于在所述丢包检测模块判定不能恢复丢失的媒体包时,向流媒体服务器发送丢包信息,请求流媒体服务器重新发送丢失的媒体包。
进一步的,所述客户端还包括:
门限设置模块,用于设置判定门限,具体为设定丢包门限及重传门限;
FEC设置模块,用于设置FEC包的冗余度,具体为将FEC包的冗余度设置为不大于5%。
一种流媒体服务器,包括:
媒体数据媒体缓存模块,用于在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存;
丢包补偿模块,用于根据接收端反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和该媒体包的FEC包。
一种数据传输系统,其特征在于,包括客户端和流媒体服务器;
所述客户端,用于在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包,在所述丢包检测模块判定能够恢复丢失的媒体包时,恢复丢失的媒体包,或在所述丢包检测模块判定不能恢复丢失的媒体包时,向流媒体服务器发送丢包信息,请求流媒体服务器重新发送丢失的媒体包;
所述流媒体服务器,用于在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存,根据接收端反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和该媒体包的FEC包。
本发明的实施例提供了一种数据接收和发送方法、装置及系统,在接收完一个媒体数据分组后,判断该媒体数据分组是否存在媒体包丢失,并根据丢包率确定采用恢复媒体包或重传的方法解决媒体包丢失的问题;且在发送时媒体缓存媒体包,根据客户端反馈的重传信息重传,解决了无法在合理占用网络资源的同时实现对数据包丢失的可靠处理的问题,提高了系统效率。
具体实施方式
为了解决无法在合理占用网络资源的同时实现对数据包丢失的可靠处理的问题,本发明的实施例提供了一种数据接收和发送方法,该方法基于UDP传输模式,使用该方法在流媒体服务器和客户端之间完成数据传输的过程如图1所示,包括:
步骤101、流媒体服务器向客户端发送媒体数据分组,并在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存;
本步骤中,流媒体服务器发送媒体数据分组,既包括媒体包,又包括媒体包的FEC包。流媒体服务器在发送媒体数据分组时,为该媒体数据分组中的媒体包产生相应的FEC包。。
本发明实施例中,FEC技术采取比较低的冗余度,减少对带宽的依赖程度。对于IPTV业务来说,冗余度低于5%时对带宽影响相对较小。假设一个媒体数据分组中的J个媒体包,经过FEC算法计算处理后,产生了新的K个FEC包,则K需要小于J。
步骤102、客户端在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包;
媒体包一般用RTP(Real-time Transport Protocol,实时传输协议)格式封装,常用的流媒体的丢包检测方法就是根据RTP的序号来判断的。RTP包的序号是顺序逐渐递增的,一旦出现跳变,就表示丢包,并且可以根据序号差来统计丢包的个数。
本步骤中,客户端检测到媒体包有丢包,则启动丢包检测定时器,在丢包检测定时器超时,或者未超时,但是丢包所在媒体数据分组最后一个包已经接收完毕时,检测该分组媒体包丢包情况,判断是否能够恢复丢失的媒体包。由于使用UDP传输模式,估在传输过程中有可能发生乱序的情况,客户端会暂时性的误认为丢失了媒体数据包,故在接收一个媒体数据分组完成后再判定是否丢包及能否恢复丢失的媒体包更为准确。
本发明实施例中,会在客户端上设置判定门限,具体为设定恢复门限及重传门限。恢复门限与采用的FEC算法有关,重传门限与当前的网络状况有关。
在判断是否能够恢复丢失的媒体包时,首先获取所述媒体数据分组的丢包率,如果所述媒体数据分组存在丢包,且丢包率小于等于丢包门限,则确定能够恢复丢失的媒体包,进行恢复;如果所述媒体数据分组的丢包率大于丢包门限且小于等于重传门限,则对丢失的媒体包采取重传;如果丢包率大于重传门限,说明当前网络质量较差,且大量的媒体包重传会进一步恶化网络状况,故不采取任何动作。
此外,由于本发明实施例中,流媒体服务器发送的媒体包可能是重传媒体包,所以,当客户端接收到媒体包是重传媒体包时,如果发生重传媒体包丢失,则不启动丢包检测定时器,这样就避免了一个媒体包被多次重传,有效控制了资源浪费。
步骤103、如果能够恢复丢失的媒体包,则恢复丢失的媒体包;
如果步骤102的判断结果为能够恢复丢失的媒体包,则本步骤中,客户端直接恢复出丢失的媒体包。
步骤104、如果能够重传丢失的媒体包,则客户端向流媒体服务器发送丢包信息,请求流媒体服务器重新发送丢失的媒体包;
本步骤中,客户端将接收到的媒体数据分组的丢包信息反馈给流媒体服务器,消息以NACK(Negative Acknowledgement)形式反馈,NACK消息反馈整组数据的丢包情况,具体为丢失的媒体包的序号。
步骤105、流媒体服务器根据接收端反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和FEC包;
本步骤中,流媒体服务器收到步骤104中客户端发送的NACK消息后,如果还处于上一个数据分组的丢包重传流程,则等待上一次丢包重传流程结束后,启动重传媒体包的流程,具体如图2所示,包括:
步骤1051、流媒体服务器在媒体缓存中查找需要重传的媒体包;
流媒体服务器将数据分组缓存时,是以分组为单位对整个媒体数据分组进行缓存。即一个媒体数据分组的全部数据包,都存储在缓存中。
需要说明的是,如果在媒体缓存中不存在需要重传的媒体包,说明这个媒体包已经发出很长时间了,不再进行重传。
步骤1052、流媒体服务器为重传的的媒体包产生相应的FEC包;
步骤1053、将重传的媒体包及相应的FEC包加入新的媒体数据分组进行发送;
为了描述方便,现将媒体数据分组中丢包个数设为L,媒体数据分组中媒体包个数设为J,本步骤中,流媒体服务器将重传的媒体包加入新的媒体数据分组时,有以下三种情况:
1、如果流媒体服务器刚发送了一个媒体数据分组的N个媒体包,而且N+L小于等于J(N可以为0),则流媒体服务器将另一个媒体数据分组(该分组)的N个媒体包,L个重传的媒体包,J-L-N个媒体包(哪一个分组的?该分组)以及这L个重传的媒体包对应的K个FEC包构成一个新分组,并继续发送这一新分组中剩下的媒体包。其中,L个重传的媒体包放在该新分组中优先发送的位置。
例如,媒体数据分组G3,G3中包括媒体包A1,A2,…,Aj以及冗余包R1,R2,…,Rk;在G3前发送媒体数据分组G1。
在已经发送了A1,A2,…,An时,流媒体服务器接收到客户端请求,要求重传分组G1中的B1,B2,…,B1等媒体包。这时,流媒体服务器重新构成分组G4,G4包括A1,A2,…An,B1,B2,…,B1,An+1,An+2,……Aj-1.,以及相应的FEC包R’1,R’2…R’k,即在发送完A1到An后,接着发送B1到B1。
2、如果流媒体服务器刚发送了另一个媒体数据分组的N个媒体包,N小于J但是N+L大于J,则将这N个另一个媒体数据分组中的媒体包和J-N个重传媒体包归于一个新分组,剩下的L-(J-N)个重传媒体包归入到与该新分组紧邻的下一个分组。在该新分组及该新分组的下一个分组中,重传的媒体包都处于该分组优先发送的位置;
3、如果流媒体服务器当前正准备发送或者正在发送另一个媒体数据分组的FEC包,则继续发送完该分组的FEC包,将L个重传的媒体包做为下一个分组的前L个媒体包。
本发明的实施例提供了一种数据接收和发送方法,在接收完一个媒体数据分组后,判断该媒体数据分组是否存在媒体包丢失,并根据丢包率确定采用恢复媒体包或重传的方法解决媒体包丢失的问题;且在发送时媒体缓存媒体包,根据客户端反馈的重传信息重传,解决了无法在合理占用网络资源的同时实现对数据包丢失的可靠处理的问题,提高了系统效率。在丢包率比较小的情况下,通过FEC方法,能够顺序的恢复出丢失的媒体包;在丢包率比较大的情况下,通过重传机制来获取丢失的媒体包,根据实际情况决定资源战胜,有效的复用了资源;且在网络比较恶劣的情况下,如果重传包再次丢失的情况下,也可能会通过重传包的FEC计算方法恢复出丢失的重传包,进一步增加了系统的可靠性。
本发明的实施例还提供了一种客户端,如图3所示,包括:
丢包检测模块301,用于在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包;
数据恢复模块302,用于在所述丢包检测模块301判定能够恢复丢失的媒体包时,恢复丢失的媒体包;
丢包信息上报模块303,用于在所述丢包检测模块301判定能够重传丢失的媒体包时,向流媒体服务器发送丢包信息,请求流媒体服务器重新发送丢失的媒体包。
进一步的,该客户端如图4所示,还包括:
门限设置模块304,用于设置判定门限,具体为设定丢包门限及重传门限;
FEC设置模块305,用于设置FEC包的冗余度,具体为将FEC包的冗余度设置为不大于5%。
本发明的实施例还提供了一种流媒体服务器,如图5所示,包括;
媒体数据媒体缓存模块501,用于在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存;
丢包补偿模块502,用于根据接收端反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和该媒体包的FEC包。
本发明的实施例还提供了一种数据传输系统,如图6所示,包括客户端601和流媒体服务器602;
所述客户端601,用于在接收完一个媒体数据分组后,判断是否能够恢复丢失的媒体包,在所述丢包检测模块判定能够恢复丢失的媒体包时,恢复丢失的媒体包,或在所述丢包检测模块判定能够重传丢失的媒体包时,向流媒体服务器602发送丢包信息,请求流媒体服务器602重新发送丢失的媒体包;
所述流媒体服务器602,用于在发送媒体数据分组的同时,对所述媒体数据分组进行媒体缓存,根据客户端601反馈的重新发送丢失的媒体包的请求,从媒体缓存的媒体数据分组中查找对应的媒体包,并在新的媒体数据分组发送所述对应的媒体包和该媒体包的FEC包。
上述客户端、流媒体服务器和数据传输系统,可以与本发明的实施例提供的一种数据接收和发送方法相结合,在接收完一个媒体数据分组后,判断该媒体数据分组是否存在媒体包丢失,并根据丢包率确定采用恢复媒体包或重传的方法解决媒体包丢失的问题;且在发送时媒体缓存媒体包,根据客户端反馈的重传信息重传,解决了无法在合理占用网络资源的同时实现对数据包丢失的可靠处理的问题,提高了系统效率。
本领域普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
另外,在本发明各个实施例中的各功能单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求所述的保护范围为准。