Xine メディアプレーヤー

Xine インストールログ

Linuxでも 動画や DVDを見る環境がだいぶ充実しました
Xine(クシーン? ザイン?)を紹介します
これがあれば 動画再生は満ち足りるというほど充実してます
検証環境
CPU AMD Turion-MT37 2GHz
メモリ 1GB
グラフィック nVidia GeForce6600
DVD BenQ DVD DC DW1670
OS Linux 2.6.30.5
ウィンドウシステム Xorg-1.5.1 + fluxbox-1.1.1
OpenGL Mesa-7.5 + NVIDIA-Linux-x86-185.18.14
GCC gcc-4.1.2
Cライブラリ glibc-2.5
Firefox 3.5
Xineの特徴としては

  • DVD VCD AVIファイル Mpegファイル DivX Win32codec など幅広いフォーマットに対応
  • 入出力(ファイルやビデオ)をプラグイン化することで拡張性が高い
  • xine-lib(各種 コーデック プラグイン) と UIが分離している
  • さまざまな UIがある

従って 流れとしては

  1. コーデック 必要なライブラリ を別途入手して インストール
  2. xine-libをインストール
  3. UIをインストール

totemスクリーンショット
いろいろなインターフェースがあります 上の図は Ubuntuに採用されている totemです

コーデックのインストール

実は Xineは Windowsのコーデックを無理矢理 Linuxで使うというようなことをやってます
コーデックのパックが配布されているところがあるので 各種 .dll を拝借します

リンク元が分からないため 私が拾ってきたコーデックパックを ここに載せます
essential-20071007.tar.bz2 (MPlayer のサイトで配布されていたものだと思います)

$ su
# cd /usr/local/lib
# mkdir win32
# cd win32
# tar -xjf ~admin/essential-20071007.tar.bz2 --strip-path=1
# ls
AvidQTAVUICodec.qtx          cook.so.6.0   l3codeca.acm  qtmlClient.dll  vmnc.dll
BeHereiVideo.qtx             ctadp32.acm   l3codecx.ax   rt32dcmp.dll    voxmsdec.ax
CLRVIDDC.DLL                 ddnt.so.6.0   lhacm.acm     scg726.acm      vp31vfw.dll
CtWbJpg.DLL                  divx.dll      lsvxdec.dll   sipr.so.6.0     vp4vfw.dll
DECVW_32.DLL                 divx_c32.ax   m3jp2k32.dll  sp5x_32.dll     vp5vfw.dll
LCMW2.dll                    divxa32.acm   m3jpeg32.dll  tm20dec.ax      vp6vfw.dll
LCODCCMW2E.dll               divxc32.dll   m3jpegdec.ax  tokf.so.6.0     vp7vfw.dll
LCodcCMP.dll                 divxdec.ax    mcdvd_32.dll  tokr.so.6.0     vssh264.dll
QuickTime.qts                dnet.so.6.0   mcmjpg32.dll  tsccvid.dll     vssh264core.dll
QuickTimeEssentials.qtx      drv2.so.6.0   mi-sc4.acm    tsd32.dll       vssh264dec.dll
QuickTimeInternetExtras.qtx  drv3.so.6.0   mpg4c32.dll   tssoft32.acm    vsshdsd.dll
VDODEC32.dll                 drv4.so.6.0   mpg4ds32.ax   tvqdec.dll      vsslight.dll
ViVD2.dll                    drvc.so       msadp32.acm   ubv263d+.ax     vsswlt.dll
acelpdec.ax                  dspr.so.6.0   msg711.acm    ubvmp4d.dll     wma9dmod.dll
alf2cd.acm                   huffyuv.dll   msgsm32.acm   ultimo.dll      wmadmod.dll
aslcodec_dshow.dll           i263_32.drv   msh261.drv    vdowave.drv     wmsdmod.dll
aslcodec_vfw.dll             iac25_32.ax   msms001.vwp   vgpix32d.dll    wmspdmod.dll
asusasv2.dll                 iccvid.dll    msnaudio.acm  vid_3ivX.xa     wmv8ds32.ax
asusasvd.dll                 icmw_32.dll   msrle32.dll   vid_cvid.xa     wmv9dmod.dll
ativcr2.dll                  imaadp32.acm  msscds32.ax   vid_cyuv.xa     wmvadvd.dll
atrac3.acm                   imc32.acm     msvidc32.dll  vid_h261.xa     wmvdmod.dll
atrc.so.6.0                  ir32_32.dll   mvoiced.vwp   vid_h263.xa     wmvds32.ax
avimszh.dll                  ir41_32.dll   nsrt2432.acm  vid_iv32.xa     wnvplay1.dll
avizlib.dll                  ir50_32.dll   pclepim1.dll  vid_iv41.xa     wnvwinx.dll
clrviddd.dll                 ivvideo.dll   qdv.dll       vid_iv50.xa     wvc1dmod.dll
cook.so                      jp2avi.dll    qpeg32.dll    vivog723.acm    xanlib.dll
#

