ラベル mysql の投稿を表示しています。 すべての投稿を表示
ラベル mysql の投稿を表示しています。 すべての投稿を表示

2012/12/14

XBMC for Android 設定とMySQL対応

更に快適なXBMC環境にするためにってことで、普通に設定で出来そうなことを色々やってみました。結果、どれも問題なく、いい感じです。以下、自分が行った設定です。


システム設定

外観(Appearance)

日本語化(誰もがやることですね。順番が大事かも)
  1. Skin>Font=>Arial Base
  2. International>Character Set=>Japanese(Shift-JIS)
  3. International>Language=>Japanese
天気予報 (役に立つような立たないような・・)

一般>設定の"Location setup"からLocation 1を選んで、"tokyo"って入れて出てくるメニューから適当に選んで設定。Location 1に"Tokyo,Japan"とか表示されたらOKする。

サーバー

ネットワーク経由のリモートアプリから制御できるように
  • Webサーバー>HTTP経由でのXBMCの制御を有効に=>オン
  • リモートコントロール>システム上のプログラムによるXBMCの制御を許可=>オン
システム
  • オーディオハードウエア>オーディオ出力=>HDMI
  • 入力デバイス>リモコンによるキーボード入力=>オフ
  • 入力デバイス>マウス・タッチスクリーンの有効化=>オフ(これやると外部キーボードだけの操作になる。潔し!)
MK808なので一応HDMIってやりましたが、効果はよくわかりません。パススルーのオーディオ装置をつなげている場合は、パススルー設定にすると処理が軽くなってパフォーマンスがあがるらしいですが、Android端末には関係ない話か。

フルスクリーン化(ナビゲーションバーを消す)

これはXBMCの設定じゃないんですが、XBMCのためにってことで。

Android4.0から(だったかな?)物理キーを持たないPad/Tab系Androidにはシステムナビゲーションバーが画面下に入るようになって、アプリからHide操作しても、’・・・’ってなるだけで完全には消えないんですね。ビデオ再生時もずっといるので目障りで仕方ありません。

HideBarというアプリを使うといいんじゃない?と、http://wiki.xbmc.org/index.php?title=XBMC_for_Android_specific_FAQ で説明されています。ストアには有料版がアップされていますが、無料(デモ)版がいいのでhttp://ppareit.github.com/HideBar/ から、デモバージョン入手してインストールします。たまにバナーが表示されたりしますが気にしません。

それより、これを動かすにはOSがルート化されている必要があるようです。自分は以前の記事の際にやったので大丈夫でしたが、もっと簡単な方法ないですかね。

HideBarとXBMCが連動しているわけではないので、きれいにフルスクリーン化するには手順がちょっとあります。
  1. XBMCが起動していないこと。リジューム状態ではだめです。
  2. HideBarでナビゲーションバーを消す。
  3. XBMCを起動する
すると画面全体をXBMCが使うようになりますので、ビデオ再生でTV画面全部使ってくれます。
逆に、この状態でナビゲーションバーを表示させると、XBMCが上にずれてしまいますが、またバーを消せば元に戻るんで大丈夫。この辺はOS仕様ともに改善されるといいんですが。


advancedsettings.xmlで設定

このファイルにデフォルトを変更するユーザ設定を色々書いてuserdataフォルダに置いておけば反映します。詳細はhttp://wiki.xbmc.org/index.php?title=Advancedsettings.xml

用意したxmlファイルをAndroidの所定の場所にコピーしてXBMCを再起動すれば反映されます。

adbでコピーするなら、コネクトして
$ adb push advancedsettings.xml /sdcard/android/data/org.xbmc.xbmc/files/.xbmc/userdata
ストレージマウントしてコピーしても同じです。

自分は以下の設定を行いました。

<splash>

splashをfalseにすると起動時にスプラッシュロゴ表示がなくなります。

<video>

シーク時間設定
これが出来ないと自分にとって何の意味もないんですが、XBMCはちゃんとできます。

左右キーでのシーク時間変更 timeseekforward と timeseekbackward
上下キーでのシーク時間変更 timeseekforwardbig と timeseekbackwardbig

これ以外にもvideoタグ内では色んな設定が出来ますね。

<videodatabase> と <musicdatabase>

ビデオデータベース変更

ライブラリとか視聴記録とかの管理データを、内臓データベース(SQLite3)から外部データベースへ変更することが出来ます。
メリットは、データベースを外部に持つことで複数のXBMC端末からライブラリを共有できるようになることかなと思いますが、自分が考えているのは、地デジ録画システムから視聴した場合でも情報が連動するように出来たらいいなぁと思ってます。


実際にXBMCに食わせたadvancedsettings.xmlがこちら
<advancedsettings>

<splash>false</splash>

<video>
  <timeseekforward>30</timeseekforward>
  <timeseekbackward>-30</timeseekbackward>
  <timeseekforwardbig>60</timeseekforwardbig>
  <timeseekbackwardbig>-60</timeseekbackwardbig>
</video>

<videodatabase>
  <type>mysql</type>
  <host>{MYSQLサーバーIPアドレス}</host>
  <name>xbmc_video</name>
  <user>xbmc</user>
  <pass>xbmc</pass>
</videodatabase>

