iOS图形处理相关音视频开发视频开发

跨平台ffmpeg播放器开发(一)音视频基础

2016-09-22  本文已影响1712人  Link913

前言

学习之前请容许我悼念下雷霄骅前辈,他的博客是我学习视频编解码资料的主要来源,雷霄骅前辈博客地址.我们主要是来学习FFmpeg和SDL,学习的第一阶段我们要使用它们来做一款跨平台的播放器,作者是从事iOS开发的,所以会将这个跨平台播放器集成于iOS平台,各位有什么好的建议可以在文章下方留言.FFmpeg主要是为了处理音视频的编码,而SDL则是为了展示画面,至于具体的知识还是需要阅读雷哥的博客去学习.

零基础学习音视频编码

主要掌握几个常用的FFmpeg解码的函数,主要实现H.264->YUV的转换

掌握SDL显示视频的函数,实现YUV -> 设备屏幕

视频播放器原理

封装格式(MP4,RMVB,TS,FLV,AVI)

封装格式 最有代表性的两种封装格式

视频编码数据(H.264,MPEG2,VC-1)

几种视频编码 H.264格式简介

IPB

视频流中的每一张静止的画面其实都是一帧,在压缩的算法中IPB算是一种比较常见的算法了.I帧是关键帧表示一副画面的完整数据,所以解码的时候只需要自身就可以完成,P帧是差别帧表示当前画面和上一幅画面的区别,上一幅画面的数据IPB三种帧都有可能,他的解码依赖于上一帧数据,最终实际上还是要依赖I帧才能实现解码.B帧是双向关键帧,表示该画面数据与上一帧和下一帧的区别,所以解码的时候我们需要对他的前后帧都进行解码,优点是压缩率高,但是处理起来计算机的处理负担会比较大.

从上面的解释看,我们知道I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。但网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。 一般平均来说,I的压缩率是7(跟JPG差不多),P是20,B可以达到50,可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

上面这段话参考自CSDN Rachel-Zhang博主的一篇文章.

H.264压缩算法中IPB帧

音频编码数据(AAC,MP3,AC-3)

音频编码数据 AAC格式简介

视频像素数据(YUV420P,RGB)

视频像素数据 RGB格式简介 YUV格式简介

音频采样数据(PCM)

音频采样数据 PCM格式简介

声波其实是一个连续的模拟信号,我们如果想在计算机中对他进行处理,那么必须要将他转换为数字信号,我们对这个连续的模拟信号(类似正弦波)进行每隔一定的时间就进行取点,获取到该点的纵坐标值,然后将这些点用平滑的曲线连接起来,就能完成模拟信号转数字信号,当然我们还要对其中的噪声等因素进行处理,这些都是后话,这个采样的时间间隔越短我们所转化的数字信号的还原程度就越高.采样率我们一般根据人耳的识别频率以及奈奎斯特定理设为44.1kHZ,PCM格式也是不包含文件头的,所以我们直接播放时要将它的采样率和采样精度设置好,否则就会出问题.

上一篇 下一篇

猜你喜欢

热点阅读