ライブラリのインストール

DVDを見るには libdvdcss が必要です
解凍後
./configure –prefix=/usr/local
make
su
make install
でインストールされます
これは DVDの画像に施されている 暗号化を解除するためのライブラリです

他にも libogg や libvorbis などの必要なライブラリを入れます
(詳細は 忘れてしまいましたが 後述の Xineのビルド時にチェックできます)

xine-libのインストール

いよいよ Xineの核となる xine-lib です
$ tar -xjf xine-lib-1.1.16.2.tar.bz2
$ cd xine-lib-1.1.16.2
$ $ ./configure --enable-directfb --enable-static --with-w32-path=/usr/loc
al/lib/win32 --prefix=/usr/local
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking build system type... i686-pc-linux-gnu
…
…
xine-lib summary:
----------------
 * input plugins:
   - file          - net
   - stdin_fifo    - rtp
   - http          - mms
   - pnm           - rtsp
   - dvb
   - dvd (internal libs)
   - vcd (internal libs)
   - vcdo
   - cdda
   - gnome-vfs
   - v4l

 * demultiplexer plugins:
   - avi           - mpeg
   - mpeg_block    - mpeg_audio
   - mpeg_elem     - mpeg_pes
   - mpeg_ts       - qt/mpeg-4
   - film          - roq
   - fli           - smjpeg
   - idcin         - wav
   - wc3 mve       - voc
   - vqa           - aiff
   - cdda          - snd/au
   - yuv4mpeg2     - real/realaudio
   - ea wve        - raw dv
   - interplay mve - psx str
   - ws aud        - pva
   - vox
   - nsv           - 4xm
   - FLAC          - aac
   - iff           - matroska
   - vmd           - flv
   - nsf
   - ogg
   - ac3 (internal library)

 * video decoder plugins:
   - MPEG 1,2         - Amiga Bitplane
   - Raw RGB          - Raw YUV
   - ffmpeg (internal library):
     - MPEG-4 (ISO, Microsoft, DivX*, XviD)
     - Creative YUV    - Motion JPEG
     - Cinepak         - MS Video-1
     - FLI/FLC         - MS RLE
     - Id RoQ          - Id Cin
     - Apple Graphics  - Apple Video
     - Apple Animation - Interplay Video
     - Westwood VQA    - Origin Xan
     - H.263           - Intel Indeo 3
     - SVQ1            - SVQ3
     - Real Video 1.0  - Real Video 2.0
     - 4X Video        - Sierra Video
     - Asus v1/v2      - HuffYUV
     - On2 VP3         - DV
     - 8BPS            - Duck TrueMotion v1
     - ATI VCR1        - Flash Video
     - ZLIB            - MSZH
   - dxr3_video
   - w32dll
   - gdk-pixbuf

 * audio decoder plugins:
   - GSM 06.10       - linear PCM
   - ffmpeg (internal library):
     - Windows Media Audio v1/v2
     - DV            - logarithmic PCM
     - 14k4          - 28k8
     - MS ADPCM      - IMA ADPCM
     - XA ADPCM      - Game DPCM/ADPCM
     - Mace 3:13     - Mace 6:1
     - FLAC
   - Nosefart (NSF)
   - vorbis
   - w32dll
   - MAD (MPG 1/2/3) (internal library)
   - DTS (internal library)
   - A52/ra-dnet (internal library)
   - MusePack (internal library)

 * subtitle decoder plugins:
   - spu             - spucc
   - spucmml         - sputext
   - spudvb
   - dxr3_spu

 * post effect plugins:
  * planar video effects:
   - invert          - expand
   - eq              - eq2
   - boxblur         - denoise3d
   - unsharp         - tvtime
  * SFX:
   - goom            - oscope
   - fftscope        - mosaico

 * video driver plugins:
   - XShm (X11 shared memory)
   - SyncFB (for Matrox G200/G400 cards)
   - Xv (XVideo *shared*)
   - OpenGL
   - xcb-shm (X shared memory using XCB)
   - xcb-xv (XVideo using XCB)
   - aa (Ascii ART)
   - fb (Linux framebuffer device)
   - sdl (Simple DirectMedia Layer)
   - dxr3 (Hollywood+ and Creative dxr3, mpeg video only)
   - vidix (X11 and framebuffer support)

 * audio driver plugins:
   - oss (Open Sound System)
   - alsa
