如何在Qt4中使用libavcodec访问单个视频帧?
通过编译这个示例并验证视频流可以被libavcodec解码后,我将源代码移植到我的C++程序中。现在,av_open_input_file()
无法打开我的视频文件(返回错误码:-2)。
当前的调用如下:
...
// Register all formats and codecs
avcodec_register_all();
// Open video file
QString videoFileName("/absolute/path/to/video.avi"); // from somewhere else in the application
const char* fileName = videoFileName.toStdString().c_str();
int err = 0;
if((err = av_open_input_file(&pFormatCtx, fileName, NULL, 0, NULL)) != 0)
{
doErrorHandling(err, fileName); // err = -2
}
当我在调试器中查看const char* fileName
时,它看起来是正确的。我是否在混合C和C++代码方面犯了一些基本错误(首次尝试时,我只是将示例代码转储到类的构造函数中)?
注意:为了让应用程序编译,我像这样包含头文件:
extern "C"
{
#define __STDC_CONSTANT_MACROS // for UINT64_C
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}
我还尝试将视频文件的路径硬编码到应用程序中,但没有成功:
av_open_input_file(&pFormatCtx, "/home/bjoernz/video.avi", NULL, 0, NULL);
我成功使用 g++
编译并运行了这个示例 (avcodec_sample.0.5.0.c)。
videoFileName.toLocal8Bit().constData()
来获取文件名。为了方便调试,我先将其赋值给一个变量。 - bjoernz