河南省住房建设厅官方网站,制作网站建设入门,wordpress竖着的分割线,建立网站的流程的合理顺序1. 从发送端解决(推荐)
适用条件: ①发送端是可以控制的.②微秒数量级的延迟可以接受
解决方法:发送时使用usleep(1)延迟1微秒发送,即发送频率不要过快,延迟1微妙发送,可以很好的解决这个问题.。
2.从接收端解决方法一
适用条件:①无法控制发送端发送数据的频率
解决方法:…1. 从发送端解决(推荐)
适用条件: ①发送端是可以控制的.②微秒数量级的延迟可以接受
解决方法:发送时使用usleep(1)延迟1微秒发送,即发送频率不要过快,延迟1微妙发送,可以很好的解决这个问题.。
2.从接收端解决方法一
适用条件:①无法控制发送端发送数据的频率
解决方法: 用recvfrom函数收到数据之后尽快返回,进行下一次recvfrom,可以通过多线程队列来解决.收到数据之后将数据放入队列中,另起一个线程去处理收到的数据可以总结为服务器程序启动之出接收端开辟两个线程一个线程专门用于接收数据包并存放在应用层的缓存区另外一个线程用于专门处理和响应数据包请求避免因为处理数据造成数据丢包。其本质上还是增大了缓冲区大小只是将系统缓冲区转移到了自己的缓冲区。
3.从接收端解决方法二
适用条件:①使用方法2依然出现大规模丢包的情况,需要进一步优化
解决方法:使用setsockopt修改接收端的缓冲区大小。
4.最复杂的方式
在应用层实现丢包重发机制和超时机制确保数据包不丢失。
NACK机制
说到丢包重传就不得不提到NACK技术那么NACK是什么呢。它的全称是Negative Acknowledgment Packet意思是否定确认包说到这里我们应该可以联想到ACKAcknowledgment Packet确认包。没错二者的意思是相反的。ACK表示通知对方我收到了你发给我的数据包NACK表示通知对方我没有收到你发给我的数据包。
那么问题来了为什么会导致对方明明发送了响应的数据包而我没有收到呢其中的原因有很多比如网络问题因为中间路由器转发丢失延时较大导致被NACK可能数据包还在传输中只是到达时间比较久等。
基于上述原因NACK的存在是非常有必要的。它能够及时的通知发送端重传相应的数据包保证接收端音频和视频的正常播放。NACK其实是RTCP包的一种用来是对 RTP 数据传输层进行反馈它包类型是 205。
前向纠错机制FEC
在每个数据包中您将添加一些关于前一个信息的信息以防丢失您需要重新构建它们flexfec是WebRTC [1]中的新格式。
顾名思义FEC前向纠错根据收到的包进行计算获取丢掉的包而和大神沟通的结果就是 纠错神髓收到的媒体包冗余包 原始媒体包数据
直到满足 收到的媒体包 冗余包 原始媒体包数据 则进入恢复模式恢复出2 4然后一次输出2 3 4 5 所谓的Qos也可以理解为抖动缓冲解决udp包乱序、包重复的问题
NAT保活保持udp连接简言之
当你向一个公网服务器发送数据时服务器可以翻转IP和端口向你发数据 但如果你长时间不发数据给服务器服务器若想用之前的IP和端口向你发就不一定成功了。因为在路由器上的NAT映射可能已经失效如果你是一直向服务器发送数据那就不存在这个问题。
FEC的设计理念大多一样编码/解码/回调函数
1.encode,不区分输入内容,编码后输出输出冗余包数据
2.decode,根据输入数据进行纠错,如果数据不是有序则等待 (收到的媒体包冗余包 原始媒体包数据) 输出原数据
3.callback,一包一包数据输出,阻塞接口