osg编译ffmpeg插件

osg可以通过ffmpeg插件来实现播放视频的功能,但是在编译osg的时候要确保成功的完成才可以使用此插件。在编译的过程中有几点需特别注意,否则可能导致无法成功编译。

1、要正确选择ffmpeg的版本

首先要到https://ffmpeg.zeranoe.com/builds/win32/dev/下载ffmpeg的开发版,最小版本在3.2,这里也要特别注意,因为osg中的ffmpeg处理模块调用了ffmpeg开发库的相关接口,如果选择的版本不对应,会导致编译时候报诸如此类:error C2065: “PIX_FMT_YUVA420P”: 未声明的标识符,error C3861: “avcodec_alloc_frame”: 找不到标识符。。。等错误。osg3.4.0版本使用ffmpeg3.2及以上版本库的时候就会报这样的问题,所以尽量使用osg比较新的版本来避免此类问题。

2、在cmake配置的时候,要进行适当的修改和路径配置

修改OpenSceneGraph-3.6.3\CMakeModules\FindFFmpeg.cmake文件,在136行SET(FFMPEG_FOUND "NO")之后添加SET(STDINT_OK TRUE),同时确保CMake界面中的FFMPEG的FFMPEG_STDINT_INCLUDE_DIR为空。在cmake中选中Grouped,会看到一个ffmpeg的选项,正确选择ffmpeg的对应路径,以及反斜杠的问题。

3、inttypes.h问题

在common.h中可能会报无法打开包括文件:“inttypes.h”: No such file or directory的问题,解决如下:

注释掉#include <inttypes.h>

添加如下代码:

#if defined(WIN32)  && !defined(__MINGW32__) && !defined(__CYGWIN__)      
#define  CONFIG_WIN32      
#endif      
#if defined(WIN32) && !defined(__MINGW32__)  && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)      
#define EMULATE_INTTYPES      
#endif      
#ifndef EMULATE_INTTYPES      
#include  <inttypes.h>     
#else
typedef signed char int8_t;      
typedef  signed short int16_t;      
typedef signed int   int32_t;      
typedef  unsigned char  uint8_t;      
typedef unsigned short uint16_t;      
typedef  unsigned int   uint32_t;      
#ifdef CONFIG_WIN32      
typedef signed  __int64   int64_t;      
typedef unsigned __int64 uint64_t;      
#else /*  other OS */      
typedef signed long long   int64_t;      
typedef  unsigned long long uint64_t;      
#endif /* other OS */      
#endif /*  EMULATE_INTTYPES */

猜你喜欢

转载自blog.csdn.net/zhuquanfu/article/details/84635316