一、概述
1)流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如表所示。
2)封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。
3)视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。
4)音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。
二、流媒体协议
image.gif三、封装格式
image.gif除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。有些格式更“万能”一些,支持的视音频编码标准多一些,比如MKV。而有些格式则支持的相对比较少,比如说RMVB。
四、视频格式
不同编码规则的对比
熵编码:如果要求编码过程中不丢失信息量,即要求保存信息熵(对信息量多少的度量),这种信息保持编码叫熵编码,是根据消息出现概率的分布特性而进行的,是无损数据压缩编码。
I帧 P帧 B帧
1)I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
2)P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据) 3)B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
去块滤波:由于重构块的边缘像素与块内部像素相比恢复精度要低,块效应是目前压缩编码最明显的视觉失真之一(图像相关性受到破坏)。
H.264 编码技术
1)更高的编码效率:同H.263等标准的特率效率相比,能够平均节省大于50%的码率。
2)高质量的视频画面:H.264能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输是H.264的应用亮点。和MPEG2和 MPEG4 ASP等压缩技术相比,在同等图像质量下,采用H.264技术压缩后的数据量只有MPEG2的1/8,MPEG4的1/3。显然,H.264压缩技术的采 用将大大节省用户的下载时间和数据流量收费。
3)提高网络适应能力:H.264可以工作在实时通信应用(如视频会议)低延时模式下,也可以工作在没有延时的视频存储或视频流服务器中。
4)采用混合编码结构:同H.263相同,H.264也使用采用DCT(离散余弦变换)变换编码加DPCM的差分编码的混合编码结构,还增加了如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4x4二维整数变换等新的编码方式,提高了编码效率。
5)H.264的编码选项较少:在H.263中编码时往往需要设置相当多选项,增加了编码的难度,而H.264做到了力求简洁的“回归基本”,降低了编码时复杂度。
6)H.264可以应用在不同场合:H.264可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。
7)错误恢复功能:H.264提供了解决网络传输包丢失的问题的工具,适用于在高误码率传输的无线网络中传输视频数据。
8)较高的复杂度:264性能的改进是以增加复杂性为代价而获得的。据估计,H.264编码的计算复杂度大约相当于H.263的3倍,解码复杂度大约相当于H.263的2倍。
H.265 编码技术
1)H.265是新的编码协议,是H.264的升级版。H.265标准保留H.264原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。
2)H.265相比H.264最主要的改变是采用了块的四叉树划分结构,采用了从64x64~8x8像素的自适应块划分,并基于这种块划分结构采用一系列自适应的预测和变换等编码技术。
3)H265可以实现利用1~2Mbps的传输速度传送720P普通高清音视频。同样的画质和同样的码率,H.265比H2.64 占用的存储空间要少理论50%。
4)H265提供了更多不同的工具来降低码率,以编码单位来说,H264中每个宏块大小都是固定的16x16像素,而H265的编码单位可以选择从最小的8x8到最大的64x64。
较新的视频格式
RM格式
Networks公司所制定的音频视频压缩规范称之为Real Media,用户可以使用RealPlayer或RealOne Player对符合RealMedia技术规范的网络音频/视频资源进行实况转播,并且RealMedia还可以根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。这种格式的另一个特点是用户使用RealPlayer或RealOne Player播放器可以在不下载音频/视频内容的条件下实现在线播放。
RMVB格式
这是一种由RM视频格式升级延伸出的新视频格式,它的先进之处在于RMVB视频格式打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上合理利用比特率资源,就是说静止和动作场面少的画面场景采用较低的编码速率,这样可以留出更多的带宽空间,而这些带宽会在出现快速运动的画面场景时被利用。这样在保证了静止画面质量的前提下,大幅地提高了运动图像的画面质量,从而图像质量和文件大小之间就达到了微妙的平衡。
五、音频格式
图片MP3(MPEG-1 audio layer 3) 类型:Audio
制定者:MPEG
所需频宽:128~112kbps(压缩10~12倍)
特性:编码复杂,用于互联网上的高质量声音的传输,如MP3音乐压缩10倍,2声道。MP3是在综合MUSICAM和ASPEC的优点的基础上提出的混合压缩技术,在当时的技术条件下,MP3的复杂度显得相对较高,编码不利于实时,但由于MP3在低码率条件下高水准的声音质量,使得它成为软解压及网络广播的宠儿。优点:压缩比高,适合用于互联网上的传播 缺点:MP3在128KBitrate及以下时,会出现明显的高频丢失 应用领域:voip 版税方式:Free 备注:同MPEG-1 audio layer 1
WMA(Windows Media Audio)
类型:Audio
制定者:微软公司
所需频宽:320~112kbps(压缩10~12倍)
特性:当Bitrate小于128K时,WMA几乎在同级别的所有有损编码格式中表现得最出色,但似乎128k是WMA一个槛,当Bitrate再往上提升时,不会有太多的音质改变。
优点:当Bitrate小于128K时,WMA最为出色且编码后得到的音频文件很小。
缺点:当Bitrate大于128K时,WMA音质损失过大。WMA标准不开放,由微软掌握。
应用领域:voip
版税方式:按个收取
备注:WMA的全称是Windows Media Audio,它是微软公司推出的与MP3格式齐名的一种新的音频格式。由于WMA在压缩比和音质方面都超过了MP3,更是远胜于RA(Real Audio),即使在较低的采样频率下也能产生较好的音质,再加上WMA有微软的Windows Media Player做其强大的后盾,所以一经推出就赢得一片喝彩。
较新的音频格式
APE
一种新兴的无损音频编码,可以提供50-70%的压缩比,虽然比起有损编码来太不值得一提了,但对于追求完美音质的朋友简直是天大的福音。APE可以做到真正的无损,而不仅是听起来无损,压缩比也要比类似的无损格式要好。
六.代码实现对编码格式的控制
设置音频编码
MediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.xxx);
设置视频编码
MediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.xxx);
七.总结
要想得到小的压缩体积,高质量的音频视频文件,要不断优化编码算法也要有相应的硬件支持,不同的文件格式适用于不同的领域和情景,我们要根据应用场景选择相应的文件类型,好的编码格式终会发扬光大,落后的编码格式终究会淘汰。
如何学习音视频开发
关于如何学习音视频开发知识,最近小编有幸在字节跳动总监手里扒到这份音视频高级开发笔记,部分知识章节发布到了在知乎上竟然1000+点赞,今天就拿出来分享给大家。
以下是这份开发文档的部分章节:
阶段一:Android多媒体
第1章 三种方式绘制图片
第2章 AudioRecord录制PCM音频
第3章 AudioTrack播放PCM音频
第4章 Camera视频采集
第5章 MediaExtractor MediaMuxer 实现视频的解封装与合成
第6章 MediaCodec硬编解流程与实践
阶段二:OpenGL ES
第7章 OpenGL ES 基本概念
第8章 GLSL及Shader的渲染流程
第9章 OpenGL ES 绘制平面图形
第10章 GLSurfaceView源码解析&EGL环境
第11章 OpenGL ES矩阵变换与坐标系统
第12章 OpenGL ES之纹理
第13章 OpenGL ES 滤镜 (篇一)
第14章 OpenGL ES 实时滤镜
第15章 OpenGL ES粒子系统 - 喷泉
第16章 OpenGL ES粒子效果-烟花爆炸
阶段三::JNI&NDK
第17章 JNI与NDK的学习和使用
第18章 JNI - 引用类型、异常处理、函数注册
第19章 NDK构建方式 ndk-build与cmake
第20章 指针、内存模型、引用
第21章 运算符重载、继承、多态、模版
第22章 STL 之 容器
子系列 算法
第23章 算法系列 - 冒泡排序
第24章 算法系列-快速排序
第25章 算法系列-堆排序
第26章 算法系列-选择、插入排序以及STL中sort的实现
第27章 算法序列 - 二叉查找树
第28章 算法序列 - 平衡二叉树
第29章 算法序列 - 散列表
阶段四 : FFmpeg
第30章 音视频基础知识
第31章 FFMPEG常用命令
第32章 FFMPEG +OPENSL ES实现音频解码和播放
第33章 FFMPEG + OPENGLES 边解码边播放视频
本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...
网友评论