视频传输在视频领域占有比较大的比重,想实现比较快速和可靠的视频传输是有一点难度的。
本文将介绍一些视频传输的技巧,但由于本人水平有限,可能有不足之处,请指正。
1、UDP和TCP之争。
传输视频数据到底用TCP好呢?还是UDP?
个人偏向于使用UDP,
因为TCP的重传都是靠它本身,在网络比较好的情况下,譬如局域网,它的效果是比较好,但是在广域网,
当网络情况不太好的情况下,反而效果很差。
也许你会说UDP传输不能保证传输质量,但其实只要控制得好,还是可以达到TCP,甚至比TCP更好的效果。
2、以下有几个技巧可以改善UDP的传输质量。
(1)流量控制。
流量控制对UDP的传输质量有比较大的影响,特别是在广域网。
如果发送的数据量超过网络所能负荷的流量的话,就有数据包会被丢掉。这样在接收端接收的数据就不完整。
导致出现影像鬼影。
(2)包的控制。
包传输最大长度如果过大的话,会导致丢包机率变大。过小又会浪费太大被UDP头占用的网络带宽。
可以设定一个包为1K。因为UDP大约在大于1.5K时,就会被分组传输。
(3)重传控制。
重传可以保证数据传输的完整性。
重传算法是:为每个包附上一个唯一ID,每传输一个包ID加1。接收端发现前后两个包ID不是相差1的话,
说明可能出现丢包(也可能是出现数据包乱序)。从而,重发丢失的包。为了避免乱序导致
的丢包检测,可以在发现两个包ID不是相差1后,加个延时,延时之内如果预期应该到达的能到达的话,
则认为网络没有丢包。
当然,可以加上数据错误校验信息,这样当检测数据错误时也需要重传。
(4)前向纠错码。
为了提高视频传输的即时性,可以加上视频传输纠错码,这样接收端在接收到错误数据或检测到丢失数据后,就可以
不用重发而实现数据恢复。对于错误数据恢复可以采用诸如海明码之类的校验码,对于数据丢失的恢复,可以采用
RTCP采用的编码方式。
(待续....)