如何使用FEC解决网络丢包

int main(int argc, char *argv[])
{
	int i, j, k;
	char arr[10][100] =
	{
		"aaa","bbb","ccc"
		,"ddd","eee","fff",
		"ggg","hhh","iii",
		"jjj"
	};
	char *data[10];
	for (i = 0; i < 10; i++)
	{
		data[i] = arr[i];
	}
	for (i = 0; i < 10; i++)
	{
		printf("before rs encode: <%s>\n", data[i]);
	}
	//6 strings protect 5 strings.
	//通过 K个有效数据,产生 M 个 FEC 冗余包,这 K + M 个数据,任意丢失 M 个数据,都能把 K 个有效数据恢复出来。
	//此处K为6,M为10-6=4,
	rs_encode2(6, 10, data, 3);
	for (i = 0; i < 10; i++)
	{
		printf("after rs encode: <%s>\n", data[i]);
	}

	//simulate lost data.
	//任意丢失M个数据(4个)个数据
	data[0] = 0; // 0 is NULL.
	data[1] = 0;
	data[2] = 0;
	data[4] = 0;
				 //data[1]=0;
				 //data[2]=0;

	int ret = rs_decode2(6, 10, data, 3);
	for (i = 0; i < 6; i++)
	{
		printf("after rs decode: <%s>\n", data[i]);
	}
	return 0;
}

基于UDP的RTP传输在复杂的公网环境下,尤其是3G、4G、WIFI网络时面临丢包、乱序、重复、抖动等问题,严重影响实时音视频互动效果,即使是一个rtp包得丢失,如果接收端不做处理,也会导致视频马赛克的出现,本方案采用多种方式结合,致力于解决udp传输视频包丢失问题,方案包括视频接收端jitter buffer 处理包乱序/重复问题,FEC(前向纠错) 优先处理丢包恢复,以及当fec恢复不了丢失数据包时采用丢包重传策略请求重传数据包,如果重传依然有丢包情况,则解码端不去解码(有可能花屏),直接请求发送方发送I帧,这几种方式组合,在实践中能有效避免丢包导致的花屏,卡顿现象,通过调整FEC冗余度,可以达到不同丢包率的处理。

这里的FEC前向纠错技术已经应用很广泛,其大概原理就是每K个媒体包发出后,利用这个K个媒体包生成N-K个冗余包,这里的N是媒体包和数据包的总和,接收端只要接收到K个数据包(包括媒体包和冗余包),就可以恢复出K个媒体包中任意一个丢失的媒体包
 

 

 

通过 K个有效数据,产生 M 个 FEC 冗余包,这 K + M 个数据,任意丢失 M 个数据,都能把 K 个有效数据恢复出来。

https://www.yisu.com/zixun/14314.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值