所以我试图在c ++中使用ffmpeg。我的代码是这样的:
#include <iostream>
extern "C"
{
#include "libavcodec\avcodec.h"
#include "libavformat\avformat.h"
#include "libswscale\swscale.h"
}
using namespace std;
#pragma comment(lib, "dev/lib/avcodec.lib")
#pragma comment(lib, "dev/lib/avformat.lib")
#pragma comment(lib, "dev/lib/swscale.lib")
int main()
{
avcodec_register_all();
av_register_all();
char inputFile[] = "video.mp4";
AVFormatContext *pFormatCtx;
if (avformat_open_input(&pFormatCtx, inputFile, NULL, 0) != 0) // exception occurs here
{
cout << "could not open file";
return -1;
}
}
此代码在发布模式下运行,但在调试模式下,我在avformat_open_input
处获得异常:
0x0000000074BC3C35(avformat-55.dll)中的未处理异常 ingrain.exe:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。
我直接从ffmpeg网站下载了dll和lib,并将它们包含在我的visual studio 2012项目中。
提前感谢。
答案 0 :(得分:4)
int avformat_open_input ( AVFormatContext ** ps,
const char * filename,
AVInputFormat * fmt,
AVDictionary ** options
)
参数
ps
:指向用户提供的AVFormatContext的指针(由avformat_alloc_context
)。可能是NULL
的指针,在这种情况下是AVFormatContext
由此函数分配并写入ps
。 请注意,用户提供的AVFormatContext
将在失败时释放。
您尚未初始化pFormatCtx
,要么使用avformat_alloc_context
进行分配,要么将其设置为nullptr
,以便avformat_open_input
自动分配error
。