2012/11/05

Android Mini PCとGoogleTVキーボードで視聴する

地デジ録画システムで録画したビデオをリビングで快適に視聴するために

ということで、久しぶりにいくつかアイテムを購入しました。
まだ肝心なものが届いていなかったりするんですが、思惑と、途中経過+α情報です。

前置き
AppleTV(3rd)をリビングTVに繋いでますが、ほとんど使っていない状況。
なぜならブラウザが載ってないから。JBも今だ出来ないようだから。見切りをつけました。

別手段として、Android Mini PCを使うことにしました。
ソファーに寝そべって操作したいので、USBワイヤレスキーボードも用意します。

キーボード
  手のひらサイズのメディアコントローラキー付きミニキーボード
  ジャイロ内蔵でマウス操作は本体を傾けて行う。

  普通サイズのキーボードにマウスパッドとメディアコントロールキーが付いているやつ
  K700というモデルです。K400というフルキーボードのみもありますが、K700の方が安いんです。

どちらも英語キーボード。自分は元々英語キーボードしか使えない体質なのです。
K700の方は日本では販売されていないようです。
逆輸入業者を通すととっても高いので、私は以下で購入しました。


中国のオンラインショップでございますが、amazonに比べて一割程度安いです。
日本への発送も無料です。ただし届くまですごい日数がかかります。
スピードアップするにはDHLを選択することもできますが、千円以上の送料が係ります。
2,3千円の商品にそれはいやなんで。15日くらいかかりましたが無事到着しました。


USB無線モジュール付いてないんじゃ?って不安でしたが両方ともちゃんと付いてました^^;

Android Mini PC
これも流れでAliExpressからの購入です。自分が購入したときは$72.00でしたが、今見ると買えなくなっていました。品薄なのか、$82.00に値段が上がっているページへのリンクになってました。
上のモデルは「MK808」と言われているやつです。色んなメーカーから出てますね。

残念ながら、これがまだ到着していません・・・
が、MK802は所有しているので、そっちに接続してテストしてみました。

キーボードはどちらか使いやすい方をと思って2種類買いましたが、どちらも甲乙つけがたいくらい使えます。iPazzPortのジャイロマウスは慣れるまでちょっと・・・ですが30分くらいで慣れました。
スマホくらいの大きさでデザインもいいのでリビングに置いてあっても違和感がないです。

MK802あるのになぜまたMK808を買ったか?なぜならMK802は遅いんです。AndroidOS2.3くらいがちょうどよいハードに無理やり4.0乗せちゃった感じです。なので期待を込めてMK808を購入しました。巷の評判は良いようですし。

ついでに日本語入力について

ネットでは日本語キーボードを接続してキーマップ変更して・・っていう話がよくありますが
素直に英語キーボードを使うのがいいと思いますね。キーの数も少ないので1つのキーが大きいしシルクも英数字だけなのですっきり。日本語入力も特に苦労しません。ただIMEはちょっと選んだ方がいいでしょう。

無料のメジャーIMEは、Shimeji、Google日本語入力、OpenWnn、AltIMEってところでしょうか。その他いろいろありますがフリック操作とかソフトキーボードスキンとかが違うだけかな。
これらの中で使いやすいのは、OpenWnn系だと思います。

なぜかというと、全角・半角(英数字)切り替えを、Shift+スペースキーで行えるからです。
Google日本語入力はキー操作での切り替えができないようなので却下です。

日本語入力状態から完全に抜けるにはESCキーを押すっていう手もありますね。
再度日本語入力にするにはテキスト入力するフィールドでクリック(タップ)します。
この方法ならGoogle日本語入力でもいいでしょうけど、日本語入力モードじゃないのに間違えてESCキーを押すとアプリが閉じちゃうんで危険ですね。クリック(タップ)するのも面倒です。

ということで自分はOpenWnn Plusを使用しています。Plusとしての機能は物理キーボードには不要なものなのですが、今気軽に選べるのがこれなので。
AltIMEもベースはOpenWnnなので、同じ操作が可能ですが、全角半角モードが視覚的によくわかりません。OpenWnnPlusはIMEパネルに常時表示してくれるので分かりやすいです。

ここに書いても仕方ないけれど・・・
日本の量販店のみなさん。普通に英語キーボードを陳列してください。
マニアックな店に行かなくても、海外サイトを利用しないでも済むようにしてください。

MK808が届いたら(届くかなぁ・・)ビデオ視聴環境のテスト再開予定。
MediaElements.jsとの相性も気になります。

2012/10/27

redmineを2.0.3から2.1.2へ切り替える

独自地デジ録画システムの根幹として使用しているRedmineを2.0.3から2.1.2へ切り替えることにしました。2.0.3でも特に不便はなかったんですが、jquery+ajaxな処理を色々やりたくなったので。

えーと、本家に説明されているような手順とは若干異なります。
自分の場合、自作プラグインの対応もあるので、2.0.3と2.1.2を暫く共存させて、プラグインの対応が終わったら切り替えるという手順です。

