算机技术领域中,『音视频技术』应该说算是较复杂的小门类。较复杂的东西有个简单的入门指引,或者有前辈带路是很重要的。
前阵子,因为项目中急需音视频技术,虽然网上资料看似很丰富,但对初学者来说,很多资料都是『硬入门』,一上来就摆弄一大堆具体的技术概念点(SPS,PPS,H264,HEAV…),让初学者一直处于半懂不懂的摸索怀疑状态。
更好的方式,假设称为『软入门』,应该是先简单理解到音视频的根本组成原理(即动画原理),再把具体而庞杂的技术点往上拼建,让新同学明白循序渐进,明白枝干的主次,对于他们未来的深入学习将是事半功倍的。
很多人小时候,应该玩过个小游戏,在笔记本上连续几页绘制一只动物前后迈脚,然后快速翻页,就有了如下图 pic-0的效果。这个过程就蕴含着,(视频)动画原理。音视频原理也是基于此。如再在翻页的时候,你学一声马叫”嘶…..”。不用怀疑,这个声音就是一段音频中采样的PCM了。至于为啥叫PCM,下面这几张图,结合几句说明应该足够解惑了。
图. pic-0
音视频的简单原理,就是一段序列播放的图片,再同步播放相应的序列音频采样片。如同 图pic-0到pic-3中所揭示的,里面就包含三个关键元素。
图. pic-1
图. pic-2
图. pic-3(动画能实现,基于两点基础,a、人眼和人脑的视觉缓存效应,b、计算机带来的图画运算速度)
音视频技术中一些专业的概念,跟我们平时交流中用到的一些词汇有一定区分。
图. pic-4
以下的概念就慢慢专业一些,可以逐步消化,用百科词条等来辅助理解。
视频解码的过程,就是将以某种编码方式(H264)进行编码的二进制数据,解码成YUV图片的过程,即“H.264->YUV”。 最广泛使用的莫过于FFmpeg这个开源的编解码套件,里面广泛涵盖了常见的编解码方式,还有封装格式(视频格式)。
针对到常用的H264编码方式,里面就涉及到一些具体的编码技术。
1、一帧图像、颜色模型:具体就涉及帧编码,场编码,RGB三原色颜色模型,YUV颜色模型,常用的有 YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1 和 YCbCr 4:4:4 这些YUV子分类颜色模型。 详细的介绍参考针对性的资料,这里就只做入门简述了。 《帧和场的概念》 《视频帧的类型》
2、H264码流格式: 码流里面就是装载着编码后的视频数据的结构载体。其它编码方式的码流格式也是类似 图pic-5的结构,里面就包括了一些编解码的参数集等关键信息。 详细的介绍可以了解。 《H.264码流结构解析》 《IDR、CRA、BLA、RASL、RADL、Gop》
图. pic-5(码流格式,即码流内数据组织方式)
3、帧内预测和帧间预测:因为视频的图像序列很有连续性,所以为了最大可能提高编码压缩效率,就有了『帧内预测和帧间预测』这种技术思路。简单来说帧内预测就是压缩单帧的大小,帧间预测就是根据A帧来预测B帧的变化,从而压缩了B帧。详细资料再多可自己参考,《帧内预测和帧间预测的比较》
图. pic-6(直观看出哪类帧柱形图比较高,帧预测关键标记在在动画『变动』区域)
4、流媒体协议:除了本地视频的播放,我们经常用到的就是视频的在线播放(点播、直播)。需要在线播放就需要使用到流媒体协议的支持,常见的流媒体协议有RTMP、HLS、Http-flv、RTSP等。《流媒体协议综述》
音频帧和视频帧处理的工艺都是类似的,差异之处就是音频采用的编码方式为AAC、MP3等,处理出来的基础单元为PCM(视频的基础单元YUV)。 需了解详细的同学,可以从百度百科词条『音频编码』开始。
图. pic-7(上手过Adobe Audition之后就会更直观明白音频文件的大致构成了)
ijkPlayer播放器是一个包括iOS、Android两个平台的播放器,是Bilibili网址基于FFmpeg的简易ffplay播放器来进行开发的。相比于更有名的VLC播放器,ijkPlayer更精简,代码量更小,更方便改造。
如果你是从事手机移动播放相关的工作,你会发现,当探索过VLC的庞杂模块还有各类繁多的基于ffmpeg的小开源播放器之后,ijkPlayer可能还是绕不开的开源方案。
ijjPlayer播放流程跟ffplay使用ffmpeg播放流程一样,区别就是ijkPlayer会根据具体的iOS、Android平台来使用该平台的硬解码工具,效率要比ffmpeg的软解码高出很多。 其实ijkPlayer架构很精简,可以从这些系列资料开始,然后阅读它的代码。 《ijkplayer系列(二) —— ijkplayer初始化流程》
图. pic-8
如果播放器是移动类的直播需求,其实很多国内的云直播解决方案sdk,比如七牛云直播,金山云直播,都是基于ijkPlayer进行修改的,比如iOS可以通过obj-c runtime特性剖开封装类中是不是含有IJKMediaPlayer这个类。2016年大热起来各种视频直播App,所以各种直播云服务也丰富了起来,这一类直播播放一般会比较重视的特性有,a、直播的秒开,b、避免花屏和弱网卡顿,c、直播的超低延迟以保证互动效率。捡有特点的来简单说明一些。
参考:
转自:http://www.ruoxu.me/yin-shi-pin-qi-fa