1.基本概念
视频的图像数据之间具有极强的相关性,即相邻的帧之间很相似,或者根本就几乎一模一样,也就是说有大量的冗余信息,为了视频能够减小体积,便于传输和保存,就有了视频压缩技术,具体的视频压缩技术有帧内图像数据压缩技术、帧间图像数据压缩技术、熵编码压缩技术等等。
通俗地说,就是视频中每一帧的图像数据都有相同的地方,在压缩时只保留与前一帧不同的地方及将数据中某些感觉不出的地方去除或者屏蔽掉,即冗余压缩。
2.硬编码和软编码
硬编码:
通过调用Android系统自带的Camera来录制视频,实际上调用了底层的高清编码硬件模块,也即显卡,具体就是采用Android自身提供的MediaCodec,不使用CPU。
软编码:
通过CPU计算能力来进行编码,如常见的C/C++代码,速度相对较慢。例如使用Android NDK编译H264生成so库,编写jni接口,在使用Java调用so库。
3.一般视频文件涉及到的三个参数
a.帧率
每秒的图片数。影响视频图面的流畅度,与流畅度成正比,帧率越大,视频越流畅;帧率越小,视频越有跳动感。由于人类眼睛的特殊生理结构,如果所看画面之帧率高于24的时候,就会认为是连贯的,此现象称之为视觉暂留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。当帧率达到一定值以后,再高的话,人类就不会察觉出有明显变化。
这个大家玩过游戏的差不多都知道这个概念哈。
b.分辨率
也就是帧图片数据的分辨率,图片的长度和宽度。
c.码率
把每秒显示的图片进行压缩后的体积,也就是视频数据传输时单位时间传送的数据位数,一般单位是kbps即千位每秒。顾名思义它影响体积,码率越大,体积越大。
码率 ✖ 时间 = 体积
帧率 ✖ 分辨率 = 压缩前每秒数据量
压缩比 = 压缩前的每秒数据量➗码率
一般我们对于视频是否清晰的概念,都是源于我们人眼观察得出的主观体验,大概可以概括为“没有马赛克”(哈哈)。简单地说,在码率一定的情况下,分辨率在一定范围内取值都是清晰的;同样地,在分辨率一定的情况下,码率在一定范围内的取值,都将是清晰的。
4.CDN
CDN的全称是Content Delivery Network,即内容分发网络。其基本思路就是极可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使得数据传输更加的快速、稳定。通过在网络各处放置节点服务器所构成的在现在的互联网基础之上的智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及和用户的距离、响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
5.RTMP协议
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议簇,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
RTMP协议是Adobe公司推出的实时传输协议,主要用于基于flv格式的音视频流的实时传输。得到编码后的视音频数据后,先要进行FLV包装,然后封包成rtmp格式,然后进行传输。
使用RTMP格式进行传输,需要先连接服务器,然后创建流,然后发布流,然后传输相应的视音频数据。整个发送是用消息来定义的,rtmp定义了各种形式的消息,而为了消息能够很好地发送,又对消息进行了分块处理,整个协议较为复杂。
文/风从影(简书作者)
原文链接:http://www.jianshu.com/p/7ebbcc0c5df7
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
以上是我对直播基本概念的粗浅整理,以加深自己对这部分的理解和记忆,也为了让自己养成写文章、勤整理的习惯,也是本人在简书上发布的第一篇文章,参考了一些网站的视频教程,以及大神的文章。在此表达一下感谢。
参考文章:Android手机直播(一)总览
网友评论