世界を動かす技術を、日本語で。

WiiFin – Nintendo Wii用のJellyfinクライアント

概要

WiiFin はNintendo Wii向けの Jellyfinクライアント で、軽量かつ家庭用ゲーム機に最適化されたメディア体験を提供。 C++ でGRRLIBとMPlayer CEを利用し開発。 実験的段階だが、認証やライブラリ閲覧、再生など主要機能が動作。 ビルドや導入方法、既知の制限事項も明記。 オープンソースで GPLv3ライセンス 下に公開。

WiiFin概要

  • Nintendo Wii専用の Jellyfinクライアント
  • C++ で開発、 GRRLIBMPlayer CE を利用
  • 軽量設計、Wiiリモコンや仮想キーボード対応
  • オープンソース、GPLv3ライセンス
  • .dol形式と.wad形式で提供、vWiiにも対応

機能一覧

  • 認証機能 :ユーザー名/パスワード、QuickConnect(別端末で承認)
  • プロフィール保存 :複数アカウント、アクセストークンのみ安全保存
  • ライブラリ閲覧 :映画、TV、音楽。カバーアート表示
  • 詳細表示 :あらすじ、評価、ジャンル、出演者、監督、音声/字幕選択
  • 視聴継続・Next Up :途中再生・次エピソード表示
  • TV番組ナビゲーション :シーズン・エピソード移動
  • ビデオ再生 :サーバ側トランスコード、MPlayer CE統合
  • 音楽再生 :アルバム・トラック単位で操作
  • プレイヤーオーバーレイ :シークバー、音量、エピソード移動、音声・字幕切替、イントロスキップ
  • 再生レポート :進捗をJellyfinサーバに送信、レジューム可能
  • HTTPS対応 :mbedTLS利用、自己署名証明書も可
  • WiiリモコンIRポインタ、オンスクリーンキーボード
  • メニューBGM :バックグラウンド再生

既知の制限事項

  • Direct-play非対応 :全動画はサーバでトランスコード
  • 5.1chオーディオ非対応 :ステレオのみ
  • 字幕はサーバ側で映像に埋め込む必要

ビルド・導入手順

  • 必須ツール :devkitPro(devkitPPC, libogc, wii-dev portlibs)
    • グラフィック:GRRLIB, libpngu, freetype, libjpeg
    • mbedTLS(libs/内に同梱、自動クロスコンパイル)
    • MPlayer CE(libmplayer.aとしてビルド、動画再生に必須。詳細はMPLAYER_CE_BUILD.md参照)
  • ビルド方法
    • ./build.shを実行
  • 実行方法
    • Dolphin Emulator:dolphin-emu -e WiiFin.dol
    • 実機Wii:SD:/apps/WiiFin/boot.dolにコピー、またはWiiFin.wadをWADマネージャーでインストール

プロジェクト構成

  • WiiFin/
    • source/
      • core/:アプリライフサイクル、BGM、ユーティリティ
      • input/:Wiiリモコン・USBキーボード入力
      • jellyfin/:Jellyfin HTTP APIクライアント(HTTPS対応)
      • player/:MPlayer CE統合、HUD
      • ui/:各画面(接続、ライブラリ、プロフィール、設定)
    • data/:PNG・TTFグラフィック素材
    • libs/:mbedTLS同梱
    • tools/:WADパッケージャー、バナー生成
    • Makefile:devkitPro対応ビルドスクリプト
    • apps/WiiFin/:Homebrew Channelメタデータ

今後のロードマップ

  • 年・ジャンル・評価でのソート/フィルタ
  • Wiiからのお気に入り登録
  • UIカラーテーマの複数化

コントリビューション・ライセンス

  • Pull Request、バグ報告、提案 歓迎
    • 貢献ガイドライン、バグ報告/機能要望テンプレートあり
  • GPLv3ライセンス。詳細はLICENSE参照

Hackerたちの意見

Wi-FiがPS5より先にクライアントをゲットするなんて信じられない!

正直、ここまで時間がかかるとは驚きだね。Wiiは現代のテレビ解像度に対応してないから、あんまり理想的じゃないのかな。

