视频的压缩方法:(三种帧)
为了视频尽可能的保持高效,视频数据通过不同的编码进行压缩。以帧为单位进行压缩,按照压缩中的不同作用可分类为:内帧(Intra-frames,I帧),预测帧(Predictive-frames,P帧),和双向预测帧(Bipredictive-frames,B帧)。B帧利用过去的和将来的包进行编码,在实时交互的视频中不会使用。
一个I帧包含一个完整的图片(经过空间压缩),像传统的静态图片文件。因此,I帧是独立的帧,解码时不依赖其他的帧。
P帧则是依赖性的帧,仅包含与之前一帧相比在图像上有所变化的部分(即,时序压缩)。所以,与I帧相比,P帧的压缩率更高,至于高多少,得取决于帧之间的变化量。因此,这减少了视频流传输的比特数。举个例子,下面的剪辑来自于一场下坡赛车比赛。视频中的绝大部分保持不变,除了移动部分,即汽车和观众,需要被编码为P帧的视频不变。
I帧以作为P帧的新参考点而被生成。通常在图像变化很大的时候创建一个I帧,如:平移、场景切换、大量动作、突然消失等场景发生时。
 
错误恢复机制:
其适用于各种丢包数量和链路延迟的错误恢复机制。主要是发生在数据传输过程中。
否定确认(NACK)
NACK在一多媒体数据流的分组丢失(这是一个通用的机制可以适用于音频和视频流)时由接收端产生。发送者以重发所请求的(如果仍然在其发送缓存中的)包的方式响应NACK ,并基于观察到的往返时间确认该数据包能在解码时及时到达接收端。
全内请求(FIR)
视频在WebRTC的会话中总是以一个I帧开始,然后发送P帧。但是,当有新的参与者中途加入会议会话时,很有可能接收到一系列P帧,但因缺少相应的I帧,它并不能解码。这种情况下,该接收端会发送一个FIR以请求一个I帧。
因此,在大的会议平台中,例如与会方达到100人时,在很短的时间间隔内加入或重新加入会议,每个参与者都会请求I帧以开始解码,取决于重新加入的频率,可能会导致发送方创建大量的I帧。
图片丢失提示(PLI)
图片丢失提示消息表明突发性的丢包影响到了一个或多个帧中的多个包。发送方可以通过重传这些包或者生成一个新的I帧以作出回应。但一般来说,PLI同时表现得像一个NACK和一个FIR,因此,通过使用PLI,接收端为发送端如何对该请求作出响应提供了更大的灵活度。
切片丢失提示(SLI)
切片丢失提示消息表明该包丢失影响到单个帧的部分(即,多个macroblock)。因此,当发送端接收到SLI消息时,它可以通过重新编码的方式纠正切片,停止部分帧解码错误的传播。

webrtc如何进行错误恢复的更多相关文章

  1. Android IOS WebRTC 音视频开发总结(七五)-- WebRTC视频通信中的错误恢复机制

    本文主要介绍WebRTC视频通信中的错误恢复机制(我们翻译和整理的,译者:jiangpeng),最早发表在[这里] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:blac ...

  2. 禁用 Windows 启动时错误恢复的“启动启动修复(推荐)”

    bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {current} recoveryenabled No

  3. WebRTC 音视频开发

    WebRTC 音视频开发 webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译 ...

  4. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  5. WebRTC 用例和性能

    WebRTC 用例和性能 实现低延迟.点对点传输是一项艰巨的工程挑战:有 NAT 遍历和连接检查.信令.安全.拥塞控制和无数其他细节需要处理.WebRTC 代表我们处理以上所有内容,这就是为什么它可以 ...

  6. NodeJS 错误处理最佳实践

    NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管.但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学.如果你实在没有耐心,那就直接绕过长篇大论跳到 ...

  7. RabbitMQ 连接断开处理-自动恢复

    Rabbitmq 官方给的NET consumer示例代码如下,但使用过程,会遇到connection断开的问题,一旦断开,这个代码就会报错,如果你的消费者端是这样的代码的话,就会导致消费者挂掉. u ...

  8. 翻译 - NodeJS错误处理最佳实践

    王龑 - APRIL 13, 2015 NodeJS的错误处理让人痛苦,在很长的一段时间里,大量的错误被放任不管.但是要想建立一个健壮的Node.js程序就必须正确的处理这些错误,而且这并不难学.如果 ...

  9. 嵌入式系统C编程之错误处理【转】

    转自:http://www.cnblogs.com/clover-toeic/p/3919857.html 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: ...

随机推荐

  1. laravel 跨库执行原生 sql 语句

    执行原生 sql 返回结果集

  2. Redis 如何实现持久化

    1.RDB 持久化,将 Redis 在内存中的的状态保存到硬盘中,相当于备份数据库状态. 2.AOF 持久化(Append-Only-File),AOF 持久化是通过保存 Redis 服务器锁执行的写 ...

  3. JQuery EasyUI 初始

    基于jQuery的用户界面插件集合 1. jQuery easyui提供了一个完整的组件的集合,包括强大的DataGrid,树网格,面板.用户可以使用他们一起,或者只是用一些组件,组合和构建他想要的跨 ...

  4. selenium——键盘操作

    很多键盘操作实际是没有意义的.

  5. 【easy】215. Kth Largest Element in an Array 第K大的数

    class Solution { public: int quicksort(vector<int>& nums, int start, int end, int k){ int ...

  6. bootstrap轮播图 两侧半透明阴影

    用bootstrap轮播图:Carousel插件,图片两侧影音实在碍眼,想去掉,首先发现有css里由opacity: 0.5这个东西来控制,全部改成opacity: 0.0,发现指示箭头也看不见了. ...

  7. Vue项目中使用webpack配置了别名,引入的时候报错

    chainWebpack(config) { config.resolve.alias .set('@', resolve('src')) .set('assets', resolve('src/as ...

  8. C语言对字符串去重

    # include <stdio.h> # include <string.h> char * getNewChar(char * str,char * newStr); in ...

  9. jade模板 注意事项

    1.   jade模板 语法 doctype html html head body header div 2.  添加内容:直接在标签后边加空格 直接写内容 如下: div  我要写的内容 3.  ...

  10. RC terms.

    ETA: estimated time of arrival DEA: 1-Leg: 2-Leg: FCC: L10N: LocalizatioN i18N: InternationalizatioN ...