播放音频,设置好SDL_AudioSpec播放参数,然后由SDL回调函数进行解码和数据的拷贝,解码播放音频无需设置延迟,因为声卡播放音频是阻塞的
int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size)
{
static AVPacket pkt;
static uint8_t *audio_pkt_data = NULL;
static int audio_pkt_size = 0;
static AVFrame frame;
int len1, data_size = 0;
for(;;)
{
//while循环解码,直到将Packet中的多个音频帧数据解码完成了,再读取下一个包,每次解码一个音频帧数据后饭后解码后的大小,如果一直未解码出数据,则直到将该packet解码完
//了后都没有解码出数据,则读取下一个包,一直到有数据解码成来后再返回解码成功后的数据大小
while(audio_pkt_size > 0)
{
int got_frame = 0;
len1 = avcodec_decode_audio4(aCodecCtx, &frame, &got_frame, &pkt);
if(len1 < 0)
{
//解码失败,则跳过该包数据,解码下一包数据
audio_pkt_size = 0;
brea