編譯ffmpeg的問題

最近對編解碼進行學習分析。於是下載了ffmpeg 2.7 , 以下是編譯ffmpeg的問題和解決方法。

1. configure 的配置問題

./configure --enable-memalign-hack --disable-debug --prefix=`pwd`/../_install/ffmpeg2.7

make -j4

make install

發現自己編譯出來的文件中沒有ffplay , 感覺應該是ffplay 的一些庫,系統裏面沒有裝好,但急於看到ffmpeg 對VP9解碼的效果,先不顧這些了。於是,我先直接下載安裝了一個ffplay

sudo apt-get install ffplay 

ffplay -version  

查看版本,發現這個ffplay 是來自 libav 的(ffmpeg 出走的一個團隊),由於版本問題,這個ffplay 沒有支持HEVC 和 VP9 解碼

於是我使用ffmpeg 解碼成yuv文件

ffmepg -i  xxx.webm  xxxx.yuv

然後再使用ffplay播放yuv文件

ffplay  -f rawvideo -video_size 1920x1080 xxxx.yuv

2. ffmpeg 編譯之後沒有 ffplay

沒有從自己下載的版本中編譯出ffplay,接下來繼續搞定:

首先網上查找了一下原因,應該是SDL 庫沒有,導致在configure 的時候,沒有支持 ffplay

也就是說:

config.mak

!CONFIG_FFPLAY = yes (注意前面有 !)

接下來本人安裝了SDL 2.2  重新configure之後發現打印

SDL support       no

然後在裝上SDL 1.2 之後, 再次configure之後出現打印

SDL support        yes

gedit config.mak 

可以看到

CONFIG_FFPLAY = yes (前面已經沒有 !)

看來我下載的ffmpeg 版本需要SDL 1.2 的接口

接下來 重新make 一下,就有 ffplay出現了

ffplay  xxx.webm

這是我在網上參考的說法:

/////////////////////////////////////////////////////////////////////////////////////////

1、安裝SDL庫,不安裝將沒有ffplay;

2、如果安裝的是SDL2.0最新版本,建議重新編譯安裝SDL1.x版本(我測試的時候使用SDL2未生成ffplay,此項我再驗證);

聽羣裏的高手說,SDL2.0與1.x的版本對比,變動很大,很多接口有調整,強制使用的話要修改源碼。

3、確定不是1和2的問題後,在ffmpeg目錄下執行./configure ******之後查看Makefile中指定的config.mak(在ffmpeg根目錄下)中:CONFIG_FFPLAY=yes,如果不是需要重新./configure(如果前面總有!,重裝SDL)

ps:

1、如果自己去下載SDL源碼然後make install安裝的庫,編譯ffmpeg可以產生ffplay,但是產生的ffplay播放視頻沒有聲音。而且不能播音頻,這個時候需要安裝一些其他的庫文件;

2、ffplay.exe無法正常播放視頻有可能是sdl的bug, 也有可能是gcc的bug。

編譯sdl 1.的時候,把 makefile 中CFLAGS變量的-O2優化選項去掉,重新生成sdl的lib庫即可解決問題

////////////////////////////////////////////////////////////////////////

3.SDL庫不能正確執行

運行ffplay時,有些機器上會出現

Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)

說明系統中沒有安裝x11的庫文件,因此編譯出來的SDL庫實際上不能用。

下載安裝

sudo apt-get install libx11-dev

sudo apt-get install xorg-dev

重新編譯sdl

再次進入sdl源代碼目錄重新編譯,make clean,./configure,make,make install

ffplay  xxxx.webm

解碼顯示正確~ 

 

本人在 ubuntu kylin 14.04 上出現了新的問題 SDL1.2的代碼中於系統的/usr/x11/Xlibint.h 出現來命名衝突,於是還需要註釋掉SDL中的代碼 src/video/SDL_x11sym.h   line 168 附件的兩行代碼:

#ifdef LONG64
SDL_X11_MODULE(IO_32BIT)
//SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
<span style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 18px; line-height: 20px;">+SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)</span>
SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
#endif
重新對SDL 進行configure, make, make install

問題修復成功!


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