FFmpeg 视频播放的原理

视音频技术主要包含以下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。

如果要播放一个互联网上的视频文件,需要经过以下几个步骤:
    解协议 - 解封装 - 解码视音频 - 视音频同步
    
如果播放本地文件则不需要解协议,为以下几个步骤:
    解封装 - 解码视音频 - 视音频同步。
    
他们的过程如图所示。

  1. 解协议

    就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。


  2. 解封装

    将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。


  1. 解码

    就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。


  2. 视音频同步

    根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。



基本概念扫盲 : 
  1. 视频播放原理
  2. 流媒体协议
  3. 视频封装 & 解封装
  4. 音视频编解码 
参考文章 雷神 : https://blog.csdn.net/leixiaohua1020/article/details/18893769

文章来源以及参考:

雷霄骅 - 视频播放器原理