---
最後にでる xine-lib summary というのが重要です
xine-libの ビルドで使えるようになると思われる プラグインが表示されます
上記のは 実際の今回検証環境のもので DVD avi mpg DivX あらかたのものが再生できます

上記を参考にいただいて 足りない環境があれば 個別にそろえてください

$ make
…
…
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I../../../../include -I../../../../src/input/vcd/libcdio -I../../../../include -I../../../../lib -I../../../../lib -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -mtune=pentiumpro -O3 -pipe -fomit-frame-pointer -falign-functions=4 -falign-loops=4 -falign-jumps=4 -fexpensive-optimizations -fschedule-insns2 -ffast-math -finline-functions -Wpointer-arith -g -O2 -Wall -Wchar-subscripts -Wnested-externs -Wcast-align -Wmissing-declarations -Wmissing-prototypes -Wmissing-format-attribute -Wno-pointer-sign -Wformat=2 -Wno-format-zero-length -Wstrict-aliasing=2 -DNDEBUG -MT _cdio_linux.lo -MD -MP -MF .deps/_cdio_linux.Tpo -c _cdio_linux.c  -fPIC -DPIC -o .libs/_cdio_linux.o
In file included from _cdio_linux.c:66:
/usr/src/linux/include/scsi/scsi.h:145: error: expected specifier-qualifier-list before 'u8'
/usr/src/linux/include/scsi/scsi.h: In function 'scsi_varlen_cdb_length':
/usr/src/linux/include/scsi/scsi.h:156: error: 'struct scsi_varlen_cdb_hdr' has no member named 'additional_cdb_length'
_cdio_linux.c: In function '_read_mode2_sector_linux':
_cdio_linux.c:724: 警告: dereferencing type-punned pointer might break strict-aliasing rules
make[5]: *** [_cdio_linux.lo] エラー 1
make[5]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio'
make[4]: *** [all-recursive] エラー 1
make[4]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio'
make[3]: *** [all-recursive] エラー 1
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd'
make[2]: *** [all-recursive] エラー 1
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src'
make: *** [all-recursive] エラー 1
$
私の環境では 「u8 が未定義」 だと怒られました
linux-kernel によると typedef unsigned char u8; は asm-generic/int-ll64.h で定義されていますが
gccに -D__KERNEL__ が必要になるため u8自体 そもそもカーネルモジュール用の型と思われます

