omnimeeting配置全過程
最近的一個專案,做一個流媒體伺服器,考慮到要用到H.264和G.711編碼,調研使用omnimeeting方案,omnimeeting很早就出現了,以至於和它匹配的很多東西都跟新到新的版本,不能使用了,比如ffmpeg都跟新到0.10版本了,但是和omnimeeting配套使用只能是0.4.9版本以前的。
開源專案完全符合你的要求:Omnimeeting
音視訊採用了ffmpeg
影象處理使用了opencv
網路協議採用了live555
Omnimeeting是一個多平臺的C++ 視訊會議程式,能通過RTSP協議做到實時的攝像/音訊流傳輸,支援人臉識別和跟蹤提供I轉換/傳送全方點陣圖像的API。
一、
Live555是一個為流媒體提供解決方案的跨平臺的C++開源專案,它實現了對標準流媒體傳輸協議如RTP/RTCP、RTSP、SIP等的支援。Live555實現了對多種音視訊編碼格式的音視訊資料的流化、接收和處理等支援,包括MPEG、H.263+、DV、JPEG視訊和多種音訊編碼。同時由於良好的設計,Live555非常容易擴充套件對其他格式的支援。目前,Live555已經被用於多款播放器的流媒體播放功能的實現,如VLC(VideoLan)、MPlayer。
liveMedia專案的原始碼包括四個基本的庫,各種測試程式碼以及IVE555 Media Server。
四個基本的庫分別是UsageEnvironment&TaskScheduler
UsageEnvironment 和TaskScheduler類用於事件的排程,實現非同步讀取事件的控制代碼的設定以及錯誤資訊的輸出。另外,還有一個HashTable類定義了一個通用的 hash表,其它程式碼要用到這個表。這些都是抽象類,在應用程式中基於這些類實現自己的子類。
groupsock類是對網路介面的封裝,用於收發資料包。正如名字本身,Groupsock主要是面向多播資料的收發的,它也同時支援單播資料的收發。Groupsock定義了兩個建構函式
Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,
Port port, u_int8_t ttl);
Groupsock(UsageEnvironment& env, struct in_addr const& groupAddr,
struct in_addr const& sourceFilterAddr, Port port);
前者是用於SIM(source-independent multicast)組,後者用於SSM(source-specific multicast)組。groupsock庫中的Helper例程提供了讀寫socket等函式,並且遮蔽了不同的作業系統之間的區別,這是在 GroupsockHelper.cpp檔案中實現的。
liveMedia庫中有一系列類,基類是Medium,這些類針對不同的流媒體型別和編碼。
各種測試程式碼在testProgram目錄下,比如openRTSP等,這些程式碼有助於理解liveMedia的應用。
LIVE555 Media Server是一個純粹的RTSP伺服器。支援多種格式的媒體檔案:
* TS流檔案,副檔名ts。
* PS流檔案,副檔名mpg。
* MPEG-4視訊基本流檔案,副檔名m4e。
* MP3檔案,副檔名mp3。
* WAV檔案(PCM),副檔名wav。
* AMR音訊檔案,副檔名.amr。
* AAC檔案,ADTS格式,副檔名aac。
OpenCv由一系列 C函式和少量 C++類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了影象處理和計算機視覺方面的很多通用演算法。
wxWidgets是一個開源的跨平臺的C++構架庫(framework),它可以提供GUI(圖形使用者介面)和其它工具
Cg(C for Graphcis)語言,是NVIDIA 與Microsoft 合作研發,旨在為開發人員提供一套方便、跨平臺(良好的相容性),控制可程式設計圖形硬體的高階語言
OpenGL(全寫Open Graphics Library)是個定義了一個跨程式語言、跨平臺的程式設計介面的規格,它用於三維圖象(二維的亦可)。OpenGL是個專業的圖形程式介面,是一個功能強大,呼叫方便的底層圖形庫。
FFmpeg是一個開源免費跨平臺的視訊和音訊流方案,屬於自由軟體,採用LGPL或GPL許可證(依據你選擇的元件)。它提供了錄製、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音訊/視訊編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec裡很多codec都是從頭開發的。
Microsoft DirectX SDK是DirectX程式設計的軟體。包含了開發尖端多媒體應用軟體不可或缺的開發工具,以及runtime、headers及程式庫、範例執行檔案、檔案、DirectX工具、並且同時支援C++以及 Visual Basic開發軟體.
DirectX可以開發出高效能實時的應用程式,可以直接訪問計算機中的硬體和將來系統中新的硬體裝置。DirectX在硬體和應用之間提供了一致的介面以減少安裝和配置的複雜性,並且使硬體的利用達到最優。利用DirectX提供的介面,程式設計師能充分利用硬體的特性而不需要考慮其具體細節。
Platform SDK (PSDK)
Windows SDK(WSDK)是用來支援32位和64位Windows平臺以及.NET框架程式設計模型的開發包。Windows SDK這個名字從Windows Vista開始使用,它包含以前Platform SDK中的所有內容,同時包含.NET框架的內容。
二、具體步驟見各個資料夾
↖第一步:下載live555程式碼
↖第二步:windows下編譯live555
1、修改目錄下的win32config檔案,TOOLS32=E:\Microsoft Visual Studio 9.0\VC,即保證這個路徑是你的Vs2008路徑。
2、編輯"LINK_OPTS_0 = $(linkdebug) msvcirt.lib" in win32config to "LINK_OPTS_0 = $(linkdebug) msvcrt.lib",由於編譯器所要LINK的執行庫不一樣了
3、修改groupsock/makefile.head,替換
"INCLUDES = -Iinclude -I../UsageEnvironment/include"為"INCLUDES = -Iinclude -I../UsageEnvironment/include -DNO_STRSTREAM".其他檔案下的makefile.head檔案做同樣修改。
4、執行genWindowsMakefiles.cmd生成VS能夠編譯的*.mak檔案
5、將以下內容儲存為live/compile.bat
call "E:\ Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
cd liveMedia
nmake /B -f liveMedia.mak
cd ../groupsock
nmake /B -f groupsock.mak
cd ../UsageEnvironment
nmake /B -f UsageEnvironment.mak
cd ../BasicUsageEnvironment
nmake /B -f BasicUsageEnvironment.mak
cd ../testProgs
nmake /B -f testProgs.mak
cd ../mediaServer
nmake /B -f mediaServer.mak
cd ../WindowsAudioInputDevice
nmake /B -f WindowsAudioInputDevice.mak
6、在命令列下執行compile.bat,就會看到很多編譯過程出現在CMD中了。
(需要用到live555中的已編譯庫)
注:
1、編譯的時候把C:\Program Files\Microsoft SDKs\Windows\v7.1中lib和include中檔案分別考到vs2008的E:\Microsoft Visual Studio 9.0\VC對應檔案中,再在命令列中執行compile.bat,產生了庫libBasicUsageEnvironment.lib、libgroupsock.lib、libUsageEnvironment.lib、libliveMedia.lib
2、但是發現libWindowsAudioInputDevice_mixer.lib還是沒有,這個在後面也是要用到的,在網上找到一個版本 庫都編譯出來的可以直接解壓縮使用,不需要進行第二步(可以自己嘗試用.mak檔案產生lib檔案)
↖第三步:下載安裝OpenCv,
注意要安裝WSDK: dotNetFx40_Full_setup.exe和winsdk_web.exe(我直接安裝在c盤的),新增安裝目錄下的include和lib到vs2008中tools→options,因為omnimeeting專案中要用到windows.h
↖第四步:具體步驟見資料夾,我用的是wxMSW-2.8.10
注意:資料夾中網頁內容上是產生的Unicode Debug和Unicode Release,這裡直接使用debug和release,產生的檔案後面要用到
↖第五步:下載安裝fmod(安裝資料夾中的exe檔案,後面要用到FMOD Programmers API Win32\api中的各個檔案)
↖第六步:下載安裝cg toolkit(需要此檔案的標頭檔案和原始檔),
安裝DirectX9.0b SDK,然後配置,具體步驟見資料夾中文件,新增include和lib
↖第七步:下載解壓openGL:詳細見資料夾
↖第八步:下載解壓ffmpeg,(需要此檔案的編譯庫)
配置MinGW+msys的檔案
注:因為要和omnimeeting程式匹配,所以要考慮到ffmpeg版本的問題,使用0.4.9版本,資料夾中有個壓縮包,已編譯可直接解壓縮使用。
三、除錯過程中出現問題以及解決
在配置環境的時候,根據配置步驟已經添加了一些庫問價
第二遍 在編譯omnimeeting的時候,根據錯誤來新增缺少的庫檔案到環境變數中(先是分別編譯libomnistream_lib、libomnistuff_lib,沒有錯誤了再編譯omnimeeting)
1、缺少cv.h 有三個地方,我選擇第三個
E:\omnimeeting\MinGW\msys\1.0\lib\perl5\5.8\msys\CORE
E:\omnimeeting\OpenCV\interfaces\swig\filtered
E:\omnimeeting\OpenCV\cv\include
2、缺少cxcore.h
E:\omnimeeting\OpenCV\cxcore\include
3、缺少highgui.h
E:\omnimeeting\OpenCV\otherlibs\highgui
4、在ffmpeg下新建了一個ffmpeg資料夾,把一些標頭檔案複製到裡面,同時把E:\omnimeeting\ffmpeg新增到環境變數
5、缺少 inttype.h時(詳細見儲存的網頁)
新增inttype.h的庫:E:\omnimeeting\MSYS-1.0\mingw\include,同時要把這個資料夾下的_mingw.h需要修改在最後一行的#endif /* __MINGW_H */前面新增#define __restrict__,如下
#define __restrict__
#endif /* __MINGW_H */
6、編譯libomnistream_lib出現:
編譯libomnistuff_lib的時候出現:
編譯vrfilter_test出現:
\ostreamreceiver.cpp(448) : error C2039: 'describeStatus' : is not a member of 'RTSPClient'
\ostreamvideodecoder.cpp(149) : error C3861: 'img_convert': identifier not found
error C2039是live555版本的原因,資料夾中有一個壓縮包可以直接使用
error C3861是ffmpeg版本的原因,資料夾中有直接可以使用的壓縮包(以編譯)
7、編譯omnitest出現:
1>LINK : fatal error LNK1104: cannot open file 'wxmsw28d_core.lib'
解決:在步驟四中用debug編譯時產生這些檔案,wxMSW-2.8.10目錄下的lib\vc_lib中,將這個路徑新增到環境變數,即tools→options→Projects and Solutions→VC++ Directories→Library files
8、編譯omnistuff_test時出現(已解決編譯通過):
1>Project : error PRJ0003 : Error spawning 'rc.exe'
解決步驟:
1、執行VS2008安裝程式。
2、在“選擇要安裝的功能”這一步時,依次展開“語言工具”——“VisualC++”——“Visual C++ 工具”,勾選“Win32 工具”一項。
3、點“更新”按鈕。
此時安裝程式將開始維護操作,完成後將解決生成rc.exe時出錯的問題。
PS.如果還不行,就把“語言工具”——“Visual C++”下面所有沒有選的都選上在更新
這是VS的環境變數未配置導致的,解決方法很多.
你可以在我的電腦->系統屬性裡設定系統環境變數把你的rc.exe所在的資料夾加進去即可.
工具—>選項—>專案和解決方案—>VC++目錄的可執行檔案下加入rc.exe所在的資料夾也可.
rc.exe一般都在C:\Program Files\Microsoft Visual Studio\VC\bin下
我把C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin新增進去之後這個問題解決,
但是出現1>LINK : fatal error LNK1104: cannot open file 'cv.lib',把E:\omnimeeting\OpenCV\lib新增進去解決
9、1>LINK : fatal error LNK1104: cannot open file 'avcodec-51.lib'
解決:avcodec-51.lib是編譯ffmpeg產生的,如果編譯生成不了就是ffmpeg版本的原因,我從網上找了一個版本ffmpeg-1可以使用
10、live的庫libBasicUsageEnvironment.lib、libgroupsock.lib、libUsageEnvironment.lib、libliveMedia.lib缺少
解決:這些庫是在執行compile.bat的時候生成的,但是libWindowsAudioInputDevice_mixer.lib還是沒有,在網上找到一個版本庫都編譯出來的
最後編譯通過,在omnimeeting的目錄下查詢生成的.exe檔案,然後執行,可能出現缺少檔案,這些檔案主要是在fmod、ffmpeg、live下,把這些檔案拷到這些.exe檔案目錄下面,再執行。
注:實踐證明,omnimeeting開原始碼所配套使用的庫以及軟體都非常的老了,建議不要使用。