FC2ブログ
2014/11/17

Openindianaで 動画 音声 YouTube やりたい放題

この記事は他の記事でオフトピックぎみだった文を載せ直すものです。
Openindianaで、テクノロジーのことだらけやっていて、何か物足りなくないですか?
そう、ちょっとは普通のパソコンと同じように使いたい。ちょっとは融通がきいてほしい。
それには、動画や音声の再生や、YouTubeを見れることが感じんです。
しかしオタクでないと解決はきついです。

本気でやりたいならNVIDIAのグラボをいれよう

Solarisむけの企業が出してくれるドライバーはNVIDIAだけです。
ノートパソコンでもしょぼくていいからNVIDIAのチップが入っているものを選びましょう。
何もしなくともまともにHD動画が再生できるには。
optimusというNVIDIAのと他のグラボを切り替える機能はつかえません。

まずhipsterをいれよう

hipsterにはソフトウェア側が最新に近くなっていて
libxcbが入るなど、いろいろ新しい3Dや動画のプログラムを入れるのに都合がいいです。
2016年:ORACLEがオープンソースのカーネルモジュールを公開、バックポートでOpenSXCEという亜種から持ってきた、テスト中のドライバーdrm_gem_kmsでintelのグラフィックが使える可能性はあります。
これはひょっとすると自分で入れないといけないのかな?

Sunご自慢のZFSの機能を切らないといけない


/etc/systemに

set zfs:zfs_prefetch_disable = 1


ZFSの機能の一つに、ファイルデータ先読み機能があるが、これの説明を読むと
ちょこまかシーケンシャルアクセスされるとCPUがよほどないと追いつかないとある。
ちょこまかシーケンシャルアクセスはちょうど動画再生で行われるものです。
一方の動画プレイヤーはメモリーにデータをキャッシュするので先読み機能は余計なもので、カクカク動画になります。
なおスケジューラはご自慢のFSSがいいです。

Xorgをちょっと速くする

セキュリティに厳しくなければ、
/etc/security/exec_attrを見て権限を付け足すとか
Forced Privilege:solaris:cmd:::/usr/bin/amd64/Xorg:uid=0
これぐらいの権限の設定はLinuxだとデフォルトになっているはずですが?
/etc/systemというファイルでカーネルパラメータの変更ができる。デバイスドライバーへの転送量を変えます。

set strmsgsz = 262144
set strctlsz = 4096

これで再起動。strctlszは8192にするとさらに速くなる?
なおこれでネットワークも速くなるでしょう。

うそ??

パフォーマンスチューニングの記事に驚愕のデフォルト設定の事実が。

intelでは希望がある

intelのグラフィック機能(CPUでなく)を使っている方は、
Section "Device"
Identifier "Card0"
Driver "intel"
Option "XVideo" "false" #Xvが逆に速度をおとすパターンあり
Option "LVDS24Bit" "true"
Option "EXAOptimizeMigration" "true"
Option "XvMC" "true"
EndSection

こんな/etc/X11/xorg.confを書いてみてください。とくにnehalem世代のパソコン。しかしこれでも少し重たいかもしれません。
compizは、余計なものと思っているかたが多そうですが、有効にすると速くなります。システム>外観>視覚効果
Xorgは1.7.7ですが、すでにアップストリームでパッチが当たっていてXorg 1.14を入れる準備ができているらしい。
https://www.illumos.org/issues/4044
なんとXorgを1.17に一気にアップグレードする動きがhipsterにあります。
いろいろなパソコン、サーバーで問題なく高速にXorgが動くようになるでしょう。

OpenCSWを導入する

sfe.opencsw.orgの説明を英語だけど読んで、
ffmpegやVLCを導入できます。機能はGOMに匹敵するあのVLCだよ!
ラッキー!簡単ですがよく見ると何か肝心な機能が足りないのがわかる。
動画のウィンドウはなぜか別に出てくるし、字幕機能が使えない。どうした?

VLCをコンパイルすれば、心配ない

ここからは専門知識が必要です、しかしOpenindianaを使っているほとんどの人は持っている知識です。
必要なパッケージはほとんど先ほどのOpenCSWから入りました。libxcb,xcb-utilとxcb-protocolsパッケージもいれたら、
最新版のVLC-2.1.5をソースコードからいれます!
Openindianaを使っているほとんどの人はオタクだと考えられるので詳しくは自分で調べてください。

Solarisの系統はコンパイルにSunStudioを使う場合が多いと思われますが、私はgccをつかっています。OSSはその方が楽になってゆくのかな?