以下のように src/input/vcd/libcdio/_cdio_linux.c へ定義を追加して 回避しました (64行目に typedef 文追加)

  55 
  56 #include 
  57 #include 
  58 #include 
  59 #include 
  60 #include 
  61 #include 
  62 #include 
  63 
  64 typedef unsigned char u8;
  65 #include 
  66 #include 
  67 #include 
  68 #include 
  69 #include 
  70 
$ make
…
…
Making all in win32
make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32'
Making all in include
make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32/include'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32/include'
make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32'
make[2]: `all-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32'
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32'
make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2'
make[1]: `all-am' に対して行うべき事はありません。
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
$ su
# make install
…
…
find . -name \*.so | \
  xargs strings -a | \
  /bin/grep -E '^([-a-z]+/[-+.a-z0-9]+:[^:]+:[^;]+;[ \t]*)+' | \
  sed -e 's/:[^;]\+;/\n/g' | \
  sort -u | \
  sed -e '1 d' >/usr/local/lib/xine/plugins/1.25/mime.types
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
test -z "/usr/local/share/doc/xine-lib" || /bin/mkdir -p "/usr/local/share/doc/xine-lib"
 /bin/install -c -m 644 'COPYING' '/usr/local/share/doc/xine-lib/COPYING'
 /bin/install -c -m 644 'NEWS' '/usr/local/share/doc/xine-lib/NEWS'
 /bin/install -c -m 644 'README' '/usr/local/share/doc/xine-lib/README'
 /bin/install -c -m 644 'TODO' '/usr/local/share/doc/xine-lib/TODO'
 /bin/install -c -m 644 'CREDITS' '/usr/local/share/doc/xine-lib/CREDITS'
 /bin/install -c -m 644 'ChangeLog' '/usr/local/share/doc/xine-lib/ChangeLog'
make  install-data-hook
make[3]: Entering directory `/home/admin/xine-lib-1.1.16.2'
make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2'
#
足りない環境に必要なライブラリを探して インストールする方にむしろ時間がかかると思います

UIのインストール

次に UIですが いくつか選択肢があります

  • xine-ui は標準で用意されてます これでも十分使えます
  • gxine も xine-uiと同じ場所で配布されています
  • totem も Ubuntuなどに採用されている人気のある UIです

xine-ui 不具合版

上の絵は 私の環境の古い xine-ui-0.99.4 ですが
Xorgを入れ替えたタイミングで コントロールパネルがバグって使いものになりません

xine-ui コントロールパネル

本来ならこんな感じのパネルが使えます
ファイルや DVDを開いたり 画像の拡大 アスペクト比変更 ほとんどできます

gxine では Mozilla(Firefox?)用プラグインがある
という話なので 今回こちらの使用感をレポートします
$ tar -xjf gxine-0.5.903.tar.bz2
$ cd gxine-0.5.903
$ ./configure
checking for a BSD-compatible install... /bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
…
config.status: executing po-directories commands
config.status: creating misc/po/POTFILES
config.status: creating misc/po/Makefile
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands
$ make
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
exec > gxine.desktop; cat gxine.desktop.in; /usr/local/bin/xine-list-1.1; echo
make  all-recursive
make[1]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
Making all in m4
mv -f .deps/console_output.Tpo .deps/console_output.Po
gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps    -std=gnu99 -I/usr/local/include   -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include   -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include    -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable   -DLOCALEDIR=\"/usr/local/share/locale\"  -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c
globals.h:39 から include されたファイル中,
                 desktop_integration.c:27 から:
script_engine.h:34:19: error: jsapi.h: そのようなファイルやディレクトリはありません
In file included from globals.h:39,
                 from desktop_integration.c:27:
script_engine.h:40: 警告: type defaults to 'int' in declaration of 'JSErrorReport'
script_engine.h:40: error: expected ';', ',' or ')' before '*' token
script_engine.h:59: error: expected specifier-qualifier-list before 'JSContext'
script_engine.h:75: error: expected specifier-qualifier-list before 'JSFunction'
script_engine.h:119: error: expected specifier-qualifier-list before 'JSObject'
script_engine.h:146: 警告: type defaults to 'int' in declaration of 'JSErrorReport'
script_engine.h:146: error: expected ';', ',' or ')' before '*' token
script_engine.h:151: error: expected declaration specifiers or '...' before 'se_error_cb_t'
script_engine.h:155: error: expected declaration specifiers or '...' before 'JSInt32'
script_engine.h:156: error: expected declaration specifiers or '...' before 'JSFloat64'
script_engine.h:157: error: expected declaration specifiers or '...' before 'JSBool'
script_engine.h:158: error: expected declaration specifiers or '...' before 'JSInt32'
script_engine.h:159: error: expected declaration specifiers or '...' before 'JSFloat64'
script_engine.h:179: error: expected specifier-qualifier-list before 'JSNative'
script_engine.h:186: error: expected declaration specifiers or '...' before 'JSNative'
script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN'
script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN'
script_engine.h:242: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'se_warn_initialisation'
make[2]: *** [desktop_integration.o] エラー 1
make[2]: Leaving directory `/home/admin/gxine-0.5.903/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
make: *** [all] エラー 2
$
という エラーに遭遇しました jsapi.h が見つからないというものです
これは Firefox(というより XULRunner)の問題のようです
jsapi.hは 実際は /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h にあるのに
XULRunnerのビルドでインストールされた /usr/local/lib/pkgconfig/mozilla-js.pc を見ると
prefix=/usr/local
sdkdir=/usr/local/lib/xulrunner-devel-1.9.1.3
includedir=/usr/local/include/xulrunner-1.9.1.3