この前、TrueNASのアプリカタログで人気順に並べたら、JellyfinがPlexを抜いてたのに気づいたよ(Jellyfinが45,178インストール、Plexが42,225)。このプロジェクトの存在が、開発者のエコシステムが強くなってることを示してるみたいだね!

それに、Plexは価格モデルを変えてコミュニティを本当に怒らせたよね。

家庭サーバーの旅はPlexから始めたけど、どんどん悪化していって、Jellyfinに切り替えざるを得なかった。個人的にはJellyfinも同じくらい機能してるし、メディアをストリーミングするためにお金を払わせるビジネスモデルにはまだ陥ってないみたい。そんなコア機能にペイウォールを設けるのはかなり厳しいよね。

Jellyfinのセキュリティについて誰かコメントできる?前に調べたとき、Jellyfinのセキュリティモデルがちょっと弱いように見えて、家族をPlexから移行するのが不安だったんだよね。

Plexは、もし彼らが実際にコア市場が求めている機能に優先的に取り組むことに決めたら、1週間でこの流れを逆転できると思う。

PlexとJellyfinのどちらにするか決めるとき、Plexはセルフホスティングでもアカウントが必須だったから(!)、Jellyfinより良いのか悪いのか分からなかったんだ。だから、試す気にもなれなかったんだよね。

すべてに対して強制的なサーバーのトランスコーディング。痛いなぁ。せめてmpeg2とかは直接再生できると思ってたのに。

Intel ARC 380は4Kリアルタイムトランスコードストリームに最適だよ。そして安いしね。いくつかのバックエンドでトランスコードを行うスティッキーラウンドロビンリバースプロキシができるかも。最大の問題は帯域幅だけど、そこは分かってるよね。

480pだよ。過去20年間に使ったどのボックスでも、楽々とそれを処理できたよ。

Jellyfinは本当に素晴らしい。ちゃんと動くからね。Tizen OSのSamsung TVにインストールできたし、もう何年も安定した体験ができてるよ。

同意だね。正直、ブランドが好きだからJellyfinを選んだんだけど、何か見逃してるのかな。Jellyfinはすごく楽しんでるし、ほとんどのデバイスに何らかの形で対応してるみたい。彼女はiPadやスマホ、パソコンに設定してるし、テレビにもアプリがあって問題なし。家にはNetflixもあるけど、彼女は技術に詳しくないから、ログインを教えたら特に困ったことはないよ。唯一のトラブルは、講義中に見ようとした時かな。Jellyfinは家でしか使えないって説明しなきゃいけなかった ;) (今のところね)

ひとつのコツは、ファイル名と整理をしっかりすることだね。これについてのドキュメントも充実してるし。そうすればほとんど自動的に進むから、追加の手間はほぼゼロだよ。命名規則もそんなに悪くないし、結果としてできるファイルツリーもファイルを整理するには合理的な方法だと思う。

Jellyfinを諦めて、AndroidとiOSのクライアントが同期を失ったり、あるシーズンの番組が表示されなかったり、白い背景に白い文字の番組があったりして、upnp/dlnaに戻ったよ。痛みがどんどん増していった。大体は結構良かったんだけど、毎回スマホを手に取るたびに、どれだけひどくなるか心配だった。Jellyfinを辞めるのは良い選択だったと思う。upnp/dlnaはもっと粗いけど、BubbleUPnPクライアントが直感的で使いやすい。私にはすごく合ってる。トランスコーディングサーバーもかなり良くて、好きなマシンで動かせるし、何にも依存しないから簡単に切り替えられる。BubbleUPnPはタブレットをキャストスクリーンに変えられるから最高。これが大好き。良い一般プロトコルは最高だね。メディアサーバー、メディアレンダラー、そして別々のコントロールポイントがあるモデルは素晴らしい、UPnPお疲れ様。

