« Windows10 Edge環境でネイティブサポートされたHLS再生をTvRemoteViewer_VBで活用 およびiOS/Androidのネイティブプレーヤー機能追加 | トップページ | TvRemoteViewer_VB バージョンアップ支援ツールを公開しました »

2015年9月 7日 (月)

Android TVでTvRemoteViewer_VBを使う

以前の記事でTvRemoteViewer_VBをChromecastに対応させた顛末を書きましたが、実際に使ってみて、PCの作業中にも独立して動いて悪影響を与えず、安価に増やしていける「ながら観」環境に最適と、我ながら気に入ってあっという間に追加で2個も買い足してしまったのですが、一方実況コメント付きの再生にはやや性能が不足気味なのが気になっていました。

単にテレビや録画再生を流すだけなら十分なのですが実況表示の負荷には弱いため、コメント表示数を絞らざるを得ない弱点はあります。
これは致命的ではないのですが、そうはいっても同じ作りのままでもう少し性能が上がればもっと使い易く万人向けになるのになぁ、と想像してある日ぼんやりとネットをサーフィンしていたところ、ぴったり来そうな機器があ~るじゃありませんか!

Nexus Player

製品の概要を調べたところ、何となくAndroidの名前を冠する事からも判るようにOSからしてChoromeOSではなくAndroidっぽいので、互換性がどの程度あるのか、あるいはまったく無いのか判りませんでしたが、たとえAndroidでもTvRemoteViewer_VBは普通に動くし、値段も1万円前後で年内なら2千円のクーポンが付くので実質8千円・・う~んこうなったら毒を食らわば皿まで・・・ということでポチってしまいました。(実際に皿型ですが。。)

もちろんこの目的ならもう少しだけ奮発すればスティックPC という選択肢もあり、前記事にある通りWin10EdgeのHLSサポート機能を活かせばより高性能な環境が得られます。(特に実況表示は非常に滑らかになると思います。)
しかしWindowsマシンなりに手間のかかる所はありますので、PCとして使う目的がないならこの辺が良い選択になるのではないでしょうか?専用アプリはまだいろいろ不安定な所があるようですが、単なる「Chromecast上位機種」として使う分には安定して使えることが確認できましたし、以下で説明するように性能は価格差以上のものがあります。

またAndroidTVはソニーやシャープのテレビにもこれから搭載されるそうで、いわゆる「スマート」な「テレビ」の今後の本命になる可能性もあるので、そのようなスマートテレビにもっとスマートな仕事をしてもらう連携機能としても重要・・というのは自分の行為に対する後付けの言い訳です。

さて、Amazonから届いて早速開封し、まずはモニタにつないでセッティングしてクロームキャスにロゴからして似ている Nexussettings0 キャスト機能らしきものも設定して、とりあえず何か反応はあるかな?と思ってクロームキャストと同じ手順でTvRemoteViewerから起動してみたところ

Nexuscast2

あれ?動いちゃった。クロームキャストと見分けがつかない勢いで動いてしまいました。動画の自動スタートも普通に出来ています。
ちょっと拍子抜けしました。これから1週間ぐらい悪戦苦闘するつもりだったのに。。

