音视频基础知识学习笔记

1 视频编码:

视频编码就是指通过特定的压缩技术将某个视频格式文件转换成另一种视频格式的文件方式,视频传输中最重要的是编解码标准有国际电联的H.261/H.263/H.264/H.265,运动静止图像专家组的M-JPEG和国际标准化组织的运动图像专家组MPEG系列标准,此外还有网上广泛应用的Real-Networks的RealVideo/微软公司的WMV以及Apple的QuickTime等。

视频编码分为两个系列:

  • MPEG系列:视频编码方面主要是MPEGI(VCD使用)/MPEG2(DVD使用)/MPEG4(DVDRIP使用)/MPEG4 AVC(正热门)。其中音频方面主要是MPEG Audio Layer 1/2,MPEG Audio Layer 3,MPEG-2 AAC,MPEG-4 AAC;
  • H.26x系列:侧重网络传输。

 

2 音频编码:

常见的音频编码格式有AAC/MP3/AC3:

  • AAC:一种专为声音数据设计的文件压缩格式,与MP3不同,它采用全新的算法进行编码,更加高效,具有更高的“性价比”。采用AAC格式,感觉声音质量没有明显降低的前提下,可使文件更加小巧。优点相对于MP3,AAC的音质更佳,文件更小,AAC属于无损压缩格式。
  • MP3:是一种音频压缩技术,全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer 3)。被设计用于大幅度降低音频数据量。
  • AC3:全称为Audio Coding Version 3,提供了6个独立的声道。AC3环绕声系统由5个全频域声道和1个超低音声道组成,5个全频域包括左前/中央/右前/左后/右后,超低音声道主要是提供一些额外的低音信息,使一些场景(如爆炸/撞击等)的声音效果更好。

 

3 多媒体播放组件(Android/iOS):

Android多媒体播放组件包含MediaPlayer/MediaCodec/OMX/StageFright/AudioTrack等:

  • MediaPlayer:播放控制;
  • MediaCodec:音视频编解码;
  • OMX:多媒体部分采用的编解码标准;
  • StageFright:是一个框架,替代之前的OpenCore,主要用于做一个OMX层,仅仅对OpenCore的omx-component部分做了引用。StageFright是在MediaPlayerService这一层加入的,而OpenCore是并列的。StageFright在Android是以共享库的形式存在的(libstagefright.so),其中的module——NuPlayer/AwesomePlayer可用来播放音视频。NuPlayer/AwesomePlayer提供了多API,可以让上层的应用程序(Java/JNI)调用;
  • AudioTrack:音视频播放。

iOS多媒体播放组件包含VideoToolBox/AudioToolBax/AVPlayer等:

  • VideoToolBox:它是底层框架,提供对硬件编码器和解码器的直接访问。它为视频压缩和解压缩提供服务,并用于CoreVideo像素缓冲区中的存储的栅格之间的转换。这些服务是以会话对象的形式(压缩/解压缩和像素传输),作为核心基础(CF)类型提供的。不需要直接访问硬件编码器和解码器的应用程序都不需要直接使用VideoToolBox;
  • AudioToolBax:这是一个框架可以将比较短的声音注册到System Sound服务上。注册到System Sound服务上的声音被称为System Sounds。必须满足:播放时间不能超过30秒;数据必须是PCM或者IMA4格式;必须打包成Core Audio Format(.caf)/Waveform Audio(.wav)/Audio Interchange File(.aiff)三种格式之一。
  • AVPlayer:可以播放音频也可播放视频,在使用AVPlayer时需导入AVFoundation.framework框架,再次入头文件#import

 

4 常见的多媒体框架及解决方案:

常见多媒体框架方案有:VLC/FFmpeg/GStreamer等:

  • VLC:即Video LAN Client,是一款自由/开源的跨平台多媒体播放器及框架;
  • FFmpeg:多媒体解决方案,不是多媒体框架,广泛用于音视频开发中;
  • GStreamer:一套构建流媒体应用的开源多媒体框架。

 

5 音视频相关知识:

