使用libavcodec播放媒体时出现分段错误

时间:2013-08-19 13:22:59

标签: c++ ffmpeg codec

我自己尝试使用libavcodec作为后端播放媒体。我下载了ffmpeg-2.0.1并使用./configure,make和make install进行安装。 在尝试运行应用程序播放音频文件时,我在检查第一个音频流时遇到分段错误。我的程序就像

AVFormatContext* container = avformat_alloc_context();
if (avformat_open_input(&container, input_filename, NULL, NULL) < 0) {
    die(“Could not open file”);
}

if (av_find_stream_info(container) < 0) {
    die(“Could not find file info”);
}

av_dump_format(container, 0, input_filename, false);
int stream_id = -1;
int i;

for (i = 0; i < container->nb_streams; i++) {
    if (container->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO) {
        stream_id = i;
        break;
    }
}
  

分段错误发生在if(container-&gt; streams [i] - &gt; codec-&gt; codec_type == AVMEDIA_TYPE_AUDIO)

我该如何解决这个问题?我在ubuntu 12.04工作。

1 个答案:

答案 0 :(得分:1)

您无需在开始时分配AVFormatContext

此功能{@ 1}}已弃用,您必须将其更改为avformat_find_stream_info

av_find_stream_info

此外,我不确定av_register_all(); avcodec_register_all(); AVFormatContext* container = NULL; if (avformat_open_input(&container, input_filename, NULL, NULL) < 0) { die(“Could not open file”); } if (avformat_find_stream_info(container, NULL) < 0) { die(“Could not find file info”); } // av_dump_format(container, 0, input_filename, false); int stream_id = -1; int i; for (i = 0; i < container->nb_streams; i++) { if (container->streams[i]->codec->codec_type==AVMEDIA_TYPE_AUDIO) { stream_id = i; break; } } 在这里是否有用......


编辑: 你尝试过这样的事情吗?

av_dump_format