しかし動きを詳しく調べてみると動作は全く同じではなく、何故かボリューム調整やミュートの機能は効かず、またライブストリームでのシーク動作も受け付けないなど、(ソフト制作した立場から見れば)いかにもシステムからは普通のAndoroid端末と見なされている面があります。
なぜそういう違いが出るのか調べてみた結果、Android TVとChromecastの面白い関係が判り、また結果として、完全にChromecastと同じ動作をするバージョンが完成しました。
 (→TvRemoteFiles ver1.37としてリリースしました。ダウンロードや導入方法はこちら

最初にも書きましたがAndroidTVは、今回テストしたNexus Playerのような外付け機器だけではなく、今後市販のテレビにも広く搭載される可能性があります。というかそういう方向性がGoogleとしても本命で、AppleTVやFireTVとの対抗の意味でもいち早くメーカーと組む数の勝負を仕掛けている感じですね。
もちろんそれらのテレビで正直にTvRemoteViewer_VBが動かせるかどうか保証はありませんが、TvRemoteViewer_VBは、AndroidTVの最大の存在意義と見なされる動画ストリーミング再生機能をそのまま使って動きますので、予想ではどのAndroidTVでも動き、画質の高いテレビであればその性能をフルに活かせると思います。
(家電メーカーがこぞってAndroidTVやFirefoxOSを採用し始めたのは、皆「スマートTV」の重要性に突然目覚めたからではなく、YouTubeのようなアプリを今後Google等はガラパゴスな環境用には提供してくれないのが明確になったからと思われ、まんまと誘導されたとも言えます。
したがってわざわざAndroidTVを載せたのにストリーミングアプリの機能が省かれるという事は有り得ないと思われ、また例えばAndroidTVには限定した映像出力しかさせないというのも、YoutubeやNetflixの4K動画が映る事を売り物にしたいという電機メーカーの思惑からすれば馬鹿げてますので、制限なしに各社自慢の高画質エンジンもしっかり使えると思います。)

せっかく買った最新型テレビなのに色々な機能が使いにくくて気に入らない場合、TvRemoteViewer_VBをその上で動かすことで活用シーンが広がるかもしれません。(まあある意味乗っ取る形になるのですが。。)

という感じでAndroidTVで動かすのはいろいろ面白い広がりがあるかもしれませんので、今回独立した記事にしました。

1.AndroidTV (Nexus Player) の準備

Nexus Playerの筺体は図のようになります。

Nexuscastabout

Chromecastと比べれば随分大きいのですが、Chromecast自体が非常に小さいので大きく見える面もあり、Nexus Player自体の大きさは大きめのハンバーグ程度です。
とはいえ流石にテレビにぶら下げたままという訳にもいかず、ちょっとした設置スペースが必要になります。給電はUSBではなく電源コンセントが必要です。
またHDMIケーブルは付属していませんので別途必要になりますが、HDMIケーブルは意外と太くて嵩張りますので、設置方法を考えて必要十分な長さのものを入手してください。

ちなみにカバーは細めのマイナスドライバー等で慎重にラッチを外せば開き、中は以下のようになってます。(但し通常は開く意味はありませんし真似すれば保証対象外になりますので以下略;ただこうやって中の構造を知っておいたことは個人的に後日役立ちました。)

Nexusplayerinside1s

Nexusplayerinside2s

図の真ん中にある楔形のものはアンテナか何かと思いましたが、単なる錘のようです。
図の左側の金属板は明らかに冷却板で、右側の金属版もEMC対策と冷却板を兼ねていると思います。基板の表側(上の写真)の上にあるグレーの部分にアンテナらしきパターンがあり金属板に覆われない位置にありますので、
Nexusplayerinside3s

ここがWiFiアンテナになっているのでしょう。
更に基板上の金属板を外せばモジュールも見えて来ると思いますが、かなりしっかり貼り付けてあり一緒に何が外れるか予想がつかなかったので、とりあえず腑分けはここまでにしておきます。
いずれにしろ本来の基板やアンテナの大きさからすれば筺体は半分ぐらいで良い筈で丸い必要もありませんね。最初の製品化ということで印象に残るデザインという意味もあるんでしょう。次の世代からは四角くなって大きさ重さも半分になりました、ということになるんじゃないでしょうか。

閑話休題、HDMIでテレビ/モニターに繋げば初期設定が始まりますが、あちこちに解説記事がありますので、例えばこの辺の記事を参考にすれば良いです。実質必要なのはWiFiの設定とGoogleアカウントの設定のみで、文字入力がゲーム機のようなカーソル入力という点を除けば簡単です。(Googleアカウントはここで入力するよりログイン済みのPCやスマホからペアリングする方が簡単です。)
Chromecastと違って、5GHz帯のWiFiもしっかりサポートしています。電波状態の良い設置場所ならそちらの方が速いですし、WiFi帯域の使い分けの点でも有効活用すると良いと思います。

で、これで利用するための肝心のキャスト機能の設定ですが、これは実は端末名だけ設定すれば、あとはデフォルトで動くことが判りました。
端末名の設定は以下のようにおこないます。

Nexussetting1 基本メニューの「設定」から

Nexussetting2 「端末情報」を選び

Nexussetting3 次に「端末名」を選びます。

あとはゲーム機と同じような文字入力画面になりますので、ユニークな端末名を設定してください。(ここではNexusTV1 と設定しています。)

これだけでAndroidTV 側の設定は終わりです。簡単ですね。
なぜか端末名がデフォルトのままでは次のキャストの対象にならないようですので、ここだけは必ず設定してください。

2.TvRemoteViewer_VB on Android TVの動作と特長

次にこれをTvRemoteViewer_VB で使う手順ですが・・実はこれ以降はChromecastと完全に同じになります。

Chromeブラウザ、あるいはAndroidの専用アプリからキャスト先デバイス一覧を呼び出すと、以下のように

Nexuscast1

設定した端末名がリストに現れます。これを選択すれば、あとはリモコン機能再生場所指定機能で操作できるようになります。
ということで操作方法はリンク先をご参照いただければ良いです。

ただしアプリ本体の操作上の違いは全くないのですが、付属しているリモコン

Nexusremo
の「戻るボタン」にはお気をつけください。

通常のリモコン操作では多用するボタンですが、一旦Castが始まるとこれを押しただけでCastアプリが終了してしまいますので、リモコンはどこかに隠した方が良いかも。(TvRemoteViewer_VB動作中は付属リモコンの操作は全く不要です。それどころかNexus Playerは起動と同時にTvRemoteViewer_VBの操作を受け付ける状態になりますので、設定時や他のアプリで使う時以外は付属リモコンは不要になります。)

以上のように機能についてはChromecastと完全に同じですが、性能はだいぶ上のようで、私がjavascript処理能力の簡易指標にしている「ファイル再生リスト読込み限界件数」で比較すると

Nexuscapacity Nexus Playerの場合

Cccapacity Chromecastの場合

4倍近い性能差があり、手許の機器と比較してもiPad2より少し上の能力で、HLS動画再生支援も強力です。絵のような弾幕状態では

Nexuscast3

Chromecastの数倍多くのコメ表示にも耐えられ、コメの動きも滑らかです。
(但しPCと比べればコメントは微妙にカクつきますが、Chromecastだと性能上の制約からコメントのリフレッシュレートを意図的に下げざるを得なかったのに比べると、Nexus Playerにはそういう制約も殆どなく、十分に自然な動きになります。)
ただそれでも限界はありますので、もし動画再生が追い付かなくなったらコメント数上限を絞るか、解像度を下げてみてください。

また、長時間使っていたり待機させていると、コメントのカクつきが大きくなったり画面が止まりがちになったりなど、動作自体が重くなることがあります。そういう時はとりあえず、リモコンの基本タブにある「ページを再ロード」をやってみてください。

Ccremo3_reset

これを押すと、レシーバーアプリを再起動しますので、ある程度動きは回復します。

ただし根本的にはメモリにゴミが溜まっていくのが動作が重くなる理由なので、そういう時にはトップページ「Cast」タブのデバイス操作かAndroid用専用アプリから「キャストを停止」あるいは「デバイスアプリ強制終了」を選んで一旦NexusPlayer/Chromecastを切り離した後、再度デバイスを接続してストリームに再接続してください。
内部的にブラウザが再起動されてバッファのゴミも掃除され、元のきびきびした動きに戻ります。

後日、この「長時間動かしていると動作が重くなる」という問題がいろいろ動作条件を変えても起きるため、「CPUの過熱によるスローダウン」が起きているのではないかと疑ってみました。(同じBay Trail系Atomを使ったスティックPCでもスローダウンの問題が報告されていたのが理由です。)
そこで、図のようにフタを開けた状態でCPUの風通しを良くしてみたところ

Nexusplayernaked

かなり問題が起きる頻度が減りました。どうやらNexus Playerで動作が重くなる原因の1つに、「CPUの過熱」がというのが結構な頻度であるようです。特に上記のような「内部ブラウザの再起動」で状況が改善しない時は、まずはこの現象が疑われます。

ただしこの対策は、「フタを開けるだけでなく基板も一旦外す。」「CPUが表側に来るように上蓋にネジ穴を穿けて基板をそちらに固定し直す。」「CPU直上あたりにヒートシンクを接着する。」というようなちょっと大胆な工作が必要ですので、「オクで売ったりせずこれで遊びつくすぜ!」ぐらいの蛮勇のある工作好きでないとここまでやるのは躊躇すると思います。それでも、スローダウンの現象が頻繁に出る時には触ってみて熱くなる方の面に熱が籠らないように置き直す、とか、風通しの良いところに置く、ぐらいの対策でも効果はあるのではないかと思います。

Nexus Playerは「Chromecastの狙いどころはいいんだけどちょっと性能や安定性が物足りない」 という方にお勧めのデバイスになります。
Chromecastには後継機種の噂もありますが、作りからしても熱対策上、これと同じレベルまで一気に性能向上することもないと思います。ただ性能を上げればより使い易くなるのはこのNexus Playerが良い見本になるので、期待したいですね。

以上がNexus Playerの性能概要です。これがAndroidTV一般の話となると、メーカー製テレビに搭載されたエンジンの能力はそれぞれのメーカーの考え方次第だと思います。ただ予想するとこれと比べて悪くはならないんじゃないかと思います。
理由は最初にも書きましたし、またモバイル機器ほど省電力のために妥協する必要も無いので、性能のためにこれと同じ程度のコストはかけられるのではないかと。

3.Android TV対応の概要

使い方の話は以上で終わりで、以後はTvRemoteViewer_VBをAndroid TVに対応させる上で手を加えた点の概要です。

最初に書いた通り、Nexus PlayerはTvRemoteViewer_VBに何も手を加えなくても動き、最初からリモコンアプリでの操作が可能でした。

ただしUserAgentを見ると以下の内容になっており
Nexusuagent

今までの判定基準だとAndroid端末上のChromeブラウザそのものと見なされる内容で、確かに動画再生は「Projekktorの上で動いている」「通常のAndroid端末」の動作をしていました。むしろ何故いきなりリモコン制御できたかの方が不思議でした。
(通常のAndroid端末でもリモコン制御ONにできるが、デフォルトではOFFになっており、トップページで設定する必要がある筈。)
これを調べてみたところ偶然ですが、以下の仕組みが働いていました。

Nexuscc

今回のNexus Playerも Chromecastと同じ仕組み、つまり同じSenderアプリとReceiverアプリがそのまま動くので、Chromecast用に作ったアプリが今回いきなり使えたわけです。(Googleではこの仕組みをGoogle Castと呼んでいますね。)

TvRemoteViewer_VBはこの仕組みの上で、(Chromecastの記事でもご説明しましたが)Receiverアプリ上にiFrameという一種の仮想環境を作って、そこでコントローラ区画とアプリケーション区画を動かします。

コントローラ区画は最初にReceiverアプリ(マスター)からデバイスIDを受け取り、これをcookieを経由してアプリ本体に知らせます。この「デバイスIDお知らせcookie」が存在することでアプリ本体は自分がリモートで動いていると理解してリモコン制御用のタスクを起動する仕組みになっており、今回いきなりリモコン制御が効いたのはこれが理由でした。

しかし動画プレーヤーの選択については従来この仕組みではなくUserAgentの内容を見て判断しており、こちらではAndroidタイプと判断されたため、Androidで何も設定していないのと同じ状態の動画プレーヤーが起動したわけです。

これでもAndorid環境で常用される機能が動いているわけで、だから不便という訳ではなく、むしろChromecastではブラウザ上でNativeのHLSは動かなかったのに、この場合標準的なAndroid端末としてもNative HLSをサポートしていて(だからこそProjekktorが動いた)総じてそれほど悪くはないのですが、機器の使われかたからすれば

1)アプリから音量制御ができない。
2)ライブストリーミングやエンコード未了のファイル再生でシークができない。

