Android FFMPEG音视频开发(一)

本文参考:https://blog.csdn.net/leixiaohua1020/article/details/18893769

突然想学习Android音视频领域,所以在网上找博客看,遇见了上面这篇博客,通读了一遍,写的真好。又翻看了作者其它的博客,很厉害。

淡泊明志 宁静致远

虽然作者已经写的很好了,但我还是想参考作者的再写一遍,一来是关注点不一样,二来是由于我的学习方法——费曼学习法。

1.音视频基础知识
1.1 封装格式与视音频编码标准

我们会见到各种各样的视频格式,mp4,rmvb,mkv,avi等等许多格式,这些都被称为封装格式。封装格式就是就是把视频数据和音频数据打包成一个文件的规范,这很容易理解,对内容封装的格式。

封装格式封装了视频数据与音频数据,因为一部视频既要又画面也要有声音。当然,视频数据与音频数据也要有自己的编码格式。

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

视频编码格式一览

名称 推出机构 推出时间 目前使用领域
HEVC(H.265) MPEG/ITU-T 2013 研发中
H.264 MPEG/ITU-T 2003 各个领域
MPEG4 MPEG 2001 不温不火
MPEG2 MPEG 1994 数字电视
VP9 Google 2013 研发中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微软平台

H.264只是一个编码标准,不是一个具体的编码器,H.264只是给编码器的实现提供参考,而其中性能最好的当属x264编码器。

这是它们编码效率的对比:HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。

音频编码格式一览

名称 推出机构 推出时间 目前使用领域
AAC MPEG 1997 各个领域(新)
AC-3 Dolby Inc. 1992 电影
MP3 MPEG 1993 各个领域(旧)
WMA Microsoft Inc. 1999 微软平台

近年来并未推出全新的音频编码方案,可见音频编码技术已经基本可以满足人们的需要。音频编码技术近期绝大部分的改动都是在MP3的继任者——AAC的基础上完成的。

这是音频编码之间的比较:AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

下表是不同封装格式支持的视频编码与音频编码。

1.2视频播放器原理

对一个视频文件的构成了解之后,想必你大概可以猜出视频播放器播放视频的流程了。

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。
Android FFMPEG音视频开发(一)_第1张图片
从图中可以看到,整个流程很简单,如同拆一个礼物盒子,一步一步来,总能见到东西。

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

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

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

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

1.3流视频,直播与点播

流媒体协议是服务器与客户端之间通信遵循的规定。

主要流媒体协议一览

名称 推出机构 传输层协议 客户端 使用领域
RTSP+RTP IETF TCP+UDP VLC, WMP IPTV
RTMP Adobe Inc. TCP Flash 互联网直播
RTMFP Adobe Inc. UDP Flash 互联网直播
MMS Microsoft Inc. TCP/UDP WMP 互联网直播+点播
HTTP WWW+IETF TCP Flash 互联网点播

直播平台参数对比

名称 协议 封装 视频编码 音频编码 播放器
CNTV 私有
华数TV RTMP FLV H.264 ACC Flash
六间房 RTMP FLV H.264 ACC Flash
中国教育电视台 RTMP FLV H.264 ACC Flash
北广传媒移动电视 RTMP FLV H.264 ACC Flash
上海IPTV RTSP+RTP TS H.264 MP2 机顶盒

直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。

点播平台参数对比Android FFMPEG音视频开发(一)_第2张图片
点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP作为点播协议有以下两点优势:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。

你可能感兴趣的:(Android)