转自:http://blog.csdn.net/Stone_OverLooking/article/details/77752076

继续上文讲解:

3)

标准的RTP头结构如下所示:

其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:
1).当前包所在的Group组序号,码流由连续的Group组成,每个Group拥有自己的唯一序号。(仅仅是小范围的唯一,序号大于255时,计数清零)
2).当前包所在的Group组大小
3).当前包在Group内的位置
RTP头中的7bit的PT字段标示负载的类型,对于标准类型如音频AAC、视频H264其参考值列出在RFC3551中。RTP负载除了音视频数据外还包冗余包,为此我们指定一个自定义的FEC冗余包类型,这样方便接收端做区分处理。
发送端对一组待发送的应用层数据进行FEC编码并RTP打包发送,其流程如下所示:
图中P1~P8代表外层传入本模块的原始媒体数据包,r1~r3代表冗余包。本示例中一个Group有8个媒体包外加3个冗余包组成。当模块传入媒体包p时,进行RTP封装后发出,同时存入模块内部队列。当Group的最后一个媒体包P8发送完毕时,
对队列中存放的各P1~P8进行FEC编码生成冗余包r1~r3并RTP打包发送。如此循环,直至处理所有输入数据包,Group与Group之间相互独立的,他们的大小包数可以不同,比如前一个Group为(8,3)组合,下一个Group可以为(8,4)组合,
我们提供了一种动态冗余度的的模式,支持发送端根据接收端的网络接收情况动态调整冗余度,已达到最佳的服务质量。比如信道条件较差,接收方丢包率上升,发送端可以调高冗余度,以增强抗丢包能力;反之,如果接收方丢包率很低,
发送端则可以降低冗余度,以节省网络带宽,所有的这些处理都封装到了本模块中,实现了对用户透明。
接收端进行FEC解码以实现丢包数据的恢复,其处理流程如下所示:
本例子中P4媒体包在网络传输过程中丢失,下面说明其接收端FEC解码的处理流程。
当接收到该Group的P1、P2、P3包时,因为他们没丢失,可以直接输出给应用层,如此同时在本地对流缓存一份,以供后续可能的FEC解码使用(后续Group内若无丢白,则缓存数据清空)。
当收到P5包时,可以根据Group包序号判断出P4包出现丢失,此时停止本Group数据的输出,P5存入本地队列。
当收到P6。。。继续直至收到r1时,满足了丢包恢复的条件:
收到的媒体包数+收到的冗余包数 >= Group原始媒体包数
对P1、P2、P3、P5、P6、P7、P8、r1进行FEC解码处理,得到P4包数据。因为之前已经输出了P1~P3,此处只需输出P4~P8.
当继续收到冗余包r2、r3时,可以直接丢弃。
如果收到的媒体包数加上冗余包数小于Group原始媒体包数,本Group的丢包无法恢复,系统直接按序输出收到的包。
需要说明:当网络没有丢包时,本模块不会引入延时。当网络出现丢包时,将不得不等到本组FEC恢复完成后再继续输出,因此会引入一定延时,这是FEC的代价之一。
 

FEC详解三的更多相关文章

  1. .NET DLL 保护措施详解(三)最终效果

    针对.NET DLL 保护措施详解所述思路完成最终的实现,以下为程序包下载地址 下载 注意: 运行环境为.net4.0,需要安装VS2015 C++可发行组件包vc_redist.x86.exe.然后 ...

  2. Android 之窗口小部件详解(三)  部分转载

    原文地址:http://blog.csdn.net/iefreer/article/details/4626274. (一) 应用程序窗口小部件App Widgets 应用程序窗口小部件(Widget ...

  3. WebSocket安卓客户端实现详解(三)–服务端主动通知

    WebSocket安卓客户端实现详解(三)–服务端主动通知 本篇依旧是接着上一篇继续扩展,还没看过之前博客的小伙伴,这里附上前几篇地址 WebSocket安卓客户端实现详解(一)–连接建立与重连 We ...

  4. logback -- 配置详解 -- 三 -- <encoder>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  5. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  6. Python操作redis字符串(String)详解 (三)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1.SET 命令用于设置 ...

  7. pika详解(三)SelectConnection及其他Connection

    pika详解(三)SelectConnection及其他Connection   本文链接:https://blog.csdn.net/comprel/article/details/94661147 ...

  8. View绘制详解(三),扒一扒View的测量过程

    所有东西都是难者不会,会者不难,Android开发中有很多小伙伴觉得自定义View和事件分发或者Binder机制等是难点,其实不然,如果静下心来花点时间把这几个技术点都研究一遍,你会发现其实这些东西都 ...

  9. Android WebView 开发详解(三)

    转载请注明出处   http://blog.csdn.net/typename/article/details/40302351 powered by miechal zhao 概览 Android ...

随机推荐

  1. device-pixel-radio

    移动web开发之像素和DPR 今天看到一个面试题,为iphone6s的自适应,答案是@media(min-device-width:414px) and(max-device-width:736px) ...

  2. Fiddler 常用功能总结

    1.fiddler相关配置   2.如何抓包 移动端 ①保持手机和电脑处于同一网络中 ②设置手机的代理为电脑当前所处网络的IP,端口号为:8888,eg:10.12.1.64:8888. ③ 启动ap ...

  3. ResultCode 自定义错误状态码

    public class ResultCode { // 成功状态码 public static final int SUCCESS = 1; // -------------------失败状态码- ...

  4. 远程执行shell

    目前我的需求是在我的hadoop集群搭建起来前,能定时做一下简易指标的监控,目前我的方案就是在我的server机上,定时执行远程脚本出指标数据,然后通过python脚本发送邮件. 远程执行脚本如下: ...

  5. 【noip模拟赛2】牛跳

    描述 John的奶牛们计划要跳到月亮上去.它们请魔法师配制了P(1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃.每种药水有一个“强度 ...

  6. IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)

    一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...

  7. word2013 如何设置从第三页开始编码 或 如何设置封面页和正文页页码不连续

    首先说明一下 “分节符”作用,它就是用来将整个文档分节的,添加一个分节符,文档就分成1.2两节:添加两个分节符,文档就分成1.2.3节. 当前页面具体是第几节,可以通过点击页眉页脚来查看: 从第三页开 ...

  8. 数据包编辑工具bittwiste

    数据包编辑工具bittwiste   bittwiste是数据包重放工具bittwist的一个工具.该工具可以编辑修改PCAP抓包文件.该工具提供数据包过滤功能,如根据范围和时间过滤.同时,该工具支持 ...

  9. Win10 主题 美化 动漫

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha  313134555@qq.com High School D×D 塔城白音Win7主题+Win8主题+Win10主题 Win10 ...

  10. db 文件 查看 打开 工具 db 中文 版 navicat 中文

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ======= db 中文 版 navicat 中文 ======= Navicatfo ...