视频压缩
视频编/解码其实就是一个视频压缩与解压缩的过程。原始数字视频数据量巨大,未经压缩不管是传输还是存储上都是不大现实的。
压缩原理
视频可以压缩,因为它有冗余。
- 空间冗余:图像相邻像素之间有较强的相关性
- 时间冗余:视频序列的相邻图像之间内容相似
- 编码冗余:不同像素值出现的概率不同
- 视觉冗余:人的视觉系统对某些细节不敏感
- 知识冗余:规律性的结构可由先验知识和背景知识得到
webRTC采用p2p的方式数据传输。由于NAT的存在破坏了IP端到端通信的能力,使得我们需要一些手段去找到隐藏在NAT和防火墙之后的浏览器(peer),即NAT穿透。ICE是这样的传输协议之一。
20多年前,Internet的基础协议Ipv4地址即将耗尽,而每天需要入网的设备成指数增长,数以亿计的设备上网问题需要解决。NAT(Network Address Translation) – 网络地址转换,一种几乎让ipv4起死回生的技术。
通常NAT通署在网络的出口,通过替换IP报文头部信息,将内部网络IP地址转换成出口IP地址提供与公网联接的能力。简单的来说就是把一个内部网络所有的请求都通过NAT发送与接收,以达到一个内部网络只使用一个或少个ip地址就能与Internet通信的目的。图示如下
- 网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;
- 网络访问只能先由私网侧发起,公网无法主动访问私网主机;
- NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换;
- NAT网关的存在对通信双方是保持透明的;
- NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。
我们平常笼统说的「视频格式」其实包含三个部分:视频编码、音频编码、容器格式。
我常所说的.mkv、.mp4、.webm指的是视频文件的容器格式。字面上理解就是他是一个存放视频编码、音频编码的一个容器,再通过特定的方式和规律组织起来,最后呈现给我们一个正常的音画同步的视频播放效果。比如说最常见的 .mp4 文件通常存放的就是H.264编码的视频流和 AAC 编码的音频流。通常,一个容器格式可以包含不同编码格式的音视频流;同样编码的音视频流也可以
VP8与 H264视频编码是目前webRTC支持的两种视频格式(VP9是VP8的最新标准,H265是H264的最新标准)。
作者:David Youd
翻译:阮一峰
阮老师地址:http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
原文网址:http://www.youdzone.com/signature.html
1.
鲍勃有两把钥匙,一把是公钥,另一把是私钥。
2.
鲍勃把公钥送给他的朋友们—-帕蒂、道格、苏珊—-每人一把。
并非所有的样式修改代价都是平等的。它们可能会触发布局或者绘制合成、可能只触发绘制与合成、也可能只触发合成。合成指的是合成层。
浏览器绘制是分层的,就像photoshop。 如果你接触过photoshop,应该会了解图层这个概念。设计一张psd设计稿往往会有很多图层。一来是方面分组管理。二来,如果把所有东西都绘制到一张图层上,那么后期修改就会非常痛苦。你修改一处地方可能会影响其他部分或者全部内容。如果你是设计师也不希望每一次修改都要重新绘制一次对吧。
举个例子:左侧滑出菜单是我们平时非常常见也非常实用的一个功能。如果只有一个层,那么菜单滑出的时候,影响了内容区域的布局,导致整个区域的layout、paint。往往我们会给菜单加上动画。现在,我们得到了一个1秒60帧的卡顿,只有高端设备才能流畅的完成这个行为。
如果我们把菜单和内容分成两个层。左侧菜单滑出的时候,仅绘制菜单层,那么内容层便不受影响。仅仅这样我们便得到了很大的性能提升,内容层无需被layout、point了。
分层真是太棒了。
你写的javascript代码并非就是浏览器执行的代码,现在浏览器引擎会重新编译你写的代码从而使代码运行速度更快。这个过程是通过即时编译器(Just In Time)完成的,简称JIT。JIT会在javascript运行过程中一点一点的优化代码,这是一个复杂又庞大的系统。对于 开发者我们不可能知道jit实际会运行什么代码。
mrale.ph 是一个在线网站,你可以查看JIT编译前后的代码。mrale.ph自己提供了一些demo,当然你也可以上传自己的代码。(截图里样式出现了一些问题,可能是我ss的问题)。你可以点击IR、Srouce来切换javascript代码和jit编译后的代码。甚至还提供了graph图解。你不需要理解jit代码,这只是chrome和其他v8引擎理解你写的js代码。我们在写代码的时候应该避免微优化,即不该写出自认为会让浏览器稍微更快速的运行的代码。因为我们不可能知道浏览器会如何处理这些代码,所以没有必要猜测。我们应该通过其他方式提高性能,不是把精力浪费在微优化之上。