int audio_decode_frame(VideoState *is, uint8_t *audio_buf, int buf_size, double *pts_ptr)
{
int len1, data_size,n;
AVPacket pkt = is->audio_pkt;
double pts;
for(;;)
{
while(is->audio_pkt_size > 0)
{
data_size = buf_size;
// int16_t * audio_buf = new int16_t[AVCODEC_MAX_AUDIO_FRAME_SIZE * 2];
len1 = avcodec_decode_audio3(is->audio_st->codec,(int16_t *)audio_buf, &data_size, &pkt);
if(len1 < 0)
{
/* if error, skip frame */
is->audio_pkt_size = 0;
break;
}
is->audio_pkt_data += len1;
is->audio_pkt_size -= len1;
if(data_size <= 0)
{
/* No data yet, get more frames */
continue;
}
pts = is->audio_clock;
*pts_ptr = pts;
n = 2 * is->audio_st->codec->channels;
is->audio_clock += (double)data_size / (double)(n*is->audio_st->codec->sample_rate);
/* We have data, return it and come back for more later */
return data_size;
}
if(pkt.data)
av_free_packet(&pkt);
if(is->quit)
{
return -1;
}
/* next packet */
if(packet_queue_get(&is->audioq, &pkt, 1) < 0)
{
return -1;
}
if(pkt.data == flush_pkt.data)
{
avcodec_flush_buffers(is->audio_st->codec);
continue;
}
is->audio_pkt_data = pkt.data;
is->audio_pkt_size = pkt.size;
/* if update, update the audio clock w/pts */
if(pkt.pts != AV_NOPTS_VALUE)
{
is->audio_clock = av_q2d(is->audio_st->time_base)*pkt.pts;
}
}
}
8 个解决方案
#1
我也遇到了相同的问题,请问楼主解决了么?
#2
ffmpeg-1.2 支持AAC的解码嘛? 是内置的还是应用外部的呢?
#3
楼主,你搞定了吗?我也遇到这样的问题,不知道哪里出问题了,求救, QQ 707763833
#4
我也遇到相同的问题,求解~~~
#6
我也遇到类似的问题,有解决了的吗
#7
#8
我也遇到类似的问题,完全按照教程弄得,结果噪声太大,求解决
#1
我也遇到了相同的问题,请问楼主解决了么?
#2
ffmpeg-1.2 支持AAC的解码嘛? 是内置的还是应用外部的呢?
#3
楼主,你搞定了吗?我也遇到这样的问题,不知道哪里出问题了,求救, QQ 707763833
#4
我也遇到相同的问题,求解~~~
#5
我自己写的基于FFMPEG的音频播放器,希望对你有帮助~
http://blog.csdn.net/leixiaohua1020/article/details/10528443
http://blog.csdn.net/leixiaohua1020/article/details/10528443
#6
我也遇到类似的问题,有解决了的吗
#7
#8
我也遇到类似的问题,完全按照教程弄得,结果噪声太大,求解决