普通の場合でも、この方が無難なのでは?と思います。
会社でもいくつかのプラグインを入れていて動作確認してからじゃないと公開したくない。
同じサーバーマシン上で同居させてテスト運用してから切り替える方が気が楽というものです。

自分のredmine入れ場所は、/opt です。
いうまでもなく、OSは、ubuntuです。
テキストファイル編集は、emacsを使用してます。(ところどころ出てきます)
ということを踏まえたうえで参考にしてください。

redmine-2.1.2 インストール

$ wget http://rubyforge.org/frs/download.php/76495/redmine-2.1.2.tar.gz
$ cd /opt
$ sudo tar zxf ~/redmine-2.1.2.tar.gz
$ sudo chown -R www-data.www-data redmine-2.1.2
$ cd redmine-2.1.2
$ sudo bundle install --without development test postgresql sqlite rmagick

データベースコピー

$ cd (どこでもいいですね)
$ mysqldump -uredmine -predmine redmine > redmine2.sql
$ mysql -uredmine -predmine
create database redmine2
exit
$ mysql -uredmine -predmine redmine2 < redmine2.sql
$ rm redmine2.sql


バックアップというよりは、2.1.2用のDBを作成して2.0.3のDB内容をコピーするって感じです。


設定

$ cd /opt/redmine-2.1.2
$ sudo cp config/database.yml.example config/database.yml
$ sudo emacs config/database.yml
production:
adapter: mysql2
database: redmine2
host: localhost
username: redmine
password: redmine
encoding: utf8
データベースを'redmine2'を使うようにしておきます。

適応

$ sudo rake generate_secret_token
$ sudo rake db:migrate RAILS_ENV=production

apache2/passenger

$ sudo emacs /etc/apache2/conf.d/redmine.conf
RailsBaseURI /redmine2
$ sudo ln -s /opt/redmine-2.1.2/public /var/www/redmine2
$ sudo service apache2 reload

この辺は人によって色々でしょう。とにかく新旧両方へアクセスできるようにしておきます。

オプション

htmlタグ解禁
lib/redcloth3.rbのALLOWED_TAGSに解禁したいHTMLタグを羅列するだけ。

$ sudo emacs lib/redcloth3.rb

#    ALLOWED_TAGS = %w(redpre pre code notextile)
    ALLOWED_TAGS = %w(redpre pre code notextile html head body title isindex base meta link script h1 h2 h3 h4 h5 h6 hr br p center spacer div blockquote listing xmp address noscript span font basefont i tt s b u strike big small sub sup em strong code samp kbd var dfn q cite ul ol li dl dt dd table tr th td caption a img map area form input select option textarea applet param frameset frame noframes &quote &amp &lt &gt &nbsp &copy)

自分はこんな感じにしています。

farend_basicテーマ

自分は2.0.3で使用していたので、単純にコピーしました。
$ sudo cp -r /opt/redmine-2.0.3/public/themes/farend_basic /opt/redmine-2.1.2/public/themes/farend_basic
新規に取得する場合は、https://github.com/farend/redmine_theme_farend_basic/downloads から。

redmine_video プラグイン インストール (自作なので自分だけですが)

$ cd /opt/redmine-2.1.2
$ sudo cp -r /opt/redmine-2.0.3/plugins/redmine_video plugins
$ sudo ln -s /opt/videos public/videos
$ sudo rm -rf files
$ sudo ln -s /opt/videos files

redmine-2.1.2/Gemfile.log がrootになってしまい、パーミッションエラーがでたので・・・
$ sudo chown www-data.www-data Gemfile.lock

プラグインのマイグレーションはデータベースを完全コピーしているので不要です。


一応これで、入るには入って、Redmine自体は正常起動しましたが、prototype.jsなメソッドを使用しているビューでエラーになりました。これからこの辺を色々jqueryなものに書き換えていく作業です。


プラグインとか、ちゃんと動くようになったら

config/database.yml のdatabase:を元々の’redmine'に変更
$ sudo rake db:migrate RAILS_ENV=production
$ sudo ln -s /opt/redmine-2.1.2/public /var/www/redmine

こんな感じの手順を踏むだけで、切り替え完了です。

2012/10/04

MediaElement.jsのキー操作でCMスキップ

ここしばらく、録画されたビデオを視聴するってことに取り組んでいる。前回記事ではMediaElement.jsを組み込んで動くところまでは確認した。

今回は、やりたかったことの一つ、CMスキップについて

その前に、その他のビデオプレーヤーフレームワークはどんなもんだろうか?と思って HTML5 Video Player Comparison を参考にいろいろ試してみた。
JWPlayer、LeanBackPlayer を入れて動かしてみたけれど、MediaElement.jsみたいにFirefoxで簡単に見れるようにしてくれなかった。その時点でパスって感じ。メンドクサイのはいやなのです。
でも、LeanBackPlayerは普通の使い方としてはインプリメントも簡単で悪くない感じだった。

キーアクションにコマンドを割り振る