という点は弱点になります。これらはアプリ側が動作を抑止しているのではなく、実際に該当コマンドをシステムに送っても効かない、つまりシステムとして通常のAndroid上のHTML5アプリと同じ抑止をしていることがわかりました。

まあ2) は付加的機能なのでまだ良いとしても、1)は利用上困ります。
(スマホ・タブならボリュームボタンで直接調整すれば良いですが、AndroidTVの場合はテレビ用のリモコンで音量操作するか、またリモコンのないモニタ等では直接モニタを弄るしかありません。)

どうしたもんだろうと考えながらふとChromecastでプレーヤーを実装する際に利用したライブラリとAPIの解説

https://developers.google.com/cast/docs/player

を見直したところ、根本的な話ですがこれは「Chromecast」用の解説ではなく、「Google Cast」用の解説ということに気が付きました。

なんだ、簡単ですね。AndroidTVのCast機能もGoogle Castの仕様に則っているとすれば、今まで「Chromecast」用と思って作った造りをそのままAndroidTVにも適用して、同じライブラリと同じAPIを利用すれば(つまりChromecastと全く同じアプリ動作にすれば)、1) のボリュームコントロールも標準で使えるようになるわけです。

また2)については前記事で比較したものがあるのですが、「最も出来の良いChromecastのHLS再生の機能」がそのまま使えるようになります。
実際にChromecastと同じロジックが動くようにしてみたところ、「速いChromecast」として全く同じ操作ができるようになりました。

