-7

我下载了最新的 ffmpeg 源代码并成功安装在 Ubuntu 上但我未能编译一个简单的演示。(我确实包含了正确的头文件)

以下是错误消息,仅举几例:

error: unknown type name 'AVFrame'

error: 'NULL' undeclared (first use in this function)

error: request for member 'streams' in something not a structure or union

error: 'AVMEDIA_TYPE_VIDEO' undeclared (first use in this function)

error: expected expression before ')' token

你能帮我解决这个问题吗?

添加的内容:

例如,这是我的包含

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

int main(int argc, char *argv[]) {
AVFormatContext *pFormatCtx;
int i, videoStreamIdx;
AVCodecContext *pCodecCtx;
AVCodec *pCodec;
AVFrame *pFrame;
AVFrame *pFrameRGB;

例如 AVFormatContext 在 /usr/include/libavformat/avformat.h 中声明 错误消息框显示未知类型名称 AVFormatContext 但它怎么可能呢?

4

2 回答 2

1

对于 C++ 代码,

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

对于 C 代码,

#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/avutil.h>

C 和 C++ 编译成不同的代码集。

有关更多信息,请参阅此答案:https ://stackoverflow.com/a/67930/6180077

在 main() 或程序的最开始,需要初始化 ffmpeg 库

av_register_all()  /*Initializes libavformat and registers all the muxers, demuxers and protocols. */

在编译程序时(比如 Ubuntu)

-L/$HOME/ffmpeg_build/lib/ -L/usr/lib/x86_64-linux-gnu/ -I/$HOME/ffmpeg_build/include/ myprogram.cpp -o executableFile -lavdevice -lavfilter -lswscale -lavformat -lavcodec -lavutil -lswresample
于 2016-10-31T12:39:33.693 回答
0

在 Qt 中,您可以将此行添加到.pro文件中,以强制编译器在那里查找头文件。将其更改为存储头文件的文件夹。

INCLUDEPATH += <your path>

于 2013-05-07T14:56:13.933 回答