如果rpm安裝了
下面使用源碼包安裝。
一.解壓
在linux下用7za –x *****.7z解壓縮mediainfo源碼(mediainfo_0.7.51_AllInclusive.7z)
二.編譯
http://downloads.sourceforge.net/project/libpng/
下載
Mediainfo 依賴libz和libzen以及libmediainfo
編譯順序爲: libz, libzen, libmediainfo
(1)編譯libz
執行完上面的命令,會在/usr/local/lib/目錄 下生成 libz.a
在/usr/local/include目錄 下生成
(2)編譯libzen
根據ZenLib/Project/GNU/libzen_contrib.spec文件中的描述進行編譯,不是所有的命令都要執行,我主要執行了以下命令
在ZenLib/Source/Doc下執行
doxygen Doxyfile
(這個命令需要先安裝doxygen ,在ubuntu上 sudo apt-get install doxygen)
在ZenLib/Project/GNU/Library目錄下執行:
chmod +x autogen
./autogen
(這個命令需要安裝automake libtool ,在ubuntu上 sudo apt-get install automake
sudo apt-get install libtool)
configure --enable-shared
make clean
make
makeinstall
執行完上面的命令,會在/usr/local/lib/目錄 下生成libzen.a libzen.la libzen.so libzen.so.0 libzen.so.0.0 5個函數庫
(3)編譯libmediainfo
根據MediaInfoLib/Project/GNU/libmediainfo.spec文件中的描述進行編譯,不是所有的命令都要執行,我主要執行了以下命令
MediaInfoLib/Source/Doc/ 下執行
doxygen Doxyfile
MediaInfoLib/Project/GNU/Library下執行
chmod +x autogen
./autogen
configure --enable-shared
make clean
make
makeinstall
執行完上面的命令,會在/usr/local/lib/目錄 下生成 libmediainfo.a libmediainfo.la兩個函數庫
(4)編譯mediainfo
Mediainfo有兩個版本:CLI命令行版本 和GUI圖形界面版本, 項目中只需要命令行版本的,所以這裏只選擇CLI目錄下的進行編譯
MediaInfo/Project/GNU/mediainfo.spec文檔中描述的有關CLI的部分進行編譯
MediaInfo/Project/GNU/CLI下執行
chmod +x autogen
./autogen
Configure
make
makeinstall
執行完上面的命令,會在/usr/local/bin目錄 下生成mediainfo可執行文件
(5)到此爲此,所有的編譯和安裝都做完了,但還需要如下配置
export LD_LIBRARY_PATH=/usr/local/lib (因爲linux默認的函數庫目錄爲/lib 和 /usr/lib)
export PATH=$PATH:/usr/local/bin
(6)運行mediainfo命令的格式問題:
mediainfo “—Inform=Video;%Duration%” a.flv
要在命令的格式部分加入””號,才能正確輸出(在window中可加可以不加)
mediainfo 不能用大寫“MediaInfo”,應該用小寫。但在window中則可以。
在java運行Runtime.exec()方法的格式爲 mediainfo —Inform=Video;%Duration% a.flv 不要加引號
三.移植
因爲編譯需要一些工具如Doxygen, automake , libtool ,在ubuntu中apt-get安裝很方便,所以選擇在ubuntu中編譯源碼後,再種植到別的系統(suse)中運行。
(1) 將函數庫放到/usr/lib 或/lib中 (不需要配置)
或者放到/usr/local/lib 中,這就需要到上面(5)的配置
(2 ) 檢查下函數庫的權限,修改爲777(注意,這裏必須是777,否則Runtime.exec()時沒有權限)
(3) 將可執行文件mediainfo放到/usr/local/bin中,並做上面(5)中的配置
(4) 還有一個可能出現的問題
libzen.so.0依賴/usr/lib/libstdc++.so.6 要求版本GLIBCXX-3.4.9或以上
如果你的系統上這個函數庫的版本低了,就將libstdc++.so.6.0.13拷到/usr/lib下,並執行命令 ln –fs libstdc++.so.6.0.13 libstdc++.so.6 將libstdc++.so.6鏈接到新的函數庫