Name: JavaScript
Description: The Mozilla JavaScript Library
Version: 1.9.1.3
Requires: mozilla-nspr >= 4.8.0
Libs: -L${sdkdir}/lib -lmozjs
Cflags: -I${includedir}/stable -DXP_UNIX -DJS_THREADSAFE
/usr/local/include/xulrunner-1.9.1.3/stable にしか インクルードパスが張られていません
ここでは gxineソースディレクトリ側を修正して
Makefile
src/Makefile
の JS_LIBS の設定にインクルードパスを直接追加しました
JS_CFLAGS = -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable -I /usr/local/include/xulrunner-1.9.1.3/unstable
-I /usr/local/include/xulrunner-1.9.1.3/unstable が追加部分です
(unstable というディレクトリ名が引っかかるところです)
$ make
…
…
make[3]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include'
make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include'
Making all in src
make[2]: Entering directory `/home/deer/admin/Xine/gxine-0.5.903/src'
gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps    -std=gnu99 -I/usr/local/include   -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include   -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include   -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include    -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable  -I/usr/local/include/xulrunner-1.9.1.3/unstable -DLOCALEDIR=\"/usr/local/share/locale\"  -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c
In file included from script_engine.h:34,
                 from globals.h:39,
                 from desktop_integration.c:27:
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected identifier or '(' before ')' token
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected ')' before '__attribute__'
/usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected identifier or '(' before ')' token
make[2]: *** [desktop_integration.o] エラー 1
make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/src'
make[1]: *** [all-recursive] エラー 1
make[1]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903'
make: *** [all] エラー 2
$
なんと jsapi.h 自体がエラーとなりました (さすが unstable ディレクトリ…)
/usr/local/include/xulrunner-1.9.1.3/unstable/jstypes.h で定義されている
JS_ALWAYS_INLINE のエラーのようです
168 #ifndef JS_INLINE
169 # if defined __cplusplus
170 #  define JS_INLINE          inline
171 # elif defined _MSC_VER
172 #  define JS_INLINE          __inline
173 # elif defined __GNUC__
174 #  define JS_INLINE          __inline__ 
175 # else
176 #  define JS_INLINE          inline
177 # endif
178 #endif
179 
180 #ifndef JS_ALWAYS_INLINE
181 # if defined DEBUG
182 #  define JS_ALWAYS_INLINE   JS_INLINE
183 # elif defined _MSC_VER
184 #  define JS_ALWAYS_INLINE   __forceinline
185 # elif defined __GNUC__
186 #  define JS_ALWAYS_INLINE   __attribute__((always_inline)) JS_INLINE
187 # else
188 #  define JS_ALWAYS_INLINE   JS_INLINE
189 # endif
190 #endif
私の gcc 環境では __attribute__((always_inline)) がうまく使えません
(これは Cの関数定義をインライン化するためのコンパイラ指示のようですが)
inline なら認識されますので 以下のように jstypes.h を修正しました
168 #ifndef JS_INLINE
169 # if defined __cplusplus
170 #  define JS_INLINE          inline
171 # elif defined _MSC_VER
172 #  define JS_INLINE          __inline
173 # elif defined __GNUC__
174 //#  define JS_INLINE          __inline__ 
175 #  define JS_INLINE          inline
176 # else
177 #  define JS_INLINE          inline
178 # endif
179 #endif
180 
181 #ifndef JS_ALWAYS_INLINE
182 # if defined DEBUG
183 #  define JS_ALWAYS_INLINE   JS_INLINE
184 # elif defined _MSC_VER
185 #  define JS_ALWAYS_INLINE   __forceinline
186 # elif defined __GNUC__
187 //#  define JS_ALWAYS_INLINE   __attribute__((always_inline)) JS_INLINE
188 #  define JS_ALWAYS_INLINE   JS_INLINE
189 # else
190 #  define JS_ALWAYS_INLINE   JS_INLINE
191 # endif
192 #endif
強引ですがビルドを継続します
$ make
…
…
Making all in po
make[2]: Entering directory `/home/admin/gxine-0.5.903/po'
make[2]: `all' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gxine-0.5.903/po'
make[2]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
make[2]: `all-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/gxine-0.5.903'
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
$ su
# make install
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
make  install-recursive
make[1]: Entering directory `/home/admin/gxine-0.5.903'
Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます
Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます
Making install in m4
…
…
test -z "/usr/local/share/applications" || /bin/mkdir -p "/usr/local/share/applications"
 /bin/install -c -m 644 'gxine.desktop' '/usr/local/share/applications/gxine.desktop'
make[3]: Leaving directory `/home/admin/gxine-0.5.903'
make[2]: Leaving directory `/home/admin/gxine-0.5.903'
make[1]: Leaving directory `/home/admin/gxine-0.5.903'
#
多少の工夫が必要でしたが インストールは可能です