luaが使えると、字幕が出てくれるのと、動画サイトの動画が見れる、細かい機能がついてくれるので、だいじです。
わざわざlua-5.1.5をビルドして/usr/lua5.1に入れてみます。このような/usr以下を無駄に増やすのはsolarisの常套手段です。
そのとき、luaのソースはあまりに単純な作りなので、pkg-configの対応とDLLが出来ません。
ソースコードのlua.pcに手を加え、/usr/lua5.1/lib/pkgconfigにいれます。PKG_CONFIG_PATHにそれを加えます。
DLLは静的ライブラリから作るとまったく使えないものが出来ます。ldに-zをつけるとうまくできるんだっけ?
さらにうまくいくにはDLLなのにlua.oも部品に加え、main関数も登録します。

ソースコードにパッチを当てます。ちょっとpatchコマンドで使える形になってないかも。

orig/vlc-2.1.5/compat のみに存在: dummy.c
vlc-2.1.5/ のみに存在: config.log
diff -r vlc-2.1.5/modules/access/directory.c vlc-2.1.5/modules/access/directory.c
327c327
< O_RDONLY );
---
> O_RDONLY | O_DIRECTORY);
orig/vlc-2.1.5/modules/demux のみに存在: dummy.cpp
orig/vlc-2.1.5/modules/stream_out のみに存在: dummy.cpp
diff -r vlc-2.1.5/src/posix/filesystem.c orig/vlc-2.1.5/src/posix/filesystem.c
158,159c158,159
< if (len == -1 || len < _POSIX_NAME_MAX)
< len = _POSIX_NAME_MAX;
---
> if (len == -1 || len < NAME_MAX)
> len = NAME_MAX;



20150213修正 VLCのコンパイルの最初は
 #!/bin/bash
export PKG_CONFIG_PATH=/usr/lua5.1/lib/pkgconfig:$PKG_CONFIG_PATH
export CFLAGS="-g -O2 -Wall -DLUA_COMPAT_ALL -fvisibility=hidden -mtune=native -ffast-math -funroll-loops -fomit-frame-pointer "
export CXXFLAGS=${CFLAGS}
export SDL_CFLAGS='-D_GNU_SOURCE=1 -I/usr/include/SDL'
export SDL_LIBS='-lSDL -lpthread -lposix4'
export LUA_CFLAGS=-I/usr/lua5.1/include
export LUAC=/usr/lua5.1/bin/luac
bash configure --with-pic


さらにインストールした後も/usr/local/share/applications/vlc.desktopを

Exec=/bin/env LD_PRELOAD=/usr/lua5.1/lib/liblua.so.5.1 /usr/local/bin/vlc --started-from-file %U


このようにするとようやくluaのモジュールがつかえるようになる!
YoutubeはVLCでは見れないことがわかった。gnutlsのバージョンが低すぎるのです。すみません。

VLC:まだまだ動画がカクカク


たぶんnVIDIAの場合余計な設定はいらないでしょう。
intelのオンボードグラフィック、変なことがわかった。
まずCPUに余力がある人は設定のビデオ≫「自動」を「X11ビデオ出力」にしてください。
それと詳細設定のオーディオの「オーディオ非同期調整」の値を-300にするとHD動画がなめらかに再生できる。
でも音声がずれる。 -210ならカクカクもしないし音声もずれない。
ということは、Solaris系のOpen sound Systemが0.2秒音声データをキャッシュして再生が遅れる、ということなのでしょうか?

実はffmpegもコンパイルできる

bash configure --enable-pic --enable-gpl --enable-version3 --enable-shared --extra-cflags='-mtune=native' --extra-cxxflags='-mtune=native'


最初はこんな感じでなんなくffmpeg-2.4.3をコンパイルできた。VLCでつかうにはパッチがいるが、
diff --git a/configure.ac b/configure.ac
index a684338..053713a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2242,8 +2242,8 @@ AC_ARG_ENABLE(avcodec,
[ --enable-avcodec libavcodec codec (default enabled)])
AS_IF([test "${enable_avcodec}" != "no"], [
PKG_CHECK_MODULES(AVCODEC,[libavcodec >= 53.34.0 libavutil >= 51.22.0], [
- PKG_CHECK_EXISTS([libavcodec < 56],, [
- AC_MSG_ERROR([libavcodec versions 56 and later are not supported yet.])
+ PKG_CHECK_EXISTS([libavcodec < 57],, [
+ AC_MSG_ERROR([libavcodec versions 57 and later are not supported yet.])
])
VLC_SAVE_FLAGS
CPPFLAGS="${CPPFLAGS} ${AVCODEC_CFLAGS}"

こんなパッチが出回っています。あろうことかちょっと認識を書き換えてautoreconfすればいい。
スポンサーサイト

コメント

非公開コメント