このライブラリがどうやってAndorid&ブラウザ上の制約を取り払ってその辺の機能を加えているのかは謎です。ちなみに通常のAndroidでこのライブラリを使おうとしても弾かれますので、何らかのファームの機能と連携しているものと思われます。

ここが今回の大きな気付きで、むしろ今まで各種プラットホームの性格の違いを見てきたことで、AndroidがベースならAndroidと同じ癖があるだろうという自分の先入観が邪魔していたことが判りました。
実際はGoogleとしてはChromecastもAndroidTVもCastアプリについては「Google Cast」という共通のプラットホームにしていて、OSの違いはライブラリが吸収するようになっていたわけです。
もちろんもっと細かい所を見ていけば違いは出て来るのかもしれませんが、原則Google Castの仕組みに沿ったアプリを組んでおけばどちらも高いレベルでの互換性があることになります。

ちなみにTvRemoteViewer_VBはこの方針で行くとして、(後日わかった余談として)一部のGoogleCast対応アプリではこの互換性の対応をきちんとやっていないものもあるのが判りました。
具体的な例はGoogle自身の「YouTube」で、Chromecastでは操作側の音量バーに連動するのにNexusPlayerでは操作端末での音量調節ができません。(テレビのリモコンで音量調節しろ、とガイドまで表示されます。) Media Player Libraryを使っていないように思えますが、あるいはYouTubeの「Cast」ボタンは色形こそ同じCastボタンに見えても元々GoogleCastとは別系統のアプリ連動の仕組みであって、後付けでChromecast連動機能も追加している気もします。(AndroidTVで動いているのはGoogleCastアプリではなく専用アプリで、使い勝手が違っているようにも見えます。なにしろGoogleCastを全くサポートしていない筈のFireTVに対しても同じ手順で「Cast」できますので。)

