nack fec心得

2024-02-22 01:58
文章标签 心得 fec nack

本文主要是介绍nack fec心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

webrtc中fec的处理机制:获取一帧数据,拆分成多个rtp包,再封装成fec包(fec只有primay block),发送到网络;之后根据rtp包生成相应数量的fec包(根据冗余度来生成对应数量的包),再发送到网络。
需要注意的是:rtp red包和fec red包都是序号连续的。所以判断一个完整帧的依据依然可以使用:获取到首包,获取到尾包,中间包连续。但因为fec的加入,导致所有原始数据的rtp包无法连续(和纯nack不会这样)。
所以针对带有fec包的丢包处理机制是这样的:如果一个完整帧里面丢了原始数据包,一定要在当前帧的所有包到来之前,把此帧数据恢复完整,否则就会导致解码异常问题。如何恢复,两种策略同时使用:1.发现丢包会立即出发nack重传(即使是乱序也会触发)
2.靠后面来的fec包还原丢失的数据包。注意,以上两种策略一定要保证在下一帧数据到来之前把上一帧的数据包恢复完整,否则就会出现解码异常。

nack的处理机制:
与webrtc相比,我在此作了改善。发现丢包后立即触发重传,最多触发5次。
nack如何判断一帧的完整性:因为nack中没有fec的数据包,因此所有的数据包都是原始数据的rtp包。当前帧获取到了首包,尾包,中间包连续后,即可触发解码;之后可立即判断出下一帧的首包序列号是多少,因此比较容易。
fec如何判断一帧的完整性 :当前帧获取到了首包,尾包,中间包连续后,即可触发解码;但是下一帧的首包不一定是下一个序列号对应的数据包,因为有fec包存在。因此一定要保证在下一帧数据到来之前把上一帧的数据包恢复完整,否则就会出现解码异常

 

webrtc追求的是最低的延迟,当收到一个完整帧后立即解码输出。而在有fec数据后,判断一帧完整性变得异常复杂,最终我放弃了webrtc的思路。而是用空间换取了时间:内存中保存5个完整帧,通过mark识别,当大于5个完整帧后,取出首帧来解码 ,并从内存中删除该部分数据。

这篇关于nack fec心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/733788

相关文章

WebRTC-nack机制详解

1.NACK的含义 丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。 WebRTC中支持音频和视频的NACK重传。我们这里只分析nack机制,不分析jitterbuffer或者neteq的更多实现。 2.WebRTC

通信工程学习:什么是FEC前向纠错

FEC:前向纠错        FEC(Forward Error Correction,前向纠错)是一种增加数据通信可信度的技术,广泛应用于计算机网络、无线通信、卫星通信等多种数据传输场景中。其基本原理和特点可以归纳如下: 一、FEC前向纠错的基本原理        FEC技术通过在发送端对原始数据添加冗余信息(即纠错码),使得接收端在接收到数据后,即使部分数据在传输过程中发生错误

招聘面试程序员的一些心得

         最近雅虎北研解散的消息触动了各大互联网公司 HR 的神经。公司里一下子面试的任务多了起来。正好借机会总结一下自己毕业后作面试官以来参与若干场技术面试的一点心得,分享一下。        当好一个面试官其实也很不容易,不但要练就一双火眼金睛,把优秀的人才和水货在短短的面试的几十分钟里分辨出来,同时面试官本身就是候选人观察公司的一个窗口。在面试中,面试官还要注意很多接人待

android4.4的Keyguard心得

在总结锁屏代码之前,有两个中心思想要铭记于心 A) KeyguardHostView就是我们最终所要展示的界面,所以不论用什么方法手段,都要将这个KeyguardHostView添加到窗口中,后续填充它,都是细节问题 B) 那么问题来了,通常我们将一个view添加到窗口中会用什么方法呢?          答案有两种 1 WindowManager.addView()  2 Lay

qt和VS动态库调用心得

1 动态库调用 1.1 QT动态库调用 1.1.1 创建一个动态链接库步骤 1)create C++类库 2).pro文件里增加路径DESTDIR= ..\MyDebug 3)编译 注:主要的不同,两点:增加了一个***_global.h和class***SHARED_EXPORT   1.1.2 调用动态链接库 1).pro文件里增加DESTDIR= ..\MyDebug,也可

系统开发心得感想

系统总结 到现在也是写了几个小系统了图书管理,通讯录,atm。也有着不小的收获,对系统开发多少是有了点认识。 1.首先需要将大体的类和每个类所要实现的功能构思一下然后将其以用大体的代码写出来不需要实现只要把函数名写出来明白每个函数之间的功能,用什么容器来存储操作数据如何才能使代码更加简洁,以及做好类之间的联系(数据文件的存写保证数据的准确性)。 然后整理思路按顺序将具体的代码写出来每个函数功能怎样

今天改bug的心得和最近学习的一些体会

昨天晚上Dan给了我一个bug,说是我的写的代码有问题,需要fix,但是我的代码曾经是经过测试的,而且code review也过了,QA也测试通过了,他提出的一个概念Inbox File System,我根本就没有听说过。所以,我昨天觉得很冤枉,所以就回了,我之前修改的ticket,而且是通过的,这个inbox的东西根本没有在原来的JIRA上面提起过。然后lixin给我找出来,我原来代码中间有个t

异常处理相关心得

这段时间发现异常捕获是非常重要的一个机制,之前光埋头写代码了,如今想来,除了代码之外,解决问题的能力也是非常重要的,而如何解决问题,异常的捕获不可或缺 @RestControllerAdvice @RestControllerAdvice 主要用于全局异常处理,它通常能够捕获由@Controller、@RestController 标注的类中抛出的异常,并对其进行统一处理,意味着从线程池中抛

并发心得

java线程分析 [url]http://irving-wei.iteye.com/blog/1260346[/url] tomcat经常无故挂掉,该如何定位问题 [url]http://www.iteye.com/topic/1121756[/url]

【开发心得】筑梦上海:项目风云录(2)

特别声明 这个长篇终于开了头,工作的节奏也不能耽搁,暂时也不知道何时才能收尾。人生漫漫,即使没有雷军们的成功,但是也有自己的一些小确幸。 特别声明一下,虽然这个长篇是基于真实经历,但其中有些内容纯属虚构,切勿对号入座。 项目经理是备胎 接着上次造轮子的事情说,虽然有人造轮子了,但是熟悉业务的工作必须我亲自去做了,毕竟他们都没有经历过项目锤炼,甚至还有刚刚毕业的学生。 民营企业想招聘到好学