<musicdatabase>
  <type>mysql</type>
  <host>{MYSQLサーバーIPアドレス}</host>
  <name>xbmc_music</name>
  <user>xbmc</user>
  <pass>xbmc</pass>
</musicdatabase>

</advancedsettings>


MySQLサーバー側の設定

$ mysql -uroot -p

# ローカルホストとLAN上のホストからアクセス可能なユーザ'xbmc'を作成
create user 'xbmc'@'localhost' identified by 'xbmc';
create user 'xbmc'@'192.168.1.%' identified by 'xbmc';

# 'xbmc'ユーザにデータベース作成権を与える
grant all on *.* to 'xbmc'@'localhost';
grant all on *.* to 'xbmc'@'192.168.1.%';

flush privileges;
exit;

別ホストからアクセスできるように設定変更

$ sudo emacs /etc/mysql/my.conf
bind-addressの行をコメントアウト
$ sudo service mysql restart
リスタート

ポイントは、'xbmc_video'とか、自分でデータベースを作ってはいけないということ。
XBMCがデータベース自体を作成します。最初これを理解していませんでした。

デバッグログ出力を有効にして、/data/data/org.xbmc.xbmc/cache/temp/xbmc.log を読んでエラー箇所を見つけてやっと理解しました。自ら作ろうとしてるぞ?!ってね。

作成できるように強い権限を与える必要があるため、上のように、localhostとLAN内からのアクセスに限定しています。

古いバージョンデータベースを見つけたらアップデートは勝手にやってくれるようですね。空っぽのxbmc_videoDBを最初作ってしまったものだから権限与えてもエラーになっていて、ちょっとハマりました。

advancedsettings.xmlでデータベース名を'xbmc_video'って書いてありますが、データベース名のprefixを指定しているにすぎません。実際のデータベース名はXBMCのライブラリバージョンごとに変わるようです。
実際には'xbmc_video75'と'xbmc_music32'というのがXBMCによって作られました。
最後の数字はライブラリバージョンらしいです。

これで地デジ録画サーバー上のMySQLにXBMCのライブラリが共存するように出来たので、視聴記録の連動とかがしやすいかな。

次はある意味、設定変更なんですが、再ビルドしないとならない自分勝手な変更を行う内容を書く予定。

2012/06/01

wavecast録画ファイル名をどうにかする

epgrecならばファイル名カスタマイズ設定が出来るんでいいんですが、wavecastシステムのほうだと「UHF-channnel-date-time-s.mp4」って感じなのです。普通にブラウザベースで視聴するだけなら別にこれでもいいんだけれど、iTunesへ登録してAppleTVとかiPadで見たりしているとファイル名が重要なんです。AppleTVだとサムネイルが出るまですごく時間かかったり、出なかったり・・・なのでね。

と言うことで、録画ファイルをiTunesへコピーする段階でファイル名を番組名にしようと思います。

データベース(MySQL)から抜いてくる


ブラウザで録画した番組リストを出した時の番組名とかは、MySQLのデータベースに記録されているので、そこから引っこ抜いてくればいいやと。

で、調べまして、wavecastのデータベースには、vidrecとかv_vidrecっていう録画した番組のレコードがあると。その中にvid_fileがファイル名、vid_nameが番組名らしいと。

そして作成したファイル名変換スクリプト”v_rename.py”が、こちら。

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import re
path = sys.argv[1]
fname = re.sub(r'^.*/','',path) #パスを消す。os.path使う?
fname = os.path.basename(path) #パスを消す。
vname = fname = re.sub(r'-s.mp4$','',fname) #-s以降を消す


import MySQLdb
from MySQLdb.cursors import DictCursor


try:
    con = MySQLdb.connect(host="127.0.0.1",charset="utf8",
                          db="XXX",user="XXX",passwd="XXX")
    cur = con.cursor();


    if cur.execute("select vid_name from vidrec where vid_file='"+fname+"'") > 0:
        row = cur.fetchone()
        vname = row[0] + fname.split('-')[2] # 日付追加


except:
    cur.close()
    con.close()


print vname
os.rename(path,path.replace(fname,vname))
(db,user,passwdは自分のに合わせて下さい。まあ皆同じだろうけれど)

ファイルパスを受け取って、UHF??っていう名前だけにして検索して、ヒットした番組名に変換です。
直接os.rename()でやってますが、シェル上でやろうとすると日本語コードがらみで面倒くさいので変換までやります。ヒットしなければ同名のまま。っていう処理です。

pythonで書いてありますが、/root/task内処理がpythonベースなので揃えたまでです。
このままでも動きますが、ちょっとでも効率良く動いてもらうために
$ python -m compileall v_rename.py
$ chmod +x v_rename.pyc
ってやって、pycの方を使うようにします。

cpとmvの間か

作ったスクリプトを、/root/taskに入れておいて、以前作ったitunesへのコピースクリプトが

cp $1 /media/nas1/iTunes/
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
な感じなので、

cp $1 /media/nas1/iTunes/
python /root/task/v_rename.pyc /media/nas1/iTunes/UHF*
mv /media/nas1/iTunes/*.m* '/media/nas1/iTunes/iTunes に自動的に追加'
でいいかなっと。
コピー後のファイルパスをちゃんと作って渡すのが面倒くさいのでUHF*ってことにして続きはOSに補完してもらうことにしました。

これで利用しやすくなるかな。