如何編譯多線程的 mplayer

歡迎提問 debian desktop 相關問題,何謂 desktop ? 舉凡您日常生活會用到的部份,如上網 ( www 、 bbs ..) 、程式設計、繪圖...等等。 通常以 X Window 環境底下問題為主。

如何編譯多線程的 mplayer

文章j1989_41 » 週六 3月 19, 2011 3:27 pm

各位好!!

小弟想編譯多線程的 mplayer 來播放高畫質影片 (1080i)
但卻發現不管怎麼編譯,編出來的 mplayer 還是單線程
不曉得有無前輩可分享一下這方面的編譯心得呢?
先謝了!!

以下是我的編譯步驟:
代碼: 選擇全部
# cd /dev/shm
# apt-get install git subversion libxv-dev libclalsadrv-dev
# svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer
# git clone git://gitorious.org/ffmpeg/ffmpeg-mt.git ffmpeg
# mv ffmpeg mplayer
# cd mplayer
# ./configure --disable-inet6 --disable-mencoder
# make -j 2
# make install
# mplayer -lavdopts threads=2 -vf pp=lb /mnt/Video/HiHD.ts


OS:Debian Squeeze
CPU: Intel Pentium DualCore E2140 1.6GHz OC 2.13GHz
最後由 j1989_41 於 週二 3月 22, 2011 10:53 am 編輯,總共編輯了 2 次。
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週六 3月 19, 2011 3:50 pm

以下是我在播放影片時的 top 輸出畫面

top - 15:47:40 up 4:22, 3 users, load average: 0.42, 1.00, 0.78
Tasks: 80 total, 4 running, 76 sleeping, 0 stopped, 0 zombie
Cpu0 : 7.9%us, 1.6%sy, 0.0%ni, 89.8%id, 0.0%wa, 0.7%hi, 0.0%si, 0.0%st
Cpu1 : 95.7%us, 0.7%sy, 0.0%ni, 3.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2066644k total, 1842924k used, 223720k free, 459580k buffers
Swap: 0k total, 0k used, 0k free, 1186428k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1804 jiunyu 20 0 83504 58m 11m R 97 2.9 0:56.57 mplayer
1046 root 20 0 54796 26m 9.9m R 9 1.3 8:54.67 Xorg
25264 jiunyu 20 0 18408 8432 3300 R 1 0.4 0:01.13 xterm
31409 root 20 0 4200 1152 636 S 1 0.1 0:12.13 mount.ntfs
1053 jiunyu 20 0 45736 7664 5600 S 0 0.4 0:21.28 icewm
1805 jiunyu 20 0 17220 7060 3164 S 0 0.3 0:00.07 xterm
1814 jiunyu 20 0 2332 1140 904 R 0 0.1 0:00.04 top
-------------------------------------------- 以下省略 ------------------------------------------------------
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章jesse.sung » 週一 3月 21, 2011 11:59 am

若您只是要使用的話, debian-multimedia 有提供 mplayer-mt 套件喔。
我是透過 smplayer 呼叫 mplayer-mt,觀察 CPU 的負載的確是有分散給其他的核心。
BR,
Wen-chien Jesse Sung
頭像
jesse.sung
程式開發組
程式開發組
 
文章: 654
註冊時間: 週三 9月 04, 2002 9:43 am

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週一 3月 21, 2011 9:49 pm

jesse.sung 寫:若您只是要使用的話, debian-multimedia 有提供 mplayer-mt 套件喔。
我是透過 smplayer 呼叫 mplayer-mt,觀察 CPU 的負載的確是有分散給其他的核心。


感謝回覆
昨天重灌系統並安裝 debian-multimedia 的 mplayer-mt
然後使用 mplayer-mt 開啟放在硬碟裡的 HiHD 錄影檔
結果只出現黑摸摸的一片,什麼也沒有
回到 terminal 一看
發現 mplayer-mt 不斷的發出以下錯誤訊息

代碼: 選擇全部
FAAD: error: Invalid number of channels, trying to resync! ??,?% 0 0 72%
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: Failed to decode frame: Invalid number of channels
FAAD: error: Invalid number of channels, trying to resync! ??,?% 0 0 72%
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: Failed to decode frame: Invalid number of channels
FAAD: error: Invalid number of channels, trying to resync! ??,?% 0 0 72%
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: error: Invalid number of channels, trying to resync!
FAAD: Failed to decode frame: Invalid number of channels


看起來似乎是 faad 這個 AAC 解碼器無法正常解開 AAC
於是我在 mplayer-mt 的參數裡多加一個 -nosound
讓 mplayer-mt 只解碼影像的部份,音效則忽略不解碼
果然 mplayer-mt 可正常播放影片了,解碼工作也平均分配到多個執行緒上
只是沒有聲音 XD
因此證實了問題確實是出在 mplayer-mt 沒辦法解開 HiHD 的 AAC

我有試著使用參數 -afm ffmpeg 讓 mplayer-mt 使用 ffmpeg 裡的 AAC Decoder
但ffmpeg 裡的 AAC Decoder 似乎也解不開 AAC Audio
最後又會跳回使用 faad 來解
然後出現一大堆如上的錯誤訊息

想請教前輩們哪裡可以抓得到最最最最新版的 faad 呢?(stable 和 testing 的最新版都是 2.7-6)
或是有什麼辦法讓 mplayer-mt 使用我自己編譯的 ffmpeg 裡的 AAC Decoder呢?
(自行編譯的 mplayer+ffmpeg-mt 可正常解碼 AAC)
先謝了!!
最後由 j1989_41 於 週二 3月 22, 2011 6:08 pm 編輯,總共編輯了 6 次。
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週二 3月 22, 2011 10:52 am