帧率(Frame Rate):用于测量显示帧数的度量,单位每秒显示的帧数(frame per second,fps)或赫兹,表示图像处理每秒能够更新的次数,高帧数使得更流畅更逼真的动画。30fps可以接受,提高到60fps明显提升交互感和逼真感,超过75fps就会不会明显察觉流畅性;

分辨率:指的是视频成像产品所形成的图像大小或尺寸;

刷新率:指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率。刷新通常指垂直刷新率,垂直刷新率表示屏幕上图像每秒重绘多少次。刷新率越高,图像就越稳定显示就越自然清晰对眼睛的影响越小。

编码格式:编码的目的是压缩数据量,采用编码算法压缩冗余数据编码格式有:MPEG/H.26X;

封装格式:把编码后的音视频数据以一定格式封装到一个容器,封装格式有MKV/AVI/TS等;

码率:就是比特率,是单位时间播放连续的媒体(如压缩后的音视频)的比特数量。比特率越高,带宽消耗就越多,文件大小(b) = 码率(b/s) * 时长(s);

画质与码率:视频质量和码率/编码算法都有关;

DTS和PTS:

  • DTS(Decode Time Stamp):主要用于标示读入内存中的比特流在什么时候开始送入编码去中进行编码的;
  • PTS(Presentation Time Stamp):主要用于度量解码后的视频帧什么时候被显示出来。

YUV和RGB:

  • YUV:是被欧洲电视系统所采用的一种颜色编码方式(属于PAL),是PAL和SECAM模拟才是电视制式采用的颜色空间模型。其中Y代表亮度,UV代表色差,U和V时颜色构成的两个分量;
  • RGB:是一种颜色空间模型,通过对红(R)/绿(G)/蓝(B)三个颜色通道的变化及相互之间的叠加来得到各式各样的颜色;

视频帧:

  • I帧:表示关键帧,这一帧画面的完整保存,解码时需要本帧数据就可以完成;
  • P帧:表示的是这一帧和之前的一个关键帧(或P帧)的差别,解码时需用之前缓存的画面叠加上本帧定义的差别生成最终画面(差别帧,P帧没有完整画面的数据,只有与前一帧画面差别数据);
  • B帧:双向差别帧,记录着本帧与前后帧的差别。要解码B帧,不仅需要之前的缓存画面还要解码之后的画面。通过前后画面数据与本帧数据的叠加取得最终的画面,B帧压缩率高,单解码时CPU会比较吃力;

音频帧:几乎所有视频编码格式都可以简单认为I帧就是编码后的一幅图像

  • PCM(未经编码的音频数据):不需要帧的概率,根据采样率和采样精度就可以播放;
  • AMR帧:规定没20ms的音频时I帧,每一帧音频都是独立的;
  • MP3帧:包含很多信息,如采样率/比特率等参数。具体是,音频数据帧个数由文件大小和帧长决定,每一帧的长度可能不固定,也可能固定,由比特率决定,每一帧由分为帧头和数据实体两部分,帧头记录了MP3的比特率/采样率/版本信息等,每一帧之间都是相互独立的。

量化精度:表示将模拟信号分成多少个等级,量化精度越高,音乐的声压振幅越接近原音乐。量化精度的单位是bit,可理解为一个采样点用多少bit表示;

声道(Sound Channel):是指声音在录制或播放时不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器器数量

  • 单声道:设置一个扬声器;
  • 立体声道:把单声道一个扬声器扩展为左右对称的两个扬声器,声音在录制过程中被分配到两个独立声道,从而达到很好的声音定位效果;
  • 4声道:规定了4个发音点左前/右前/左后/右后,听众被包围在中央。同时还增加一个低音音箱,以加强对低频信号的回放处理。4声道系统可以为听众带来来自多个不同的声音环绕,可以获得身临其境各种不同环境的听觉感受;
  • 5.1声道:源于4声道,将环绕声道一分为二,分为左环绕和右环绕,中央位置增加低音效果;
  • 7.1声道:在5.1声道系统基础上又增加了中左和中右发音点,就是在听着的周围建立起一套前后相对平衡的声场,增加了后中声场声道。

 

 

你可能感兴趣的:(Android音视频开发)