さて閑話休題、残る問題はどうやってアプリ側がGoogle Castの上で動いている時に「自分はGoogle Cast上で動いている」と自覚させるか、です。
UserAgentでは
Nexusuagent

「通常のAndroidの内容」に加えて「Nexus Player」のような文字がありますが、これは当然ソニーやシャープのテレビでは異なるので汎用性がありません。

そこで、この節の最初の話に戻って、Cast特有の仕組みに統一することにしました。

Nexuscc_2

つまり、Google Castで動くアプリは必ず専用のSenderとReceiverアプリが介在しますので、ここからコントローラ区画とアプリ本体に「今Google Castで動いてるよ」というサインを送れば良いわけです。
具体的にはデバイスIDを知らせるのと同じタイミングで、「Google Castで動いている」という識別子を伝えるようにしました。

今のところこの仕組みで動くのはGoogle Castだけですので、単に「Castで動いている」だけでも良いのですが、後々「Apple TVで動いている」という仕組みも必要かもしれませんので。。

ちなみに、Android TVはちょっと工夫すれば普通のAndroid用アプリも導入できますので、( →参考
例えばDolphin Browserを導入した上で普通のAndroid端末として、マウスやキーボードを使ってTvRemoteViewer_VBを動かす、という(当初私が想定した)方法もあると思います。
但しその場合通常のAndroid上HTML5アプリに特有の(ボリューム操作不能のような)癖が出ますので、今回のようにGoogle Cast機能を活用するやり方が最もシンプルです。
AndroidTVを名乗る製品であれば必ずGoogle Castをフルサポートする筈ですので(でなければGoogle先生がAndroidTVと名乗る事を許可しないと思います)、AndroidTVを採用する製品で広く使えるアプリとなり、また今後出て来る様々なCastデバイスでの互換性も担保されるのではないかと思います。

« Windows10 Edge環境でネイティブサポートされたHLS再生をTvRemoteViewer_VBで活用 およびiOS/Androidのネイティブプレーヤー機能追加 | トップページ | TvRemoteViewer_VB バージョンアップ支援ツールを公開しました »

デジタルTV、TS抜きチューナー」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/570024/62234426

この記事へのトラックバック一覧です: Android TVでTvRemoteViewer_VBを使う:

« Windows10 Edge環境でネイティブサポートされたHLS再生をTvRemoteViewer_VBで活用 およびiOS/Androidのネイティブプレーヤー機能追加 | トップページ | TvRemoteViewer_VB バージョンアップ支援ツールを公開しました »

フォト
無料ブログはココログ
2017年5月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

ウェブページ