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 */

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章