FFmpeg avformat_open_input无效:处理输入时找到无效数据

时间:2016-09-29 19:35:04

标签: visual-c++ visual-studio-2015 ffmpeg

这是我第一次使用FFmpeg。我尝试使用avformat_open_input打开的每种类型的媒体文件都会返回"处理输入时发现的无效数据" 。我使用的是32位FFmpeg Build版本:92de2c2。我根据这个答案设置了我的VS2015项目:Use FFmpeg in Visual Studio。这段代码可能出现什么问题?

#include "stdafx.h"
#include <stdio.h>

extern "C"
{
    #include "libavcodec/avcodec.h"
    #include <libavformat/avformat.h>
    #include <libavutil/avutil.h>
}

int main(int argc, char *argv[])
{
    AVFormatContext *pFormatCtx = NULL;
    avcodec_register_all();

    const char* filename = "d:\\a.mp4";
    int ret = avformat_open_input(&pFormatCtx, filename, NULL, NULL);
    if (ret != 0) {
        char buff[256];
        av_strerror(ret, buff, 256);
        printf(buff);
        return -1;
    }
}

1 个答案:

答案 0 :(得分:12)

您忘了拨打av_register_all,ffmpeg没有注册多路分配器/多路复用器。

#include "stdafx.h"
#include <stdio.h>

extern "C"
{
    #include "libavcodec/avcodec.h"
    #include <libavformat/avformat.h>
    #include <libavutil/avutil.h>
}

int main(int argc, char *argv[])
{
    AVFormatContext *pFormatCtx = NULL;
    av_register_all();
    avcodec_register_all();

    const char* filename = "d:\\a.mp4";
    int ret = avformat_open_input(&pFormatCtx, filename, NULL, NULL);
    if (ret != 0) {
        char buff[256];
        av_strerror(ret, buff, 256);
        printf(buff);
        return -1;
    }
}