视频播放及FFmpeg学习笔记

播放流程

视频播放器播放网络视频,需要经过以下步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地视频则不需要解协议。

视频播放及FFmpeg学习笔记_第1张图片
image

流媒体协议是服务器与客户端之间的通信遵循的规定.主要的流媒体协议有RTSP+RTP, RTMP,RTMFP,MMS,HTTP.

视频文件后缀(MP4,MKV,RMVB,TS,FLV,AVI等)格式代表封装格式,指的是将视频数据和音频数据打包成一个文件的规范。不能从文件后缀判断所使用的视音频编码标准。不同的封装格式对广泛的视音频编码标准的支持力度不同.

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流, 从而降低音频的数据量.一般情况下音频的数据量要远小于视频的数据量.音频的压缩编码标准包含AAC,WMA,MP3,AC-3等。音频编码的音质大致排名:AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

视频编码的主要作用是将视频像素数据(RGB,YUV)压缩成为视频码流,从而降低视频的数据量.视频的压缩编码标准则包含H.264,HEVC(H.265),MPEG4,MPEG2,VC-1,VP9,VP8等。

解码最重要最复杂,通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。参考

点播及直播

点播:根据用户需求播放相应视频节目。普遍采用HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式.HTTP协议不会出现丢包等现象,从而保证了视频的质量.直播:直接将视频内容实时发送给用户。普遍采用RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式.

软编码及硬编码

软编码:使用CPU进行编码。硬编码:不使用CPU进行编码,使用显卡GPU,专用的DSP、FPGA、ASIC芯片等硬件进行编码。软解码兼容性好,硬解码依赖各个厂家硬件实现所以兼容性不高。

H264协议帧

H264协议里定义了三种帧,全帧压缩编码帧是I帧,将全帧图像信息进行JPEG压缩编码及传输;参考之前的I帧生成的只包含差异部分编码的帧叫P帧,属于前向预测的帧间编码;参考前后的帧编码的叫B帧,双向预测内插编码帧,B帧传送的是它前面的I或P帧和后面的P帧两个参考帧之前的预测误差和运动矢量,压缩比最高。参考

中间数据

音频是wav,视频是yuv,图像是bmp

FFmpeg

FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能1,包含了libavcodec ─这是一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。

Ffmpeg 处理流程分层

协议层(Protocol Layer):该层处理的数据为符合特定流媒体协议规范的数据,例如http,rtmp,file等。封装层(Format Layer):该层处理的数据为符合特定封装格式规范的数据,例如mkv,mp4,flv,mpegts,avi等。编码层(Codec Layer):该层处理的数据为符合特定编码标准规范的数据,例如h264,h265,mpeg2,mpeg4等。像素层(Pixel Layer):该层处理的数据为符合特定像素格式规范的数据,例如yuv420p,yuv422p,yuv444p,rgb24等。参考:雷霄骅

YUV模型

YUV是颜色编码方式,Y(明亮度,即灰阶值),U(色度),V(浓度,即饱和度),UV用于指定像素的颜色。彩色电视采用YUV空间是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号,JPEG/MPEG均采用此格式.如果只有Y,则表示的图像就是黑白灰色图像。

RGB诉求于人眼对色彩的感应,YUV着重于视觉对于亮度的敏感程度。YUV主要用于优化色彩视频信号的传输。YUV相比RGB占用更少的频宽.RGB一个点需要24bit存储,而YUV的 YCbCr 4:1:1 采样格式平均只需要12bit.

YCbCr是YUV经过缩放和偏移的翻版,一般人们所讲 的YUV大多是指YCbCr,YUV中色调和饱和度分别用Cr和Cb表示,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异,Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

YUV采用格式很多,常用的有YCbCr 4:1:1,即每个点保存一个8bit亮度值,每2*2个点保存一个Cr和Cb值,所以采样后平均一个点仅需要12bits。

YUV420P三个分量分开存储,而RGB24格式的每个向量是连续存储的.

RBG与YUV可相互转换,转换公式如下:

视频播放及FFmpeg学习笔记_第2张图片
image

BMP图像内部实际上存储的就是RGB数据.

你可能感兴趣的:(视频播放及FFmpeg学习笔记)