赘述一下音频的几个最基本要素:
  1. 声道
    能够理解为每个音频含有几个能够相互独立的音频。
    如果你愿意,能够用双声道,能够存两首歌,左耳右耳听不相同的歌曲,体会双耳互博。
  2. 采样率
    每秒采样的次数。比如44100Hz便是每秒收集44100次音频的数据。
    如果你愿意,能够用2Hz,别离在一秒的第0ms和500ms收集两次,特别省存储。
  3. 位宽
    每次采样的数据用多大的空间来存储。比如16bit,便是运用16个位来存储一次采样的数据,那便是能够有2^16的变化。
    如果你愿意,能够用1bit,对音箱设备来讲只有响或者不响两个选择。
FFMpeg的一些参数

在运用ffmpeg解码音频的时分会有一些参数让咱们感到困惑,别离来做个记录

  1. AVFrame->nb_samples / AVCodecParameters->frame_size: 每帧含有多少个采样数。FFMpeg解码的时分是一帧一帧读取的,nb_samples代表了这一帧里边含有多少个采样数。
  2. sample_rate

上面说过的采样率

sample_rate = 44100Hz的采样率下如果nb_samples = 1152,那么该音频每秒有44100 / 1152 = 38.28125个Frame,所以能够依据这个来判断出当时frame的实在时刻。
当然这只是获取当时帧时刻的一种方式,还有其他的方式来确认frame的当时时刻。

  1. time_base
    类似于上面的用采样率作为时刻刻度,ffmpeg用来做同步的时刻单位叫做time_base时刻基。
    如咱们认为原子是物质的最小单位相同,那比较两个物体的巨细能够用含有多少个原子来表明,含有2个原子就比1个原子来的大。又比如咱们确认一块屏幕的分辨率巨细是有多少个像素。那么在这些例子里,原子跟像素就相当于他们标准里的time_base
    咱们把一秒分红1000份,那么time_base便是一毫秒,那评判时刻长短便是含有多少个1ms,咱们只需要知道每一帧应该在第X毫秒出现就能够确认这一帧应该播映的时刻了,这个X便是下面的pts
  2. pts
    如上面所说, pts表明在第多少个时刻基当时帧应该播映出来。

所以确认当时帧的时刻应该是pts * time_base,ffmpeg中获取time_base应该运用av_q2d(time_base),所以是pts * av_q2d(time_base),下面的一张图用来做参考:

音频知识相关知识积累

展示了在一秒的时刻里,采样率,位宽,nb_samples,time_base,pts别离在其间的效果。