一种可靠媒体流传输装置的制造方法_2

文档序号:9931549阅读:来源:国知局
后再转发给发送端设备。通过第一通讯模块和第二通讯模块对通讯协议的转发,发送端设备和接收端设备建立数据连接。另外,第一通讯模块和第二通讯模块还实现第一单元与第二单元之间数据重传请求的发送。
[0037]建立数据连接之后,发送端设备将媒体流数据发送给第一单元,发送端设备发送的媒体流数据包括多种数据类型,例如TCP单播数据、UDP组播数据和UDP单播数据。媒体流转换模块在接收到发送端设备发送过来的媒体流数据后,首先进行解包,将数据重新封装为UDP数据在第一单元与第二单元间发送,便于实现基于可靠UDP的传输。在第一单元与第二单元之间,不限于是采用组播还是采用单播进行发送。如果是单个第一单元对应单个第二单元,则一般采用UDP单播发送;而如果是单个第一单元对应多个第二单元,则可以采用UDP组播或UDP单播来发送。至于第二单元发送给接收端设备的媒体流数据,是采用单播还是组播发送,是由第二单元注册到视频监控系统,由视频监控系统下发具体的策略来进行配置,这里不再赘述。
[0038]例如,媒体流转换模块接收到媒体流数据后,首先检测数据的类型,如果媒体流数据为TCP单播数据,则先将TCP单播数据进行解包,将数据重新封装成UDP单播数据,然后将UDP单播数据发送给媒体流备份模块进行处理;如果媒体流数据为UDP组播数据则直接将数据的IP包头中的目的IP地址由组播IP地址改为单播IP地址,这样就将UDP组播数据转换成了UDP单播数据,然后将UDP单播数据发送给媒体流备份发送模块进行处理;如果媒体流数据为UDP单播数据则不进行转换,直接将UDP单播数据发送给媒体流备份发送模块进行处理。
[0039]媒体流备份发送模块在收到媒体流转换模块发送过来的UDP数据后,将数据保存在单独开辟的缓存区进行备份,并发送备份的媒体流数据。对于备份的媒体流数据,媒体流备份发送模块进行如下的处理:
[0040]在备份的媒体流数据超过设定的时间Tl时,丢弃该数据;
[0041 ]或,在备份的媒体流数据的重传次数超过预设值N时,丢弃该数据。
[0042]本实施例通过对备份的媒体流数据设置上述的丢弃规则,可以使得缓存中的备份媒体流数据得以及时地清除。即备份的媒体流数据超过设定的时间Tl时,说明该备份的媒体流数据已经可靠地发送到了接收端设备侧,备份在缓存中已经没有必要,需要进行清除并将缓存空间留给下一个需要备份的媒体流数据;或者已经重传了预设值N次,再重传已经没有实际的意义,需要采用其他方法来消除网络的丢包故障,需要进行清除并将缓存空间留给下一个需要备份的数据。
[0043]本发明并不限于上述两条丢弃规则,也可以直接采用先到先存,缓存空间满了的时候删除最先存入的备份媒体流数据的方式,这里不再赘述。
[0044]第二单元的媒体流接收模块接收到第一单元发送过来的UDP数据后,将数据按接收的先后顺序缓存在单独开辟的缓存区内。需要注意的是,第一单元与第二单元都设置了单独开辟的缓存区,各单元内的模块对于缓存的操作是在自己单元内单独开辟的缓存区操作。
[0045]丢包处理模块检测媒体流接收模块接收并缓存的媒体流数据是否存在丢包,如果存在丢包则发送数据重传请求,该数据重传请求中包括丢失的数据包序列号。
[0046]具体的丢包检测,在本实施例中通过依次对缓存区中的每个数据包进行序列号检测,如果检测到的数据包序列号为连续序列号则认为不存在丢包,不进行任何处理。如果检测到某个数据包序列号和已经检测到的数据包序列号中的最大序列号不连续并且大于已经检测到的数据包序列号中的最大序列号时,启动定时器T3,同时继续进行后续数据包序列号检测。如果在T3定时器超时前,丢包处理模块检测到了丢失的数据包序列号,则判断数据在传输过程中出现了乱序,按数据包序列号从小到大的顺序对乱序的数据进行重新排序;如果T3定时器超时后,丢包处理模块还没有检测到丢失的数据包序列号,则认为出现了丢包,需要发送数据重传请求给第一单元,请求重传丢失的数据包数据。
[0047]下面对丢包处理模块处理数据乱序和丢包的过程进行举例说明:假设丢包处理模块检测到当前数据的序列号为205,已经检测到的数据包序列号中最大的序列号为202,当前的数据包序列号205大于已经检测到的数据包序列号中最大的序列号202,且序列号不连续,判断数据出现了乱序或丢包,启动定时器T3,同时继续检测后续数据包序列号,在T3超时之前检测到的后续数据包序列号为206、207、208、203、209、210,序列号206、207、208与已经检测到的最大序列号205连续,因此判断序列号为206、207、208的数据为正常数据,不进行处理;序列号203和已经检测到的最大序列号208不连续,但序列号203小于208,因此判断序列号为203的数据出现了乱序,将序列号为203的数据进行重新排序,排在序列号为202的数据后面;序列号209、210和已经检测到的最大序列号208连续,判断序列号为209、210的数据为正常数据,不进行处理;由于在定时器T3超时后仍没有收到序列号为204的数据,因此发送数据重传请求,请求重传序列号为204的数据,收到重传的序列号为204的数据后判断为乱序,将序列号为204的数据进行重新排序,排在序列号为203的数据后面。这样丢包处理模块就完成了这部分数据的乱序和丢包处理。
[0048]进一步地,丢包处理模块在发送数据重传请求后,间隔设定的时间T4,如果还未收到重传的数据包,则再次发送数据重传请求。即本实施例可以进行一次重传请求,也可以进行多次重传请求。
[0049]数据重传请求中包含丢失的数据包序列号,媒体流备份发送模块接收到数据重传请求后,根据请求重传的数据包序列号判断缓存中是否存在待重传的媒体流数据,如果存在则对该媒体流数据进行重传,否则忽略该重传请求。
[0050]具体地,媒体流备份发送模块,在收到数据重传请求后,根据请求重传的数据包序列号判断缓存中是否存在待重传的媒体流数据。容易理解的是,如果备份数据在缓存中超过了设定的时间Tl,则该数据已经被删除,在缓存中就不存在,这时不必进行重传。如果存在,贝1J需要进行下一步的判定:
[0051 ]判断重传次数是否超过预设值N,超过则不进行重传,同时将该媒体流数据从缓存中清除。媒体流备份发送模块通过这样的操作,满足了对备份的数据设置的第二条丢弃规则。
[0052]容易理解的是,对于重传次数,可以在第一单元中单独设置一个计数器,来对要求重传的数据包序列号进行计数,从而统计重传次数。也可以将该计数器设置在媒体流备份发送模块中,本发明对此不做具体的限制。
[0053]同时,为了避免在重传后,第二单元未收到重传的数据时,又发送重传请求来请求重传,本实施例媒体流备份发送模块在判断缓存中还存在待重传的媒体流数据时,还执行如下操作:
[0054]如果最后重传时间与当前时间差小于预设的最小重传间隔,不进行重传。
[0055]容易理解的是,本实施例的第一单元还可以设置一单独的记录模块,来记录每次重传的时间,以便计算最后重传时间与当前时间的时间差。或者在媒体流备份发送模块中设置该记录模块,本发明对此不做具体的限制。
[0056]本实施例第二单元的媒体流发送模块,在不存在丢包的情况下,直接将媒体流数据发送给接收端设备,在存在丢包时,则在收到重传的数据,或者超过设定的时间没有收到重传的数据时,将媒体流数据发送给接收端设备。
[0057]具体地,本实施例对于媒体流接收模块单独开辟的缓存空间内的媒体流数据,分以下三种情况分别进行发送:
[0058]1、接收的媒体流数据不存在丢包的情况下,直接将媒体流数据发送给接收端设备。
[0059]2、在接收的媒体流数据存在丢包的情况下,丢包处理模块发起数据重传请求,如果收到重传的数据则将媒体流数据发送给接收端设备。
[0060]3、在接收的媒体流数据存在丢包的情况下,丢包处理模块发起数据重传请求,如果超过设定的时间T2还没有收到重传的数据时,直接将缓存的数据发送给接收端设备,不再等待重传。
[0061]可见,通过设置T2,避免了没有收到重传的数据时造成的始终无法发送数据的情况,尽可能保证了媒体流数据的发送。本实施例媒体流发送模块在数据发送完成后,即清空缓存区内已经发送的数据,进行后续数据的接收和处理。
[0062]需要说明的是,媒体流数据从第一单元发送到第二单元,媒体流数据可能会经过不同的路径,而不同路径上数据传输的时延和抖
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1