基于libmad 的简单MP3流媒体播放器的实现

http://tech.ddvip.com   2007年03月10日    社区交流

本文详细介绍基于libmad 的简单MP3流媒体播放器的实现

  如果缓冲区最后一个 MPEG 数据帧只有部分数据包括在缓冲区中,那么 struct mad_stream 中的 next_frame 域指到不完整数据的开始地址。由于缓冲区的 MPEG 数据帧不一定完整,所以不完整的 MPEG 帧的数据必须拷贝到下一次解码操作的缓冲区中,进行再次解码。这里我们还看到 bufend 指向缓冲区数据的最后地址,也就是最后一字节的地址加 1 的位置。mad_stream.bufend – mad_stream.next_frame 就是剩余的未被解码的 MPEG 帧的数据的字节数量(假设此帧在缓冲区中不完整)。mad_stream 的 error 域用来记录操作 mad_stream 得到的错误代码。错误代码在 mad.h 中有很详细的定义。

  清单 2:错误代码在 mad.h 中的详细定义

struct mad_synth {
 mad_fixed_t filter[2][2][2][16][8]; /* polyphase filterbank outputs */
               /* [ch][eo][peo][s][v] */
 unsigned int phase;        /* current processing phase */
 struct mad_pcm pcm;      /* PCM output */
};

  mad_synth 中的关键域 pcm 保存解码和合成后得到的 PCM 数据。

  清单 3:mad_synth 中的关键域

struct mad_pcm {
 unsigned int samplerate;    /* sampling frequency (Hz) */
 unsigned short channels;    /* number of channels */
 unsigned short length;     /* number of samples per channel */
 mad_fixed_t samples[2][1152];  /* PCM output samples [ch][sample] */
};

  struct mad_pcm 定义了音频的采样率、每个声道个数以及最后的 PCM 采样数据。这些参数可用来初始化音频设备。

责编:豆豆技术应用

正在加载评论...