1

我正在编写一个简单的程序,使用 libav 将任何输入音频文件解码为 pcm16/mono/wav 文件。或者,我认为这很简单。

经过一番努力,阅读了大量示例代码(如 avconv/avplay),我设法编写了一些应该可以工作的代码。

但是,它不起作用。解复用/解码部分似乎工作正常,但编码部分失败并显示以下消息:

mathematics.c:61: av_rescale_rnd: Assertion `c > 0' failed.

这是代码摘录:

printf("Fill Frame\n");
avcodec_fill_audio_frame(oframe, _oCodecCtx->channels, _oCodecCtx->sample_fmt, frame->data[0], frame->linesize[0], 0);
printf("Frame filled\n");
ret = avcodec_encode_audio2(_oCodecCtx, &opkt, oframe, &got_packet);
if (ret < 0) {
   printf("Error encoding audio frame\n");
   return 1;
}

错误出现前会显示“Fill Frame”和“Framefilled”。所以,我认为它是由avcodec_encode_audio2. 但是,此函数不会av_rescale_rnd在其源代码中调用。

那么问题来了:有没有办法知道是谁调用了这个函数,而无需修改/重新编译 libav 源代码?

4

0 回答 0