-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 に答える