へへ、Jellyfinのバグをデバッグするのに15分かかったよ。WebOSクライアントがスタートアップウィザードがまだ完了してないと思ってたんだ(何度も再起動を試みたけど、結局デバッグログを有効にしたらちゃんと動き出した—多分偶然だと思うけど)。Jellyfinはクラス最高だけど、基準が地獄だよね。高可用性の構成では運用できないから、唯一のインスタンスがダウンしたり問題が起きたりしたら、すぐに修正しないと使えなくなる。何かがうまくいかないとき、いくつかのログはstderrに表示されるけど、大半は単純なファイルとしてディレクトリに書き込まれる。フリーソフトウェアだから、払った分の価値はあるけど、結構バグが多いよ。

今のところは大好きなんだけど、両方のテレビで唯一の問題はサーバーのIPアドレスを常に再入力しなきゃいけないこと。数日間は覚えてるけど、また消えちゃうんだよね。

誰か、Jellyfinをマルチノードクラスターで水平スケールする試みをした人いる?20世帯くらいで共有するために設定したいんだけど、トランスコーディングが単一の(安い)ノードを超えちゃうんだよね。

ハードウェアアクセラレーションに興味があるなら、リモートハードウェアアクセラレーション戦略について調べてみるといいかも… https://jellyfin.org/docs/general/post-install/transcoding/h... JellyfinのDBは残念ながらsqliteで、DBに依存してるんだよね。もしかしたら、1つのノードだけが書き込みを担当して、他のノードは読み込みを担当するようにハックできるかも… 安いノードを複数使うことで帯域幅が増えるなら。Jellyfinはメディアストリームの管理をすぐにやめると思うけど。まあ、トランスコーディングとデータパイプのサイズが唯一の「ハード」な部分だと思う。DBの読み書き自体は問題ないと思うけど。

そうそう、めんどくさいよね。SQLiteはクラスターの真実の唯一のソースには向いてないし、複数の高解像度トランスコーディングセッションを同時に処理できるハードウェアを買った方が安く済むよ、でも20世帯分は無理だね。

参考までに、ARC B580で10本の同時ライブトランスコードストリームを管理したことがあるけど、もう少し増やせたかも。いくつかあれば大丈夫だと思うよ。もう一つのポイントは、NFSを使ってメディアストレージを共有すれば、異なる世帯グループ用に複数のJellyfinインスタンスを動かせるってこと。2、3ノードあればうまくいくと思う。

トランスコーディング用のハードウェアアクセラレーション付きのCPUしか持ってないけど、それでも同時にいくつかのストリームを処理できるよ。一番大事なのは、ダイレクトプレイをサポートしているクライアントを使ってもらうことだね。

Jellyfinはクラスター用に設計されてないよ。君の使い方なら、複数のインスタンスを展開するのがベストだね。

こういうプロジェクト大好き!開発者がどこかにWiiの本体を置いてあって、どうにか再利用できないかなって考えたんだろうね。待って、私もどこかにPS2があるかも…

KOReader用にちょっとしたJellyfinプラグインを作ったんだ。これでKindleから本にアクセスできるようになった。Jellyfinはすごく使いやすかったよ(ただ、ドキュメントが不十分な認証関連のことがあったけど、今は廃止中らしい)。もし誰かがJellyfinエコシステムで何かを作ろうと思ってるなら、ぜひおすすめだよ。 [1]: https://github.com/DeclanChidlow/KOReader-Jellyfin-Plugin/

ゲームキューブに移植されるべきだし、名前は「DolFin」にすべきだね(ゲームキューブのコードネームは「Dolphin」だし)。

Wiiに.WADフォーマットがあるなんて知らなかった。まあ、Doomは動くみたいだけどね :)

悪魔の話をしてたら、今週初めにまさにこれを探してたところだった。もしかしたらこのプロジェクトに出くわしたかもしれないけど、今まで再生ができなかったんだよね。オフィスに古いコンソール用の予備のCRTがあるから、それで4:3のメディアをストリーミングできたら面白いなと思ってたんだけど、クライアントボックスとHDMIからコンポジットへの変換器を用意するのが面倒だったんだ。これがうまくいけば、その問題が解決できるね。