そういや OS/2 で動画再生って一度もまともにやったことなかった

録りだめした Web ラジオをバックグラウンドで再生しつつプログラムをいじりてえー(もちろん OS/2 上で)、的な欲求があるのですが、そうすると OS/2 における wma 系オーディオ再生環境についていろいろ考えずにいられない。マシン環境が貧弱(Celeron-700, RAM128M)なせいか、どれもこれも(kmp、mplayer、PM123 + ffmpeg ベースプラグイン、WarpVision)不安定なんだよなあ…途中で音声出力が切れちゃったり、もっとひどいとカーネルトラップで落ちたり(これは UniAudio のせいかもしれない)。

きょうは一日ヒマだったので、このへんすこし何とかならんかと足掻いてみた。といっても kmp を自分でビルドしてみただけ(上に挙げた中では、これがいちばん動作そのものとビルドが軽快そうに思えた)。元のバイナリは TCPIP32 必須だけど、自分で configure とか make とかすれば tcpip 4.0 ベースのバイナリとか TCP/IP 不要なバイナリとか作れる。ついでに DART のバッファ最低数を2→4にしてみた(これでオーディオバッファのストールがすこし改善される…しかし非力なマシンでは焼け石に水って気もする)。

  • kmp041_tcpipv4_20080611.zip (2008-06-24 もう消した。もし入用の方がおられましたら、個別にご連絡ください)

そういやこれって動画再生機能もついてるんだったよな(ちょ、むしろそっちが本分!)、ということで、せっかくだから動画も見るかーと思ったのだが手元にまともなムービーファイルがひとつもないことに気づいた。動画再生なんて Windows でも滅多に(Youtube ぐらいしか)しないしなあ。マジでエロゲーのデモムービーしか持ってなかった…まあ仕方ない。

いちおう動くようだ。へーすげえ、ちゃんと観れるよ(感心するのもどうかと思うが…)。

フルスクリーンモード(元動画が 320x240 なので、拡大するとドットがまる分かり)。

いちおうWarp V3 + 最終FIX でも使えたヨ。VPC2007 でしか試してないけど(ディスプレイドライバは Guest Addion の GRADD ドライバ,サウンドは標準の SB16。SB16 のドライバは 48KHz 未対応なので -res48 オプションで 44.1KHz へのリサンプリングが必須)。

以下、個人的なメモ

  • 手元の環境では snapwrap がまともに使えなかった。というか起動直後の一回だけはいちおう動作するけど二度目からは例外で落ちちゃう。snapwrap.dll を削除/適当にリネームするか -video dive をオプション指定。
  • デコードや画面描画に時間がかかりすぎて音声バッファを使い切っちゃったときの処理がなんか甘いような気がする(これは kmp に限らず、ffmpeg 流用系の Audio/Video プレーヤ全般に言えそうな気がする)。音声バッファがいったんストールするとビデオ再生も結果的にストールするので結局プレーヤを再起動せざるを得ない。まあぶっちゃけた話…CPU 速度が GHz オーダーではないような非力な環境のことはあまり想定していないと思われ。
  • 動画再生の際は、むしろプロセスの優先度を下げたほうが音声バッファのストールが起こりにくいような気がする。というかPM メッセージキューをふん詰まらせそうなアプリはとにかく優先度を idle に設定したほうが軽快かつ安定動作するように思われる(PM 的な意味で)。やっぱり speOS/2 使いの必須ツールだよね!とか俺は勝手に思っています。

で、まあ、今日一日の成果として「やっぱ動画は Windows つええ」ということが実感できてしまった。OS/2 でもだいたい再生できるけど、OS/2 の kmp で CPU 負荷が 100% 近くいっちまい、しかもときどきフレーム落ちするようなムービーをほぼ同スペックのハードウェアでの Windows 上で再生すると、CPU 負荷 30〜50% 程度だったりする。ディスプレイドライバのパフォーマンスの問題が大きいのでしょうが、ファイルまわりの処理も結構ネックになっている気がする。攻めどころはいろいろあるように思いますが、個人的には「wma が聴ければ動画は割とどうでもいいです」的な気分なのでまあいいやって感じです。というかもうちょっとまともなマシンが欲しいです。

(2008-06-12) めも補足。

  • -res48 オプションは常に入れたほうがドライバに優しいような気がしてきた。たんに個人的なめぐり合わせが悪かったのかもしれないが、古め(あるいは安め)のオーディオチップとかドライバだと 44.1KHz 系以外のサンプリングレート(24/48KHz とか 16/32KHz)はドライバが未サポートだったり動作が不安定だったりしがち。
  • というわけで、だいたい
    spe i-31 kmp.exe -video dive -res48 -sync audio -framedrop ほにゃらら
    みたいな感じなのがうちの環境ではいちばん無難な設定ですた。
    音が多少ぶつ切りになっても映像との細かいシンクロを優先させたいときだけ -sync video にする。でもそこまでしないと観てられない(つーか映像的にグダグダになっちまう)のってそれこそエロゲのデモ(OP)ムービーぐらいだよね…。

(2008-06-24) 思い出したのでさらに補足。