【问题标题】:Buffer error in avcodec_decode_audio4()avcodec_decode_audio4() 中的缓冲区错误
【发布时间】:2012-03-12 18:54:50
【问题描述】:

我已将我的 ffmpeg 版本升级到最新提交,现在我可以看到音频解码功能 avcodec_decode_audio3 已被弃用,当我使用新功能 avcodec_decode_audio4 时,根据其中所需的更改,我得到错误为

[amrnb @ 003a5000] get_buffer() failed.

我无法找到导致此错误的原因。任何人都有使用这个新功能的示例:

avcodec_decode_audio4((AVCodecContext *avctx, AVFrame *frame,int *got_frame_ptr, AVPacket *avpkt);

【问题讨论】:

  • 我对 AAC 文件也有同样的问题。你最终找到解决方案了吗?

标签: audio ffmpeg decoding


【解决方案1】:

检查来自 ffmpeg 源代码的 decoding_encoding.c 示例。它使用函数avcodec_decode_audio4

【讨论】:

  • 谢谢,我使用了相同的示例,只是简单地复制粘贴代码,len 仍然为 -22,它返回错误,因为 get_buffer() 失败。
  • 这是什么媒体?可以用ffmpeg解码,还是用ffplay播放?
  • 它的 amr_nb 音频。我已经使用具有 audio3 功能的以前版本的 ffmpeg 成功解码。此外,我尝试使用 ffmpeg 的最新 Windows 二进制文件,并且能够解码和播放解码后的音频。仅当我尝试在我的应用程序中使用 audio4 功能对相同媒体进行解码时,才会出现此问题。
  • 奇怪,avcodec_decode_audio3 打电话给avcodec_decode_audio4,见util.c。您确定输入缓冲区有足够的大小并且没有不足吗?此外,它会在第一次或第二次解码调用时失败,还是稍后的某个时间?
  • 是的,我也检查过,inbuf 与 inbuf[AUDIO_INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];所以,输入输入缓冲区是 avpkt.size = fread(inbuf, 1, AUDIO_INBUF_SIZE, f);因此它应该足够了。此外,它在第一次解码调用时第一次失败。错误似乎很奇怪。你知道这个错误的任何具体原因吗?
猜你喜欢
  • 2017-05-12
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多