一种音视频传输方法与流程

文档序号:14847539发布日期:2018-06-30 16:53阅读:406来源:国知局

本发明涉及一种音视频传输技术领域,具体涉及一种音视频传输方法。



背景技术:

现有的音视频传输协议一般包含:基于TCP协议的RTMP协议,基于UDP协议的RTP协议。其中,RTMP协议在互联网有比较广泛的应用,主要用于直播等场景,RTMP协议在传输过程中会产生4到10秒的延迟,在互动不是很强的场景比较适合,但是在要求实时性高的场景就比较难应对。RTP协议由于没有纠错及重传技术,导致在互联网环境下频繁出现花屏,音频断续等问题,使得RTP协议仅使用与低丢包环境的局域网。

一般的,TCP协议传输视频会产生比较大的延迟。现有技术中的基于UDP协议的音视频传输,会产生丢包、噪声、音频不连续、视频出现马赛克等情况。



技术实现要素:

本发明的一个目的是针对现有技术的缺陷,提供基于纠错算法及丢包重传技术的音视频数据传输方法,其主要解决在互联网环境下通过UDP协议传输音视频的丢包问题。

一种音视频传输方法,包括以下步骤:

步骤a:采用发送端输入音视频原始数据,对音视频原始数据进行分组,得到分组数据包,计算校验值,将所述分组数据包、校验值通过UDP通道发送出去;

步骤b:采用接收端接收所述分组数据包、校验值,并校验数据是否完整,得到校验结果;

步骤c:若所述校验结果为是,则发出确认应答包;

步骤d:若所述校验结果为否,则重建所述分组数据包,并判断所接收的分组数据包是否能恢复为原始音视频数据;若是,则发出确认应答包;若否,则发出重传应答包,所述重传应答包包含丢失的分组数据包的相关信息;

步骤e:若所述发送端接收到重传应答包,则根据所述相关信息向所述接收端重传丢失的分组数据包;

步骤f:若所述发送端接收到确认应答包,则将所述分组数据包从缓冲区移除。

进一步的,所述步骤e之后还包括:采用所述接收端将接收的分组数据包和重传的分组数据包恢复为原始音视频数据。

进一步的,所述步骤f之后还包括:采用所述接收端将接收的分组数据包或重建的分组数据包恢复为原始音视频数据。

进一步的,所述步骤a中还包括:将发送后的分组数据包放入所述缓冲区;所述缓冲区存放的分组数据包不大于10组,当存放的分组数据包数量大于10,则丢弃最先放入所述缓冲区的分组数据包。

进一步的,所述步骤a中的输入音视频原始数据包括原始数据帧,所述原始数据帧包括帧大小、帧类型、时间戳、帧数据。

进一步的,所述步骤a中的对音视频原始数据进行分组是按照以下方式:每一个分组数据包仅承载唯一的所述帧数据,且每一个分组数据包的大小不大于528字节。

进一步的,所述步骤e和步骤f中的相关信息是根据接收端接收到的分组数据包、校验值所得。

本案利用UDP协议传输视频,利用纠错算法及丢包重传技术,提高了实时性,利用纠错算法及重传技术,避免了丢包造成的视频出现马赛克,音频声音不连续的情况。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:

图1是本发明实施例一的音视频传输方法的流程示意图。

具体实施方式

如图1所示,本实施例提供了一种音视频传输方法,包括以下步骤:

步骤a:采用发送端输入音视频原始数据,对音视频原始数据进行分组,得到分组数据包,计算校验值,将所述分组数据包、校验值通过UDP通道发送出去。

步骤a中还可以包括:将发送后的分组数据包放入所述缓冲区;所述缓冲区存放的分组数据包不大于10组,当存放的分组数据包数量大于10,则丢弃最先放入所述缓冲区的分组数据包。

步骤a中的输入音视频原始数据包括原始数据帧,所述原始数据帧包括帧大小、帧类型、时间戳、帧数据。

步骤a中的对音视频原始数据进行分组是按照以下方式:每一个分组数据包仅承载唯一的所述帧数据,且每一个分组数据包的大小不大于528字节。

步骤b:采用接收端接收所述分组数据包、校验值,并校验数据是否完整,得到校验结果。

步骤c:若所述校验结果为是,则发出确认应答包。

步骤d:若所述校验结果为否,则重建所述分组数据包,并判断所接收的分组数据包是否能恢复为原始音视频数据;步骤d1:若步骤d的结果为是,则发出确认应答包;步骤d2:若步骤d的结果为否,则发出重传应答包,所述重传应答包包含丢失的分组数据包的相关信息。

步骤e:若所述发送端接收到重传应答包,则根据所述相关信息向所述接收端重传丢失的分组数据包。