使い勝手の検証

gxine を使ってみて xine-ui と使い勝手を比較してみました

gxine初期画面

初回起動すると ~/.config/gxine/ が作成されコンフィグを初期設定してくれます
検証の環境では CD/DVD を /dev/cdroms/cdrom0 となるように udevをカスタマイズしているため
gxineが見つけてくれず CD と DVD デバイスが認識されませんでした

通常のディストリビューションを使って入れば問題ないでしょう

gxine起動時

gxine起動時の画面です
画像のズームや ウィンドウサイズの変更など 基本的な設定はメニュー化されています

ただし 検証の環境では 再生ウィンドウをドラッグして任意倍ズームするのが
思ったとおりのサイズにズームされず使い勝手がよろしくなかったです (fluxboxのせい?)

gxine aviファイル再生

あらかたの動画形式は視聴できます

インターネット配信(.asx)も
.asxファイルを一旦ローカルディスクにダウンロードして gxineから開く ことで再生できました

ただし Mozillaプラグイン導入の指定をしたのにも関わらず
Firefoxでクリックして再生ウィンドウが開く とう期待通りの設定はされませんでした
また ファイル名 動画タイトル などが文字化けしています
これは 検証のシステムが EUC-JP系だからかもしれません (UTF-8なら問題なし?)

gxine DVD再生

CD DVD デバイスを認識させるために ~/.config/gxine/config を編集して
以下の各行を適切に設定すれば CD DVD の視聴が可能です

media.audio_cd.device:/dev/cdroms/cdrom0
media.dvd.device:/dev/cdroms/cdrom0
media.vcd.device:/dev/cdroms/cdrom0