よくカスタムコントローラを作るっていう記事やサンプルがあるけれど、HTMLページに操作ボタンを付けたところで、フルスクリーンで視聴すると操作できないじゃん。
カスタムコントローラにカスタムボタンを追加することが出来ればいいんだけどね。これはこれで可能なのか?も含めて調べ中。
今はとにかく一番簡単確実な組み込み方法として、キーボードに機能を割り振ることでやってみる。

で、どうやるの?
MediaElement.jsのサイトでもサンプルでもキーアクションについての記述がどこにもない。
Player Options で、keyActions: [] って書いてあるだけ。仕方がないので(っていうかそうすべきなんだろうけど)JavaScriptソースを読んで、理解する。

標準キー操作
  • [SPC]  プレイ・ポーズ切り替え
  • [UP]   サウンドボリュームアップ
  • [DOWN] サウンドボリュームダウン
  • [LEFT]  5%先送り
  • [RIGHT] 5%後送り
  • [’F’]   フルスクリーン切り替え
こんな操作ができるようになっていた。おおっ。既にシークが自分がアサインしたいキーに振られているじゃないですか。一瞬困ったけど、素晴らしいことにプレイヤーオプションの方で、どのくらいシークさせるかを定義する関数が独立しておりました。
デフォルト設定は、

                // default amount to move back when back key is pressed
                defaultSeekBackwardInterval: function(media) {
                        return (media.duration * 0.05);
                },
                // default amount to move forward when forward key is pressed
                defaultSeekForwardInterval: function(media) {
                        return (media.duration * 0.05);
                },
となっている。media.duration(全体の長さ)の5%っていう簡単な関数。これを上書きしてあげれば良さそう。

ビューの最後を以下のように変更

前回記事
<%= javascript_tag "$('video').mediaelementplayer()" %>
としていたところを、
<%= javascript_include_tag "mediaelement_conf.js", :plugin => 'redmine_video' %>
に変更。HTMLにJavaScriptコードを長々と書きたくないから。

assets/javascripts/mediaelement_conf.js
$('video').mediaelementplayer({

    iPadUseNativeControls: true,

    defaultSeekBackwardInterval: function(media) {
        return 15;
    },
    defaultSeekForwardInterval: function(media) {
        return 15;
    },
});

プレイヤーオプションの中にその関数を書いてオーバーライドする。これでLEFT、RIGHTキーで15秒スキップが出来るようになった。もちろんフルスクリーン状態でも大丈夫。
ただし、HTML5ビデオネイティブの時だけ。すなわちFirefoxでSilverlightプラグインで視聴しているときは効かないようだ。しょうがないけどちょっと残念。

GoogleTVコントローラもいけそう

ソースを読む限りだと、これらのキー操作がGoogleTVコントローラコードからも機能するように書かれている。ということは、Android端末でGoogleTVコントローラ使って自分の録画ビデオの再生制御が出来そうってことか。

カスタムキーアクション追加

keyActions:
[
 { keys: [キーコード,キーコード,・・・], action: function(player, media) {処理色々・・} },
 { keys: [キーコード,キーコード,・・・], action: function(player, media) {処理色々・・} }
]
って感じでmediaplayer()オプションのkeyActionsへ追加して行けば、どんどん自分のカスタム処理をキーに割り振っていける。

ブラウザのコントローラカスタマイズに拘らずにキーボードアクションの方が使い勝手がいいかもね。


今の悩みどころ

MediaElement.jsは使い勝手が良くてとってもいいんだけれど、jquery.jsを必要とする。他のフレームワークもほとんどがjquery依存のものが多い。
だけれど、redmine2.0.3はまだjqueryベースじゃないのだ。
幸いなことにprotptype.jsと混在していてもこのフレームワークの動作には問題ないらしい。

一番困るのがajaxだ。従来通りの記述で表現してみても、jqueryな書き方してみても、どちらもajaxによる非同期処理が機能しなくなってしまうのだ。

本来、rails3 + jqueryでもajaxは問題ないはず。だけれどもredmine2.0.3はrails3だけれどjqueryベースじゃないためか動作がわけわからない感じになる。

試しにjquery-railsをgemインストールして、プラグインのGemfileに'jquery-rails'を追加してみたけれど、希望通りに動いてはくれなかった。jquery.jsをインクルードしなければ昔通りのremote_functionとかはちゃんと動く。インクルードしなければね。MediaElement.jsは動かないけどね。本末転倒。

ここら辺でやりたいことは、再生イベントからフォームコミットをしてリモート(ajax)でサーバーへ送信したいのだ。出来ればページ更新は一切せずに非同期で行ったきりにさせたい。

自分はビデオ操作情報をサーバーへ送りたいだけなんだけど。なぜにそんな簡単そうなことがこんなに難しい・・・素人にはお手上げ気分。

この辺の実装をするには、最近リリースされたredmine2.1.2なら大丈夫なのだろうか?
話によると、redmine2.1.xはやっとjqueryベースになったということらしいけど。
もうしばらく今の状態を楽しんだら、やってしまおうかな。