作为优选,步骤e之后还包括:采用所述接收端将接收的分组数据包和重传的分组数据包恢复为原始音视频数据。

步骤f:若所述发送端接收到确认应答包,则将所述分组数据包从缓冲区移除。

作为优选,步骤f之后还包括:采用所述接收端将接收的分组数据包或重建的分组数据包恢复为原始音视频数据,恢复为原始音视频数据之后就可以正常播放。

上述步骤e和步骤f中的相关信息是根据接收端接收到的分组数据包、校验值所得。

本发明主要目的是解决视频的实时性,使用于互动性强的场景,例如远程操控摄像头旋转,远程操控对方电脑等,发出指令后,必须马上通过视频得到反馈。本案利用UDP协议传输视频,利用纠错算法及丢包重传技术,提高了实时性,利用纠错算法及重传技术,避免了视频出现马赛克,音频声音不连续的情况;利用UDP协议进行数据传输,提高了数据传输的实时性;利用数据纠错算法对抗互联网20%丢包率;利用重传确认技术可以进一步适应更高的丢包率;利用媒体数据分组传输的方法,适应了大量数据的连续发送。

更为具体的,本发明可以采用下述具体流程实现:

分组数据包格式:为了提高传输效率以及减小丢包率,分组数据包最大大小采用528字节;

分组数据包分为包头、帧信息、数据;

其中,包头包含下列字段:

分组序号16位;

组内序号8位(组内编号取值0-5,其中0-4代表数据包,5代表校验信息)。

帧信息包含下列字段:

帧类型:8位(其中0代表音频数据,1代表视频关键帧,2视频非关键帧)。

帧序号:16位。

内部序号:16位。

帧分包数:16位。

时间戳:32位。

数据长度:16位。

包体包含下列字段:

数据内容:变长,不大于512字节。

应答数据包包含下列字段:

分组序号:16位。

组内序号:8位。

应答类型:8位(其中0代表确认,1代表数据包丢失,要求重传)。

输入音视频原始数据帧:

原始帧包含,帧大小,帧类型,时间戳,帧数据。

将原始帧数据拆分成N个不大于512个字节的数据包。

并将帧信息填充数据包的帧信息中,数据填充到包体中。

然后将每5个数据包分为一组,将组序号填充到包头的分组序号字段,包头组内序号设置每包数据在组内的位置。(0到4,共5个数据包)

分组的原则:

每一个数据包只能承载唯一的帧数据,既每个数据包中数据只属于某一帧数据。每一个分组(5个数据包)可以承载多个帧的数据。

计算校验值:

在每个分组中插入第六个数据包用于承载校验数据。

例如,校验数据包的组序号为5,校验数据计算方法,组内每一数据包对应字节的异或既为校验数据。传输过程中,组内6个数据包收到5个即可恢复出第6个数据包;恢复方法,丢失的数据包等于其他5个数据包对应位置的异或值。

计算公式如下:

Q[n] = d0[n]^d1[n]^d2[n]^d3[n]^d4[n];

恢复公式如下:

假如第三个数据包丢失,则 d3[n]=0;

d3[n]=Q[n]^d0[n]^d1[n]^d2[n]^d3[n]^d4[n];

那么校验数据包长度等于分组内最长的数据包长度。

再计算校验数据的时候,小于最大长度的数据包填充0,使数据包长度等于最大数据包长度。

计算校验数据从每个包的帧信息开始计算,恢复时可以把帧信息一同恢复。

数据发送:

每个数据包使用一个分组数据包进行发送。

发送后的数据包放入待确认缓冲区。

收到确认的数据包从缓冲区移除。

待确认队列最多存放10组数据包,即为确认数据分组超过10,则丢弃最早放入缓冲区的数据包。

数据接收:

接收端接收到分组数据包后,根据分组序号和组内序号,将分组数据包进行排序。

如果一个分组接收到前5个数据包,并且没有丢失则发送应答数据包,应答类型为确认。然后将对应的数据包从缓冲队列中移除,并将数据送到上层应用。

如果一个分组当中接收到5个数据包,并且其中一个数据包丢失,则通过恢复算法重建丢失的数据包。并且发送应答数据包,应答类型为确认,然后将对应的数据包从缓冲队列中移除,并将数据送到上层应用。。

如果一个分组接收的数据包少于5个,并且已经收到了下一个数据分组的数据包,则发送应答数据包,应答类型为重传。

确认应答包,组内序号忽略,每次确认一个数据分组。

重传应答包,组内序号为丢失的数据包序号。

数据包经过重传、重建后根据帧信息组建原始数据包。

根据帧信息的帧序号,帧内序号,数据包长度,组成帧数据送入解码器进行解码。音视频传输至此结束。

至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1