↑で再生されている 某メイドアニメDVD を見て分かるとおり
DVDのメニューについてもマウスで操作可能で 完璧な仕上りぶり

と思われましたが
コントロールパネルに チャプタージャンプ や タイトルジャンプ などのジャンプメニューありません
(xine-ui にはあります)

gxine xine-ui 比較結果

gxineの優位な点 メニューが日本語 (ただし EUC-JP環境では苦しい表示も)
ファイル選択画面が使い易い (EUC-JPも問題なし)
CD DVD 環境の自動設定 (初回起動時)
早送り機能がある (ただし 動画形式によっては不具合も)
Mozillaプラグイン (ただし 検証の環境では確認できず)
xine-uiの優位な点 再生ウィンドウをマウスドラッグで任意倍拡大ができる (gxineは 使い心地が悪い)
ファイル選択画面は一応日本語可能 (gxineに比べると使い勝手は悪い)
DVD のジャンプメニューがある (ただしチャプター番号指定してジャンプする部分が反応しないことあり)
早送り 巻戻し 機能がある (ただし 動画形式によっては不具合も)


結局 xine-ui使うことにしました
(期待していた Mozillaプラグインが空振りしたのと DVDでタイトル画面が呼べないのが痛い)

xine-ui DVD再生

xine-ui の DVD観賞はこんな感じです
「メニュー切り替え」とか「ルート」を選択すると 一発でタイトルに飛びます
マウスによる メニュー選択もばっちりOK

ただし 番号を押してそのチャプターに飛ぼうとしたとき
うまく 飛んでくれる場合と反応がない場合があり いまいち使い勝手が悪い

あと
xine-uiをビルドするときに注意点があります
ソースコードをそのままビルドすると 日本語が文字化けしてしまいます

xine-uiは フォントのXLFD名をソースコード内にハードコードしているので
-*-*-*-*-*-*-14-*-*-*-*-*-jisx0208.1983-* のように日本語フォントに全置換してあげます
xine-ui-0.99.5用のパッチ を作ってみました参考にしてださい

$ tar -xzf xine-ui-0.99.5.tar.gz
$ cd xine-ui-0.99.5
$ zcat ../xine-ui-0.99.5-japanese.patch.gz | patch -p1
patching file src/xitk/event_sender.c
patching file src/xitk/file_browser.c
patching file src/xitk/help.c
patching file src/xitk/kbindings.c
patching file src/xitk/mediamark.c
patching file src/xitk/post.c
patching file src/xitk/setup.c
patching file src/xitk/skins/xinetic/skinconfig
patching file src/xitk/skins.c
patching file src/xitk/stream_infos.c
patching file src/xitk/tvset.c
patching file src/xitk/viewlog.c
patching file src/xitk/xine-toolkit/font.h
patching file src/xitk/xine-toolkit/test.c
$ ./configure --prefix=/usr/local --disable-xft
…
…
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing default-1 commands
config.status: creating src/xitk/xine-toolkit/po/POTFILES
config.status: creating src/xitk/xine-toolkit/po/Makefile
config.status: creating po/POTFILES
config.status: creating po/Makefile
config.status: executing default commands
$ make
…
…
make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src/fb'
make[3]: Entering directory `/home/admin/xine-ui-0.99.5/src'
make[3]: `all-am' に対して行うべき事はありません。
make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src'
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5/src'
make[2]: Entering directory `/home/admin/xine-ui-0.99.5'
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5'
make[1]: Leaving directory `/home/admin/xine-ui-0.99.5'
$ su
# make install
…
…
make[2]: `install-exec-am' に対して行うべき事はありません。
make[2]: `install-data-am' に対して行うべき事はありません。
make[2]: Leaving directory `/home/admin/xine-ui-0.99.5'
make[1]: Leaving directory `/home/admin//xine-ui-0.99.5'
#
検証の環境では –disable-xft もしないと日本語が表示されませんでした