小弟在剛剛找到 faad 的官網了
http://www.audiocoding.com/faad2.html
而且也確定 faad 應該是解不開 HiHD 的 HE-AAC LATM 格式 :crying:
http://packages.debian.org/changelogs/pool/main/f/faad2/faad2_2.7-6/changelog

看來只好把希望寄託在 ffmpeg 的 AAC Decoder 了
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週三 3月 23, 2011 1:09 am

唉..快傻了
還是搞不定

不過倒是意外發現了個好消息
ffmpeg-mt 已經正式納入 ffmpeg
相信再過不久 ffmpeg 也能夠多執行緒解碼了 :finger1:

http://www.ffmpeg.org/index.html
March 21, 2011

Today FFmpeg-mt, the multithreaded decoding branch, has been merged into FFmpeg. This has been a long awaited merge, and we would like to thank Alexander Strange for his patience and hard work.

Testing is appreciated and if you find any bugs please report them to our bug tracker.
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週六 3月 26, 2011 9:44 pm

各位好!!
經過幾天的努力
問題總算解決了

今天小弟用破到不行的超級菜英文到 mplayer 的 mailing-list 詢問
一問之下才發現原來問題是出在 ffmpeg 把設定執行緒數目的 API 給砍了
難怪不管參數怎麼下 ffmpeg 還是只用單執行緒來解碼
mplayer 的開發人員已經在 SVN-r33114 版修正這個問題
而我也終於不用再為了看 HiHD 回到 Windows 了 :crying:

另外感謝前輩 jesse.sung 提供解決方案
雖然最後沒能成功使用 mplayer-mt 收看 HiHD
不過在那解決問題的過程中學到了很多 (強迫自己看了不少的 Documentation..)

最後感謝外國朋友 Henry 以及 Reimar Döffinger 的幫忙 ( Reimar Döffinger 是 mplayer 的開發人員之一)
雖然他們可能不會看到但我還是想說 :-P


補上編譯步驟,對需要自行編譯 mplayer 的朋友也許幫得上忙
# cd /dev/shm
# wget http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
# tar jxvf essential-20071007.tar.bz2
# mv essential-20071007 /usr/local/lib/codecs

# apt-get install git subversion libxv-dev libasound2-dev yasm build-essential
# svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer
# git clone git://git.videolan.org/ffmpeg.git
((( 官方的 ffmpeg 已經可以多執行緒解碼了,不需要再用 ffmpeg-mt )))
# mv ffmpeg mplayer
# cd mplayer
# ./configure --disable-inet6 --disable-mencoder --codecsdir="/usr/local/lib/codecs"
((( 參數 --codecsdir="/usr/local/lib/codecs" 可有可無,因為 Win32 Codecs 的目錄預設就是 /usr/local/lib/codecs )))
# make -j 2
# make install
# mplayer -vf pp=lb /mnt/Video/HiHD.ts


另外新增
代碼: 選擇全部
[default]
lavdopts=threads=2          # 可以是 1~8,根據 CPU 的核心數目來設定即可

到 ~/.mplayer/config
這樣就不用打參數 -lavdopts threads=2 了
最後由 j1989_41 於 週一 4月 04, 2011 11:21 pm 編輯,總共編輯了 13 次。
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am

Re: 如何編譯多線程的 mplayer

文章阿信 » 週日 3月 27, 2011 1:50 pm

j1989_41 寫:各位好!!
經過幾天的努力
問題終於解決了

今天小弟用破到不行的超級菜英文到 mplayer 的 mailing-list 詢問
一問之下才發現是 ffmpeg 把設定執行緒數目的 API 給砍了
mplayer 的開發人員已經在 SVN-r33114 版修正這個問題
而我也終於不用再為了看 HiHD 回到 Windows 了 :crying:

另外感謝前輩 jesse.sung 提供解決方案
雖然最後沒能成功使用 mplayer-mt 收看 HiHD
不過在那解決問題的過程中學到了很多 (強迫自己看了不少的 Documentation..)

最後感謝外國朋友 Henry 以及 Reimar Döffinger ( <- mplayer 的開發人員之一)
雖然他們可能不會看到但我還是想說 :-P



--------------------------------------------------------------------------------------------
補上編譯步驟,對需要自行編譯 mplayer 的朋友也許能幫得上忙
--------------------------------------------------------------------------------------------
# cd /dev/shm
# apt-get install git subversion libxv-dev libclalsadrv-dev yasm build-essential
# svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer
# git clone git://git.videolan.org/ffmpeg.git # 官方的 ffmpeg 已經可以多執行緒解碼了,不需要再用 ffmpeg-mt
# mv ffmpeg mplayer
# cd mplayer
# ./configure --disable-inet6 --disable-mencoder
# make -j 2
# make install
# mplayer -vf pp=lb /mnt/Video/HiHD.ts
--------------------------------------------------------------------------------------------
另外新增
代碼: 選擇全部
[default]
lavdopts=threads=2          # 可以是 1~8,根據 CPU 的核心數目來設定即可

到 ~/.mplayer/config
這樣就不用打參數 -lavdopts threads=2 了


恭囍阿... :finger1:
看來最新的ffmpeg已經可以解HiHD的AAC音效了。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

Re: 如何編譯多線程的 mplayer

文章j1989_41 » 週日 3月 27, 2011 4:10 pm

阿信 寫:恭囍阿... :finger1:
看來最新的ffmpeg已經可以解HiHD的AAC音效了。


恩 是可以解了
不過還是有些小問題
像現在正在播的小太陽居然只有左聲道有聲音

不過其實能解就很開心啦
其他就慢慢來吧 :-) :-) :-)
j1989_41
可愛的小學生
可愛的小學生
 
文章: 52
註冊時間: 週四 11月 12, 2009 11:54 am


回到 debian desktop

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客