February 28, 2006

讓 MPlayer 支援原生WMV9

[MPlayer] 的功能強大,而且支援的媒體檔案與平台數量都是一流的,對於 Microsoft 專屬的 mpeg-4 與 wmv1/2/3 (這三者分別對應我們常稱呼的 WMV 7/8/9,小寫表示 video coding 的 algorithm,大寫表示 Window Media Player 支援格式),[MPlayer] 跟 Xine 或 VLC 一樣,都透過 Win32 DLL loader 強制載入修改過的 win32 codec (用惡行對付 Microsoft 的惡行 :P)。VLC 已初步支援 WMV9 (VC-1),可參考 [Instructions for compiling VLC with VC-1 (WMV9) support under Ubuntu Breezy],而我在想,是否能夠將這些成果移植到 [MPlayer] 呢?剛剛 hacking 一段時間,完成了 :-)

以下是參考的編譯流程:
(1) 取得 cvs tarball 與我做的 patch:
    # wget http://jserv.sayya.org/mplayer/mplayer-cvs-snapshot-20060228.tar.bz2
    # wget http://jserv.sayya.org/mplayer/wmv3-support-via-vc1.diff.gz
    
(2) 解壓縮並施加 patch:
    # tar jxvf mplayer-cvs-snapshot-20060228.tar.bz2 
    # cd mplayer-cvs-snapshot-20060228
    # zcat ../wmv3-support-via-vc1.diff.gz | patch -p1
    
(3) 組態配置,以下是我的組態,可作為參考 (請記得把 pentium-m 換成您的 machine):
    CFLAGS="-O5 -march=pentium-m \
    -mmmx -msse -msse2 -mfpmath=sse,387 \
    -fomit-frame-pointer -fforce-mem -fforce-addr \
    -finline-functions -freorder-functions \
    -frename-registers -ftracer -fweb -funit-at-a-time \
    -fbranch-target-load-optimize2" \
    sh configure \
      --prefix=/usr \
      --confdir=/etc/mplayer \
      --disable-gui \
      --enable-menu \
      --disable-inet6 \
      --language=en \
      --enable-sse2 \
      --enable-i18n \
      --disable-gl \
      --disable-win32 \
      --enable-dynamic-plugins
    
上面的 "--disable-win32" 就是告訴 MPlayer 我不需要邪惡的 win32 dll loader,我用 native WMV9 codec。
(4) 開始漫長的等待:
    make
    
這個 hacking 很有趣,在我的電腦運作的畫面如下:

所以現在不需要帶有罪惡感的 win32 codecs,也可以播放了,並且 [MPlayer] 支援的平台眾多,或許在 64-bit 的硬體也可以運作 (?)。
由 jserv 發表於 February 28, 2006 06:47 PM
迴響

請問一下:

1. gcc 的優化參數不是只有 -O0 ~ -O3 嗎?怎麼會用到 -O5 (官方是 -O4) ?
2. 有沒有可能把 patch 送到官方呢?

fan 發表於 February 28, 2006 08:14 PM


我在我的電腦上試了這個patch
pentium celeron d 2.66 Ghz
作業系統是 kubuntu dapper amd64
編譯執行都正常
mplayer 在64-bit下原本就不支援 win32 codecs
這個patch的出現真是好極了
謝謝你

dgdunix 發表於 March 1, 2006 05:14 PM

To fan,
1. gcc有-O5的optimization flag
2. patchh要進官方或許可能有問題 (稍後再談)

To dgdunix
感謝測試,很高興您可在64 bit的機器播放WMV9影片,有興趣寫個note/How-To嗎?

jserv 發表於 March 1, 2006 07:22 PM

ㄜ...過程太順利
就是簡單的patch;make;make install
完全沒有tweak
還真沒什麼好寫的
提供我configure參數:
--disable-internal-tremor --disable-vidix --diable-esd
其他都是預設

P.S. 稍微看了libvc1的code
依授權來看非 free software
jserv大大是不是對提供這個patch考慮一下

dgdunix 發表於 March 3, 2006 02:24 PM

長久以來在powerpc的問題解決了,我在ppc g4上可以正確解碼

簡單的howto
http://www.ubuntu.org.tw/modules/newbb/viewtopic.php?topic_id=539&forum=22&post_id=2396#forumpost2396

謝謝你的努力了....^_^

dbtsai 發表於 March 7, 2006 03:05 AM

本想說這樣一來,在Zaurus上播wmv3應該就有解了。沒想到Zaurus上mplayer的維護人直接就否定掉了:

VC-1リファレンスデコーダの実装は、まさに*リファレンス*です。とてもとても遅くて、1.5GHzぐらいのマシンでも満足に再生出来ないという報告がありました。よって、ザウルス版に実装したところで紙芝居以下の速度にしかならないと思うのでサポートしません。

大意是說,這個VC-1 ref. code真的是『參考用』的,非常非常的龜,至少要1.5GHz以上的機器才跑得順。想用在Zaurus上面應該就是跟放投影片一張張播一樣,所以不用想啦... XD

JC 發表於 March 21, 2006 04:57 AM

libvc1不是GPL,所以不可能进mplayer。

bz31 發表於 March 24, 2006 05:03 PM

我要。

李锐 發表於 June 26, 2006 08:47 AM