ffmpeg音频解码问题,声音总是断断续续的

IceCodingWorld 2014-02-04 01:48:29
最近想学一下ffmpeg和SDL,想参考这个例子把这部分代码移植到最新版ffmpeg和SDL里面。
http://dranger.com/ffmpeg/tutorial03.html
我现在用avcodec_decode_audio4进行解码,发现大部分视频解出来以后声音都是断断续续的,保存PCM文件以后发现也不能正常播放,看起来是解码出现了问题,希望各位大神们不吝赐教。

关键代码:
int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size) 
{
static AVPacket pkt;
static AVPacket pkt1;

uint8_t *out[] = { audio_buf };
int len1, data_size;
int got_frame = 0;
AVFrame *pAudioFrame = av_frame_alloc();
av_frame_unref(pAudioFrame);

for(;;)
{
while(pkt1.size > 0)
{
data_size = buf_size;
len1 = avcodec_decode_audio4(aCodecCtx, pAudioFrame, &got_frame,
&pkt1);
if(len1 < 0)
{
/* if error, skip frame */
pkt1.size = 0;
break;
}
pkt1.data += len1;
pkt1.size -= len1;
if(got_frame == 0)
{
/* No data yet, get more frames */
continue;
}
else
{
SwrContext *swrContext = swr_alloc();
swr_alloc_set_opts(swrContext, aCodecCtx->channel_layout, AV_SAMPLE_FMT_S16,
aCodecCtx->sample_rate, aCodecCtx->channel_layout, aCodecCtx->sample_fmt,
aCodecCtx->sample_rate, 0, NULL);
swr_init(swrContext);
swr_convert(swrContext, out, buf_size/aCodecCtx->channels/av_get_bytes_per_sample(AV_SAMPLE_FMT_S16),
(const uint8_t **)pAudioFrame->data,
pAudioFrame->linesize[0] / aCodecCtx->channels / av_get_bytes_per_sample((AVSampleFormat)pAudioFrame->format));

data_size = av_samples_get_buffer_size(NULL, aCodecCtx->channels, pAudioFrame->nb_samples,
AV_SAMPLE_FMT_S16, 0);

av_free(pAudioFrame);
av_free_packet(&pkt);
swr_free(&swrContext);
}
/* We have data, return it and come back for more later */
return data_size;
}
if(pkt.data)
{
av_free_packet(&pkt);
}

if(quit)
{
return -1;
}

if(packet_queue_get(&audioq, &pkt, 1) < 0)
{
return -1;
}
pkt1.data = pkt.data;
pkt1.size = pkt.size;
}
}

完整代码贴在这里:
http://codepad.org/8VzEA8Td
...全文
2759 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daxiebao 2016-03-22
  • 打赏
  • 举报
回复
你的视频延迟大了,音频缓冲区数据不够 就会用audio_buf_size = 1024;memset(audio_buf, 0, audio_buf_size); 数据 0000000填充音频区,声音就会断断续续
fansgq 2015-06-18
  • 打赏
  • 举报
回复
重新采样后还是有很大的杂音,怎么办???有哪位大神指点一下。
ywl0424151906 2015-04-20
  • 打赏
  • 举报
回复
重新采样成PCM?不太明白,可否指教,谢谢
引用 6 楼 IceCodingWorld 的回复:
新版ffmpeg解出来音频后需要重采样成PCM,已经解决 [quote=引用 5 楼 posato_jia 的回复:] 不知道楼主的问题解决了没有,我现在也遇到了音频解码的问题 用的最新的ffmpeg和sdl的api,音频解码播放,能听出个大概,但是噪音比较严重。也不知道问题出在哪里,纠结啊!
[/quote]
IceCodingWorld 2014-09-10
  • 打赏
  • 举报
回复
新版ffmpeg解出来音频后需要重采样成PCM,已经解决
引用 5 楼 posato_jia 的回复:
不知道楼主的问题解决了没有,我现在也遇到了音频解码的问题 用的最新的ffmpeg和sdl的api,音频解码播放,能听出个大概,但是噪音比较严重。也不知道问题出在哪里,纠结啊!
posato_jia 2014-03-04
  • 打赏
  • 举报
回复
不知道楼主的问题解决了没有,我现在也遇到了音频解码的问题 用的最新的ffmpeg和sdl的api,音频解码播放,能听出个大概,但是噪音比较严重。也不知道问题出在哪里,纠结啊!
oldmtn 2014-03-03
  • 打赏
  • 举报
回复
帮顶,我也想知道这个问题。 采用leixiaohua1020 雷霄骅做的版本的话是可以解决的。 但是ffmpeg的API更新了,就没有办法做了。。。
__cc__ 2014-02-19
  • 打赏
  • 举报
回复
我觉得是保存pcm出问题了
雷霄骅 2014-02-11
  • 打赏
  • 举报
回复 2
自己做的FFMPEG+SDL播放器,供参考 最简单的基于FFMPEG+SDL的音频播放器
钱国正 2014-02-07
  • 打赏
  • 举报
回复
帮顶,音频源是哪里来的?

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