2010/11/25

2台以上のXBMCでライブラリデータベースを共有・シンクロさせる方法


XBMCのライブラリは本当に素晴らしいです。2台以上XBMCがある場合にもNAS上のファイルをライブラリに登録しておけば同じコンテンツは共有できます。ですが、どうやって同じライブラリを維持するのか、rsyncでデータベースファイルを同期すればいいのか、など色々考えていました。ですが、少し調べてみたらr28117よりも新しいバージョンであれば、MySQL上にライブラリを置いて複数台のXBMCから参照する事ができるようです。これはホントに素晴らしい機能です。つい先日ガレージのPCに2つ目のXBMCを導入したのもこの機能が使いたいが為です。

これでどんな事ができるかというと、

  • ライブラリの共有
    2台のXBMCでスキャンを繰り返す必要がなくなります。視聴済み情報も共有されます。
  • Bookmark、一時停止箇所の共有
    リビングで観ていたドラマの続きを別の部屋で観るといったことができます。
まあ後者もライブラリの一部なので、一言で言えばライブラリが一元管理できるということですね。では早速やってみましょう。

必要なもの : 2台以上のXBMC、各XBMCから(同じpathで)参照できるコンテンツ、MySQL

僕の場合コンテンツは全てNAS上に置いてあって、MySQLは玄箱で動いていたのをそのまま使っています。

  1. すでにライブラリを構築しているXBMCと、新たに作成するXBMCがあるとします。前者を親、後者を子と仮に呼びます。子は複数台あっても同じ手順でOKです。
  2. 親XBMCで、既存のライブラリをエクスポートしておきます。まずはビデオ。[設定]-[ビデオ]-[ライブラリ]-[Export Video Library]で"Single file"を選択し、任意のディレクトリに保存します。ライブラリの量にもよりますが、時間がかかります。
  3. 次にミュージックライブラリのエクスポート。[設定]-[ミュージック]-[ライブラリ]-[Export Music Library]で"Single file"を選択し、こちらも任意のディレクトリに保存します。これらのエクスポートしたライブラリは後ほど使用します。
  4.  MySQLの設定をします。XBMC用のDB2つとユーザを追加します。まあとにかく以下の操作をしてください。
    # mysql -u root -p
    Enter password: <パスワード入力>
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 5.0.32-Debian_7etch4-log Debian etch distribution

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql> CREATE USER 'xbmc' IDENTIFIED BY 'xbmc';
    Query OK, 0 rows affected (0.00 sec)

    mysql> GRANT ALL ON *.* TO 'xbmc';
    Query OK, 0 rows affected (0.00 sec)

    mysql> CREATE database xbmc_video;
    mysql> CREATE database xbmc_music;
    これでユーザ名xbmcパスワードxbmcでXBMCから接続ができるようになります。
  5. 次に親XBMC側で以下のディレクトリに"advancedsettings.xml"というファイルを以下の内容で作成してください。
    Linux: /home/xbmc/.xbmc/userdata
    Windows: %APPDATA%\XBMC\userdata
    <advancedsettings>
        <videodatabase>
            <type>mysql</type>
            <host>mysqlサーバのIP</host>
            <port>3306</port>
            <user>xbmc</user>
            <pass>xbmc</pass>
            <name>xbmc_video</name>
        </videodatabase>

        <musicdatabase>
            <type>mysql</type>
            <host>mysqlサーバのIP</host>
            <port>3306</port>
            <user>xbmc</user>
            <pass>xbmc</pass>
            <name>xbmc_music</name>
        </musicdatabase>

    </advancedsettings>
  6.  これでXBMCを再起動し、[設定]-[ビデオ]-[ライブラリ]-[データベースの更新]を行うと、正しく設定ができていればMySQLのxbmc_videoにテーブルが追加されるはずです。
  7. MySQLとのやり取りが確認できたら、親XBMCでライブラリのインポートを行います。まずビデオから。 [設定]-[ビデオ]-[ライブラリ]-[Import Video Library]で項番2でエクスポートしたディレクトリを選択してください。"xbmc_videodb_yyyy-mm-dd"のようなディレクトリです。

    ライブラリのサイズにもよりますが、僕の場合インポートに4時間ほどかかりました。。。
  8. 次にミュージックライブラリのインポートをします。[設定]-[ミュージック]-[ライブラリ]-[Import Music Library]で項番3でエクスポートしたディレクトリから"musicdb.xml"を選択してください。

  9. これでライブラリの状態が最初と同じになりました。ただ、ライブラリはMySQL上に格納されているのが違いとなります。 
  10. 次に子XBMCの設定です。項番5と同じ作業をしてください。
  11. 子XBMCを再起動すれば、2台とも設定は完了です。
早速ライブラリを比較してみましょう。親XBMCでテレビ番組の一覧を表示してみると、
こんな感じです。では同じ画面を子XBMCで見てみると、
あれ、おかしいな。バナーが表示されないぞ。。。

そうなんです。バナーやサムネイル、FanArtはMySQLに格納されないので個別のXBMCに持つ必要があるのです。現状ではライブラリをDBに置くだけではScrapeしたXBMC(ライブラリのスキャンをし、画像ファイルをローカルに持っているXBMC)上でしかサムネイル/FanArtは表示されないのです。この点については別の方法で解決したので、また別途紹介します。今回はとりあえず、ライブラリの共有がうまく行っているかを引き続き確認します。

バナーは表示されていませんが、右上のアイテム数やページ内の番組は同じになっていて、ライブラリの共有が成功している事がわかります。また、視聴済みのチェックもちゃんと同じになっている。素晴らしい。かなり画期的な事ですよ、これ。

次に気になる一時停止の情報が共有されるかを試してみます。親XBMCで適当なファイルを再生し、以下の適当なところで停止してみます。20:14らへんで停止。

これでいつもどおりなら親XBMC上では同じ場所から再生ができます。このとおり20:15から再開するかと聞かれます。ここまでは普通の動き。

ではいよいよ、同じファイルを子XBMCで再生してみます。

全く同じ20:15から再開するか聞かれました。うおおおお!これは便利すぎる!!!

というわけで、リビングで途中まで観た映画を別の部屋で再開する、といった運用が可能になりました。なんて素晴らしいんだXBMC。

ちなみにこの内容はほとんどこのlifehackerの記事を参考にしただけです。ありがとうlifehacker。サムネイル/FanArtに関しては既にワークアラウンドを見つけたのでまた別途紹介します。

Related Posts Plugin for WordPress, Blogger...