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

2016年10月17日 (月)

TvRemoteViewer_VB 新機能について。(ショートカット機能、黒画面除去、DVD-ISO再生)

TVRemoteViewer_VBの本体記事はサイズも限界近くになりましたので、今後の大きな機能追加の説明スペースとしてこの記事を起こすことにしました。今後本体記事と併せてご参照いただければ幸いです。

1.ショートカット機能、デフォルト属性値の機能
2.画面遷移の改修(黒画面の除去)
3.DVD-ISOファイルの再生
 1)起動の待ち時間について
 2)DVD再生の基本動作
 3)必要なプログラムのダウンロードと設定
 4)制約事項
  (1)標準形式(ffmpeg)でのストリーミング
  (2) QSVでのストリーミング
4.モバイル系端末の対応強化
 1)Android端末の数種類の問題に対応
  (1) Huawei 端末対応
  (2)古いAndorid端末への対応機能追加
  (3)実況文字サイズの調整幅拡大
 2)画面フィットボタンを追加
 3)ストリーム開始ボタンを大き目に
 4)Tips 同じAndroid端末内でリモコン操作
余談の雑記
 その1)Chrome/OperaでTVRemoteViewer_VBの表示が少し大味になったと思った場合
 その2)ファイル/プレイリスト画面の改良
 その3)その他小ネタ

1.ショートカット機能、デフォルト属性値の機能

TVRemoteFiles Ver1.82以降ではショートカットの機能を追加しました。

Q1_2

これはS1~S12のショートカットボタンを押すだけでテレビ放送またはプレイリストを呼び出せる、という機能です。

起動時には以下でご説明するデフォルト属性値が原則決め打ちで使われますが、もしショートカットに設定されたチャンネルやプレイリストのストリームが既に存在していれば、その解像度等の属性値に関係なく直ぐにそのストリームに切り替わります。
これはショートカットを、とにかくクイックに目的のもの映すという意味づけにしたかったためです。

トップページにはこの機能用に☆タブが追加になりました。
リモコン機能でも図のように、基本タブにショートカットボタンが追加になっています。

Q1r

直接画面を操作する場合、ショートカットが使えるのはトップ画面のみですが、リモコン制御下では大抵の画面でこのショートカット機能が使えます。画面切替え時にはショートカット情報をファイルから読み込むのに数秒のタイムラグがあるため一瞬ボタンが消えることはありますが、基本的には旧式テレビ番組表画面や起動中の黒画面を除くほぼ全ての画面で、このショートカットが使えます。

なお、テレビ放送視聴画面ではリモコンに従来から「クイックチャンネル」のボタンがありましたが、それと使い分けできるように、スライドスイッチが付きました。

Q1rs

これで従来のクイックチャンネルとショートカットを切り替えることができます。

Q1rs2

ちなみに視聴画面でショートカットボタンを使うと、現在視聴中のストリームをショートカットに対応したテレビ放送/プレイリストの再生ストリームに切り替えます。
これは今までのクイックチャンネルボタンの動作と同じで、チャンネル切替えの要領で動くことになります。
これは視聴中のストリームを維持したまま簡単に新しいストリームを起動させてしまうと、うっかりボタンを何回も押すことでストリームが際限なく増殖してしまう、となることを避けるのが目的すが、もし意図的に現在のストリームを維持しままショートカットを使いたい場合は、一旦視聴画面から抜けてから使ってください。

ショートカットの設定は、トップ画面☆タブで、「ボタン動作とデフォルト属性を編集」ボタンを押してください。すると次のような画面になります。

Q2setting

S1~S12ボタンは設定中であることが判るように点滅を始め、設定中のボタンは赤くなります。

その状態でテレビ放送/プレイリスト の選択をおこなってください。全て設定し終わったら「設定保存」ボタンを押してください。(保存せずに画面を切り替えると設定は反映されませんので、ご注意ください。)
初期状態では番組表順にテレビ局が適当に設定されていますので、良く見るものから順にお好みに合わせて編集していくと良いと思います。

またショートカットにも関連しますが独立した機能として、再生で利用するエンコーダ(FFMpeg/QSVEncの選択)や解像度のデフォルト値を、この画面で設定できるようになりました。
ショートカットからの再生では基本この属性値が使われるほか、通常のテレビ放送やファイル再生時の指定、

Q3tv

Q3file

さらにはDVD言語選択はプレイリストの登録時にも、最初にこの値がセットされた状態から選択する形になります。

Q3pl

このデフォルト属性値の有効範囲は属性の性格によって共通設定と端末別に分かれており、上の図のように、サーバの性格でほぼ決まってくるエンコーダの選択や、個人の嗜好に依る倍速/DVD言語の設定は共通設定として全端末に反映され、一方常用したい解像度等、選択を端末うや回線速度次第で決めたい項目は端末別の設定になっています。

基本はここまでの設定はトップ画面でしか出来ませんが、端末毎のデフォルト属性値はリモコン機能でもできるようになっています。

Q3r1

属性値タブに「この端末のデフォルト属性値」という項目が追加され、▼のマークが付いていますので、これをクリックすると設定エリアが表示されます。

Q3r2

特にChromecastのように直接端末を操作できないようなデバイスではここで設定するようにしてください。
以上がショートカット機能およびデフォルト属性機能になります。

2.画面遷移の改修(黒画面の除去)

TVRemoteFiles Ver1.82以降とTVRemoteViewer_VB V2.39以降の組み合わせで、ストリームの起動時に従来の黒画面を表示するのではなく、

2

このように直ぐに視聴画面を表示した上で、ストリームの準備ができるまで静止画を表示して準備状況を文字表示、準備が出来次第動画スタート、という画面遷移に変更しました。

図にするとこんな感じ。Photo

黒画面は初期のTVRemoteViewer_VBの遺産を未だに引きずっていたものですが、これでようやく引退になる訳です。

単に見た目の問題だけでなく、ストリームの準備と視聴画面の準備(ライブラリのロードや画面の調整など)を同時並行でおこなうことになり、ストリーム起動から視聴開始までの時間もだいぶ短縮されます。

但しこの機能は、TVRemoteFiles とTVRemoteViewer_VB の双方が一定以上のバージョンになっていなければならないため、現状初期状態ではOFFになっています。
これを有効にするために、以下のようにTVRemoteViewer_VB.ini にある TVRemoteFilesNEW というパラメータを「 1 」にセットしてください。

0_2

その上でTvRemoteViewer_VBを再起動すれば反映されます。

黒画面を無くす改修は長い間宿題となっていながら後回しでしたが、反映することで動きがかなり快適な方向に変わりますので、バージョンアップの際は忘れずここを有効することをお勧めします。

また別記事でご紹介しているバージョンアップ支援ツール TRVInst は、Ver1.30以降で、それぞれのバージョンをチェックし、所定のバージョン以降であればこれを自動で有効にセットするようになっています。そちらも併せてバージョンアップをお勧めします。

なお準備中に表示される静止画は、配布パッケージを小さくするためにかなり圧縮された品質の悪い画像になっていますが、 \html フォルダにある

 prep.jpg

というファイルを差し替えることで、お好みの画像に取り換えることができます。取り換える際は、画像を16:9 の比率にトリミングした上で、上書きコピーしてください。
さしあたっての素材として、手前ミソながらこちら からいくつかDLできるようにしておきます。

中身はこんな感じ
Prep_2 Prep_3 Prep_4

一応Copyrightsの問題が起きないよう、どれも自前で撮った物です(^^ゞ

3.DVD-ISOファイルの再生

DVD-ISO再生機能はTvRemoteFiles v1.80で一旦リリースしましたが、いろいろ問題があったため、v1.82でロジックを一新して再リリースしました。
基本的な使い方は踏襲していますが、起動時に少々待ち時間が発生するのが相違点になります。
それでもあらゆる端末での再生安定性、また殆どの場合QSV(また恐らくNVEncも)活用できるようになるなど、メリットが大きいため、今後この方式を熟成していきたいと思います。

多くは語りませんが、DVD機能については再生できるのはプロテクトのかかっていないDVD-ISOファイルのみになります。(サンプルの絵ははめ込み合成ですということで)
またBlu-ray-ISOの再生は今のところ対応していません。

それでも従来DVDの再生は一旦HandBrake等でMP4ファイルに落としてからご利用ください、とご案内していました、今回DVD-ISOファイルの直接再生機能が加わったことで、大分便利になると思います。

Dvd2

このようにDVDに字幕があれば表示の選択ができる他、音声の選択も可能です。またサムネイル機能もそのまま使える他、DVDのチャプターも利用できます。

Dvd3

また、以下のようにISOファイルの混じったプレイリストを作成することも可能です。

Dvd5_2

ISOファイルに関しては再生時の音声/字幕の選択を予め設定できるほか、いちいちメニューを経由せずジュークボックスのようにエンドレスに連続再生できるのは割と便利に使えると思いますので、ご活用いただければ幸いです。

1) 起動の待ち時間について

DVD-ISOファイル再生を起動する際、一旦ffmpegやQSVEncが扱える中間形式に変換(Dump)するため、図のような待機画面が表示され、進捗が%で表示されます。

Ison0

この待ち時間はDVDの特性によって変わりますが、概ね2~3分です。
その間別のストリームを視聴して暫くしてから戻って来ても良い(準備が終わっていれば先頭から再生される)のですが、そのまま表示していても退屈しないよう約20秒おきに、上の絵のようにシーンをランダムに選択して静止画で表示するようにしてあります。

但し「ネタバレは嫌」という人のために、このシーン表示をしない設定も端末毎に可能です。
指定場所はトップページ管理タブ
Ison2s1

またはリモコンの属性変更タブ(「この端末のデフォルト設定」の▼ボタンで表示)
Ison2s2

にあります。
シーン表示をOFFにした場合、固定でDVD先頭から10秒の映像が待ち時間の間表示されます。

Ison2

この辺はお好みでどうぞ。

2) DVD再生の基本動作

DVD再生は以下のような仕組みで動いています。

Dvdnew

中間形式のファイルはキャッシュとして、所定数が保持されます。これによって現在再生中のDVDを指定を変えて再起動させる際にもキャッシュが再利用されることでいちいち待ちを発生させないようにし、また良く見るDVDも高速で起動できるようにします。

v.1.80~v1.81ではこのMPlayerの役目(ISOファイルの読み取り)をVLCにやらせており、VLCはもともとストリーミングを機能を持つため待ち時間も不要だったのですが、いろいろな不具合の原因を探っていくうちにどうやらVLCに以下のような根本的な問題がある、ということが判ってきましたので、Dvdold
                                          (旧方式)

いろいろ比較検討した結果、VLCの利用を完全に廃止した現在の方式に切り替えた次第です。
(あくまでHLS汎用かつあらゆる端末で動くことを想定した場合の問題ですので、VLC支持派の方は気を悪くなさらないでください。)

結果として現在では、通常方式(ffmpeg)では問題なくDVDの再生、言語選択、字幕表示とも出来るようになりました。またQSVでもやや制約があるものの、かなり実用性が上がっていると思います。

3) 必要なプログラムのダウンロードと設定

TVRemoteViewer_VBはv2.42以降、TVRemoteFilesはv1.83以降が前提ですが、当面まだこの機能の改善も頻繁だと思いますので、出来るだけ 最新バージョンにしてご利用ください。
その上で、ISOファイルの再生にはMPlayerの特定バージョンを使います。(VLCは不要になりました。)
導入と指定の方法は以下の通りです。

MPlayer
やや古いアーカイブバージョンですが、リンクのページから

 mplayer-svn-35935.7z

Mplayer4iso

をダウンロード&解凍してください。これ以降のバージョンでは漢字交じりのISOファイル処理にバグがあり、またあまり古いものはISOの処理自体ができませんので、当面このバージョン指定でお願いします。

解凍したら中のmplayer.exeを、

Mplayermelt

TVRemoteViewer_VB.exe と同じフォルダにコピーしてください。

Mplayerplaceここにコピー

配置できたら、TVRemoteViewer_VB.ini で以下を指定してください。

Dvdspeci

ISOPlayNEW=1 はここまでご説明したTvRemoteFiles v1.82以降のDVD再生新方式を利用する指定です。(デフォルト)基本はこの指定のままにしてください。

またISO_DumpDirPath= は中間形式ファイル(キャッシュ)の置き場所です。
指定がなければ\streamフォルダ を共用しますが、別のフォルダ、またHDDやSSDを複数使える環境であれば、I/Oを分散させるためにも \streamフォルダとは別のHDD/SSD にフォルダを作成して指定するのがお勧めです。
置き場所は容量重視ならHDDでかまいません。(同時並行でなければHDDでもパフォーマンスの低下は殆どありません。) もしDVD Dump処理を複数並行でおこなう事が多ければ、SSDの方が有利です。

ISO_maxDump= は、保持する中間形式ファイルの数です。いちばん新しく(再)利用したファイルから順にここに指定した数だけ、キャッシュとして保持されます。
デフォルトでは2ですが、HDD/SSD容量に余裕があればここを多く取っておけば、最近再生したDVDのキャッシュとしてより有効に再利用されます。
(但しDVD1ファイルあたり元のISOファイルとほぼ同容量を食いますので、大きくても全ストリーム数程度がお勧めです。)

また、ファイル一覧でISOファイルが選択できるように、TVRemoteViewer_VB.iniの以下の場所に ".ISO" を加えてください。

Isoextent

以上でTvRemoteViewer_VBを再起動すれば、ISOファイルの再生ができるようになります。

ISOファイルの再生では以下のように、従来の「正・副」の音声選択の代わりに、図のように音声トラックと字幕トラックの選択ができます。

Dvd1

またこの選択は再生中に変更も可能です。

Dvd4

但し存在しない音声/字幕トラックを選択すると無効となり、デフォルト値(音声はデフォルト言語、字幕は無し)が選択されます。

但し、字幕の日本語/英語指定は時々正確ではない事があります。もし思った通りの言語にならない時、また、中国語やコメンタリ等を選択したい時は、0~4の数字でトラックが選べるようになっていますので、試してみると良いと思います。

4) 制約事項

現状、把握している問題点は以下の通りです。

(1) 標準形式(ffmpeg)でのストリーミング

① 再生途中で再起動をおこなう際、再開位置に誤差がある。

 DVDによっては数分の誤差が出ることがあります。これはffmpegの現状の制約です。

② さらに、再起動をともなうシークでは、あまり先のシーンに行けない場合がある。またある程度先のシーンでストリーム再起動すると最後尾まで飛んだり、再起動に失敗することがある。

 例えば手元のDVDでは、エピソード7で開始50分前後以降のシーンに行けず、無理に行こうとすると最後尾に近い位置まで飛んでしまいます。(サムネイルの表示と飛ぶ場所は一致しますので、サムネイルの表示がおかしい時は無理に飛ばないのがお勧めです。)
 これもDVDによりますが、どうやらffmoegのバグのようです。そういう場合はエンコード完了まで待ってください。

③ 先頭から再生すると音ずれが発生することがある。

 その場合は開始1分程度の場所で再起動してみてください。

(2) QSVでのストリーミング

① Edge以外のWindows環境の再生では音ずれが激しい。

 これは再生環境依存の問題で、Flashフォールバック環境との相性が良くないようです。逆にAndroid、iPhone/iPad/Chromecastではほぼ正常に再生されるようになりました。(但し最初に表示されるまで数秒間黒画面になることがあります。)
 Flash環境でも何らかのQSVEncのパラメータ調整で改善するかもしれませんが、今のところ判っていません。

② 字幕を入れると起動に失敗することがある。

 これは現状のQSVEncの作り上、仕方がないので、その場合は字幕なしで起動してください。

③ 字幕の色がおかしい。

 このような色の表示になることが多いです。
Dvdqsvsub

これも現状のQSVEncではVOBSub字幕パレットの指定ができない(又はやり方を知らないだけ?)ため、仕方がないです。

④ ネットワーク上の日本語ファイル名の再生に失敗することが多い。

 これは本質的な問題ではないと思いますが、原因調査中です。

4.モバイル系端末の対応強化

1)一部モバイル端末の数種類の問題に対応

特にAndroid系端末ではiOSのように1社が完全にH/Wに近い仕様までコントロールしている訳ではないので、HLSの動作についてはメーカーやH/Wによってまだ幅があります。(それでもAndroid 4.3あたりからだいぶ統一されて来ましたが。)

私自身はスマホはiPhoneを使っていますが、安いAndroidタブを買ったり、AndroidTVのNexusPlayerや Mi Box、あるいはFireTVなどを購入した際、通常のAndroid端末としての動作もテストしてみて、気が付いた特性は随時取り込んでいましたが、原則機種対応ではなくAndroid汎用機能としての追加でした。しかし今回は、特定機種の対応スイッチを追加してみました。
あまり機種対応をやってると後で身動きが取れなくなるので今後積極的にやっていくつもりはありませんが、特定機種と言いながらある程度広く適用できるかもしれない機能であれば対応していくことも考えています。(といっても自分で持っている機種でないとPDは困難ですが。)

(1) Huawei 端末対応

最近買った Huawei MediaPad T2

はまたHLS動作の癖が強く、当初はこのソフトの視聴用には使えないのではないか、とまで思ったりしました。
しかしこのタブはHLSの動作がおかしい点を除けば、(値段の割に)画質は良く動作もきびきびしており、またバッテリーの持ちも良いので、何とかしたいと思いいろいろチューニングした結果、かなり問題のないレベルで動くようになりましたので、TvRemoteFilesの最新版(v.1.84以降)で正式にその対応機能を盛り込みました。

Huaweiのタブやスマホは最近量販店でも大々的に売られています。それらすべての機種が同じような特性なのかどうかは判りませんが、逆に(Andoridのロジックボードは結構いろいろなブランドで共通のものが使われますので)Huawei以外のメーカー製品でも同じような症状が出ているかもしれません。もし類似の症状出た場合、この機能をONにして試してみると良いと思います。
具体的には以下のような症状が現れます。

 ① ファイル再生の際、起動直後でまだエンコードが終了している筈がないのに、進捗バーが(エンコード終了を意味する)赤いバーに変わり、

 Specialdro2problem_2
 それがあっという間に終了位置まで進んでしまう。
 バーが終了位置に進むと動画が止まったり、あるいは画面にリセットがかかる、等の症状が出る。

 ② ライブ視聴で、頻繁に動画が止まったりシーンが飛ぶ。一旦止まると画面を再読み込みしない限り再開しない。
  また、エンコード未了のファイル再生では実況が出ない、経過時間表示が0のまま、のような現象が起きる。

 ③ これらの症状は特にDolphin Browserで顕著であり、頻繁にシーンが前後に飛んだり動画にリセっとがかかる。
 ④ エンコード完了済みのファイル再生に限っては何も問題がない。

こういった症状はどれも、OS組み込みのHLSプレーヤーの動作に1点だけバグがあるのが原因です。
それに対処する機能群のスイッチを、トップページ・管理タブに「一部Android端末のプレーヤー動作を補正」という設定項目の中に作りました。
通常は「▼一部Android端末などのプレーヤー動作を補正します。」とだけ表示されていますので
Adj1dro

この「▼」をクリック(タップ)してください。すると以下のような表示になります。

Adj1dro2

ここの「映像が数秒~数十秒で止まる、エンコード未了の~」という項目にチェックすれば、Huaweiタイプ向けの対応機能群が有効になります。

Adj1dro3

なおこの機能をONにすると、ストリーム起動時の視聴画面では2.でご説明した「配信準備中」のメッセージに続いて、図のような「プレーヤー準備中」の画面が表示されるようになります。
Specialdro2c

これはライブでは10秒、ファイル再生では5秒程度の待ちで、この間に動画をバッファに溜め込みますので、少しだけ辛抱してください。

なおこれは端末毎、ブラウザ毎の設定になります。同じ端末でも別のブラウザを使うと設定は反映されませんので、別のブラウザで使う時は都度この設定をおこなってください。
なおこの設定でも、ライブ視聴の際はたまに動画が止まってしまうことがあります。その時の対応として、視聴画面に Button3_2 ボタンを付けました。

Plresetb

これを押せばプレーヤーにリセットがかかり、復旧します。

また制約ですが、ファイル再生では、エンコード未了の間は一時停止ボタンは押さないでください。(再開時にシーンが飛んでしまいます。)
残念ながらDolphin Browserだけは動きが違い、このスイッチをONにしても(頻繁にシーンが前後に飛ぶ)問題が残るため使えません。Chromeブラウザ等がお勧めになります。
よってDolphinの特色である「動画自動スタート」の機能はこのタイプの端末では使えず、動画開始はスタートボタンを押す必要がありますがその点を除けば、結構使い易い動画端末だと思います。(私も最近はHuaweiを持ち歩くことが増えました。)

ちなみに少しだけ解説すると、この症状はこの機種のHLSプレーヤーが、細切れのセグメントを別々のファイル再生だと解釈して、セグメントごとのファイル情報を返してしまう(本来HLSプレーヤーは全セグメントが揃わない限りファイル長などの情報を返してはならない。)という実装ミスによって起きています。エンコード完了したファイル再生では全ファイルの正しい情報を返すので、もともと蓄積型の動画配信サービスを想定したテストしかしていなかったのではないかと想像できます。

(2)古いAndorid端末への対応機能追加

これはAndroid4.2.2以前で良く報告されていた問題で、「ファイル再生時のエンコード完了をプレーヤーが検知できない」という問題への対策です。
この手の端末ではファイル再生後いつまで経っても進捗バーはエンコード中を示す青い色のままで、

Specialdro1a

ファイル再生ではいつまで経っても(ストリーム再起動を伴わない)プレーヤー機能でのシークはできません。またエンコード完了したファイルストリームで続きのシーンから再開しようとしてストリームを選択しても、プレーヤーシークが効かないため先頭に戻ってしまう不便さがありました。
こういう動きは恐らくは、ベンダー側が実装の際にHLSの利用をライブストリームしか想定していなかったためではないかと思います。(1)のHuaweiとは逆ですね。

今回そういう機種に対応した機能スイッチを付け、それがONになっていればファイル再生時はエンコード完了に関係なく、ストリームを再起動させてかならず続きのシーンから再生されるようにしました。
このスイッチは(1)と同じトップ画面管理タブで、「▼一部Android端末のプレーヤー動作を補正します。」をクリックすると出て来る「 ファイル再生でエンコード終了を検出できないタイプの動作を改善します。」にチェックすることでONになります。

Specialdro11_2

実はこのスイッチは手動でセットしなくても、「エンコード完了してプレーヤーリセットを掛けたのにプレーヤーが認識できない」という現象を検出して自動的にONになります。しかしそれだけだとブラウザを変える度に、無駄に1回は「ファイル再生時のプレーヤーリセット」が起きてしまいますので、既にそういう端末だと判っていればここにチェックしておけば良いわけです。

私の手元でも東芝の少し古い(4.2.2)タブで起きていました。Androidの場合古いOSをアップデートできるかどうかはメーカー次第で、特売やドンキなどで売っているAndroidではまだまだそのレベルのバージョンのものも多いと思います。これ以外にも問題が出るかもしれませんが(逆に出ないものもあると思いますが)、類似の問題が出たら試してみると良いと思います。

(3)実況文字サイズの調整幅拡大

これはどの程度意味があるのか判りませんが、実況文字サイズが小さい、という端末のために、同じ場所に文字サイズの調整幅を0.4倍~8倍に拡大できるスイッチを付けました。(従来は0.4倍~2.4倍)。

Jkscaleacc_2

このスイッチをONにすると、1倍を超えた分の倍率は5倍のアクセラレーションがかかります。(例えば倍率設定の目盛が1.6倍なら、実際の倍率は 1 + 0.6 x 5 = 4倍)
普通の端末ではあまり意味のない倍率になりますが、やってみるとそれなりにシュールです。

Jkscalesc

2)画面フィットボタンを追加

視聴画面で動画のサイズ(主に横幅)をワンプッシュで画面一杯にフィットさせる Stretch ボタンを付けました。

Fitlarger1
   
Fitlarger2

これは拡大だけではなく、縮小の方向でも働きます。
実はTvRemoteFiles v.1.83で既に、「視聴開始時に動画エリアがはみ出していたら画面の横幅に合わせる」という機能は付けていたのですが、Android端末では動画再生中に端末の縦横を変えるたびに意図しない領域全体の拡大・縮小が起き、図のように文字やボタンが極端に小さくなる状態に陥りがちです。

Fitsmaller1

そういう場合ボタンサイズが適切な大きさになるまでピンチアウトで拡大してから、このボタンを押せば、

Fitsmaller2
   
Fitsmaller3

全体が適切なサイズに調整されます。

なお、この際、実況位置が画面スクロールに追従できずボタンエリアに掛かってしまい、ボタンが押せなくなることがあります。
その場合は一旦ピンチインして「実況OFF」ボタンを押してから同じ操作をし、最後に実況表示を再びONにすれば良いです。

3)ストリーム開始ボタンを大き目に

ずっと気になっていながら後回しにしてきた修正として、図のようなポップアップ画面での「視聴」「再生」のようなボタンを大きくして、また必ずボタン位置が右端になるようにしました。

Largestartbutton

特にモバイル環境だと開始ボタンが他のボタンに紛れて判りにくく、また間違って枠の外を押してしまってポップアップを消してしまう、というミスが起き易いレイアウトでしたので、ちょっとした改善です。
また同時に、iPhoneの小さな画面だと、ドロップダウンを選択したタイミングで画面が勝手に拡大され、この「開始」ボタンが下に切れてしまって押せなくなる、という事があったので、レイアウトを少し調整しました。

4)Tips 同じAndroid端末内でリモコン操作

これは修正ではないのですが、最近の私のAndroid端末での使い方の例のご紹介です。
PCでの視聴であれば、同じ端末内でもリモコン制御をON

Trvrc2 (トップ画面デバイスタブ)

にして、視聴時の操作を同じPC内でリモコン機能からおこなうと結構便利です。
というのは、視聴画面ではボタンを沢山付けすぎると逆に操作性が落ちるためある程度ボタン数を絞っているため、トップ画面・管理タブでは設定できても、リモコンでなければリアルタイムには触れない項目がいくつかあります。(例えば実況表示エリアや文字サイズの変更など)これがモバイルでも出来ると便利ですね。

また、2)にあるような機能で動画の全画面表示をおこなうと、操作のために画面を拡大縮小したりスクロールさせるのも結構面倒です。
通常のAndroidアプリであれば動画制御周りもフロントアプリが奪い取ってしまうため、動画を動かしながら別のアプリを(あるいは同じブラウザの別のタブも)前面で動かす、というのは不可能で、動画が止まってしまいます。

しかしセカンドブラウザ というのを入れてそちらでも予めTvRemoteViewer_VBにアクセスした上で、視聴中のブラウザ用のリモコンを立ち上げておくと、図のように

2ndbr1
   
2ndbr2

必要に応じて横からリモコンを引き出して操作し、用が済んだらまたしまう、という操作が可能になり、その間動画や実況が止まることもありません。

残念ながら視聴画面から直接セカンドブラウザを起動することはできず、メインのブラウザとは別に立ち上げてリモコン画面にしておく必要がありますが、それでも結構便利ですので、ご参考に。

余談の雑記(2017/3/3)

暫くブログ更新が滞っていたので、ここで小ネタをいくつか。

その1)Chrome/OperaでTVRemoteViewer_VBの表示が少し大味になったと思った場合

自分も最近気が付いたのですが、Win7のPCで常用しているChromeブラウザで、何だか最近TVremoteViewer_VBのボタンやタブの表示が今までより大きくなり、

Chromefontadj1

本来1行で表示できていたはずのトップページ・番組タブのボタン群が2行になっていることに気が付きました。
また一部の表示ではselectボックスとボタンの大きさが想定より少しアンバランスになっています。

ちょっと調べてみると、これは昨年末に落ちてきたChrome56で、標準フォントがMS Pゴシックからメイリオに変更になったのが原因なのが判りました。
この現象は同じエンジンを使っているOperaブラウザでも起きます。

私自身は特にブラウザのフォントに拘りがあるわけでもないので、デフォルトフォントを以下の場所でMS Pゴシックに戻しました。

Chromefontadj2

またOperaでも以下の場所で同じように戻すことができます。

Chromefontadj2opera

以上で無事、元の表示バランスに戻りました。

Chromefontadj3

Chromeを標準のブラウザとして常用されている方にはそれなりにメイリオの方がいい、という方もおられるかもしれませんので無理にとは申しませんが、個人的にはこちらの方がお勧めです。
(なによりAndoriodでもiOSでもChromeのフォントはこれほど自己主張する事はないので、ちょっとこの変更は拙速なのではないかと。MSとの関係で何かあったのか知りませんが、メイリオの選択はグーグルジャパンの判断でしょうね。)

その2)ファイル/プレイリスト画面の改良

これも小ネタといえば小ネタなのですが、TVRemoteViewer_VB 1.82で、一部モバイル端末で特にプレイリスト画面の使い勝手が落ちる点に対策をおこないました。
まあ性格的に自分が気に入ればどういう感想があろうが気にしない性格なのですが、自分でもAndroidタブを常用するようになって初めて、「Android Dolphinブラウザでのファイル選択操作が非実用的」という事に気が付いた次第です。

具体的にはファイルリスト画面では、全体の画面が固定されている事を前提にファイルリストの部分を指/マウスでドラッグしてリストを上下左右にスクロールできるようになっていますが、Android系ブラウザで特にDolphin Browserでは、画面全体が簡単にドラッグされてしまい、リストがなかなかスクロールできないばかりか、注意深くリストだけをドラッグしてめくっていっても、何かの拍子に先頭のリストに戻ってしまいます。

そこでそういうブラウザでのリストめくりが簡単になるように、リストの右側に少し大きめのスクロールボタンを付けました。

Fileselectnt

これで上下にリストをめくっていくことができます。

またプレイリスト操作時の画面バランス調整として、画面が一定以下の狭さの場合、無理にプレイリストとファイルリストを小さくして上下1画面で表示させようとせず、プレイリスト/ファイルリストがそれぞれほぼ1画面に収まる大きさで表示し、指でスクロールさせて双方に移動する形にしました。以上で個人的には(大規模な改修なしで)それなりに使えています。

その3)その他の小ネタ

TVRemoteFiles Ver1.82は久しぶりのリリースアップだけあって、いろいろ気になっていた点を改修してあります。具体的には

-視聴画面でリモコン機能が、現在のステータスを見失って「デバイス非接続」となってしまって操作ができなくなる現象がよく起きていたのを改修しました。
改修後も一時的に同じ現象が起きることはありますが、しばらくすれば回復して操作可能な状態に戻ります。

-プレイリストで再生ファイルの切替え時に、次のファイルの最初からではなく途中から再生してしまうことがあったのをFIXしました。

-目覚まし機能がトップ画面と待機画面でのみ有効位だったのを、視聴画面を除くほぼすべての画面で効くようにしました。まあうっかり番組表やファイルリストを表示させたまま放っといたら目覚ましにならなかった、という場合でも目覚まし有効になる、という程度の効果ですが、実はこの目覚まし機能は今回のショートカット機能と多くのルーチンを共有しているので、それにともなった機能付加です。

- 個人的にはしばらくDVD機能関連でVLCの変な癖に悩まされ続けたので、(特にChtomecastではVLCのHLSは全く使えないことが判明したりしたこともあり)VLCのTVRemoteViewer_VBでの利用は非推奨なのですが、ただ調べていくうちにスクリプト側のちょっとした実装不足で、VLCのファイル再生でのエンコード終了が検知できていないことが判りましたので、そこの改修をおこないました。

TVRemoteFiles V1.82では以上のような改修をおこなっています。

2016年3月 6日 (日)

QSV/NVEnc + TVRemoteViewer_VBで軽量PCでもロケフリ フルHDでも気軽にストリーミング

題名の通りです。ご関係者各位のご尽力によってこういった汎用のH/Wエンコーダが活用出来るようになりました。

2

従来TVRemoteViewer_VBを使うにはそこそこのCPUパワーを持ったPCが必要で、そこがネックになっていたケースも多かったと思いますが、これでNUCやAtomベースのスティックPCですらインテルQSVをサポートしていれば楽に映像配信ができるようになります。

またQSVがなくても比較的安価なNVIDIA GT750やMaxwell世代のGT930を挿す余地があれば、TVRemoteViewer_VBサーバが立てられるようになります。(勿論配信だけでなく録画やファイルサーバとしても使うとなると、それぞれの負荷や影響も考慮する必要がありますが。)

いずれにしろ使うための敷居がぐっと下がることになりますので、今までTVRemoteViewer_VBに興味があっても環境がなかった方も利用し易くなるのではないでしょうか?

また従来、フルHD(1920x1080)での配信は高性能PCにとっても荷が重かったのですが、H/Wエンコード機能を使えば楽にHD画質を複数ストリームで常時配信できるようになります。

(但しHD配信の場合、再生環境にもH/W支援は必要です。通常のiOS/Mac/Android環境であればH/W支援が効くのであまり問題はありません(むしろモバイル環境でそれ程の解像度は意味が無かったり回線速度の方が問題になります)が、PCでEdge以外の環境ではFlashによるエミュレーションで動きますので、HD解像度では頻繁に止まったりカクつきが出るため、もっと解像度は落とした方が良いです。)

さて、以下はQSVを使ってフルHDで4ストリームを同時配信している例です。

Qsvenc2

軽くOCしているとはいえ今や年代物のSandyBridgeベースのマシンですが、CPU負荷は殆ど無視できるレベルで、(4ストリームともなると内蔵GPUをかなり目一杯使うとはいえ)インテルHD3000内蔵グラフィクスを活用して、フルHDの映像x4を並行して配信しています。
また内蔵グラフィクスはこれだけ使ってもCPU温度はあまり上がらないのも判ります。

一方こちらは従来型の、H/W支援のない状態でのストリーミングの例です。

Swenc

フルHDでのストリーミングはS/W処理だけだと非常に重く、1ストリームの配信だけで一杯一杯になるのが判ります。(CPUクーラーもかなり煩くなりますね。)
この比較だけでもQSVの効果が判ると思います。

もっと新しいCPUであればミッドレンジ以下であっても内蔵グラフィクス能力はこれより上ですので、複数ストリームの高画質配信も難なくこなします。

QSV/NVEncは従来、「画質はそれほど良くないけどリモートやモバイルで低画質で観るには役に立つ」という程度の立ち位置だったと思いますが、そういう印象は対応ソフトが簡易なものばかりだったのも一因だと思います。最近になってサポートされた高機能なソフトではカスタマイズの幅も広く、(x264の画質には及ばないもののそこらのレコーダの画質を上回る程度に)高画質なトランスコードを、ローエンドCPUにも殆ど負荷をかけない形で処理できます。汎用のCPU/GPU+ソフト的手段がまたもや専用品を上回ることになるわけで、家電自慢の専用トランスコーダという発想がまた1つ過去の遺物になっていきますね。

モバイル端末での視聴であればそもそもHD画質は必要ないのですが、現在のTVRemoteViewer_VBは低ビットレートのロケフリ用途だけではなく、家中のテレビ/モニタを汎用性の高い映像端末にする使い道に広がっていますので、無線LANでも無理のないビットレートで高画質映像を屋内配信するのに重宝すると思います。

1.QSVの利用法

TVRemoteViewer_VB、TVRemoteFilesはいずれも最新版(少なくともそれぞれv1.99以降およびver1.75以降。)にしてください。
その上でTVRemoteViewer_VBでQSVを利用するには、rigaya氏が公開しているフリーウェアのQSVEncを使います。

もともとTVRemoteViewer_VBがHLS生成に使っているffmpegにもQSVサポートはあるのですが、現状では出来が良くなく効果が薄いため、その性能向上を待っていた状態でした。
ところが今年に入ってQSVEncがHLSのリアルタイム生成をサポートし、またrigaya氏がTVRemoteViewer_VBを意識したチューニングやガイドをおこなってくださったため、短期間で必要十分な機能が実現できました。rigaya氏には本当に感謝です。

0) QSVを利用可能なシステム環境かどうかチェック。

QSVEncはQSVが利用できない環境では起動できず、TVRemoteviewerではストリームを開始出来ません
インテルCPUでQSVをサポートしたHDグラフィックを内蔵していることがQSVを利用できる第一の条件です。あるいはこれから購入するCPUがQSVをサポートしているか判らない場合はインテルのページでチェックしてみてください。

その上でお使いのPCのマザーボード(チップセット)がインテルHDグラフィックを利用していることが第二の条件です。利用せずに画面表示はNVIDIAやAMDのGPU任せで内蔵グラフィックを殺した状態にしているノートPC等は要注意ですので、お持ちのPCの製品情報をよく調べて、QSV利用可能かどうかチェックしてください。

そういう話を含めてQSVの機能を使うにはいくつか条件がある場合があります。
http://vladi.cocolog-nifty.com/blog/2011/05/plex-px-w3u2-0d.html#HBQSV

今回の場合利用するプログラムはhandbrakeCLI..exeではなくQSVEncC.exe(またはQSVEncC64.exe)ですので、登録が必要な場合はそちらを登録することになりますが、実際は私の環境では2台中1台がWindows7でプライマリモニターもGeforceに繋がっているにも関わらず、Virtu登録は不要でした。

ご利用の環境でQSVが使える状態になっているかどうかは、少し下にあるQSVEncC.exeを使ってコマンドラインでチェックしてみると判ります。
具体的には(少し下で解説している)\QSVEnc\QSVEncC\x86 フォルダをエクスプローラーで開いた状態で、アドレス欄に cmd と打ってコマンドプロンプトを開き、

QSVEncC --check-hw

と打ってみてください

Qsvcheck

「Success」 と返ってくればQSVが使える状態になっています。しかし、「Error」が返ってきた場合QSVが使えない状態ですので、そのままではQSVEncは使えません。
その場合設定や構成を見直してみてください。

1) QSVEncのダウンロードと配置

QSVEncのReadmeによると、動作に必要なランタイムは以下の通りになりますので、先に導入しておいてください。

Visual Studio 2015 の Visual C++ 再頒布可能パッケージ
http://www.microsoft.com/ja-jp/download/details.aspx?id=48145
.NET Framework 4.5

但し.NET Framework 4.5はTVRemoteViewer_VBの前提にもなっているので、導入済みの筈ですね。

次に、OSVEncの実行用フォルダを適切な場所に作成してください。(以降は\QSVEncフォルダとします。)
QSVEncは2.38以降のできるだけ最新のバージョンを使ってください。2.38でHLS起動時の応答時間や確実性もffmpegと遜色のないほどに向上しましたし、現在のTVRemoteViewer_VBでは2.38で追加されたパラメータを使っていますので、それより前のバージョンをお使いの方も最新版にアップデートしてください。

QSVEncは現在OneDrive上で公開されています。リンクを開いた上で、QSVEnc_x.xx_7zip というアイコンを右クリックすると、プルダウンで「ダウンロード」という選択肢が表示されますので、適切な場所に保存した上で解凍し、中身をQSVEncの実行用フォルダにコピーしてください。
中身は以下のようなファイル構成になっています。

Qsvencc1

QSVEncは対話的に実行する事もでき、その場合setupプログラムの実行が必要ですが、ここではやらなくても構いません。TvRemoteViewer_VBはここの \QSVEncCフォルダ以下にあるバッチ用プログラムのみをそのまま使います。
\QSVEncCフォルダの下にはx86,x64の2つのフォルダがあり、それぞれ32bit版、64bit版のWindowsに対応します。

64bit版Windowsで32bit版QSVEncCを使ってもかまいません(他のソフトと違ってあまり大きな差はありませんが、現在64bit版のほうかいくらか速くなるかも、ということです。)が、32bit版Windowsで64bit版QSVEncC64を指定しないよう、ご注意ください。

2) TVRemoteViewer_VB.iniの編集

QSVEncを利用する場合にTVRemoteViewer_VBの設定画面は一切弄る必要はありません。
QSV対応のテストをしていた時期にはここを弄ることでffmepgとQSVEncCを切り替える方法をガイドしていた事がありましたが最終的にその方法はほぼ使わなくなっていますので、むしろQSV対応でここを弄らないよう注意してください。

現在はTVRemoteViewer_VB.ini にQSVEncC.exe (または64bit版の場合QSVEncC64.exe)の絶対パスを指定するだけでQSV対応が完了します。

またffmpegは本来のHLS生成には使いませんが、補助的な用途としてサムネイルの作成に使います。したがってffmpeg.exeのフルパスもTVRemoteViewer_VB.iniに指定してください。
以上の指定場所は以下の図の通りです。(設定場所はiniの一番上のほうにありますので、判り易いと思います。)

Qsvenccsetting0

以上を設定して保存したら、TVRemoteViewer_VBを再起動してください。これでQSV対応は完了です。

3) 使い方

TVRemoteViewer_VB.iniにきちんと設定がされていれば、動画再生時に以下のように、エンコーダを選ぶための新しい欄が追加されている筈です。(図にはVLCの選択肢もありますがとりあえず気にしないでください。)
ここで「標準」を選べば今まで通りffmpegを使ったS/Wエンコード、「QSV」を選べばQSVEnc使ったH/Wエンコードが起動します。

番組表からの起動
Qsvprogram

ファイル再生
Qsvfile

プレイリスト再生
Qsvpl

ライブ視聴中のチャンネル切替え/属性変更
Qsvlivechg

ファイル/プレイリスト再生中の属性変更/再ロード
Qsvfilechg

リモコンによる属性変更
Qsvremochg

なお、QSV対応をおこなった初回の視聴開始時に、TVRemoteViewer_VBサーバ側にQSVEncCによる通信を許可するかどうかのファイアウォールのメッセージが表示されます。

Qsvenc1_2

これには速やかに「アクセスを許可する」と答えてください。見逃すと視聴が開始できません。

4) 使用上の注意点

QSVEncはffmepgとは全く違うプログラムであるため、HLS配信そのものはほぼ同じような使い勝手になりますが、ffmpegの機能を使って実現していた以下の機能は現状使えません。

①  ファイル再生での可変速(倍速)再生がNG

なお、QSVEnc最新版では実況焼き込みは出来るようになりました。
また以下の点でややffmpegと違う動作をします。

② 映像と音がずれる事があるかも。ずれ方は

 (A) ライブ、ファイル再生とも、コンマ何秒~数秒程度ずっとずれていることがある。、これはストリーム再起動すると変わるので、何度か再起動して適正なタイミングに調整することが可能。
 (B)WOWOW、スターチャンネルや一部映画チャンネルなどで時間経過とともにずれが大きくなっていく

という2種類があります。
(A) (B)ともrigaya氏とユーザーの努力でだいぶ出なくなっています。ただもし気になるほどの音ずれがある場合は、ストリームを再起動してみてください。

③ 途中で再生が止まるケース

長い時間流しっぱなしにしていると映像やCMの切れ目で映像が止まったままになる事があります。
mpeg2-tsの何かの切れ目でエンコードが停止してしまうと考えられ、従来のffmpegによるエンコでもたまに起きていた現象です。ただffmpegでは暫く止まったのち自動的に再開する事が多かったのですが、QSVEncでは再開できず止まったままになる事がありますので、そういう時はストリームを再起動させてください。いずれにしろ流しっぱなしにした時にたまに起きる程度の頻度です。

④ うまく起動できないケース

QSVEnc 2.38で安定性も大きく向上しましたので、ffmpegで再生できてQSVEncで再生できないケースは殆ど解消したと思われますが、まだ長期利用されている訳ではないので、未確認の障害はあるかもしれません。

もしストリーム起動がうまくいかずRevTaskが起動⇔停止を繰り替えしてしまう場合は、無理にストリームを何度も起動しようとせず、(利用できないストリームがどんどん増えてしまわないよう)トップページ管理タブの「ストリーム管理」機能で、使えないストリームはきちんと停止させてください。
その上でライブの場合、別のBonDriverを使えば(相性なのか受信状態の違いなのか判りませんが)うまく起動できる場合があります。
またファイル再生の場合、オプションが適切かどうか確認してみてください。QSVを選択してもエンコード無し(noenc)や音声のみ(sound)の選択は抑止されませんが、実際は現在その選択肢はサポートされていませんので、ストリームは起動できません。

2.NVEncの利用法

NVEncについてもrigaya氏が公開しているフリーウェアNVEncCを使ってQSVEncとぼ同じ手順で、ハードウェアエンコードが使えるようになりました。

Nv2

NVEncを利用するにはKepler以降のGeFoeceが必要になりますが、Gefoeceの型番とコア世代は入り組んでいるので、よく判らない時は英語のまとめ記事からリンクされているWikiなどでご確認してください。安いものでは4千円台のGT710でも使えますし、QSVがどのCPUモデルでも性能に大きな差がない(世代による機能の差はある)のに比べると、高級なモデルほど効きも良くなります。
環境によって同時エンコードできるストリームの数にも違いがあります。上限を越える同時エンコードをおこないたい場合はソフトエンコード(や使える場合はQSV)と併用するのが1つの方法です。

ちなみにQSV、NVEncとくればAMDのVCEもぜひ、という声もあると思いますし、Ryzenも盛り上がってるところですので私もそれが出来るのを望んでいますが、現状ではVCEは前2者と同じレベルで汎用エンコーダに組み込むにはまだまだ機能の不足があるようで、現状実現手段がありません。AMD派の方は気長に待つか、あるいはRyzenに(いずれにしろZenのAPUタイプはまだ出てませんので)安いNVEnc対応グラボを活用する手もあります。

NVEncのダウンロードと配置

QSVEncと同じく、動作に必要なランタイム等を確認してください。現状以下のランタイムが必要です。

Visual Studio 2015 の Visual C++ 再頒布可能パッケージ (x86)
https://www.microsoft.com/ja-jp/download/details.aspx?id=48145

.Net Framework 4.5

次に、NVEncの実行用フォルダを適切な場所に作成してください。(以降は\NVEncフォルダとします。)

NVEncも現在OneDrive上で公開されています。リンクを開いた上で、NVEnc本体を保存した上で解凍し、中身を\NVEncの実行用フォルダにコピーしてください。

TvRemoteViewer_VBで使うのはこの中の\NVEncC\x86 (または\NVEncC\x64)フォルダ下にあるNVEncC.exe (またはNVEncC64.exe)です。
その場所をTvRemoteViewer_VB.ini の以下の場所で指定してください。

Nv1

以上でTvRemoteViewer_VBを再起動すれば、NVEncがエンコーダとして選択できるようになる筈です。

使い方の注意点や特性はQSVと殆ど変らない筈ですので、QSVのパートをご参照ください。
私自身は未だNVEncを使える環境を持っていませんので検証ができませんが、NVEncがきちんと動く環境になっていれば利用に問題は無い筈です。

尚、このようにNVEncをエンコーダとして選ぶやり方は随分前からTvRemoteFilesでも想定してOptionsファイル等も添付してあったのですが、QSVEncの設定をコピーしたものを未検証のまま長らく添付にていました。
現在サーバ側作者さんが正常に動くNVEnc版Optionsファイルを添付されていますので、TVRemoteFiles Ver1.83以降ではそれと同じものを添付する形にしました。
しかしそれ以前に添付されていたものは上記理由できちんと動きませんので、NVEncをこれからご利用の方は上記バージョンにUPすることをお勧めします。

2015年11月24日 (火)

Amazon Fire TV StickをTvRemoteViewer_VBで活用する

最近Amazonが出しているストリーミング再生用のガジェット Fire TV Stick

が手に入りましたので、TvRemoteViewer_VBでこれを活用する手順を検証しました。ここではそれをご説明したい思います。

結論から言えば、Fire TV Stickも、(また据置型のFire TVもアーキテクチャは同じですから恐らくは同じ方法で)Chromecast/AndroidTVとほぼ同じように動きます。
またノートPC等と一緒に持ち運べばリンク先の解説と同じ方法で、滞在先のテレビ/モニタを「おうちTV化」することも可能になります。

Tvstart0

FireTV Stickの中身はAndroid(現在 lollipop )ベースですから、Android5.x のブラウザで動かすTvRemoteViewer_VBと特性はほぼ同じです。性能はこちらのスペック表にあるように、小さいながらも十分に速く、動画も滑らかです。実際Javascriptの性能を計測してみても、

Jscapa

比較すればChromecastよりは上、Nexus Playerよりは下の性能になり、実況もそこそこのフレームレートできちんと流れます。

結局AndroidTVとFireTVはほぼ同じ作りで、本質の違いは Googlecastの仕組みの有無という点に尽きます。(もう1つ、ここに関係ない違いとしてワイヤレスHDMI回路=Miracast支援H/W の有無がありますが。)
FireTVでTvRemoteViewer_VBを動かす場合、Googlecast + Media Player Libraryの持つH/Wに最適化されたメディア再生機能は使えず、汎用ブラウザの動画エンジンに依存することになるので、最近まで動画性能はやや劣る感じで、特にフレームレートが十分ではなく動きがぎこちないシーンがありました。が、2015/12末に落ちてきたFireOS 5.0.4 536116920 で劇的に改善され、現在ほぼ同等の高画質環境になっています。

但しAndroid上のブラウザ固有の"癖"はそのまま持っています。具体的には
(1) Dolphin Browser以外のブラウザでは動画開始に必ず人手の介在(開始ボタンのクリック/タップ)が必要になる。 →ご参考
これではリモコンで操作するデバイスとしては使い物になりませんので、必然的にDolphin Browserから使うことになります。
またFirefox/Flashfoxでも自動開始ができFlashも再生できるものの、やはり通常のHLS動画が遅くて非実用的ですので、Flashを再生したい時以外は使わない方が良いと思います。

(2)TVのライブ再生中、およびファイル再生でエンコード未了の間の(ストリーム再起動を伴わない)シークはできません。 →ご参考
ファイル再生時の自由なシークはエンコード終了後にできるようになります。

(3)ただし、プログラム(リモコン機能)からのボリューム操作は通常のAndroid端末と違いきちんと出来ることが判りました。したがって普通にTvRemoteViewer_VBを使う際に付属のリモコン操作はほとんど必要ありません。(他アプリからの切り替え時に当然必要なので、全く不要という事にはなりませんが。)

こういった特性はありますが基本的には素直なAndroid端末として動作しますので、Fire TV Stick起動と同時、あるいはFire TV Stickのトップ画面のアイコンからDolphin Browserを起動すれば、ブラウザのホーム画面の設定にしておくことでTvRemoteViewer_VB の画面が自動的に立ち上がって、手元の端末からリモコン機能

Firecontrol_2

を使って、テレビや録画を全画面で映すにしろ実況を流すにしろ、全ての操作ができることになります。

以下ではこれを使うためのカスタマイズをご説明したいと思います。

1.カスタマイズ作業の流れ

Android端末の一種と考えれば、これが普通に使えることは何の不思議もありませんが問題は、どうやって利用時にキーボードやマウスなどが不要な形で動くようにするか、という点になります。

この辺、本当はGoogleCastの仕組みがFire TV でも動くようにすれば簡単で、Chromecast/AndroidTVと同じ操作性になる上、Media Player Libraryの優れた機能もそのまま使えることになります。
実際のところ、今年(2015)の8月まではAmazonが有料プログラムとしてGoogleCast互換機能を提供していたようです(痕跡はこちらに今でも残っています)が、残念ながらGoogleからリバースエンジニアリングの疑いがあるというクレームが出て、差止めになっています。
まあこの辺はChromecast/AndroidTVにとっては差別化の根幹部分なのでGoogleも簡単には外に出したくないと思いますし、ましてや今のGoogleとAmazonの関係を考えると、この機能の提供は当分望めないと思います。

そこでここではAndroid用に流通しているプログラムのみを使って、そういった操作が出来るようにします。
必要なカスタマイズ項目と実現方法は以下の通りです。

カスタマイズ項目 課題 解決方法
1)マウス/キーボードの準備 FireTV付属リモコンだけでは、通常のAndroid用プログラムの導入やカスタマイズ操作は殆どできない。 BT(Bluetooth)マウス(必須)とキーボード(推奨)を用意する。導入の各局面で付属リモコン、マウス、キーボードのどれが必要かは都度変わるが、キーボード操作はリモコンで何とか代替できてもマウス操作はできないので、最低限BTマウスは必要。
2)Android用のプログラムが導入できるようにする。 Fire TVはGoogle Playにはログインできず、Amazonのサイトで入手できる対応プログラムも限定的である。 各プログラムをapkファイルから直接導入する。
3)野良アプリ用プログラムメニューの準備

apkファイルから直接導入したプログラムはFire TVのメニューに表示されない。

※但し2016/4/初旬に落ちてきたファームバージョン5.0.5.1では、標準で「Homebuttonボタン 2回クリック」で野良アプrが表示されるようになりましたので、ここの導入は一応不要です。

そのようなトップメニューを出すプログラムを導入する。
4)Dolphin Browserのカスタマイズ Dolphin BrowserのJetpackと相性が悪いようで、併用すると動画自動スタートが効かない。 またブラウザのタブや操作用アイコンが表示され、邪魔になる。 「jetpack」の機能をOFFにする。またホーム画面の設定や全画面化など、必要なカスタマイズをおこなう。
5)スリープの抑止 FireTVは20分程度でスリープ移行する仕様になっており、普通は動画再生中はスリープ動作は抑止される筈だが、ブラウザで動画を表示させる場合抑止ができず、視聴中に勝手にスリープしてしまう。(スリープ時間のカスタマイズも出来ない。) スリープを抑止するプログラムを導入し、システムスタート時に常駐させる。
6)FireTV起動時のプログラム自動開始 FireTV起動のたびにマウスやキーボードを使って操作するのは非常に面倒 基本FireTVを起動すればDolphin Browserまで自動で起動するようにする。(付属リモコンのHomebuttonボタン を押せばトップメニューに戻る)

以下ではそれぞれの作業手順をガイドいたします。個々の作業はTvRemoteViewer_VBを導入された方なら問題ないレベルだと思いますし、特にグレーゾーンな作業もありません。

2.各カスタマイズ作業

0)Fire TV Stickの準備

まずそもそもですが、Fire TV Stickを購入したらWiFiの定義やプログラムアップデートなど、基本の設定をおこなってください。手順は付属のガイド(こちらはそのPDF)の他、本家の各種ヘルプもご参考に。

実際の導入体験記等はFire TV Stickでググれば沢山出てきます(
まあ発売間もない時期ですしタイアップ記事と思われるものも多いのですが(Chromecastもそういう所は同じ)、とりあえず雰囲気は判ると思います。

1)BT(Bluetooth)マウス/キーボードの準備

導入・設定が終わってしまえばマウス/キーボードとも殆ど不要になりますが、導入時にはこれらが必要になります。
特にマウスは付属リモコンで代替できない操作があるため、必須です。
なお、Andorid端末をマウス代わり使うソフト・等もあるのでBTマウスが無い場合代替できるかもしれませんが、どの局面でも使えるか当方テストしていませんので、使う場合は自己責任でどうぞ。
キーボードの文字入力はリモコンから(ふっかつの呪文方式で)入力できるので必須ではありませんが、あるとストレスが減ります。tabキーでの項目送りも、リモコンの十字キーでも代替できますが、操作が速くなります。

といってもマウス・キーボードは導入の為だけの利用ですので、手許に既に持っている場合は極力それを流用し、またこのために手に入れるのであれば、以下のような最低限のもので十分です。

入手しておけば、今後いろいろFireTVを活用するのにも役立つと思います。

マウス・キーボードを用意できたら、FireTVのトップメニューから「設定→コントローラー→その他のBluetoothj端末」を選んでください。

Bt1

端末を検索する、を選んでマウス/キーボードのペアリングボタンを押せば、暫くして以下のように左欄に検出され、使えるようになります。

Bt2
(キーボードの場合確認の数字入力を求められますので、入力してEnterを押してください。)

以上でマウス/キーボードが使えるようになります。
なおつまらない事ですが、キーボードは日本語キーボードであっても英語101キーボードの扱いになりますので、@や:のような記号の入力はキートップの表記位置と異なります。ご注意ください。

2)Android用のプログラムが導入できるようにする。

① apkファイルについて

Android用フリーのプログラムは、本家のGoogle Playストアの他に、導入用モジュール(.apkファイル)の形でいろいろなサイトに存在しており、このapkを入手してAndroid上でそのファイルをクリックすれば、PlayストアにアクセスできないFireTVのようなデバイスにも大抵のプログラムは導入できます。(正常に動くかどうかは別として。)

ただ、apkの配布サイトは検索する人が多いせいか偽装サイトや、比較的まともなものでも(踏んではいけない)トラップ広告が非常に多く、注意が必要です。特にAndroid端末から直接アクセスするとトラップが発動しやすくなっていますので、apkの入手は手元のパソコンでおこなってください。

いくつかのサイトの中でも(今のところ)比較的内容豊富でトラップも見分けやすいサイトをご紹介しておきます。

(1) APKMirror
http://www.apkmirror.com/
Fire_apk_mirror1

右側のSearch欄にキーワードを入れれば、該当プログラムが見つかればその各バージョンや(区分けがある場合)無印のarmプラットホーム用の他atomなどインテルベース向け(x86)版などアーカイブも豊富ですので、大所はここで見つかると思います。

(2) apk4funやそれにリンクしたzippyshareなどが割と良く使われている感じです。

Fire_apk_4fun1

Fire_apk_zippy1

身近なところで言うと斧のような位置づけでしょうか。トラップは多いもののちゃんと見分ければ、正しいファイルのダウンロードが可能です。
ググってサイトを開くときは、この辺のサイトであれば比較的まともな内容であると判断できると思います。

(3) 導入済のapkファイルを抽出する方法

ここでは特に使う必要はありませんが上記のようなサイトに目的のプログラムが見当たらない場合、他にAndroid端末をお持ちであれば、Playストアから導入したアプリからapkファイルを抜き出して、それをコピーすることもできます。
(但しお持ちのAndroidのバージョンやCPUがFireTVと異なる場合、適したapkになっていない事もあります。)

手順は
i)  APK Extractor でapkファイルを抽出し、Android端末ローカルに保存する。(ExtractedApksフォルダの存在場所は右上のsettingを開けば判ります。)
ii) 下のほうでご説明しているES File Explorerは、Android汎用ファイラとしてPlayストアから導入できますので、これを使ってリンク先と同じようにPCの共有フォルダを開き、そこにAPK Extractorで抽出したapkファイルをコピーする。

これで大抵のAndroid用プログラムをFireTVに導入できるようになります。

② 共有フォルダをPC側に用意し、FireTVから開けるように公開する。

PCにダウンロードしたapkは、通常のWindowsの共有フォルダに置いておくことで、FireTVで読んで導入できるようになります。
そのためにPC側に専用のフォルダを作成するのが良いと思います。(ここでは\apk フォルダ とします。)
このフォルダはapkを受け渡す為だけに使いますので、とくにパスワード等は必要ないと思います。(作業が終わったら速やかに削除すれば良いわけですし。)
\apkフォルダを作成したら、以下のようにエクスプローラー上で右クリックして、共有→特定のユーザー の順に選択します。

Folder1

すると以下のようなダイアログが出てきますので、

Folder2

ここに追加でEveryone を加えてください。以上で共有の設定はできましたので、ここに以下のapkファイルをダウンロードして入れていってください。

(1) Dolphine Browser 利用するブラウザ
http://www.apkmirror.com/apk/dolphin-browser/dolphin-browser-dolphin-browser/

最新バージョンのものでOKです。リストの右にある↓マークを押して、次のページのGoogle Playボタンの右にある「Downloadボタン」を押すことでダウンロードが開始されます。

(2) AutomateIt FireTV 起動と同時にDolphine Browser等を起動して画面表示するためのツール
http://www1.zippyshare.com/v/hF8C4FMd/file.html

右側の「DOWNLOAD NOW」を押せばダウンロードが開始されます。なお余計なアドがポップアップした時には、間違って踏まずに速やかに閉じてください。

(3) FireStarter ワンクリックでアクセス可能なメニューを作成し、apkから導入したプログラムを表示させるツール
https://github.com/sphinx02/FireStarter/releases

Downloads 欄にあるFireStarter-vx.x.x.apk の最新のものをクリックしてダウンロードしてください。

(4) Stay Alive! Keep screen awake システムの自動スリープ移行を抑止するツール
http://www13.zippyshare.com/v/ipIYJEKF/file.html

 (2)と同様に、右側の「DOWNLOAD NOW」を押せばダウンロードが開始されます。

③ FireTV側の準備 その1.ストアを経由しないアプリを導入できるようにする。

普通のAndoridと同じく、FireTVも標準の状態では、apkで導入するプログラムは「野良アプリ」と見なされますので、その導入を許可しておく必要があります。
そのために、「設定→システム→開発者オプション」を開いて、

Inst1

Inst2

「不明ソースからのアプリケーション」をONにしておいてください。

また直接は関係ありませんが、その上の「ADBデバッグ」もONにしてください。これは後ほどご説明する、「野良アプリ用メニュー」を表示できるようにするために必須の設定です。

④ FireTV側の準備 その2 PCの共有フォルダを開けるようにするため、ES File Explorer を導入する。

ES File Explorer はFireTV用のファイラで、Amazonから正規に提供されているアプリ(無料)ですので、これを利用するのが最も簡単だと思います。

FireTVのメニューから「アプリ→カテゴリ→ユーティリティ」の順に選んでいくと、図のようにES File Explorerが見つかると思います。

Esf1

これをクリックして導入してください。「ホーム」の先頭にアイコンが追加されますので、

Esf5

以後はこれをクリックすることでES File Explorerが開くようになります。

Esf2

ES File Explorerはこのような画面になりますので、マウスで左欄の「ネットワーク→LAN」を選び、次に下の並びにある「スキャン」を押してください。
暫くすると各PCのIDが表示されますので、共有フォルダを作成したPCをクリックしてください。すると一覧の中に、共有フォルダの名前が出てきますので、

Esf3

ここで\apk をクリックしてください。パスワードはかかっていないのでそのまま開きます。

Esf4jpg

中には\apkフォルダに入っているapkファイルの一覧が出ますので、それぞれをクリックすることで導入が開始されます。

なおその際、通常のAndroid端末でのapk導入と同じように以下のようなダイアログを操作していくことになりますが、

Apk1Apk2

Apk4Apk3

この際の「次へ」「インストール」のようなボタンはリモコンではうまく押せません。そういう時はマウスかキーボードの「tab」キーで選択した上で「enter」キーを押してください。
このように局面・局面でマウス/キーボード/付属リモコン のどれが操作に適しているかが変わりますので、うまく反応しないときはそれぞれを試してみることをお勧めします。

なお、apkフォルダに新しいファイルを追加した場合は、下の「再読み込み」ボタンを押せば最新の状態が反映されます。

3)野良アプリ用プログラムメニューの準備

Dolphin Browserは 5) にあるのカスタマイズによって、FireTV起動と同時に立ち上がってTvRemoteViewer_VBの初期画面を全画面で表示できるようになります。

しかしFireTVは当然他の用途にも使いますので、必要に応じてブラウザから抜けたり、また再度起動したりが出来るようにしなければなりません。
しかしapkから導入したアプリはFireTVにとっては「野良アプリ」ですので、FireTV標準のトップメニューには表示されず、普通に起動するには

「設定→アプリケーション→インストール済みアプリケーションを管理→アプリを選択→アプリを起動」

という面倒くさい操作が必要です。

そこでそのような「野良アプリ」がワンタッチでメニュー表示される「FireStarter」をご紹介します。

※但し2016/4/初旬に落ちてきたファームバージョン5.0.5.1以降では、標準で「Homebuttonボタン 2回クリック」で野良アプrが表示されるようになりましたので、ここの導入は不要です。というよりこの「FireStarter」は簡単には動作しなくなりました。

ES File Explorer で上記リンクからダウンロードしたapkをクリックし、ダイアログに従ってインストールしてください。
インストールが終われば付属リモコンの「Homebuttonボタン 1回クリック」で専用メニューが表示されるようになり、

Bmenu

Homebuttonボタン ダブルクリック」 でFireTVの標準メニューが表示されるようになります。

うまく切り替わらないときは、3)-③でご説明している「ADBデバッグがON」 になっているか確認してください。(ここがOFFだとFireTVはそのような操作を弾いてしまいますので。)

4)Dolphin Browserのカスタマイズ

以上でメニューから簡単にブラウザを起動できるようになりましたので、いよいよDolphin Browserの導入に入ります。

ES File Explorer で上記リンクからダウンロードしたapkをクリックし、ダイアログに従ってインストールしてください。
次にインストール完了時に「開く」を押すか、3)で追加した専用メニューでクリックすれば、Dolphin Browserの初期画面が開きます。

Dolph1jpg

ここで右上にあるイルカのマークを押してください。図のような設定画面が開きます。

Dolph0

ここから以下のようにカスタマイズしていきます。

① JetpackをOFFにする。

通常のAndroid端末ではJetpackはONのままのほうがレンダリング速度が速く、動画の自動開始のためにもそうするのが普通なのですが、FireTVでは相性が悪いようで、動画の自動開始ができなくなります。
(ちなみにJetpackは上記サイトから導入したDolphin BrowserにはFireTVに有効なバージョンが付属しておらず、リンク先から別途最新apkをダウンロードして導入することで有効化されますが、動画自動スタートができなくなるのではDolphinを選ぶ意味があまりなくなってしまいます。)

OFFにすれば問題なく動画を自動再生できるようになり、また幸か不幸かJetpackの有無は今回の動画再生能力に関係しませんので、ここではOFFの設定にします。

但しこういったDolphin Browserの振る舞いは環境にデリケートな面がありますので、今後ハードウェアやOSのバージョンが上がると逆にJetpackを導入&ONにした方が良くなる可能性もあります。またボックスタイプのFireTVでもテストしていませんので、もし思うように自動開始が効かない場合は、ONの設定も試してみてください。

キーボードのカーソルキーでDolphin Jetpackの欄を選び、

Dolphjet1jpg

マウスで図のスイッチをクリックすれば、ダイアログが表示され、

Dolphjet2

「今すぐ再起動」をクリックすればJetpack がOFFになった状態でDolphin Browserが再起動されます。(OFFになっていなかったら再度やってみてくささい。)

② ホームページにTvRemoteViewer_VBのトップページを設定

上で「高度」タブを選択し、「ホームページ設定」欄にカーソルを合せた上でマウスでクリックしてください。

Dolph2

すると図のようなダイアログが表示されますので、TvRemoteViewer_VBのポート付きアドレスを指定してください。

Dolphhome1

なお文字入力一般の注意点ですが、文字入力欄では図のようなソフトキーボードが強制的に表示され、そこで文字入力することになります。

Softkey

その際せっかくのBTキーボードがあるわけで、そこから入力することになりますが、基本的な文字入力はできるものの、「ひらがな⇔英数字」の切替えはキーボードの半角/全角キー等は効かず、図の左下にあるボタンをリモコンで選ぶか、リモコンのMenubuttonボタンを押して切り替えなければなりません。(マウスでボタンを押すことはできません。)

入力が終わったら、図の右下の「次へ」ボタンをリモコンで選ぶか、リモコンのPlaybuttonボタンを押す必要があります。(キーボードのEnterキーを押しても、今選択されている文字が再度入力されるだけです。)
この辺あくまでリモコン入力が主体で、キーボードはそれを補助するもの、という設計になっていますので、ちょっと使い勝手が悪いです。(が、全てリモコンで入力するよりはなんぼかマシです。) これはちょっと使ってみればなんとか使えるようになると思いますが。

さて、以上のようにアドレスを入力したら「OK」を押してください。これでDolphin Browserの起動と同時にTvRemoteViewer_VBのトップページが表示されるようになります。

設定画面の左上の「<設定」をクリックして、ブラウザ画面に戻ってください。

③ 全画面設定

次に、ブラウザが全画面で表示されるようにします。ブラウザの左上にある、「コントロールパネルボタン(ジグソーのピースのようなアイコン)」をクリックしてください。

Dolph5

表示されるメニューの左上のほうに「フルスクリーン」のアイコンがありますので、これを一回クリックして緑色にしてください。

Dolph6

これでブラウザが再表示される度に全画面表示になります。(メニューにアクセスしたい時は、どこかをマウスでつかんで下にスライドさせることで上に隠れたメニューやアドレスバーが表示されます。)

以上の設定が終わったら、リモコンの キーを2回クリックして、ブラウザを一旦終了させてください。
再度ブラウザを起動すれば、TvRemoteViewer_VBのトップ画面が全画面で表示される筈です。

④ リモコン制御用設定

次にTvRemoteViewer_VBではリンクにあるように、専用のリモコン画面からどのブラウザでも操作できるようになっていますので、基本はこれを使ってスマホ・タブレットやPCから操作することになります。(FireTV付属のリモコンを使って操作しようとは思わないでください。もともとそういう画面設計にはなっていません。)

Browser3

トップ画面で「デバイス(CAST)」タブを選んで赤枠のところに識別用デバイス名を入れ、入力後一旦「Enter」を押した上で「ON」ボタンを押してください。これでトップ画面の右上に「R」の文字が表示されるようになり、

Browser4

リモコン制御下に入ったことになります。

また他に、「管理」タブで

Browser2

「Rockバー型番組表」もチェックし、ポータルにもチェックしておいてください。トップ画面に「お気に入り番組表」が表示されるようになります。

なお、TVRemoteFiles 1.52以降ではトップページのデザインが変更され、不要な部分を非表示にできるようになりました。
デフォルトでは以下のように「操作パネル」、「ストリーム一覧」、「お気に入り番組表」 の順に表示されますが、ここで赤丸のスイッチを押すと操作パネルが省略された状態になります。

Trvswtopshrink1

                   ↓

Trvswtopshrink2 (各タブを押せば表示状態に戻ります。)

Fire TVのようなデバイスは普段直接画面を操作することはないと思いますので、この設定がお勧めです。

さらにストリーム一覧も「非表示」を押せば、それも省略されて、上一行に各コントロールが並んでいる以外は「お気に入り番組表」だけが表示された状態になります。

Trvswtopshrink3

普段トップページを表示したままにする場合、ストリーム一覧の情報も見たければ表示したままの状態、番組表だけあれば良いのならストリームは非表示にしてより多くのチャンネルが表示されようにする、というように選ぶことができます。
この状態はcookieに記憶されますので、再起動しても維持されます。

以上でDolphn Browserが設定され、TvRemoteViewer_VBでの機能がフルに使えるようになります。それに加えて、以下の自動起動の設定をしておけば、FireTV起動と同時にTvRemoteViewer_VBが使えるようになりますので、さらに便利になると思います。

5)スリープの抑止

(1) Stay Alive Keep screen awake の導入

FireTVは操作待ちが一定時間続くとスリープ状態に入り、画面表示が消えます。(リモコンのPlaybuttonボタンを二度押しすることで解除できます。)

このスリープ移行は動画を再生している際は抑止されるはずなのですが、TvRemoteVIewer_VBでブラウザ機能を使って視聴している場合動画視聴中であることをちゃんと認識してくれないようで、20分ほどすると視聴中に突然スリープ状態に移行してしまいます。

これは不便ですし、そもそもモバイルではないメディア視聴機器であるFireTVで、そんな迅速なスリープ移行は運用上不要ではないかと思います。(もともとのAndroidのモバイル向け省電力仕様が引き継がれているだけでは?)
意図してスリープさせたいときは「設定→システム→スリープ」 で即時にスリープできるわけですし、そもそもこの機器自体の待機電力は大したことはないので、節電したければテレビ本体をOFFにするのが良いのではないかと思います。

ということでスリープタイマそのものを抑止するために、Stay Alive! Keep screen awake を導入します。
 Stayalive(普通のAndroid端末でも利用できます。但しうっかり起動しているとバッテリー浪費するので注意)

FireTVに導入するには、ES File Explorer で上記リンクからダウンロードしたapkをクリックし、ダイアログに従ってインストールしてください。

このプログラムは導入して起動しただけでスリープが抑止されるようになります。
但し通常はシステム開始時には自動起動はしません。そこでこのプログラムも、次の6)のソフトで自動起動させるようにします。

なお、敢えて自動スリープ機能を働かせたい場合は、「野良アプリ用メニュー」から

Noramenu2

Stay Alive! を起動して、表示されるルール画面で
Staylive2

「Pause Stay Alive!」を選択すれば良いです。(元に戻す時もここで戻せばよいです。)

(2)  スクリーンセーバーの解除

ブラウザが野良アプリのせいか、スクリーンセーバープログラムも動画再生に関係なく、タイマで勝手に起動してしまいます。したがってこれも以下の手順で解除してください。

「設定→ディスプレイとサウンド→スクリーンセーバー」で設定画面を開く。

Scsvr1

設定画面で「開始までの時間」を「なし」に変更する。(デフォルトでは5分)

Scsvr2

以上でOKです。 

6)FireTV起動時のプログラム自動開始

ES File Explorer で上記リンクからダウンロードしたapkをクリックし、ダイアログに従ってAutomateItをインストールしてください。
起動すると図のような画面になります。

Auto1

このツールはWindowsのタスクスケジューラに類似のもので、自動運用のために便利な機能が揃っていますが、ここではシステム開始時に4)で設定したDolphin Browser と、5)で導入したStay Alive! Keep screen awake を起動するルールを追加します。

なお、電源ONでTvRemoteViewer_VBまで立ち上げる必要はない(使う時はリモコンで起動する)という方は、ここでDolphin Browserの自動起動ルールを登録する必要はありませんが、Stay Alive~ の自動起動ルールは必ず登録しておいてください。そうしないと動画視聴中のスリープ移行を抑止できません。

① まず「ルールの追加」の上のほうにある+ ボタンをクリックします。

Auto2

図のようなトリガー選択画面になりますので、キーボードのカーソルキーで下に辿って行って、「端末起動時」をクリックします。

② 次にアクションの選択になりますので、「アプリの起動」を選びます。

Auto3

すると図のように起動アプリの定義画面になりますので、

Auto4

右端にある「アプリ一覧」のアイコンをクリックします。
するとアプリ一覧のダイアログがポップアップしますので、

Auto5

「ドルフィンブラウザ」を選択してください。

③設定の保存

これで図のように

Auto6

アプリケーション欄にドルフィンブラウザが指定された状態になります。

他にルール等は必要ありませんので、このまま右上の保存ボタン(フロッピーディスクのようなアイコン)をクリックしてください。

尚、このタイミングで図のようなアドが表示されることがありますが、

Auto7
気にせず左上の終了ボタンを押してください。

以上でプログラムのトップ画面に戻れば、ルールが1個増えている筈です。

Auto8

④ 同じ手順でStay Alive! Keep screen awakeの自動起動も登録します。

再度ルールの追加をクリックし
Autoalive1

トリガーに端末起動時を指定
Autoalive2

アクションにアプリの起動を選び、一覧からStay Alive! を指定してください。

Autoalive3
Autoalive4
Autoalive5

次に、これがDolphin Browserの指定と違うところですが、アプリの起動時に画面表示は不要なので、次の「ルール」の指定で、「非表示」を選択してください。

Autoalive6

以上で右上のアイコンをクリックして、設定を保存してください。

⑤ 起動テスト

実際に動くかどうかの再起動には、FireTVの電源を抜き差ししても良いのですがそれも乱暴なので、図のように「設定→システム→再起動」を選んでみてください。

Auto9

これで再起動が始まり、図のようなロゴが出たあと

Init1

一旦トップメニューが表示されますが、すぐに図のようなメッセージが表示され、

Init2

トリガを検出したアクションが開始した結果、数秒後にTvRemoteViewer_VBのトップ画面が表示されます。

Init3

TvRemoteViewer_VBから抜けるにはリモコンのHomebutton_2ボタンをクリックすることでいつでも可能です。Homebutton_2ボタン1回クリックすれば専用メニューに抜け、Homebutton_2ボタンダブルクリックで標準のトップメニューに抜けます。

以上で導入、カスタマイズは完了です。リモコンプログラムの使い方はリンクに解説してありますので、使ったことのない方はよく読んでみてください。
これで例えばテレビ番組の起動や、ファイル再生画面からこのデバイスを指定して「再生」ボタンを押せば、「しばらくお待ちください」が表示された後、FireTV側に視聴画面が起動します。

その際一瞬このような画面が表示されますが、
Tvstart1
気にしないでください。

タイル表示であればこのような画面で

Tvstart2

また全画面表示にすればこのような画面になり

Tvstart3

要は普通に手元の端末で見るのと同じ、またChromecastやAndroidとほぼ同じ使い勝手で大画面テレビやモニターでTV番組や録画が視聴できるようになります。

⑥ 他の調整と注意点

以上で動作のために必要な設定は完了ですが、他の調整項目と注意点も補足しておきます。

(1) 画面のキャリブレーション(マージン設定)

(モニターではない)普通のテレビの場合、画面の周りに表示されない領域があります。

この余白域については、TvRemoteViewer_VBだけの話であればリモコンプログラムの「マージン」で調整しても良いのですが、FireTV全体で調整したい時はメニューから調節します。
具体的には「設定→ディスプレイとサウンド→ディスプレイ→キャリブレーション」

Cari1Cari2

で表示される調整画面で

Cari3

リモコンの上下キーによって、画面端に矢の先端がくるように調整すれば良いです。
適正なマージンはテレビやモニター毎に変わりますので(PC用モニターであれば0)、FireTVを挿し替えた際には再度調整が必要になります。気になるのがTvRemoteViewer_VBだけであれば(特に実況コメントの上端が欠けるのが気になると思います)、リモコンプログラムの「マージン」設定で調整する方が簡単かもしれません。

(2) ブラウザのレスポンスがなくなった時

操作上の注意点として、動画再生中にうっかりリモコン操作でブラウザから抜けた場合、メニューから再度ブラウザを呼び出しても、動画がサスペンドしたままリモコン操作で再開できない状態になります。
またそれ以外でも、基本はブラウザから抜けて暫く後にメニューからブラウザに復帰する場合、ブラウザが再ロードされず、処理を継続できずにハングしたような状態になることがあります。

FireTVのリモコン操作では、「ブラウザ・ページの再ロード」の操作ができないため、一旦ブラウザがおかしな状態になってしまうと、それが維持されてしまうのが原因です。
そういう場合はまずは、TvRemoteViewer_VB用リモコン基本タブの「今のページを再ロード」ボタンを押してみてください。単なる待ち状態であれば、それで復帰できます。
それに反応しないようであれば、Menubuttonボタンを1回押した後Backbutton_2ボタンを何回か連打すればブラウザを確実に終了でき、その上で再度Dolphin Browserを起動すれば初期画面に戻ります。

(3) 実況コメントが表示されない時

現在の最新ファームでは、動画の画質は十分なレベルに向上していますが、その代わりなのか何なのか、実況コメントを表示する設定で実際表示のための処理もおこなわれているにも関わらず、オーバーレイの調整が上手くいかず表示されない事があります。

そういう場合は、下図赤丸部「コメント表示数上限」の数字のボタンを押して、コメントプレーヤーを何回か再起動させてみてください。

Ftshowcomment

1~2回ここを押せばコメントが表示されるようになると思います。
ただ、FireTV Stickをずっと動かしっぱなしにしていると全体的に動作が重くなるとともに、この現象も起きやすくなったり、上記ボタンを押しても回復しにくくなるようですので、この問題に限らず時々FireTVを再起動することをお勧めします。
再起動は電源の抜き差しでもできますが、トップメニューからリモコンで「設定→システム→再起動」と指定することでも可能です。

3.使ってみた感触

最初にあるようにFireTV Stickは、性能的に(現行の)Chromecastより上、NexusPlayerより下で、実況コメントが増えても十分実用的に、また安定して動きます。
据え置き型FireTVだと、恐らくはNexusPlayerより少し上の性能になると思います。その辺の差は実況表示速度の違いとして現れます。

※但し2016/4/初旬に落ちてきたファームバージョン5.0.5.1ではやや振る舞いが変わり、実況を流すと音ずれが出やすくなっています。コンマ数秒程度なのでアニメ作品ではあまり気になりませんが、実写などで気になる時は実況表示を止めてみてください。

動画の再生性能については、当初GoogleCast勢と比べるとフレームレートが劣り、動きのあるシーンやゆっくりパンしていくシーンではいくらか引っかかりがありましたが、2015/12末のFireOS 5.0.4 536116920 で大きく改善され、ほぼ同等と言えるものになっています。今後FireTVがHTML5やその実行環境を正式にサポートする判断をしてくれれば、使い勝手もより向上してくると思います。

現在のところ動画再生中のシーク(ストリーム再起動を伴わないシーク)は、Chromecast/NexusPlayerやApple勢のようにいつでも可能という訳にはいきません。ファイル再生ではエンコード完了を待つ必要があり、またライブ配信でのシーク操作もできません。→ご参考
まあこの辺はFireTVの問題というよりこちらが従来型のHLSプレーヤーで、GoogleCastのアーキテクチャ、特にライブラリのHTML5の扱いが優秀で特典がある、と言うべきですね。
実際余談ですが、Nexus PlayerにapkでDolphinやChromeを入れてみると似たり寄ったりのものになるので、素のAndroidマシンとしては同じような作りで、GoogleCastの枠内でよりHTML5ビデオプレーヤー向けのチューニングがされていることが判ります。

その代わりにFireTVはこの使い方ではDolphin Browserという(結構”高級”な)ブラウザエンジンを介在させているため、ChromecastやNexus Playerのように長時間で(動作が遅くなって)アプリのリセットが必要になる、という現象が起きにくく、長時間でも安定して使えます。メモリサイズが大きいのも安定動作に寄与していると思います。

ただ現状、以下の問題は残っていますので、それをご了解の上でご利用ください。

1)ファイル再生で「無変換ストリーム(0x0noenc)」を選択した場合、エンコード時の指定によってはアスペクト比がおかしくなることがある。

これはブラウザが利用する動画エンジンのバグで、ChromeやHabitでも同じ現象が起きます。
通常のトランスコードをおこないながらのストリーミングでは問題ないのですが、事前にHandbrake等でエンコードしたものを無変換でストリーミングする場合に起きる現象で、再生画像が図のように縦に伸びたようになることがあります。

Aspect1

通常の動画再生では、エンコード後の解像度が1440x1080であっても1920x1080であっても、動画ファイルのプロパティに表示時のアスペクト比 16x9 のように設定されていますので、再生サイズは適切に補正され、正しく16x9 で表示されます。
しかしブラウザ表示で利用する動画エンジンはこのアスペクト比を正しく解釈できないらしく、1440x1080の映像であればそのままの比率(4x3)で表示します。
地上波の解像度は1440x1080で表示時のアスペクト比16x9が設定されていますが、以前に私のBlogでご紹介しているHandBrakeのエンコードバッチでは、HD解像度であればその設定のまま、SD解像度では縦横の解像度を半分(720x540)にした上でアスペクト比維持(16x9)のプロファイルにしていますので、この映像をアスペクト比補正をせずそのまま映せば4x3の映像になってしまうわけです。
TvRemoteViewer_VBがトランスコードする場合は映像解像度自体も1920x1080や720x404に変換するため、表示も16x9になりますし、無変換ストリーミングでもソースがBSやCSのFullHD映像の場合は、映像解像度とアスペクト比は合っていますので問題ありませんが、もし地上波ソースやSD(720x480)放送の無変換ストリーミングを多用する場合は、事前エンコードのオプションも見直してください。
 エンコードオプション HandBrakeでの修正例
 Adjhbgui
 (但しHandBrakeは映像の拡大ができないため、元が1440x1080であれば 1440x810 以下の出力解像度を指定してください。)

2)FireTVでは、TvRemoteViewer_VBサーバが2台以上あるときの切替えがワンタッチで出来ない。

これはブラウザのホーム画面でサーバを固定しているのが理由で、切替えるにはマウスとキーボードを使ったDolphin Browserの設定変更が必要です。
まあこの辺も、そもそもスマホ/タブと連携させることをより重視して、アプリケーションそのものをスマホ/タブからの指示で外部からロードするGooglecastと、あくまでスタンドアローンのメディアプレーヤーが基本で、スマホ/タブは付属リモコンと同等なコントローラーと見なすFireTVの発想の違いなので、同列の比較は出来ないと思います。

上にも書きましたが、FireTV の利点というより使っているDolphin Browserのガベージコレクタが優秀なのではないかと思いますが、長時間利用したり待機させた場合でも、ChromecastやAndroidTVのように処理速度が低下する現象が今のところ起きていません。
(後者は両方とも共通の処理系に問題があるのかゴミが溜まっていくようで、長時間使っていると止まったようになる事があり、その場合一旦Castアプリを終了させて再接続 = ブラウザエンジンを再起動 する必要があります。)

4.おまけ Firefox OSについて

名前が似ているようで全く非なるもの、ということでここに載せるわけではありませんが。

AppleTVは置いておいて、その他に類似のデバイス用OSとしてはFirefox OSがあります。スマホ用OSの1つとしてKDDIが実験的に扱っているほか、パナソニックの新しいテレビに内蔵されており、今後一定の地位を築く可能性があります。
但し2015年末にスマホ向けの開発は終了する旨の発表があり、今後は組み込み型に活路を見出す方針とのこと。当面Firefox OSが続いていくかはパナソニック次第という所でしょうか。
とはいえ基本的なアーキテクチャを見ると、Geckoベースのブラウザをプラットホームのように扱ってHTML5/Javascriptでアプリを書く、というChromecast(ChromeOS)と非常によく似たプラットホームになっており、ちょっと興味が沸きましたので、TvRemoteViewer_VBの視聴に使えるか調べてみました。

結論として、FirefoxOS対応は当面見送ることにしました。以下では概要を書きます。

FirefoxOS用にはデスクトップ用のエミュレータ(アプリマネージャ)やAndroidで動くエミュレータもあるのですが、アプリ本体は当たり前のように動くものの動画再生はサポートしておらず検証できなそうなので、実験的に以下のような(FirefoxOSの場合のみ表示される)導入ボタンを作って

Ffoxos1 Ffoxos2

掲示板で検証を呼びかけたところ、Firefox OS Flameで検証いただいた情報があり、その結果は"ネガティブ"(HLSをサポートしていない。HLSのテキストが表示されるのみ)でした。
現状のMozilla側の見解を見てもHLSのネイティブサポートはあまり前向きでもなさそうなので、(実装する製品側で独自にサポートするケースもありえるものの)基本は「FirefoxOS自体ではHLSをサポートしていない」ということになると思います。

またMozilla側は代替策としてJavascriptで動くHLSプレーヤー(エミュレータ)も提案しており、これはFlash要らずでJavascriptとHTML5(のcanvas)のみを使って動くため、実際試してみると、本来動画をサポートしていない筈のデスクトップ用エミュレータ(アプリマネージャ)ですら図のようにテスト的に動かすことができました。

Ffoxos3

ただし動作はFlashフォールバック以上に重く、PC上のデスクトップエミュレータの場合はCPU性能のおかげでかなりまともに動くものの、Andorid上のエミュレータだと解像度を320x180ぐらいに落とさないとまともに動きません。恐らくARMベースと思われるテレビの組み込みロジックでは、(「テレビ」用途で期待される画質での)実用的性能は期待できないと思われ、Firefox OSの主なターゲットとなる機器を考えると余り意味の無いソリューションだと思います。
またこれらのJavascriptプレーヤーに対応するためのアプリ作り変えも手間なので、今後大きなニーズが出てこない限り対応は見送ることにいたしました。
ただFirefoxOS自体はLinuxベースのシステムの上に乗っているガワのような物で、その下のハードやファームウェアは様々だと思いますので、そのレベルでサポートしていれば現状のままで動く可能性はあります。パナソニックがボードメンバとして参加しているSmart TV AllianceではスマートTVに必要な基本機能としてHLSも定義しているので、「Firefox OS TV」としてその拡張もされる可能性はあると思います
(ただHLSに限らずMozillaはメディア再生に最適化する取り組みはあまり積極的ではない、あるいはちぐはぐな印象がありますので、採用したパナソニックも苦慮しているんじゃないでしょうか?このままいくとWebOSに乗り換えるかも?)

まあFirefoxOSを内蔵しているテレビは元々高価な機種になりますので、もし内蔵のFirefoxOSで動かなくても、外付けでFireTVやNexusPlayer/Chromecastを追加するのも費用的に大きな差はないと思います。当面はそういった機器を併用する形でも良いのではないでしょうか。

他にやはりHTML5/JavascriptベースになるWebOS、Tizenなども、これから伸びて来る気配があればテストしてみようと思います。

2015年10月 2日 (金)

TvRemoteViewer_VB バージョンアップ支援ツールを公開しました

このブログでご紹介させていただいている TvRemoteViewer_VBとTvRemoteFile は、バージョンアップは速いのですが移行が手作業になってしまうため、せっかく面白そうな新機能があってもなかなか更新する暇がない、という方も多いのではないでしょうか。
そういう方へのご支援として、バージョンアップをほぼ自動でおこなうツールを作成いたしましたので、公開します。

1.導入

簡単ツールなのに説明が長くなるのも何ですので、さっそく使い方をご説明いたします。
以下のリンクをダウンロードして、適切な実行用フォルダに解凍してください。

「TRVInst131.7z」をダウンロード

解凍すると以下のような構成になりますので、このままお使いください。

Trvi0

別のフォルダやPCにコピーする時も、.exeファイルだけでなくフォルダ類も一緒にコピーするようにしてください。

なおこれを動かすためには、VC++ 2010(x86)のランタイムが必要です。
TS抜きチューナーを使っている方ならほぼ導入済みかと思いますが、あまり自信がなければ別に何度入れても構いませんので、リンク先から導入してみてください。
「修復」「アンインストール」二択の画面になる場合は既に導入済みですので、「キャンセル」すればOKです。

補足)
このバージョンアップ支援ツール自体も、本体(TvRemoteViewer_VB)の構成変更に合せてバージョンアップすることがあります。(例えば2016/5/9 にVer1.2にアップしています。)
今までのバージョンをお使いの方は単純に上書きコピーすればOKです。
(特に断りのない限り、TRVInst.exe だけ上書きコピーしてもOK)。

2.使い方

TVRInst.exeをダブルクリックすると、次の画面が立ち上がります。

Trvi1

「新規導入」は後々の宿題として、現在は既にTvRemoteViewer_VBを導入済のかたが最新版に更新するための「アップデート」機能が中心になります。

1)TvRemoteViewer_VBのアップデート手順

下のほうにある「導入フォルダ」の入力欄に更新対象のTvRemoteViewer_VBフォルダ(ROOTフォルダ)を指定してください。右のボタンでダイアログから選択することもできます。

なお、これ以降のファイル/フォルダ名入力欄にも共通しているのですが、対象のファイル/フォルダを直接ドラッグ&ドロップしても指定できます。

Trvi1dd

さて正しいフォルダ名を指定して「アップデート」ボタンを押すと、次の画面になります。

ここで更新対象のものをチェックして、それぞれリンク先のサイトにある最新版プログラムの圧縮ファイルをダウンロードし、指定してください。

Trvi2

解凍後のフォルダが既にあればそれを指定しても良いです。指定後、「更新」ボタンを押せばプログラム更新が始まります。

その際、TvRemoteViewer_VBが稼動中なら、以下の確認メッセージが出ます。

Trvi2confirm

そのまま続けてよければ「はい」を押してください。

更新が終われば、以下の画面になります。

Trvifin

そのままTvRemoteViewer_VBを再起動する時は「はい」を押してください。

前の画面に戻ってみると、確かに各プログラムの日付が更新されていることが判ります

Trvi2after

ここまでで数分もあれば完了しますので、新しいバージョンを気楽に試せるようになるのではないかと思います。

2)TvRemoteViewer_VBをバックアップ/ロールバックする。

プログラムのアップデートは楽になるのですが、久しぶりにバージョンアップするような時に何かの問題がおきないか不安な時、あるいは自分でカスタマイズする時など、念のために今使っているバージョンに完全に戻せるようにしておきたい、という事があるかもしれません。
そういう時にこの機能は役立つと思います。

Trvibkup

トップ画面で現行フォルダを正しく指定してバックアップ/ロールバック ボタンを押すと、次の画面になります。

Trvibkup2a

ここで何か名前を付けて「バックアップ」ボタンを押せば、今の状態をバックアップします。

また下のリストから適切なバックアップを選んで「ロールバック」を押せば、

Trvibkup2b

その時点にTvRemoteViewer_VBを戻すことができます。

なお、バックアップ対象はTvRemoteViewer_VBのROOTフォルダ以下にあるもの、および(別のところにある場合)WWWRoot(HTMLフォルダ)下のものになります。
ffmpegやRecTaskはバックアップ対象になりません。あくまでTvRemoteViewer関連のバージョンアップに付帯する機能というのが理由です。(但しそれらもROOTフォルダ下にある場合、結果的に一緒にバックアップされることになりますが。)

3)更新除外リスト

以上のような手順で、このプログラムでは設定内容(主にTvRemoteViewer_VB.iniファイルとform_status.txt)を引き継ぎながら、速やかに新しいバージョンに上げることが出来ます。

ただしもしご自身で、たとえばffmpegのパラメータをいろいろカスタマイズして使っている場合、HLS_option ファイルは上書きされたくないかもしれません。
そこでここでは単純に、バージョンアップに関係なく維持されるファイルを指定できるようにしました。手順は以下の通りです。

Trviexlist0

上記アップデートファイルの指定の画面に、「更新除外ファイルの指定」というボタンがあります。

これを押すと以下の画面になります。

Trviexlistn

ここで維持したいファイルをドラッグ&ドロップで指定していき、

Trviexlist_3

「リスト確定」ボタンを押せば、それらのファイルはアップデート時に更新されず、内容維持することになります。
但しいたずらに維持するとアップデート内容と矛盾が生じることがあります。この機能は主にカスタマイズしたHLS_option関連の保持を意図したものですので、自己責任で使ってください。

3.その他注意点

バックアップでリストされる対象、および除外リストにリスト可能な内容は、「導入フォルダ」で指定したTvRemoteViewer_VB関連のファイルのみです。その辺範囲を広げると、意図しない設定内容のものや目的の場所ではないファイルを間違って指定してしまう可能性があるので、この制約を付けています。

以上、便利にお使いいただければと思います。
「新規導入」自動化機能は。。。まあ、作る手間もかかるのと、その割に結局自分で設定しなければならない内容が多いので、その辺のバランスが難しいところです。

4.更新履歴

・2017/3/21  v1.31
htmlフォルダにprep.jpg (新版画面遷移のお待ちください画像)が既にあれば更新しないようにした。

・2017/3/05  v1.3
TvRemoteViewer_VBとTvRemoteFilesが所定のバージョンを満たした場合に、黒画面を出さない新版の画面遷移に自動で切り替えるようにした。
・2016/5/09  v1.2
TvRemoteViewer_VB.ini で定義したにも関わらず、プログラムに添付されているデフォルトのTvRemoteViewer_VB.iniには空の定義体(MIME_TYPE_DEFAULT=    等)がなく、コメントの説明のみのパラメータがうまく移行されない問題をFIXした。 (今のところMIME_TYPE_DEFAULT= と MIME_TYPE= )
ただしそれらの定義体の位置はバージョン移行後、最後尾に移動する点はご容赦ください。(関連コメントの位置が判別し辛いので。)
・2015/12/06  v1.1
ViewTVn.htmlファイル(n >= 9) が存在する = ストリーム最大数が9以上で定義されている際に、それらも更新するロジックを追加。
なお実際にMAX_STREAM_NUMBER=9以上が定義されているにも関わらずViewTVn.html(n >= 9)が存在していない場合、このツールでの作成はおこなわない。
(TvRemoteFilesのほうで最初にトップ画面または待機画面を表示する際に、存在しないものがあれば作成する。:ver1.52以降)
・ 2015/10/02  v1.0
初版

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デバイスでの互換性も担保されるのではないかと思います。

2015年9月 1日 (火)

Windows10 Edge環境でネイティブサポートされたHLS再生をTvRemoteViewer_VBで活用 およびiOS/Androidのネイティブプレーヤー機能追加

1.TvRemoteViewer_VB(TvRemoteFiles v1.35) のWindows10 Edgeサポートについて

Windows10では今年初の段階でHLSのネイティブサポート予定がアナウンスされており(→参照記事) その後ぱったりと情報がなくなったので気にはなっていたのですが、最近ようやくWin10を1台導入してみましたのでテストしてみました。

結果、現在のところChromeもFirefoxもWindows10でのHLSネイティブはサポートしていないことが判ったのですが、Windows10から添付された標準ブラウザのEdge上であれば(また今のところその環境でのみ)HLS再生が標準サポートされていることが判りました。

ただEdgeはMSが敢えてIEを捨ててまで開発しただけあってWebkit系のCSS表現とも高い互換性がありますが、相変わらずChromeにもFirefoxにもない強烈な癖があり、IEほど明確な非互換ではないものの対応は結構大変でしたが、サポートバージョンのTvRemoteFiles ver1.35をようやくリリースいたしました。→導入手順はこちらを参考に。

Edgerel1

実際にEdgeで動かしてみると標準サポートの威力は絶大で、高解像度の映像でも軽いCPU負荷でヌルヌルと動きます。
今までPC環境ではHLSはネイティブサポートされていないため、プレーヤーのFlashフォールバック機能を使ったエミュレーションを使っていたのですが、720p解像度までなら普通に見られると思っていたもののさすがにフルHD 1920x1080や、もっと低い解像度でも1000コメ/分のような実況弾幕状態になると動きがカクついたり絵が追い付かなかったで無理があるなぁ、と思っていました。
ところが今回比べてみるとフルHDどころか、どの解像度でもフレームレートの差は(数字で測ってはいませんが)明白で、動きが滑らかになりますし、発色の良さ、動きやコメの多い場面でも映像が乱れることも殆ど無いことなど、今のところ(Windowsで視聴されている方にとっては)かなり差があります。またフルHDの視聴も実用的です。

Edgerel2

ただフルHDだとさすがにサーバ側が従来型のソフトウェアエンコードでは高負荷(1ストリームでもウチの4コアSandyBridgeでは一杯一杯)になる方が問題だったのですが、この後TVRemoteViewer_VBに実装されたハードウェアエンコード機能でその問題も解消しました。現在ではむしろスティックPCを使ったローエンドサーバーでも楽にフルHD配信ができるようになっています。
その際Edgeを使えば視聴側PCも負荷なく滑らかな再生が可能で、またその状態で勿論実況表示やシーク動作も軽快に動くようになります。

TvRemoteViewer_VBを使う方でWindows10にアップグレードされた方は、これだけでもWin10を導入した甲斐があるのではないでしょうか?

ただしご利用に当たっては、Windows10対応の最新のグラフィックドライバの導入も必ず行ってください。私の環境(IvyBridge インテルHD4000)では、WIndows10を導入しただけでは動画再生時のCPU負荷が70%を越える状態でしたが、インテルのサイトから最新ドライバを入れたところ10%前後に落ち着き、絵も滑らかに動くようになりました。

1)使い方

使い方は特に従来のものと大きく変わることはありませんので過去の解説記事をご参照いただければ良いのですが、従来とちょっと違う面、また再生能力以外にも便利になった面がありますので、補足説明いたします。

準備

Edgeの設定→詳細で以下のように、「ポップアップをブロック」が「オフ」になっていること、「クッキーをブロックしない」になっていることを確認し、違っていたら変更してください。

Edgesettingpupcookie

① ボリューム操作

ネイティブプレーヤーは(格好の良し悪しは置いといて)マウスオーバーやタップで図のような

Edgerel3

コントロールが表示され、Play/Pause、動画の(ブラウザ機能ではない)全画面表示等が可能ですが、音量の調整は図のように

Edgerel4

一応縦のスライドバーで調整はできるのですが、画面の中にかかってしまうため、実況表示中は(実況の下に入って)操作ができなくなります。
そこで上図の中央部にあるように代替のボリュームコントロールが使えるようにしました。

ちなみにコントロールにある音量マークは、縦のバーが表示された状態でもう一回クリックすればミュートのON/OFFになります。

なお、2.でご説明するiOSやAndroidのHLSネイティブサポートでは、両者ともモバイルの制約でHTML5によるボリューム制御が出来ませんので、この音量バーも表示されません。音量調整はスマホ/タブのボタンでおこなってください。

また進捗バーは何となくいろいろ使えそうに見えるのですが実は(エンコード済みのファイル再生以外では)役にたちません。
ところがEdgeのNative HLSプレーヤーはコマンドを使えば、実はライブ(TV)ストリームやエンコード未了のファイル再生ストリームでも、シークが可能なことが判りました。その機能を次に解説いたします。

② ライブ(TV)ストリームでシーク操作。エンコード未了のファイル再生でもシーク操作

EdgeのTVストリーム再生画面では、従来にないシークボタンが追加されています。

Hlsseek1

これを使えば「今プレーヤーが蓄積しているバッファの範囲内であれば」 再生位置を前後に移動させることができます。
ボタンでシーク位置を指定すると、移動可能な範囲にあれば上図のようにボタンが明るいグリーンになり、それを押すことで移動が実行されます。

移動可能範囲外なら下図のようなダークグレーとなり、押しても何も起きません。(数字はリセットされます。)

Hlsseek2

このボタンで移動できる範囲はバッファの状態によって変わり、再生開始直後はほとんど移動範囲は無いか僅かしかないものの、数十秒も経てば1~2分の範囲で動けるようになります。(ただし前方へはリアルタイムの10秒遅れぐらいまでで、それ以上前には進めません)
移動直後はバッファがクリアされますので連続の移動はできませんが、数十秒でバッファが溜まってまた動けるようになります。

以上のようにそれほど大きな移動はできないのですが今まではなかった機能であり、「今のシーン見逃した!ちょっともう一回見たい。」という時に役立つのではないでしょうか?

一方ファイル再生でも今までストリーム再起動しなければ出来なかった「エンコード未了状態でのシーク動作」が、バッファ範囲内であればできるようになっています。
従来のファイル再生ではエンコード未了状態でシークボタンを操作すると、図のように青いボタンで移動時間が表示され、

Hlsskip1

これを押すことでストリームが再起動されて再生位置を移動していました。
これはこれで確実な動作なのですが、再起動を伴うためタイムラグがあるのが弱点でした。

それがEdgeでは図のように

Hlsseekfile1

バッファ範囲内であればグリーンのボタンになり、押すことでクイックな移動が可能です。
移動可能な範囲は再生開始直後にはありませんが数十秒後にバッファが溜まれば、前後3~4分の範囲なら動けるようになります。(移動直後はバッファがクリアされますので連続移動はできませんが。)

チャプタースキップボタンでも同じ操作性が実装され、

Hlsskip2

ボタンがグリーンの範囲内であれば瞬時に移動します。
移動時間から言ってもCMスキップ等に丁度良いのではないでしょうか?

ファイル再生の場合は、バッファ範囲外の移動先であればボタンの色はグリーンから青に変わり、通常のストリーム再起動によるシーク動作に変わります。

なお、プレーヤーのバッファ状態は刻々変わりますので、シーク時間を調整しているタイミング(数字ボタンを押す度に範囲判定が行われます)と、実際にシークを発動するタイミングでバッファの位置がずれ、結果として意図に反してストリーム再起動が発動する場合もあります。
この辺はベストエフォート型の処理ですのでご了承ください。その辺の動作を避けるためには限界地点までの移動ではなく、ある程度余裕を持った幅で移動することがお勧めです。

2)注意点

ブラウザの全画面モードは未実装

Edgeは動画単独での全画面表示は最近対応したのですが(上記2 のコントロール右端にボタンがあります)、ブラウザ自体の全画面表示は未だ対応しておらず、ウインドウを最大化しても上下に枠やアドレスバーが表示されたままになります。

ブラウザの全画面モードがあればリモコンとの組み合わせによってテレビのような使い方ができ(→参照)、より実用的なのですが、この辺は開発が間に合わなかったのではないかと思います。
要望も結構多くじきに対応すると思われますので、それまでは枠の表示は許容するということで。
気休めかもしれませんが「テーマの選択」で黒を選んで、枠やコントロール類を黒くすることで多少引き締まった雰囲気にすることもできます。

Trvedgebg

以上、Windows10のEdgeはかなりタイトなスケジュールで開発されたと思われ、まだ怪しい動作や足りない機能も多いのですが、今後追加されていくものも多いと思います。(但し開発者向け機能はChromeに習ったのか、バグはともかく機能は現状でも豊富です。)
今のところ、HLSが標準サポートされている点だけでもこれ用に使ってみる価値があると思います。特に省電力PCやスティックPCなど、非力なPCでも高解像度の動画が無理なく鑑賞できるのは意味があるのではないでしょうか?
(ただしChromeもFirefoxもAPIで排除するわけにもいかないでしょうから、じきにHLS標準サポートするようになると思われますが。)

ちなみにWindows10そのものの動作検証はまだまだですが、いままで使った限りではWindows8/8.1に移行する際の注意点とそれほど変わっていないと思います。(すなわちWindows8/8.1への移行を経験された方なら同じような点を注意すればOK)
なお今回はFast Bootのマシンに上書きインストールしてみましたが、8→8.1移行で経験したような起動が遅くなる問題は起きませんでした。
うまく対策したのか、それとも上書きインストールに見せかけた完全な新規導入(?)になってるために結果として問題が起きないのかは判りませんが、取り敢えずその点は有難かったです。

その他の注意点としては、VMWare Workstation系のネットワークはまた厄介が生じてますね。MSの伝統がまたまた健在といったところでしょうか。
具体的には、Win10にするとBridge接続は使えなくなり、NATで外に出るしかない状態になります。ネット上にはブリッジを再導入すれば良いとか一旦削除して再導入すれば良いとかいくつか情報はありますが、どれも不確実な手段です。なかなかこれに対するMSの所業は手が込んでいる感じですね。
しかしこの問題も2016/9にリリースされたVMware12.5 でようやく解消しました。今後利用される方はそれ以降バージョンにアップされることをお勧めします。
(それ以前のバージョンでは対応策としてここにある手順が必要でしたが、その手順を使っていた場合、12.5に移行する際にハングすることがありますので、Virtual Network Editor(vmnetcfg.exe)で追加した仮想アダプターやMicrosoft Network Adapter Multiplexorは削除してネットワークの設定を元に戻した上でVMWareのバージョンアップをおこなってください。)

3)Windows 10 Mobile 対応

Windows 10 Mobile 上のEdgeも動作環境として互換なので、基本は動きますが、某掲示板で一部表示が乱れるという情報をいただきました。
現物は持っていませんでしたが、MicrosoftがVisual Studio 2015上で動くMobileエミュレータを提供していることが判りましたのでそれを使って検証し、問題個所を修正いたしました。(TvRemoteFiles v1.36以降)

モバイル環境では元々画面サイズに比べてドットピッチが細かいので -webkit-text-size-adjust でフォントサイズの調整をおこないますが、この解釈が他のモバイル環境と微妙に違っていたのが表示乱れの原因でした。
また何故かUserAgentに"Android"の文字列があるためAndroid環境と取り違えた動作があり、それも修正しました。

こんな感じで使えます。

Win10mov3 Win10mov1

画面の大きさは別として操作性は通常のWindows10 Edgeと同じになりますが、以下の特性があります。

① 他のモバイル環境と同様に動画の自動スタートはできないので、視聴開始時にはスタートボタンを押してください。

② 一方iOS、Androidとちょっと異なる点としてプログラムからのボリュームコントロールは出来るようです。(少なくともエミュでは) したがって代替のボリュームコントロールを付けたままにしています。

2.iOS/Android ネイティブプレーヤー機能の追加について

 1.のEdgeで動かす際は、現在TvRemoteViewer_VBで標準的に使っているProjekktorというメディアプレーヤーは読み込まずに、ブラウザ標準のHTML5ビデオプレーヤーを直接使う作りに変えています。
実はこれはもともと、Chromecast対応時に作ったロジックを汎用化したものです。今回はそれにEdge独特の癖を吸収するロジックを加えています。
(Chromecastは追加のライブラリが必要とはいえ、動作はHTML5標準のvideoタグに準じています。)

こうやってせっかく作ったロジックですのでさらにこれを、もともとHLSをネイティブサポートしているiOS/Android 環境でも使えるようにしてみました。

利用するにはトップページの管理タブにある以下の項目をチェックしてください。

Hlsrel1

本来ProjekktorはHLSが標準サポートされている環境では内部的にその機能をきちんと使うので、(例えばiOS/Android環境では標準プレーヤーの上に被さる形で動いている。) 今までわざわざ標準プレーヤーを直で使う必要は無いと思い、プログラムの共通化の観点でもProjekktorのみをインターフェースにした作りにしていたのですが、
1.でご紹介したEdge環境では何故かProjekktorとの組み合わせがうまく動かず、必要に迫られてHLS Nativeのみで動くものを作りましたので、せっかく作ったんでと試しにiPadやAndroidでも動かしてみると、実はいくつか便利な機能が追加で使えることが判りました。

① iOS環境ではEdgeのケースと同じように、ライブ(TV)視聴中やファイル再生開始直後でもシーク操作ができる。
 (Androidは残念ながらこの機能サポートしません)

② Android環境で動画全画面化するとうまく操作ができなくなる現象が(標準ブラウザやChromeで)起きていたがこれが解消し、全画面化⇔ブラウザ表示の切替えもスムーズになる

③ Projekktorのライブラリはそれなりのサイズがあるので、これを外すことでモバイル環境で起動が速くなる。

④ iPad最新モデルであれば「ピクチャ・イン・ピクチャ」機能がブラウザ表示状態から直接呼び出せる。

まあ②③.はともかく、①はProjekktorが敢えてクロス環境での動作を統一するために省いていた機能と思われます。
確かにプラットホーム別に処理をいちいち分けるロジックはちょっと面倒で、Projekktorが使えたことで今まで開発が非常に楽だったのも事実なのですが、こうやって対応出来てしまうとやはり使える環境では使えたほうが便利だと思い、TvRemoteFiles ver1.35でこれらネイティブ機能が使えるようにし、安定動作が確認できたことでTvRemoteFiles 1.39以降ではiOS/Mac/Androidでこれがデフォルトになるようにしました。(敢えてチェックを外さない限りネイティブプレーヤーを利用します。)

各プラットホーム・HLSネイティブプレーヤーで使える機能を表にすると、以下のようになります。

Hlssummod

シーク等の実際の操作方法は1.のEdgeと同じですので、iOSで使う場合もそちらを参照してください。またリモコン機能のシーク/スキップボタンも今回、このHLSネイティブプレーヤーのシーク機能に対応して、色の変化で判るように拡張されています。

比較のため、同じHLSプレーヤーを使ったChromecastを加えてあります。
(尚、Chromecast/Googlecastでは当初と比べて最新バージョンの使い勝手が変わっていますので、変更箇所を赤字にしてあります。)

以上、特にiOS環境では動作も軽くなりますので、ぜひ使ってみてください。
.

3.(補足)Microsoft Edge アプリ互換性の注意点

記事中で癖が強いと言いながら具体的な事を書かないと役に立たない情報になってしまいますので、ポイントだけメモしておきます。(あくまで私が使った範囲内で気が付いた点です。)Edgeでも動くようなアプリの開発を計画されている方向けなので、関係ない方にはあまり意味のない蛇足です。

1)サイトの信用度が低いと判断すると、そこで作成したcookieが強制的にセッションクッキーにダウングレードされてしまう。

どのようなサイトを信用高い、低い、と判断するのかよく判っていませんが、TvRemoteViewer_VBのようなプライベートサーバは信用してくれないらしく、設定情報のクッキーがブラウザ終了のたびに蒸発する、という現象に悩まされました。
結局1か月ぐらいの保存期間を指定したはずのcookieを、強制的にブラウザ終了とともに削除される"セッションクッキー"にダウングレード、という処理がEdge側でおこなわれているようです。

クッキーのダウングレード機能自体はIEの時代からあったもののちゃんとカスタマイズができたのですが、Edgeにはろくなカスタマイズ項目もなく、簡単には対策できないようです。
結局Edge環境ではパーマネントCookieの利用は諦め、少々の速度低下は許容した上でWeb Storageを代替で使うことにし、元のcookie関連共通関数の中に埋め込んでアプリ本体から見れば同じ処理になるようにしました。

このようなセキュリティ機能の良し悪しは別の話で、他のブラウザと大幅に異なる振る舞いでカスタマイズも出来ないのは問題だと思います。イントラサーバでWebアプリを組んで、Cookieを認証等に使っている企業ユーザーで困った事になるかもしれません。(尤も敢えてEdgeを使わなければ良いのですが、そうと気づくまでシステム部門の人が悩むことになると思います。)

2)httpでのキャッシュが効き過ぎる

普通にブラウザを操作する時、例えば http://www.nifty.com/test.html を開いて読むときは、ブラウザ側は読んだ内容をキャッシュに保存して、次に開くときにも変化がない、あるいは余り時間が経っていないと判断すればniftyのサーバへは殆どアクセスせず、キャッシュの内容が再表示されます。
ユーザーが単なる再表示ではなくサーバーに最新の記事を取りに行ってほしいと希望すれば、改めて「最新の情報に更新」のようなボタンで指示をすることでサーバにフルアクセスが行き、最新のものが読み込まれることになります。

ここまでは普通のブラウザ操作での動きですが、人間が操作するのではなくjavascriptプログラムが http://www.nifty.com/test.html というurlを指定してアクセスする際は、キャッシュを利用するかどうかはブラウザによって微妙に違います。

① プログラムが「同じデータを後から読み直す目的」で同じurlにアクセスするのは有り得ない。敢えて同じurlにアクセスする際は最新データの取得が目的と考えられるので、必ず最新のものを再読込する

② javascriptは人間が読みやすいように加工するのに使われている程度だろうと考え、ブラウザ直でのアクセスと区別しない。再読込するかどうかはtest.html の中身によって判断。ダイナミックページ(javascriptが中身を毎回自動生成するようなページ)は毎回再読込し、スタティックページではキャッシュをできるだけ活用する。

だいたい①と②の間のどこかになると思いますが、大抵は①に近いと思います。
ところがEdgeはほとんど②と思われる動作が標準になっていることが判りました。

まあ確かにライブラリのように画面遷移する度に読み込まれるようなファイルをキャッシュしてくれるのは有難い面もあるのですが、肝心のプログラム動作では、TvRemoteViewer_VBでは端末からサーバに頻繁に

 http://サーバアドレス/WI_GET_PROGRAM.html

のようなuriが送られ、サーバ側はそれに対応した情報(最新の番組情報やストリームのステータス)を返しますが、ブラウザから見ればこれは静的HTMLに見えるので、Edgeはキャッシュのデータを返せば良いのだと勝手に判断し、サーバにはuriすらほとんど送られません。

このような通信手順は単に情報照会だけではなく端末プログラム側からのコマンド送信でも使われるのですが、プログラムがサーバにコマンドを送っているのにEdgeは勝手に単なるブラウジングと判断した上で、前に同じようなブラウジングリクエストがあったと解釈し、サーバには何も送らずに、前回サーバから返ってきた(実際は処理リターンコードの)画面をプログラムに返す、というような(アサッテな)動作をしてしまいます。
結果すぐに動かない状態になるものの端末側のトレースを掛けても何もエラーも見つからない、という困った状態になります。

結局上記のようなuriには必ず

http://サーバアドレス/WI_GET_PROGRAM.html?dummy=123456

というようなダミーの尻尾をつけ、123456を毎回変える(例えば現在のミリ秒単位の時刻)とすることで毎回確実なサーバ通信が行なわれるようになります。今回この手のサーバアクセスには必ずこの「尻尾」をつける改修をおこなって対策しました。

ただこのような動きは必ずしもEdge特有という訳ではなく、いろいろ確認してみるとAndroidのDolphin Browserも、条件はもっと限られますが同じような動きをするということが判りました。(リモコン機能がDolphin Browserでだけ効かない、という問題が偶然最近あったのですが、これが原因でした。)
そういう意味ではEdgeが悪いと言うのではなく確実な汎用性を持たせるためにはやらなければならない改修で、デバッガ機能が豊富なEdgeで問題が明確になったことで潜在的な問題を解消する良い機会にもなったのですが、それにしてもEdgeだけ随分違った動きをするな、と面食らったのは確かです。

3)エラー判定が厳しい

ChromeやFirefox等のような従来の処理系と比べて、文法的な間違いや「変数に対する不適切なメソッド適用」のような誤った処理をなかなか見逃してくれず、従来ならなんとか動いていたアプリがそういう場所で止まるケースが続出します。以下はほんの1例です。

HTML部品では、例えば<input>タグはもともと構成要素がないので終了タグ</input>は「不要」となっていましたが、HTML5では改めて「書いてはいけない」という規則になりました。→参考
ただ今までなんとなく書かれていた場合もあるということで、多くの処理系でエラーにはなっていなかったのですが、Edgeでは明確にエラーになりますので、きちんと直す必要があります。(直さなくてもそこで止まるわけではありませんが。) </br> のようにあまり深く考えずに使っていたものもエラーになります。

もう少し影響が大きいのはjavascriptの不適切な処理でプログラムが止まってしまうことです。例えば次のような構文の場合

 var text1 = object1.name;
 if (text1.indexOf("Tokyo") >= 0) 処理1;
 else 処理2;

もしobject1.name に何かの文字列がセットされていれば、その文字列にTokyoというフレーズが含まれているかどうかの場合分けをしたいというのが本来の意図です。
しかし もしobject1.name が定義されていない(=undefined) の場合、undefined な物にはindexOf() というメソッド自体が定義されていない筈なので不適切な処理ということになります。
そういう場合、PCのChromeなど多くの処理系では、メソッドの副作用が少ないと判断した場合はできるだけ処理を止めない配慮がされていて、条件式自体が成立しなかった = falseだったとして処理2が実行され、以後の処理が継続します。Firefoxはこの辺割と厳しいのですが、それでも大抵はWarningで留めてくれます。(というか、その辺が通るレベルまでデバッグされていたアプリが今まで多かったと思われます。)
ところがEdgeの場合はif文の条件式自体が間違っていると判断してそこでエラーを出し、以後の処理もおこないません。
こういう所はもちろん本来

 var text1 = (object1.name != undefined)&&(typeof object1.name === "string")?object1.name:"";
 if (text1.indexOf("Tokyo") >= 0) 処理1;
 else 処理2;

このように修正していかなければならないアプリのバグで、たまたま今までの処理系の親切さが仇になって発見できていなかったことになります。このあたりの「ユルさ」もjavascriptの魅力ではあるのですが、アプリが次第に大規模になって行ったり多くのプラットホームをサポートしていく際には次第に足枷になりえます。特にモバイル系プラットホームだとデバッグが容易ではない上様々なブラウザが使えることで代替手段も多いので、この辺のエラーが起きていてもなかなか発見しづらくなります。
こういう点にEdgeは厳しいのですが、デバッガ機能も豊富なので、一通りの処理を流していけばこういう個所が容易に発見でき、原因を判別して修正するのも容易なプラットホームだと思います。

今後はEdgeで動けば他の処理系でも動く、という事にもなるので本来的には有難い作りなのですが、従来のアプリでは割と高い頻度でこういう処理はある筈で、アプリがEdgeですんなりとは動かない原因になります。
こういったエラーへの許容度の狭さを直すべきとは言えませんが(特に「言語屋」は不適切な処理があればそこで止めるのが「親切」という考え方をするので、出来たばかりの処理系には有りがちな話ですね。)、しかしアプリ屋にとっては少なくとも他で動いていたアプリをEdgeで動かす際にきちんと検証が必要な理由になります。特に他人が作ったライブラリを活用している時は、そのライブラリ自体が内包していたバグで動かなくなるケースも起きますので、そういう点はちょっとやっかいかもしれません。(もちろん大所のライブラリはコードインスペクタで潜在的なバグにも対処済みと思われますしMicrosoft自身もEdgeの開発過程でテストしている筈でエラーは出ないと思われますが、小規模に流通しているライブラリは要注意だと思います。今回のEdge対応でネイティブプレーヤーのみで動く形に改修したのも、もちろんその方がシンプルに多くの機能が使えるのが一番の理由ですが、もともとの動機は今まで汎用プレーヤーとして使っていたProjekktorがEdge上でうまく動かず、中身も可読形式ではないので敢えて対応させるのが面倒だったのも大きな理由でした。)

以上、結果を知ってしまえば簡単な話なのですが、当初原因が判らず悩まされた問題はだいたいこの3点という感じです。

2015年7月20日 (月)

Chromecast(クロームキャスト)とTvRemoteViewerで未来型テレビを作る

前記事でご紹介したTVRemoteViewer_VBにChromecast対応機能を追加しましたので、ご紹介いたします。

Whatiscctrv

これを使えば何でもないモニターや、最新型にしろ古くて機能不足だけど画質は今でも気に入ってるテレビにしろ、とにかく映像を映せるものなら何でも

Chrocastvr

こんな感じでTvRemoteViewerのストリーミングを映して楽しめるようになり、また手元のタブやスマホはリモコンとして活用できます。

TVRemoteViewer_VBの全機能とは何ぞや、というと手前味噌ですが、現状で以下の主要な機能があります。

・番組表から起動して自宅で視聴可能な全てのテレビ放送を視聴できる。
・自宅のLAN上にある全てのPCやNASの映像ファイル(除isoイメージ)を視聴できる。視聴中に端末間のシーン引き継ぎも簡単にできる。
・多ストリーム並列配信。(並列数上限はサーバ/ネットワーク能力に依るが仕組み上は無制限)
・プレイリスト機能
・スカパープレミアム放送対応
・VPNを介して出張中/海外でもシームレスに利用可能(期限なし)
・ニコニコ実況表示機能
・2ch実況表示機能
・ファイル/プレイリストのストリーミングも実況付きにできる。
・0.5倍速再生~2倍速再生
・チャプター機能/自動スキップ機能
・目覚まし/お休みタイマ
・二ヶ国語対応

これらの機能全てを利用するのに面倒な配線はいらず、3~4Mbpsの無線LANが繋がるだけでOKというのもメリットです。
手元の全てのスマホやタブ、PCは、もちろん手元での視聴用にも使えますが、加えて多機能リモコンとしても使えるようになります。
この場合(ChromecastにChromeの拡張機器という特性があるため)最初のアプリ起動だけChromeブラウザか専用アプリが必要ですが、起動してしまえばいかなるプラットホームでもブラウザを使ったリモコン機能が使えます。

TVRemoteViewer_VBはもともとはリモート視聴が主眼のシステムだったのですが、本質的には映像をHLSという共通のフォーマットにして様々な情報を付加した上でサービスする仕組みなので、高画質モードで使えば家のテレビやHDDプレーヤーの役目を置き換えることもできます。そういうわけでバージョンを重ねるうちにオールインワンのTV/動画鑑賞システムへと変化してきました。これを活用すれば、気楽に放送&録画再生を楽しめるテレビをあちこちに置けるようになります。
正直最近の市販のテレビはそうでなくても機能面が洗練されていない上に、メーカーは利益の出る大画面TVばかりを売り付けようとして中小型は意図的にその不便な機能すら削ってきているので、家の各部屋や空きスペースに何台も手頃なサイズのテレビを置いたとしても、大して便利な使い方はできません。また折角有料放送に加入してもB-CAS縛りがあるため、加入したカードを挿したテレビでしか視聴ができません。テレビ業界は未だに「リビングに豪華なテレビを1台置いてゆっくりとお楽しみください」という発想なわけです。
それに対してもっと時代に合わせて、このような新しい仕組みを使ってキッチンでも仕事部屋でも、地上波だけでなくBS/CS放送も録画再生も流しっぱなしにできるような「テレビ」を1台といわず2台3台と安価に増やしていく、というのもなかなか楽しい使い道ではないかと。 高いテレビに2in1で映すぐらいなら横にモニタを1,2台置いて裏番組チェックすれば良いわけですし、途中のシーンを別のテレビ/PCやスマホ/タブとの間で行ったり来たり自由に移動できるのも相変わらず便利です。

この辺は基本はTVRemoteViewer_VBの拡張機能なので前記事に追加して書こうとも思ったのですが、Chromecastを使わない人にはあまり関係がないのと、今までの記事に追加・変更を続けているうちに記事日付の間隔も開いてしまいましたので、この機会に別記事としてまとめることにしました。
といってもご利用にはTVRemoteViewer_VBが使える状態になっているのが前提なので、新規にご利用したい方はまずは前記事のTVRemoteViewer_VB の導入をおこなってください。
最新版のTVRemoteViewer_VBが使える状態になっていれば、Chromecast用に必要な追加導入はありません。決まった手順で最初の認識を済ませれば、以後は簡単に使えるようになります。

さて今更な話なので読み飛ばしていただいて構いませんが、そもそもChromecastとは何ぞやというと、こんな感じのデバイスになります。ここの記事では初代のChromecastを使っていますが、現在では円盤型の筺体にHDMIケーブルの生えた2世代目になっており、パフォーマンスも向上しています。

「テレビやモニターのHDMI端子」に接続して、「ローカルの無線LAN」を介して自宅のPC/スマホ/タブレットやネットワークに繋ぐようになっています。(というかその2種類のインターフェースしか持たず、USB端子は給電専用。)
具体的な解説は本家のページにあります。

ただこの辺を見ても、「つべやニコ動をスマホで見ながらボタンを押せば大画面でも見れるの?うーんうちはテレビに直接PCを繋いでるからあんまり有難味はないかな。ゴロ寝しながらスマホで動画見てるのを大画面に引き継げるのはちょっと便利かな。4千円なら遊びのつもりでちょっと買ってもいいかな。」ぐらいにしか思わない方もおられるのではないでしょうか?というか私はそう思っていました。

この形態からして私は最初このデバイスを見たとき、従来のMiracastやスマホをモニターに表示する周辺機器・に毛が生えたようなもの、と誤解しており、「TVRemoteViewer_VBをChromecastで使えるようにしてほしい。」という掲示板の要望があっても「そんな大した話だろうか?」ぐらいにしか考えが至らなかったのですが、さすがにGoogle先生がそんなつまらないモノで騒ぐわけがないとも思い直し、参考記事を読んでみたところ、

http://www.atmarkit.co.jp/ait/articles/1409/03/news033.html

TVRemoteViewer_VBから見れば実に面白い「プラットホーム」であることに気が付きました。
要は独立したOSとChromeベースで動く「Javascript + HTML5」プラットホームであり、ChromeOSの元々の考え方を(ウインドウシステムやアイコンすら取り除いて)よりシンプルにしたものだと判りました。

Javascriptで情報を取ってみるとARMマシンに(Androidではない)LinuxベースのChromeを乗せているのが判ります。

Ccsystembase
これはUserAgentが返す「自己申告値」ですので、Chromecastの実体がこれに沿っているとは限りません。(最初GoogleもChromeOSの簡易版だと説明したらしいのですが、Hackした結果別のものだったというレポートがあるようです。)
ただ重要なのはこれがアプリ上どう振る舞うか、という点なので、アプリの基盤がAndeoidベースではなくCromeのブラウザエンジンであるという点で、ChromeOSの延長上にあると言って間違いないと思います。
(恐らくその下のレイヤは、この手のデバイスに求められる自動運用をどれだけ既存のもので実装できるか、の観点でGoogleTVのモジュール等を持ってきたのではないかと。)

一方TVRemoteViewer_VBはもともと「Javascript + HTML5の動くブラウザであればプラットホームを選ばない」ことを目標に開発したアプリケーションなので、方向性としてぴったり合っています。開発しながらそれがアプリケーションプラットホームとして大きな魅力を持ち機能豊富なことに気が付きながらも何でこんなモノが既に出来ているのに気付かなかったのか、自分の不勉強を恥じるばかりです。

尚、あらかじめのお断りですが、このアプリケーションはChromecastにとってはかなり重い処理が多く、2世代目でだいぶ改善されたとはいえ、処理が重くなる場合がまだまだあります。私自身が気が付いた注意点は以下の通りです。

1)Chromecastにとってはテレビの単なる再生であればむしろ得意分野で、1920x1080(フルHD)の解像度であっても滑らかに動きます。と言うより
日頃パソコンや安めのテレビで観ている方は、発色の綺麗さや、引っかかりもなくヌルヌル動く映像に驚くと思います。デバイスの立ち位置として動画エンジンがこの値段にしてはしっかり出来ているように思えます。
つまり値段からすれば意外かもしれませんが、実況表示に拘らないのであればChromecastは今のところ、手頃な高画質の再生環境としてWindowsPCより上位のデバイスになります。(但しWin10 Edgeは除きます。Native HLSをサポートしているので現在Macと並ぶ最も高画質の環境になります。)

ちなみにChromecastで表示される文字コメントやイメージのようなHTMLパーツは、解像度1280x720の大きさで表示されるのですが、リンク先の情報によれば実際のvideo要素は1920x1080の映像ならしっかりその解像度で表示してくれるそうです。(内部処理でvideo要素をスーパーインポーズしている?)
これが本当なら、現在のChromecastのビデオ出力は1920x1080迄ですが、将来もっと高解像度をサポートしたり(AndroidTVの形で)高解像度テレビに内蔵される際には、その能力をしっかりこれで使えそうですね。またそういった環境でも文字が米粒になったりしない仕組みのようです。

2)ファイル/プレイリスト再生についても、TvRemoteFiles ver1.30で安定して使えるようになりました。
ver1.29で起きていた「再生途中でハングする問題」は、「ファーム32904以降で特定のDOM要素の頻繁な書き換えで起きる現象」と判りましたので、(ファームのバグなのか元々H/Wの限界ぎりぎりだったのがたまたま発覚したのか微妙ですが)いずれにしろ問題そのものを回避する作りに変えました。現在はごく当たり前にファイル再生/プレイリスト再生をご利用いただけます。

3)単純な動画再生と比べれば実況表示には処理能力、特にメモリー容量が限られているため、多量のコメント同時表示は苦手で、また文字の流れもあまり滑らかにはなりません。コメントを流す時はあまり大量に流さず、コメント表示最大数を低めにしてみてください。(最大数を20~40ぐらいにして負荷を減らしたほうが安定すると思います。)

Chromecastは2世代目になってCPU性能はかなり向上しており、その分コメントの動きも軽くなっています。
Cccapacity 初代

Chromecast2_perform_2 2世代目

数値の意味や他機種との比較はリンク先を参照

ただメモリーが不足気味なのは変わらないので、実況コメントの表示最大数を絞った方が良いのは変わりません。
あまり無理なコメント表示をさせていると数十分でメモリーを圧迫して動作が止まってしまいますので、ご注意ください。(そうなった場合は一旦Chromecastアプリを終了させた上で再度接続することで、メモリーがリセットされ軽い動作に戻ります。)
ちなみにChromecast2と、同価格帯のFireTV Stickは処理能力も同程度ですが、メモリー量とブラウザエンジンの差でFireTV Stickの方が、実況が重くなっても動作が安定している優位点があります。ただセッティングの簡単さやフレームレート倍速の再生をサポートするなどChromecastの優位点もありますので、お好みで選べば良いと思います。(あるいはキャンペーンを活用して両方揃えるのも良いですね。安いですし。)

録画再生に限って言えばハードサブを使う、という選択肢もあります。その場合画質はいくらか低下しますがコメントの流れは滑らかになり、Chromecast側の負荷もかかりません。

4)慣らし運転はTvRemoteFiles ver1.65以降不要になりました。セッティングしてすぐに安定して使えます。

当初、Chromecastの電源OFF/ON時やファームアップ時に、「動画開始後すぐに勝手に再起動がかかる」という現象が起き、これが解消するまで何回か再起動させる「慣らし運転」が必要、というガイドをしていました。しかしこれはTvRemoteFiles ver1.65以降で対策され、問題解消しました。現在はすぐに安定して使えるようになっています。

1.使い方

(1)Chromecastのセットアップ

(2)ChromecastをTvRemoteViewer_VB端末として起動する。
 ① PC/Mac(またはiOS)からChromecastアプリを起動する。
 ② Android専用アプリでChromecastを操作する。

(3)Chromecastで好きな番組や動画を直接再生する。

(4)リモコン機能で操作する。
 ① リモコンの起動
 ② 基本タブ
 ③ ナビ機能
 ④ 解像度、音声、再生位置/再生速度/焼き込み(ファイル再生のみ) 属性変更機能
 ⑤ ページ移動機能
 ⑥ 実況機能
 ⑦ お目覚めタイマ

補足)iOS環境での起動操作について

2.プログラムの構成について

3.Windows PCをアクセスポイント化してリモートで利用する。

4.HDMI端子の無いテレビ/モニターで利用する。

1.使い方

何はともあれ、ChromecastでのTvRemoteViewer_VBの使い方からご説明します。順番は以下の通りですが、既にChromecastをセットアップしてYoutube等で使える状態になっている方は(2)以降を実施していただければ良いです。

(1)Chromecastのセットアップ

これは本家の説明通りにやればOKです。
要は自宅の無線LANの環境にChromecastが繋がるようにして、かつChromecastに識別用IDを付ける作業です。

ちょっとした注意点ですが、初代Chromecastがサポートするのは2.4GHz帯のみです。二代目で802.11ac の5GHz帯もサポートするようになりましたが、家庭内で2.4GHx帯が輻湊していて速度が出ない場合を除いて安定性の面でも、2.4GHz帯のみを利用するのが無難です。
ここの仕様の合わないアクセスポイントには繋がりませんのでご注意ください。

次に、Googleの提供するChromecastセットアップツールの動作には、無線LANの付いたPC/Mac/タブレット/スマホ のいずれかが必要です。もし別のアクセスポイントに繋ぎ直す場合(例えば持ち歩いているノートPCをVPN越しに自宅のLANに繋がるアクセスポイントとして利用する場合)、スマホ等でツールからアクセスポイントの変更をおこなってください。

またIDは後々デバイスが増えた時のことも考えてユニークなものにするのは当然ですが、TvRemoteViewer_VBではこのIDを個々のデバイス管理用ファイル名にも使いますので、ファイル名で禁じられている文字(*や?など)は含まないものにしてください。万一そういった名前を付けている場合も、IDの変更はセットアップツールからいつでも可能です。

(2)ChromecastをTvRemoteViewer_VB端末として起動する。

TvRemoteViewer_VBではChromecastを、よくある対応アプリケーションとは少し違った形で、独立した端末として扱います。
普通、例えばYouTubeでChromecastを使う時は、YouTubeの画面に表示される「Cast ボタン」を押してYouTubeアプリを起動し、再生を移譲して音量や再生位置を操作できるようになりますが

Whatiscc

これらはあくまで今動かしているYouTubeに従属した動作です。
「キャストを停止」するまでは(あるいは他のアプリケーションがChromecastとの接続を上書きするまでは)Chromecast上のYouTubeアプリはアンロードされませんが、特に自律的に動くわけでもなく、他の端末から操作できるわけでもありません。YouTubeが用意した自動再生リストをなんとなく流していくか自分でリストを作るかして順番に流すのがほぼ唯一の自律動作になりますが、最初は物珍しさで流していてもすぐ飽きてしまって、あとは何に活用すれば良いのかわからない、という意見にも繋がってるんじゃないでしょうか?
また当たり前ですがこれらは全てChromeブラウザか、iOS、Androidの「Chromecastに対応した」アプリで操作する必要があります。

それに対してTvRemoteViewer_VBのChromecast機能は、一度起動してしまえば独立して動きます。

Ccview

意図してアンロードしない限り、起動した端末側が終了してもそのまま動き続けますし、他の(同じTvRemoteViewer_VBサーバに繋がった)あらゆるTvRemoteViewer_VB端末と通信できますので、それらを何処からでもリモコンにして操作したり、コメント表示機能、チャプタースキップ機能やプレイリスト機能も自律的に動きます。
また使わない時は何も表示しない黒画面(待機画面)のモードがありますので、節電機能のあるテレビ/モニタなら、この状態で節電状態になります。Chromecastを他に使う予定がなければ日頃はこのモードにしておけば、いちいちアプリを落したり電源OFFにする必要もないです。

ただし最初にTvRemoteViewer_VBアプリを起動する時だけ、Chromecastに対応した端末アプリを利用する必要があります。
これはWindowsやMacの場合はChormecast拡張機能を導入したChromeブラウザを使い、Androidの場合は専用アプリをブラウザから呼び出してChromecast側アプリを起動する操作になります。

この際の注意点ですが、Windows/Macであれば、TvRemoteViewer_VBのサーバが「アドレス192.168.0.10/サーバ名mypc」の場合だと、「http://192.168.0.10:40003」でも「http://mypc:40003」でも何の違いもなくアクセスできますので、後者の形にしている場合もあると思います。またTvRemoteViewer_VBサーバと同じPCなら、localhostとか127.0.0.1でもアクセスできてしまうので、そういう指定になっているかもしれません。(アドレスバーを見れば現在のアドレス指定方法が判ります。)
TvRemoteViewer_VBでは最初にChromecastを呼び出す時にこのアドレスを教えることで、Chromecast側からもアクセスできるようにします。
ところがChromecastの場合、192.168.x.x のようにアドレスを明記していないと繋がりません。(この辺はiOSやAndroidと同じで、ローカルなドメイン名は認めてくれないのが理由です。) また勿論、localhostで繋がるのは同じPC内だけですので、Chromecastからは繋がりません。
したがってChromecastを起動するブラウザでは、ローカルドメイン名でもlocalhostでも127.0.0.1でもなく、IPアドレスを明記した状態でTvRemoteViewer_VB画面を開くようにしてください。
またもともとTvRemoteViewer_VBはリモート視聴システムから始まっているので私自身ここで戸惑う可能性を見落としていましたが、もしChromecastでの利用が主目的の場合でも、TvRemoteViewer_VBサーバには固定IPアドレスを設定し、ここにそのアドレスをセットしてください。

Ccaddress

以下では起動手順をご説明します。

① PC/Mac(またはiOS)からChromecastアプリを起動する

PC/MacのChromeブラウザで操作する場合、トップページにある「デバイス(Cast)」タブから、

Ccconnect0

「Chromecastデバイス操作」ボタンを押すことで、Chromecastの初期操作画面が開きます。

Ccconnect

ここで①"onInitSuccess" "receiver found" の2つのメッセージを確認してください。
これが表示されれば接続可能な状態になったという意味ですので、以後の操作が可能になります。
(もちろん他のブラウザでも画面は開けますが、Chromecast対応機能がないため、これらのメッセージは表示されません。Chromeブラウザが好きか嫌いかに関係なく、この操作だけはChromeを使う必要があります。尤もPCの場合、もともとChromeブラウザで常用されている方も多いと思いますが。)

iOSの端末で同じ接続操作をするためには本来専用アプリが必要ですが、野良アプリが配布できないこともあり、これはご準備しておりません。尤も公表はされていませんでしたが当初はiOSでもChromeブラウザから通常の操作は可能にでした。しかしiOS側なのかChrome側の変更なのか判りませんが、2016年4月以降、その機能は使えなくなっています。(一応後述) よって現状iOSから使う場合は、先にPC/Mac/AndroidからChromecast接続操作をおこなっておく必要があります。

ちなみにこの操作は対応のChromeや専用アプリであれば操作端末側が無線LANをサポートする必要はありませんが、どうやらルーターのHOPカウントはチェックするようで、リモートからVPN越に操作することはできません。
(といっても厳密なチェックではなく、家から離れて数十分間はVPN越しのiPhoneからでも操作できるとか、ちょっとアバウトです。)
もちろんこれは起動操作だけの話で、(3)以降のTvRemoteViewer_VBのリモコン機能が使える状態になれば、拠点に関係なく操作できます。
さて、Chromeブラウザでの操作例を続けます。

ここで②「Chromecastデバイス呼出し」ボタンを押せばブラウザの「Castボタン」がプルダウンし③、Chromecastデバイスを選択できます。
なおこの際に、プルダウンの一番上の行が図のように、英数字の長い(呪文のような)タイトルになっていることを確認してください。

Ccconnect5selectagain_2

判りにくい識別ですが、これが「TvRemoteViewer_VB接続機能」が呼び出されている意味になります。
これが別の、例えば図のような表記になっている時は、

Ccconnect2

単にこのブラウザのミラーリング機能が呼び出されているだけですので、②「Chromecastデバイス呼出し」ボタンを押し直してください。(普通はこのような間違いは起きませんが、うっかり先にcastボタンを押した場合などにミラーリング機能が呼び出されることがあります。)

これで無事Chromecastに接続されると、図のように「(Chromecastの識別ID)に接続中」 の表示となり「ポータル画面」等のボタンが表示され、

Ccconnect3initialconnect

Chromecastの画面自体は黒くなる筈です。
この段階で「ポータル画面」のボタンを押すことで、数秒後に図のような「ポータル(お気に入り登録したチャンネルの番組表)」が表示され、

Ccview1base

操作端末側でもこのタイミングで、現在Activeなストリームの一覧が表示されるようになります。

Ccconnect4initialconnected

初回にこの「ポータル画面」のボタンを押すことは重要で、押す前はChromecastには「Receiverアプリ」がロードされているだけですが、ここで初めてTvRemoteViewerのアドレスが伝えられて、TvRemoreViewerアプリがロードされます。
一度これを実施すればアドレスはCookieに記憶されますので、2回目以降はそれを使ってアプリも自動ロードされるようになるため同じ操作は必要なくなりますが、もしTvRemoteViewerのサーバーが二台以上ある場合は切り替えの度にこれを実施してください。
TvRemoreViewerアプリがロードされたことでポータルが表示され、現在のストリーム一覧も表示されますので、確認のために予めいくつかストリームを立ち上げておくと良いと思います。

以上で初期接続は完了です。各ストリームのボタンを押せば直接Chromecastでストリームの再生ができますが、あくまで簡易機能ですので、以後の操作はリモコン機能でおこなうのがお勧めです。

なおもし2台以上のChromecastを操作したい場合、この状態では最初のChromecastに繋がったままですので、一旦「他のChromecastと接続するためにコネクションを開放」を押してください。すると最初の表示に戻り、「デバイス呼出し」から他のChromecastを同じように接続操作できます。

他にもChromecastが動いてる筈なのにここにリストされていない時は、「デバイスリストに戻る」を選べば、Chromecastの選択リストに戻り、利用可能なChromecast一覧が出て来るはずです。
ちなみにこれらの操作で、うっかりプルダウンの「キャストを停止」ボタンは押さないようにしてください。(表記が紛らわしいですが、このボタンは「Chromecastのアプリケーションを終了する」という意味になります。)
もちろん意図的にアプリケーションを終了させたければこのボタンを押すのも良いですが、ここでChromecastアプリを終了させるのは、アプリにとっては突然ブラウザのXボタンを押したのと同じことですので、あまり宜しくはありません。(設定項目をcookieに保存できないまま終了してしまって設定を忘れてしまったり、仕掛中のファイル書き込みに失敗することもあります。)
アプリの終了操作はリモコンアプリ側で安全に出来ますので、Chromecastがハングしたような時以外は、ここでの終了操作は避けた方が良いと思います。(逆を言えば、ハングした時はここから強制終了させることができます。)

② Android専用アプリでChromecastを操作する。

TvRemoteFiles ver1.33以降ではAndroid環境でChromecastアプリケーションをロードしたり、接続サーバを制御するための専用アプリ「TRV-Chromecastコネクタ」が追加になり、Android端末のみで一貫した操作ができるようになりました。

Trvcicon

このAndroidアプリの特徴は、本来ブラウザアプリであるTvRemoteViewer_VBから専用アプリであるTRV-Chromecastコネクタを、インテント機能を使ってシームレスに行き来できることです。
どのブラウザでもこの機能が使えます。専用アプリ側から直接リモコン機能を呼び出したり、その逆も呼び出せるので、慣れればPC/iOS環境と比べても更に使い易くなると思います。

準備として、この専用アプリはGoogle Playストアを経由しない所謂「野良アプリ」なので、導入を弾かれないようAndroidの設定-セキュリティで「提供元不明のアプリ」をチェックしてインストールを許可しておいてください。

Trvc4dro2dl4

またAndroid用のChromecastアプリを導入しておいてください。

さて、Android環境では最新版で、トップページの「デバイス(Cast)」タブに図の赤枠のようなAndroid専用のボタンが現れます。

Trvc4dro1

「このChromecast操作アプリ呼出し」ボタンを押せば専用アプリが呼び出されます。

ただし専用アプリ未導入の段階でここを押してもリンクエラーが表示されるだけですので、まずはその下の「操作アプリ導入/更新」ボタンを押してください。

Trvc4dro1inst

すると公開サーバから専用アプリがダウンロードされますので、これを導入してください

その際の操作はブラウザやシステム環境で微妙に異なります。
例えば標準ブラウザやChromeではダウンロードのメッセージが出たあと、図のように左上にダウンロード済みのマークが表示されるだけですので、

Trvc4dro2dl1

ここをドラッグしたまま下まで引っ張って、図のようなファイル一覧表示にしてください。

Trvc4dro2dl2

但しAndroidのバージョンによっては、ダウンロード時に自動的に図のようなファイル一覧表示になる場合もあります。

Trvcdlfiles

いずれにしろダウンロードしたファイルをタップすれば図のようなダイアログが出ますので、インストールを指定してください。

Trvc4dro2dl0
(ダイアログの形式はAndroidバージョンで多少異なります。)

ここで図のようなインストールブロックメッセージが出る場合は

Trvc4dro2dl3

最初にあるように「提供元不明のアプリ」を許可してからインストールしてください。

他のブラウザで、たとえばHabitBrowserではダウンロード時に完了後アクションが指定できますので、

Trvcdlfiles2

ここで「実行する」を指示して「OK」を押せば良いです。

以上の手順で専用アプリのインストールが終わったら、そのまま起動せず、TVRemoteViewerトップ画面デバイス(Cast)タブに戻ってください。(このアプリはブラウザのTVRemoteViewerから呼び出される前提の作りになっていますので、直接起動しても使えないことはありませんが、通常はTVRemoteViewer操作の流れの中で呼び出す形になります。単独で使う場合、バックグラウンドになると自動終了するように作られていますのでご注意ください。)

デバイス(Cast)タブの「Chromecast操作アプリ呼出し」ボタンを押せば

Trvc4dro1invoke

図のような画面でアプリが起動します。

Trvc4dro3

ここでネットワーク内のChromecastが検出されれば右上にCASTボタンが表示されますので、押してください。図のように検出したChromecastの一覧が表示されます。

Trvcselect

この一覧で操作したいChromecastを選択すればレシーバーアプリがロードされ、「コネクション確立」のメッセージ、および各ボタンがActiveに変わります。

Trvcselected

この際、通常はChromecast側がcookieに記憶しているTVRemoteViewer_VBサーバを自動的に呼び出して接続し、数秒後にステータス欄に接続中のサーバ情報が表示されます

Trvcselectedconnected

が、Chromecast導入直後や別のTVRemoteViewer_VBサーバに繋ぎ直したい時は、サーバの情報をChromecastに伝える必要があります。その機能が上の「サーバ指定」欄と、「TRVサーバに接続/更新」ボタンです。

Trvcsvrselect
(逆を言えばここの欄とボタンは、新規に導入したり複数のサーバを切り替えたい時以外は弄る必要はありません。)

「サーバ指定」欄には呼び出し元がサーバアドレスをセットしていますので、その内容のままサーバアドレスをChromecastに伝える場合は「上記TRVサーバに接続/更新」ボタンを押してください。数秒後にステータス欄の「現在のサーバ」に反映されます。

サーバが確定したらリモコンを起動できるようになりますので、「リモコンアプリを起動」ボタンを押してみてください。

Trvcremoconinvoke

利用するブラウザアプリ選択のポップアップが表示される場合は、お好みのものを選択します。

Trvcremoconinvoke_2

この際図の赤丸にある「常時」を選択すれば、次回以降はこの選択画面なしに指定したブラウザでリモコンアプリが起動するようになります。
(指定をやり直したい場合の操作はこの辺をご参考にしてください。)

利用するブラウザは元々これを呼び出したブラウザでも構いませんが、同じブラウザだと元々の画面の上書きでリモコン機能が呼び出されますので、両方の画面を切り替えながら使いたい場合は別のブラウザを選んでも良いと思います。(リモコンはビデオ再生等の特殊機能は使いませんので、標準ブラウザで十分です。)

以上でリモコンが起動したら、以降の操作は(4)リモコン機能 を参照してください。
但しAndroidの場合は、リモコンのページ移動機能の一番下にある「アプリ終了」機能は図のような

Trvc4dro4

「Chromecastデバイス操作」機能に変わり、ここからこの「TRV-Chromecastコネクタ」を相互に呼び出すことができますので、ちょっと便利になっています。

他のボタンも説明しておきます。「他のデバイス接続のためコネクション解放」ボタンですが、

Trvcdisconnect

これは複数台のChromecastを使っている場合、現在のChromecastと接続したままではCastボタンを押しても現在のChromecastの操作しかできませんので、

Trvcdisconnectwhy

一旦現在のコネクションを開放して別のChromecastに繋ぎ直せるようにするためのボタンです。ここでコネクションを開放しても現在のChromecastはそのまま動き続けます。

一方「デバイスアプリ強制終了」ボタンは、

Trvcabort

現在接続中のChromecastからアプリを強制的にアンロードして接続解放するためのボタンです。Androidの場合CASTメニューから「Stop casting」を選んでも強制終了しませんが、このボタンを押すことで強制終了できますので、アプリがハングした場合などはこのボタンを使ってください。

(3)Chromecastで好きな番組や動画を直接再生する。

以上の操作でChromecast側にTvRemoteViewer_VBの端末機能がロードされ、以降は全ての端末からTvRemoteViewer_VBのリモコン機能で操作できるようになります。ただその説明の前に、TvRemoteViewer_VBには全体にChromecastに直接配信する機能が加わっており、操作も直感的ですので、まずそちらからご説明したいと思います。
特にファイル/プレイリストの選択や再生開始はリモコン側に殆ど機能がありませんので、この機能を併用することになります。

具体的には各番組表やトップのポータル画面、またファイル/プレイリストの再生指定の画面で、(2)でChromecastを起動していれば、再生場所として指定ができるようになります。

テレビ番組のキャスト
Trvtv1
Streamdist1

ファイル/プレイリストのキャスト
Trvfile1
Streamdist2

Streamdist3

デフォルトの「ここで」を選べば今まで通り操作中の端末で再生が始まりますが、ChromecastのIDを選択すれば、そちらで再生開始します。

Chromecastを挿したモニター側ではその瞬間に通常のTvRemoteViewer_VBの視聴開始時と同じように、Waitingのボタンが表示された後

Ccview2prepare

今までのTvRemoteViewer_VBと同じ視聴画面になります。

Ccview2

同じTvRemoteViewer_VBに繋がった全てのChromecast端末を宛先に指定できますので、もよりの好きなTV/モニターにストリームを配布する感覚で使えると思います。
(もちろん外出先でVPN接続の端末から家のテレビで再生開始したり、別の部屋のテレビで突然再生させることもできますが、家族の迷惑になるようないたずらはしないこと。)

なおここでChromecastのIDが選択できるのは、Chromecastで該当TvRemoteViewer_VBサーバの端末機能が動いている間で、Chromecastを落としてしまえば速やかに選択肢から消えます。
また他のサーバやアプリに繋がったりChromecastがハングした場合も選択肢から消えますので、もしうまく表示されない時は(2)の手順でChromecastを起動し直してみてください。

(4)リモコン機能で操作する。

① リモコンの起動

Chromecastで動いているのは要は今までのTvRemoteViewer_VB端末機能と全く同じですので、同じ機能が動きますが、Chromecastにはマウスもタッチパネルもありませんので、個々の操作をリモコンでおこなう必要があります。
このリモコンは任意のTvRemoteViewer_VB端末のトップ画面で「デバイス(Cast)」タブから、「操作対象のデバイスID」を選んで、「リモコン起動」のボタンを押すことで、ポップアップで起動します。

Ccremocon1

ブラウザはChromeである必要は全くなく、iOSであればiLuna、AndroidであればDolphinなど、日頃TvRemoteViewerで使っているものでOKです。

Androidの場合は専用アプリからリモコン起動が出来ますが、既にChromecastアプリが起動していて接続操作が不要な場合は、ここからリモコンを直接起動する方が簡単です。

なおPCブラウザの場合、ボタンを押してもリモコンが起動しない場合があります。
これはブラウザがセキュリティの観点でポップアップブロックしているのが原因で、よく見るとポップアップブロックのメッセージが表示されている筈ですので、速やかにポップアップを許可してください。一回許可すれば以後は普通に起動するようになります。

Pupblock1Chromeではこのようなメッセージが表示されるのでクリックして

Pupblock2 この画面で許可

Pupblockmoz
 Firefoxではこのようなメッセージが出るので、「設定」から許可する。

EdgesettingpupEdgeの場合、設定→詳細設定でブロックをオフにする

起動すると以下のような画面が別ウインドウ(スマホ・タブレットの場合は別タブ)で開きます。

Cc

これはいくつでも開けますので、複数のChromecastを使う時はそれぞれ用のものを開いておいて、使わない時は最小化か、単にタブとして残しておくと良いかもしれません。そうすれば操作したい時すぐに該当Chromecastのリモコン画面の呼出しができます。

また通常のYouTubeのようなChromecastアプリだとそれを起動した端末でなければうまく操作できないものが多いのですが、TvRemoteViewerの場合はどの端末からでも今再生中のものを操作でき、またどのリモコンにも常に最新の状態が表示されます。

それぞれのリモコン機能はTvRemoteViewer_VBの操作に準じます。
また人によってはリッチなUI操作も良いがコマンドラインも欲しい、という方もおられるかもしれませんので、一応一番下にコマンドラインインターフェースも作ってあります。

(ご参考までにコマンド一覧表も添付いたします。→commandsSum.xls

本来のところ個々のボタンやスライダーを動かすだけでテレビ側もクイックに反応する、という形にしたいのですが、今のところリモコンとChromecast側の通信手順は、通信というよりメッセージ・キュー渡しですのであまりリアルタイムなやりとりができず、したがって音量調整やシークなど多くの機能では、機能ごとにスライドバーを動かした上で横のボタンを押して「確定」する手順になります。
(但し通信手順はアプリ本体とはレイヤを分けた作りにしてありますので、今後の実装次第ではよりリアルタイムな動きに近づけると思います。WebSocketなどが使えると良いのですが、当初試してみたものの使える範囲の環境依存がまだ強いので見送っています。)

またこれもリアルなリモコンを真似たわけではありませんが、ここから操作しても確実に指示通りの反応をするわけではなく、ときどき空振りすることがあります。 →TvRemoteFiles ver1.34でここの信頼性が大幅にUPし、ほぼ確実に動作するようになりました。

但しアプリがハングしている状態ではリモコンも受け付けなくなる事があります。その際はデバイス操作機能でアプリの強制終了/再起動をおこなってください。

② 基本タブ

リモコンとしての機能はタブで機能別にグループ分けしてあります。

先頭の「基本」タブは上の図のように、音量調節、ミュートON/OFF、全画面/情報画面を切り替え、マージン設定、再生/一時停止、簡単チャンネル呼び出し、ページの再ロード のような基本機能になります。

ちなみに他もそうですが、スライドバーを操作するときは、操作後必ず横にある(数字が変わる)ボタンを押して、指示値を確定させてください。

Ccconfirm

確定させないと値はChromecastに反映されず、10秒程度でバーは元の位置に戻ります。

PC用モニターなら全画面化するだけで良いのですが、普通のテレビにHDMI入力で映す場合、上下左右に10ピクセル前後の非表示領域ができ、単なる全画面表示だと映像/コメント表示が一部隠れます。

Ccview4margin1

これを調整するのがマージン設定で、家のテレビでは11程度にすれば丁度合いました。

全画面のマージンを調整すれば、テレビのサイズにほぼ綺麗に合わせることができます。

Ccview5margin2
これだと(コメントの表示がなければ)普通にテレビを観るのと見分けがつきませんね。

Chromecastの全画面表示は特殊な画面モードではなく、HTMLの動画部分を単純に拡大しますので、全画面表示でも実況コメントを通常通りに流すことができます。ブラウザの枠などもなく、元々全画面表示に適した作りになっています。
ちなみに、この解説記事の画面サンプルでは殆どが全画面ではなくタイル表示になっていますが、これはTvRemoteViewerの画面なのが判り易いようにしているだけで、私の場合普段はこれを専ら全画面で使っています。(タイル表示は時々ニコニコの勢いをチェックしたり、リモコン操作の結果を確認する際に切り替える感じでしょうか。勿論お好み次第ですが、それほど全画面での使い勝手が良くなっています。)

クイックチャンネルは地上波のあるチューナーなら地上波の(キー局に対応する)チャンネル番号、衛星チューナーならBSの対応するチャンネルにリモコン感覚で切り替わるボタンです。
対応表は以下のようになります。(地上波はお住まいの地域のそれぞれの系列局に切り替わることになります。)

Quickchannel

また第一、第二はNHKのスポーツ中継の102チャンネルのようなマルチ編成のチャンネルにクイックに切り替えるときに使います。

尤もこの辺はリモコンの使い勝手を再現するために入れている機能でもあり、特にこだわりがなければ通常は右半分に表示されている番組表からワンタッチでチャンネル切替えができます。

Cc_2

動作はRockバー型番組表とほとんど同じで、一度クリック/タップで選択され、もう一度クリック/タップすれば図のようなポップアップが表示され、ここから選局できます。

通常の番組表と違うのは、この際にデフォルトでは現在使用中のストリーム番号と(その局に使えるのであれば)使用中のBonDriverが選択されることで、これによって選局する度にストリームが増えていく、という現象は避けることができます。
(逆を言えば今使ってるチューナーでは選べないチャンネルも、チューナーを変えることでここで選局することができるのが、通常の視聴画面より改良された点です。)

またトップページに表示される番組表は、トップページ表示中にリモコンの基本タブに現れる以下のコントロールで背景色を調整できます。

Ccremo1_pgbg

Ccremo1_pgbg_red 調整例

③ナビ機能

これは今までのTvRemoteViewer_VBのシークチャプタージャンプ機能です。

Navinew1

図の構成になるのはファイル/プレイリスト再生の場合で、TV視聴ではシークボタンのみが表示されます。

また、Chromecastの場合TV視聴でもある程度のシークは可能なので、例えば今の場面をトイレに行っててちょっと見逃した!という時に1~2分遡って見ることが可能です。
TV視聴時にシークボタンを操作すると、シーク可能な範囲なら図のように、ボタンが明るいグリーンになることで判ります。

Liveseekable

このボタンを押すことでシークが発動します。
※但し2016年4月ぐらいのアップデートからChromecast/Googlecastでは、この機能がやや「劣化」しており、ライブ視聴中のシークが一切出来なくなっています。一時的な事かも知れませんのでここの説明は残しておきますが、とりあえず現在はこのライブ視聴中のシーク機能はChromecast/Googlecastで使えません。
尚、EdgeやiOSの端末をこのリモコン機能で操作する場合は、ライブ視聴中のシーク機能が利用可能です。

またChromecastの場合ファイル再生時にエンコード未完了であっても、バッファの範囲内なら再生位置を動かすことができます。
どこまでストリーム再起動なしに移動できるかは、ボタンの色で概ね判るようになっています。

Fileseekable 明るいグリーンなら再起動なしに移動可能

Filenonseekable ブルーなら再起動をともなう移動

概ね、というのは移動可能な範囲はシステムのバッファの状態によっても刻々変わりますので、リモコンに表示した時点と実際にシークが発動する時点で状態が変わっている場合もあり、そういう場合は意図に反して再起動をともなう移動になる事もあります。この辺はベストエフォート型の処理ですので大目にみてください。
確実に再起動無しに移動したい場合はあまりぎりぎりの範囲ではなく、ある程度余裕を持った移動距離を指定した方が良いと思います。

Ccview6file

またTvRemoteFiles ver1.39 以降では、このナビ機能タブでプレイリストの操作ができるようになり、また進捗/チャプターバーも(可能であれば)表示されるようになりました。

Ccremo2_navi

プレイリスト再生時には「プレイリスト表示ON/OFF」のボタンが表示されます。
これがONになっている時は、横に番組表の代わりに現在のプレイリストが表示され、再生中のファイルはピンクの表示になります。

再生ファイルを切り替えたい時は、切り替えたいファイルを選択してもう1度クリック/タップしてください。
確認ダイアログが表示され、「OK」で切り替えることができます。

・サムネイル機能

最新版(TvRemoteViewer_VB v1.55以降+ TvRemoteFiles 1.49以降)では、このシークおよびチャプタ移動の際にサムネイルを表示できるようになりました。

Thumb2

ファイル/プレイリスト再生でシークおよびチャプタ指定の際に、予め図の位置にサムネイルが表示されます(4秒間)ので、よりクイックに希望する場面を探して移動することができるようになります。

この機能は図の、「サムネイルON/OFF」ボタンで有効/無効化できます。

④解像度、音声、再生位置/再生速度/焼き込み(ファイル再生のみ) 属性変更機能

Cc_3

ここで設定した内容で「再起動」ボタンを押せば今視聴中の画面をその設定に変更して再起動させます。

また、ちょっと違った観点の使い方ですが、もしChromecastで再生開始時に映像がうまく再生できずに動画が止まってしまうような場合、(何かの「引っかかりデータ」で止まってしまう場合があるようです)、ちょっと強引ですがここで「ストリームを再起動」を指定すれば、正常な再生を開始させることが(殆どの場合)出来ます。その辺はちょっと違った活用になります。

⑤ページ移動機能

Cc_4

ストリーム選択のボタンは今まで通り、押すとそのストリームの再生に切り替わります。

またその下にある視聴終了/視聴中断のボタンでは、終了は今のストリームを終了、中断は維持したままで、
ホーム画面に移動します。
ここのホーム画面をポータル画面にするか、あるいは(真っ暗な)待機画面にするかは、その下のボタンで選択できます。

お休みタイマをセットすると指定時間経過後、待機画面に移行します。その際視聴中のストリームの扱いは今までと変わらず、TV視聴なら終了、ファイル視聴なら維持、になります。

その下のボタンはChromecastならではの機能で、「アプリを全て終了してChromecastのデフォルト画面に戻る」、つまりシャットダウンを指示します。
一度アプリ終了させると普通の端末からは再起動できず、最初のロードと同じくChromecastサポート機能のあるChromeブラウザか専用アプリの操作が必要になりますのでご注意ください。
またアプリ終了はCastボタンの「キャストを停止」でも出来ますが、出来るだけこちらから行ってください。(ハングしてここからの操作を受け付けない時だけ、Castボタンからの終了を選択してください。)
このボタンを使えば必要な終了処理の上でシャットダウンしますので、より安全な終了手順になります。

⑥実況機能

Cc5r

実況全般ON/OFFボタンでニコニコ実況表示を開始/停止します。 またファイル再生の場合は実況ログ再生を開始/停止します。
通常の端末では一度開始すると停止の機能は無く、非表示にするだけでしたが、Chromecastは負荷を下げるために停止させる場合があるため、ここの停止では処理自体を停止させるようにしました。

2ch実況開始/停止ボタンでは、2ch実況表示を開始/停止します。
これを開始するには、(表示エンジンを共用している関係上)ニコニコ実況を先に開始している必要があります。

以上の2つのスイッチは、前回終了時の設定が引き継がれます。

実況遅延時間調整
テレビ画面と実況のタイミングを合わせるにはここで調整してください。

実況タイミング調整
同じく、ファイル再生と実況ログ表示の場合はこの名前のバーが表示されますので、これでタイミングを合わせることができます。

2ch実況スレ/文字色選択
この辺の機能も今までのTvRemoteViewerと変わりませんが、色指定や2ch実況の開始/停止がスレ指定とは独立してできるようになった点が改良点になります。

Ccch2_2

実況エリア指定、不透過率指定、文字サイズ指定
実況の表示領域は、画面上端を0%とし下端100%として、ここの指定で制限することができます。
また不透過率100%なら完全に不透過、これを小さくしていけば透過度が高く(字が薄く)なります。
コメント文字サイズは標準サイズ比で0.4倍から2.4倍まで、0.2倍刻みで指定できます。
これらは従来はトップページに戻って指定する必要がありましたが、今回視聴中にいつでも変更できるようにしました。

⑦お目覚めタイマ

TvRemoteFiles v1.60以降では、端末を指定時間に再生開始させる「お目覚めタイマ機能」が使えるようになりました。

Trvtimer0

目覚める側の端末は、リモコン制御可能な状態でセットした時間にTvRemoteViewer_VBの「待機画面(真っ黒い画面)」または「トップ画面」に居なければなりません。(ハードを制御できるわけではありませんので、「スリープ」状態にある端末を起こすことはできません。)
他の端末からリモコンで起動させるわけではありませんが、リモコンコマンドと同じ監視ルーチンを応用しているため、このような使い方になります。

タイマ設定は以下のような画面になります。

Trvtimer1

「+ 新しいタイマ設定」を押すと、図のような登録画面が表示されます。

Trvtimer2

ここからタイマを定義していきます。(99個までの定義が可能です。)

日付や時間の設定欄はHTML5で追加された「dateタイプ」「timeタイプ」の入力機能を使えますので、カレンダーやスピンボタンなどの入力補助が効きます。但しプラットホームによってはサポートが不十分なもの(FirefoxやAndroidの標準ブラウザなど)もあるので、使い易いプラットホームで編集すると良いと思います。

時間指定でxx分間 の欄を例えば30にすれば、30分間流したのち待機画面に移行しますが、ここを0にすれば流しっぱなしになります。

また、起動場所で端末を指定すれば緑色の囲みの中に登録されていきますが、複数端末を指定した場合「起動間隔」の分ごとにリストの上から1個づつ起動します。その際ストリームが存在する限りはそれを共用しますので、無駄にストリームが重複して起動されることはありません。(もし前の端末でストリームが落とされていれば再度起動します。)
ここに「全て」を指定すると、起動可能な端末が全て3分ぐらいの間にランダムに起動します。(完全に同時に起動するとストリームを無駄に立ててしまいますので、多少ばらけるようになっています。)

休日で朝のタイマを止めておきたい時などに「有効」のチェックを外しておけばタイマを一時的に無効化できます。但し指定時刻が過去30分以内のタイマは有効と見なされるため、時刻を過ぎたからといって直ぐに有効に戻すとその時点で発動しますので、ご注意ください。

他は画面に沿って入力すれば判ると思います。入力間違いがあれば「保存」ボタンを押した際に図のようにエラーメッセージが表示されますので、指示に従ってください。

Trvtimer3_2

問題なければ図のように登録されます。

Trvtimer4

以上、この機能はChromecastだけが対象ではなく、リモコン操作対象の端末(トップ画面左上にRが表示されるもの)なら全てタイマ起動できますが、特にChromecastをテレビに挿しっぱなしにしていると日常的に使えると思います。

TvRemoteViewer_VBが動く環境が複数あれば大事な時に一斉に目覚まし装置化できる、という辺りが、この機能の使い所の1つではないかと。

以上で基本的な操作の説明は終わりです。まずは使ってみて、操作感を確かめてください。

Chromecastは最初にも書きましたが、動画やテレビ放送を再生している限りでは負荷は軽く、画質も高いです。しかし端末としての性能は控え目なので、実況を流すときはコメントの数を40程度に絞ったり、画質を720x404以下にするなど、無理な負荷をかけないよう注意が必要です。

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

Ccremo3_reset

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

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

補足)iOS環境での起動操作について

 ※注) 2016年4月以降、この枠内で説明している機能は使えなくなっています。よって現状、iOSから使う場合は先にPC/Mac/AndroidからChromecast接続操作をおこなっておく必要があります。

iOSでは前述の通り、Chromecast起動用の専用アプリがご提供できませんので正式には起動だけPC/Mac等でおこなっていただく必要がありますが、実はiOS用のChromeブラウザも、不完全ながらこのChromecast起動操作が可能です。
具体的にはChromecastアプリを導入したiOSでChromeブラウザから②「Chromecastデバイス操作」画面を呼び出すと、

Ccios1

ちゃんと①"onInitSuccess" "receiver found" のメッセージが表示され、②「Chromecastデバイス呼出し」ボタンを押すことで、

Ccios2

Chromecastデバイス選択メニューがポップアップします。ここでデバイスを選択すれば該当デバイスにReceiverアプリが正しくロードされ、以降はリモコン操作が可能になります。

但しこのiOS版操作画面では「ポータル画面ボタンを押してサーバのアドレスを伝える」以降の動作はなぜか正しく動きません。iOSでできるのは「ChromecastにReceiverアプリをロードするところまで」です。

通常はこれで充分で、ReceiverアプリはCookieに記憶しているアドレスを使ってTvRemoteViewer_VBアプリを自動ロードしますので、以降は普通にリモコン操作できるようになるのですが、初回に「サーバのアドレスを教える」操作はここではできませんので、最低限初回だけPCなどから操作する必要があります。

Ccios3

またiOSのChromecastでは、一度接続したChromecastとのセッションを「他のChromecastと接続するためにコネクションを開放」ボタンで開放して他のChromecastに接続することができません。この場合もうっかり「キャストを停止」を選ぶとアプリが終了してしまいますので、ご注意ください。
もし他のChromecastを操作したい時は、少し面倒ですが一旦Chromeのタブを全て終了させた上で、再度TvRemoteViewer_VBの画面から「Chromecastデバイス操作」画面を開いて、「Chromecastデバイス呼出し」ボタンを押してください。一旦Chromeを終了させることでChromecastのセッションは解放され、ここで別のChromecastデバイスを選ぶことが出来るようになります。

以上がiOSでの起動操作です。動きからして恐らくGoogleとしては、iOSでのアプリ配布が不自由な事を認識の上でChromeブラウザで操作できるようにしたかったのだろうと思いますが、意図的か技術的問題か判りませんが実装が不十分で最低限の動作しかできないようです。(具体的にはSender側で指定したアプリのロードは出来てアプリが動いたことまでは認識しますが、セッションが確立できないためユーザーアプリとしては何も出来ないのが現状の動作になります。)

.

2.プログラムの構成について

今回Chromecast上で、TVRemoteViewer_VBを以下の図のような形で動かすようにしました。
Ccsystem1

「マスター」がChromecastのいわゆる「Custom Receiver」アプリであり、「Chormecastデバイス操作アプリ」が「Sender」アプリになります。
Chromecastアプリ開発関連の情報を見ると大抵はこの2つの話で完結しており、実際出回っている多くの対応アプリもCustom Receiver上に直接アプリを組んでいると思われますが、一方このReceiver機能単体では、アプリの観点から見ればちょっと嫌な制限があります。というのは

① ReceiverアプリとSenderアプリは「httpsでアクセス可能な」公開されたサーバにアップされていて、かつ「Google Cast SDK Developer Console」に登録し、ユニークなIDをもらっていなければならない。Chromecastデバイスはそこに登録されたアプリケーション/サイトから(のみ)Receiverアプリケーションをダウンロードできる。

② ReceiverアプリはHTML/Javascriptベースでありながら、「Single-Page Application」すなわち画面遷移のない単一ページのアプリでなければならない。

③ SenderアプリはPC/MacのChromeか、iOS、AndroidそれぞれのプラットホームでSDKを組み込んだ専用アプリを使わなければならない。それ以外のブラウザでは操作もできない一方、操作中のアプリを終了させればChromecastアプリも終了する作りになっているものが多い。
 →これだと任意のブラウザからの操作が出来ない上に、専用アプリもAndroidであれば勝手に作った「野良アプリ」の配布は可能ですが、iOSアプリは本体の脱獄がない限りApp Store登録が必要になり、個人が趣味でやっているアプリではちょっときついハードルになります。

まず1)の条件を見て「オレそんな公開サーバ持ってないよ」と、早速躓きそうになりました。(普通のhttpアクセスならこのniftyのブログにファイルをアップするだけで良いのですが、httpsでアクセス出来る環境を作るには、どこかレンタルサーバを借りるしかないのが今までの固定観念)
ところが流石はGoogle先生、用意の良いことに無料のGoogleドライブにファイルをアップしておけば、httpsで公開できるようになっていることが判りましたので、これを利用することにしました。
https://support.google.com/drive/answer/2881970
(但しこのGoogleドライブWebホスティング化機能は2016/8を以てサービス終了しましたので、折角なら同じGoogleということで、現在ご紹介している機能はGoogle Cloud Storageでホスティングしています。こちらは無料という訳にもいかず課金されますが、この目的で結構アクセス量があるにも関わらず月あたりの料金は「2円」程度と、ごく安価にhttpsホステッィングが使えていますので、やはり流石はGogle先生という所でしょうか。 2016/10追記)

しかしhttpsはそれで解決したのですがもっと根本的な問題として、TVRemoteViewer_VBは自宅に立てたサーバから配信を受けるのが基本で、様々なコントロールファイルもそのサーバと読み書きする作りになっています。
一方「公開サーバにアップされたJavasctiptアプリ」から見ればそのような自宅サーバへのアクセスは全て「クロスドメインアクセス」になるわけで、かなりの制約を受けることになります。
もちろんその辺もChromecastにはちゃんとした開発者向けガイドラインがあり、
http://www.atmarkit.co.jp/ait/articles/1411/13/news187_5.html
「Chromecast対応」を謳っているアプリで自宅のPCから配信できるものはこの辺の仕組みを使っていると思われます。

ただ、これをおこなうためには配信サーバ側もそれを想定したハンドリングをおこなければならず、また少なくともTvRemoteViewerで今まで多用していた「httpで単純にサーバが公開しているファイルにアクセス」のような機能も大幅な作り替えが必要になります。
それもどうしたものかといろいろ考えた結果、iframeを使ってReceiverアプリの上に一種の「仮想環境」を作れば、そこで今のままのアプリがそのまま動かせることに気が付きました。
ドメインが異なってもiframe上になら別のサーバのアプリをロードして自由に動かすことができますし、マスターとiframe間の通信も両方が自作のアプリであれば、クロスドメインに関係なくpostMessegeを使って簡単に実現できます。(但し実際に動かしてみるとpostMessegeはあまり信頼のおけない処理で、これを多用していたリモコン機能の誤動作や遅延動作が続発したため、現在ではマスターとiframe間の必要最低限のやりとりのみで使う、という作りに変えています。)

また本来は②の通り、Receiverアプリ自体はSenderとセッションを保持しなければならないので画面遷移は禁物ですが、iframe内の話であれば途中でどのページに飛ぼうが自由で、要は今までのアプリがそのまま使えることになります。
ただ1つ気になったのは、「https」のページ上のiframeに「http」のページを開こうとすると通常はセキュリティの警告を受ける点です。
例えばPC用のChromeブラウザであれば「承認されていないソースからのスクリプト」との警告でアドレスバーに盾のマークが出て、クリックして一度承認しない限りはiframe内の処理はされません。
しかしChromecastだと、これをなんと大目に見てくれることがわかりました。

これが判ったことで大まかな枠組みはできました。

Ccsystem2

ReceiverアプリとSenderアプリはサンプルをちょっと改造した程度の簡単なものですが、ここでやってもらわねければならないのはReceiverアプリを立ち上げてTvRemoteViewer_VBが動くiframeを用意し、ロードしてもらう所までで、あとはTvRemoteViewer_VB自身の制御機能と、これ用に作ったControllerアプリがリモコン操作の感覚で使えるようになります。(厳密にはReceiverアプリも作り込んでいくうちに、いろいろな監視機能やアプリがハングした時の再起動機能を付加していますが、本質ではありません。)

もともとiframeの活用は以前検討したことがあって、その時はファイル一覧のようなデータの取得やストリームの監視をページ個別に実行するのは効率が悪いので、親ページ(表示は一切しない)の上にiframe(表示領域は全体)で各アプリを動かす一種のVMシステムを作ろうと考えていました。iframeは言われる程制限のある環境ではなく、本来のブラウザ上で動かすのと同じアプリを殆どのペナルティもなく動かせることがその時に判りました。
しかしその際は結局のところ、「ブラウザの再ロードボタン」を押した瞬間に全てオジャンになることに気付き、ボツになりました。
ところが今回のChromecastは「再ロードボタンの無いブラウザ」環境そのものなので、まさにこのような作りに向いていて、今回の実装も以前iframe活用で考えていたことがいろいろ役に立ちました。

ChromeOSなどもその存在意義が(GoogleにはAndroidもある中で)よく判らなかったのですが、割とこの辺に狙い目があるのではないかと思います。つまりブラウザをよりOS的な位置づけにして、HTML5をもっと本格的なアプリケーション・プラットホームとして使えるようにしようという発想ですね。

ちなみにChromecastは発売されて1年以上経ちますが、対応アプリケーションが「スマホやPC向けの配信サービスをテレビにも映せます」という域をなかなか越えず、そういう使い方をするデバイスと思われがちなのは、恐らくはJavascript/HTML5のアプリケーション自体がそういう経緯でまだまだ未発達で、Googleの出しているUXガイドラインに沿ったメディアプレーヤー機能を少しカスタマイズした程度のアプリが多いのが理由だと思います。(もちろんGoogle自身はMap./EarthやAppsともJavascrpitベースの大規模な実用アプリなので、そこに軸足を置いているのは間違いありませんが、あくまで世間一般の話です。)
今のところHTML5の技術が(Flashの代用品としての位置づけですが)多用されつつあるネットゲーム用のプラットホームとしてはChromecastは遅すぎますし、スマホ系の開発者にとってはJavaは慣れていてもJavascriptはあまり縁がなく、これ用に何か作り込もうという動機もない方が多いのではないでしょうか?(そう思える記事も多く見掛けました。)

もう1点、「Cast」のネーミングがそもそもの間違いの始まりではないかと (^^ゞ
この名前からすればいかにも手許の端末に映ってるものを大画面に映せますというMiracastっぽいモノを連想し、実際Googleもそういう声に押されてミラーリングなどの機能も加えてきているので、いよいよ特長が判りにくくなってるのではないかと思います。
実際にはこれは小さいながらもメディア機能中心に作られている汎用端末である一方、操作端末の画面を直接配信するような「ワイヤレスHDMI」のような特殊な機構は一切持たないので、その手の機器と比べるべきものではない(そういう目的なら最初からそういう機器を買うべき)という話なのですが、一方専用アプリでChromecastの多機能性が活かせる作りのものが有るかと言うと、多くがAppleTV用アプリと似たり寄ったりなので、じゃあ何が特長なんだと言われても説明しにくくなってますね。
専用アプリの操作性をもっとChromecastの多機能性を活かした形に作り込んだ方が違いが判りやすくなるんじゃないかと思います。
同じ動画再生にしても単にテレビのリモコン操作を真似たような制御だけではなく、本来Ajaxや端末間通信などjavascriptの進歩性を活かした制御がいろいろ出来る筈ですからね。

今回はたまたま個人的な関心がベースなのですがTvRemoteViewer_VBの端末機能をJavascript/HTML5「のみ」で作り込んでいましたので、アプリを何も削らない形でChromecastと共通化することができました。Chromecast単体用としてであればこれらの機能を1から作る気にはならなかったと思いますが、もともとプラットホームフリーを目指して作っていたアプリがほとんどそのまま適用できると判った時点で、やる気が起きた感じです。
このデバイスをちょっと違った形で使い倒す一例になるのではないかと思います。

実際TvRemoteViewer_VBで使ってみて、これはテレビの再定義に繋がるのではないか、と単純に思ってしまいます。
なにしろテレビにはチューナーもレコーダーも要らず、スピーカー付きのモニター(HDMI入力を備えたモニターならスピーカーが付いていなくても大抵音声端子が付いています) があればこのような小さなデバイスを付けるだけでどこにでも置けて、そこにあらゆる映像とアプリケーションが手元のスマホ/タブレットを使って配布出来て、それを自由に操作可能な状態になるわけですから。

単なるテレビと比べればレスポンスや確実性の面で劣った点がありますが、チャンネルの頻繁な切替え自体の必要性を減らしているのが元々のTvRemoteViewerの設計思想ですし、確実性もデバイスの単純な性能向上とアプリ熟成で解決していける問題だと思います。機能面やオープン性に目を向ければ、現状でも単なるテレビでは出来る筈のなかった事が実現出来ているのではないでしょうか。
もちろん過去の記事でご紹介したTVTest/Spinelの環境もそれを目指したもので、PCのビデオ出力が余っていればそこから直接モニターに映してテレビ代わりにしたほうが早いんじゃないの?という方もおられるかもしれませんが、動画再生や実況再生はPCにとっても結構な不安定要因なので、こういう外付けデバイスに任せたほうが安心して「ながら観」できる面もあります。

構築にかかる費用も圧倒的に低コストで(金額の意味と使うリソースの両方の意味で)、また帯域を絞る仕組みとプラットホームフリーな特性でテレビ視聴の自由度が高くなります。「リモート視聴」はTvRemoteViewer活用法の一面に過ぎないわけです。
TVTest&NicoJKの環境はタイムラグがないのでリアルタイム性を重視するのなら一択になるのですが、一方特にNicoJKの併用は意外とローエンドPCにとって重く、動画が不自然な動きになりがちです。その点TvRemoteViewerは動作が軽い上に、HTML5というどのプラットホームでも最適化の努力がされている仕組みをそのまま活用するので、Chromecastのような極小の環境でも十分実用になるわけです。

3.Windows PCをアクセスポイント化してリモートで利用する。

出張や旅行のときは、手持ちのPCをVPN接続の無線ルーターとして使えば、出張先のモニターにも自宅と同じ映像が映せることになります。

Softap2

このSoftAP機能のポイントは、PCの1個の無線LANポートを仮想的に2つに分けて、「インターネットへのアップリンク」と「Chromecast(等)から接続するアクセスポイント」の両方で併用することで、PC側は1個の無線LANポートがあれば十分です。(外部接続のために別の有線LANを使う必要ありません。もちろんそういう構成にしても構いませんが。)

遠隔地に長期間滞在する時は手持ちのPCは仕事等に使いますから、現地にあるテレビやモニターをこうやって自宅テレビ化すれば良い訳です。(海外のホテルのテレビも大抵はHDMI端子が付いてますので、塞がれていなければ「おうちTV化」が可能です。)

手持ちのPCのSoftAP化手順は、こちら の"XXくん"を"Chromecast"と読み替えるのがわかり易いと思います。但し「アダプターの設定の変更」で「インターネット接続の共有」は、VPNの仮想アダプターに対して設定します。VPNを接続した時点で「ネットワーク接続」一覧にVPNの仮想アダプターが現れますので、それに対して共有の設定をおこなってください。設定すると図のようになる筈です。

Softap3

また、Chromecastの接続先AP(アクセスポイント)もSoftAPに切り替える必要がありますが、Chromecastの場合この作業はちょっとしたコツが必要です。

1) SoftAP用PCからはChromecast接続先の設定変更ができません。別のスマホ/タブ/PC等から作業する必要があります。
 予め出掛ける前にこの設定変更をやっておくと出先で慌てずにすみますので、お勧めです。
2) 基本ルールとして設定用端末も、このSoftAPにアクセスできなければなりません。よって先に設定用端末を一旦SoftAPに接続して、パスワード等を記憶させておくと良いと思います。
3) 以上が準備できたらChromecastアプリから接続先の変更をおこなってください。作業開始時にChromecastがどこかのAPに接続されていれば、設定用端末もそのAPに繋いだ上で作業開始します。
ChromecastがどのAPにも接続されていない状態なら、端末からそのChoromecast本体をAPとして直接接続できますので(パスワード不要)、その上で設定作業をおこないます。
4) この後Android端末の場合、変更時にAndroid端末自身の接続先も変更され、そこで最終確認がおこなわれた上で作業完了になります。
5) 一方iOS端末の場合ちょっと勝手が違い、Chromecastのネットワークは変更ではなく一旦削除する形になり、その上でChoromecast本体に接続して改めて新しい接続先を定義する、という作業になります。
この辺1回やってみれば勝手がわかると思いますので、持ち出す前に練習しておくと良いと思います。

スマホでもテザリングの契約があればVPN接続の無線ルーター化が可能ですが、スマホのテザリングでは「家-インターネット-アクセスポイント-無線LAN-スマホ-無線LAN-Chromecast」 の形の接続はサポートされない点にはご注意ください。「家-インターネット-LTE/3G回線-スマホ-無線LAN-Chromecast」の形なら大抵サポートしますが、Chromecastのながら見で使うようなデータ量ではあっという間に7GB制限を超えると思いますので、使用量の注意が必要になります。

それにしてもたかが4千円のデバイス1つにその辺の可能性を秘めているとは・・さすがGoogle先生はあなどれない。。テレビメーカーはGoogle製のOSを気軽に自社製品に積んでいるうちに、いつのまにか母屋を取られることになるのかも。テレビの内蔵チューナーや苦労して仕上げた独自アプリ、DLNA、イカしたリモコンや4K解像度とも無用の長物化したり全く差別化できなくなってメーカー品である意味がなくなっていく、という感じで、国産PCやガラケー、性格の近いものではPCモニターが辿ったのと同じ道ですね。

4.HDMI端子の無いテレビ/モニターで利用するには

HDMI端子が付いていれば例えスピーカー無しのPCモニターであっても、大抵はHDMI経由で送られてくる音を出すためのステレオミニジャックが付いていますので、そこにPCスピーカー等を付けるだけで「Chromecastテレビ」が出来上がります。

しかし2010年頃より前のテレビ/モニターとなるとHDMI端子が付いていない場合があり、それらをChromecastで使うには映像端子の変換だけではなく音を取り出す必要があります。「音声出力端子の付いた」HDMI-DVIコンバーターやHDMI-VGA、HDMI-コンポジットといった、それぞれに合せたコンバーターを入手する必要があるわけです。
ここで注意すべきなのは、Chromecastは「HDCP」をサポートしていない機器に接続しても何も出力しません。したがって必ず「HDCPをサポートしているコンバーター」を選ぶ必要があります。
そういったコンバーターは「HDMI to DVI 音声 HDCP」や「HDMI to コンポジット 音声 HDCP」 といったキーワードでAmazon/楽天等を検索すれば、いくつか出てきますので、商品説明を読んで目的に合っていることを確認の上で手頃なものを買えば良いです。
値段はこの目的ならせいぜい2,3千円台のもので十分で、HDCPサポートが書いてあるものを選ぶ点だけ気を付けてください。

例えば私の場合、以前使っていたRDT261WHというモニター
Photo

を和室用のテレビとして再利用しようと考えたのですが、これにはDVI(とVGA)端子しか付いていないので、HDCPサポート情報がコメント欄に記載されていたHDMI to DVIビデオ変換アダプターを購入して図のようにChromecastと接続したところ、問題なく動きました。

Chromecast2_dviconvert

ただこう書くと簡単にうまく行ったように見えますが、実は最初は単純にHDMIの音声だけを取り出せば良い話だと思い、安売りしていた「HDMI→HDMI+オーディオ分離」製品とHDMI-DVI変換プラグで繋いでみたところウンともスンとも言わず、そこで初めてHDCPが絡んでいる事に気が付いた次第です。(単純な変換プラグであればアダプター側はHDCPも何も関係なく、モニターのHDCP対応がそのままパススルーされるのですが、音声分離回路が入った時点でアダプター自体にもHDCPサポートが必要になるようです。)
HDMI-DVI変換と音声分離を安全に行う安価な製品は(上記で検索すれば判るように)あまり種類が無いので、同じ製品が手に入るならお勧めです。が手に入らない場合は、私が最初に試した「HDMI→HDMI+オーディオ分離」タイプでHDCPサポートするものは結構高いので、以下でご紹介するVGA変換タイプでも良いのではないかと思います。

そういった追加出費が必要でしたが、元々画質は気に入っていたものの常用モニターとしてはオーバースペック気味で、発熱も大きくつけっぱなしにすると部屋が暑くなることもあってお蔵入りしていたモニターを有効活用できましたので、リーズナブルな出費だったと思います。

コンポジットやVGAのようなアナログ入力への変換も、基本は対応するコンバーターで同じように接続する形になります。
ちなみに「デジタル映像のアナログ出力はSD解像度のみ、更に2014年以降の機器ではアナログ変換自体を禁止」なんて話があったのはあくまでBDレコ/プレーヤー(にAACSという技術をライセンスする)団体の自主ルールであって、そういう団体と何の関わりもないGoogleやAmazon等の機器を通せばそういった制約は今後ともありません。そういう意味でも大事に使っている古めのテレビ等を今後も活用するには有効な手段になるのではないかと。
ただし、リンク先の記事を見ると、テレビ/モニター側との解像度・周波数の調停がうまく行かない場合もあるようです。
Chromecastは基本はHD出力固定で、多少の調整はしますがあまり融通は利かすユーザー設定もできません。よってHD入力をサポートしないディスプレイだとうまく表示できない可能性があります。
アナログ接続にすればディスプレイ側もあまり難しい事は言わず何とか表示しようとはしますが、サポートしない解像度だと画面が欠けたり表示できない状態にもなります。
この辺、アナログ機器への接続はうまく行けば儲けもの、くらいの気持ちで試してみる位が良いと思います。
ちなみにオフレコの話ですが、AndroidTVをサポートする最新デバイス(シャオミのMi Boxなど)には手動でSVGA/XGA等の出力解像度を設定できるものもありますので、最初から古いテレビ/プロジェクターをCast機器として活かすのが目的なら、変換アダプタと併せてその辺も検討してみると良いと思います。

上記リンクの記事で紹介しているコンバーターはこれ が同じ製品で、一般にはメス-メスのHDMIアダプタを使ってChromecastに接続します。私は今のところアナログ接続は必要なかったのですが、安い上非常にコンパクトな製品なのので試しに入手して試してみたところ、上記RDT261WHモニターでは一発で綺麗に映りました。接続は以下のようになり
Chromecast2_vgaconvert_2

上記DVIコンバータと比べても非常に小さく外部電源も不要です。
一方手元のAcerのモニターではVGAモードで繋いだだけでは何も表示されず、一旦モニターをHDMモードに切り替えて再度VGAモードに戻す、という操作をすればきちんと映ることが判りました。
このようにモニター毎に振る舞いがやや異なることがあるものの、基本は他のアナログコンバータと比べても安定して使える製品だと思います。VGAではなくコンポジットやD端子に変換する場合も、直接HDMIからの変換で実績のある製品は少ないのですが、このVGAタイプのコンバータから再度VGA-コンポジット等の変換をかければ上手くいく可能性は高いです。

大事に使ってきたTVやプロジェクターなど多少コストを掛けても再利用価値のあるものであれば、ネットの情報やレビューを参考にしながらこのようなアダプタを試してみるのも良いと思います。もちろん安く上げたいだけであれば安いPCモニターを新規に買った方が早いかもしれませんが、上に書いたようにまだまだ使える「テレビ」を上手く活用できればば儲けもの、というつもりでやれば、ちょっとした試行錯誤も楽しいと思います。

2014年10月 6日 (月)

iPhone/iPad/Android/モバイルPC等によるロケフリ・テレビ+動画ストリーミングの視聴環境を作る

TvRemoteFilesのダウンロードのみの方は→ こちら

今まで当Blogではネットワーク経由で"TS抜き"チューナーを使う仕組みとして何度か、Spinelを使った家庭内配信をご紹介していたのですが、これはロケフリ視聴というよりも、チューナーのフル機能を家庭内の全てのPCで使えるようにするのが目的でした。

Spinelは家庭内の十分なLAN帯域が確保できる環境内であれば全てのPCをテレビや録画機に変身させることができ便利この上ないのですが、これだけだと単に視聴したいだけの場合もiPhoneやAndroid端末からは(SpinelクライアントやTvTest等が開発されていないので)直接テレビを観ることはできませんし、またネットワーク帯域を大食いするため、家を離れた場所でPCから家のチューナーを使ってテレビを視聴する「ロケフリ視聴」という使い道にも向いていません。

一方そのような"TS抜き"環境で録画されていく動画ファイルの再生環境やライブラリ化についても、過去の記事ではTvtPlayWhiteBrowserをご紹介していましたが、これも同一LAN上のPCでは便利に使えるものの、モバイル端末やリモート環境を想定したものではありませんでした。

そういったモバイル環境や非Windows環境でテレビ視聴&動画鑑賞を目一杯楽しめるフリーウェアとして、この記事ではTvRemoteViewer_VB をご紹介したいと思います。
このソフトは最初はロケフリ・テレビの実現が主眼で動画ストリーミングはオマケ的だったのですが、バージョンを重ねるうちに現在では動画ストリーミングの目的だけで使っても(Qloud Media等と比較しても)十分使えるものになっていると思います。(勿論放送TSファイルだけではなく大抵の動画ファイルのストリーミングに対応しています。)

Tvremoteviewer_top

さて、ロケフリを実現するソフトとしては以前からRemoteTestなど十分に実績のあるものがあったのですが、今に至ってのご紹介になったのは、「既に公開の停止されたRemoteTestに代わって現役ソフトとしての発展が見込めるTvRemoteViewer_VBが出てきた」という点が大きいものの、他にも訳があります。

リモート視聴をおこなう際、ネットワーク帯域だけの問題であればSpinelのような「ストリーム圧縮のない」仕組みであっても、太いアップ/ダウンストリームの回線さえあれば理論的には可能なのですが、公衆ネットワークの帯域を無駄に使ってしまう点でハタ迷惑ですし、特にアップストリームの使い過ぎはプロバイダの帯域制限に引っかかる危険性があります。したがってリモート視聴に必要十分な画質/帯域に圧縮してから送る、というロケフリ視聴向けサーバ・システムは不可欠になります。

しかしそれ以前の問題として、以前「まねきTV」が違法とされた事が解釈によっては、(不特定多数ではなく)自分での利用に限定したリモート視聴の仕組みであっても二次放送と見なされて、違反と判断され得るのではないか、という疑いがありました。
この辺はある意味厳密な法規定ではなく法の運用で決められている話なので、公にやっている事例が無い以上どこまでなら可能なのかは判断のしようがなく、そういう話もあってかSpinelの場合は作者の意思として利用の前提条件にリモート視聴には使わないという制限が付いていましたし、RemoteTestの作者が公開を止めてしまったのもその辺の恣意性を警戒しての事かもしれません。

ところが「テレビの放送や録画をリモートから視聴する」という仕組みは(iPhone/Androidでの持ち出しすら不自由な現状ではTV/レコ共々ますます売れない、という現実をなんとかしようと思ったのか)NexTV-F起案で仕様を決めたようで、"nasne"についてはこの秋から、またBDレコーダについてはその少し前から、いずれもソニーが先鞭をつけて堂々と始めることになり、「公にやっている事例」が存在することになりました。(さすがルール拡大解釈請負人ソニー様・・)

ある意味毒見済みとなった訳で、そうとなれば「TS抜き」システムであればより簡単で柔軟な構成が実現できる応用分野なので、それをご紹介できる環境は揃ったと判断したわけです。
ただそういう経緯ですので、外からのご利用は厳密にアクセスをパスワード等で保護の上、ご自身での視聴の範囲内に留めることを守ってください。その辺を守っていただかないとご自宅のシステムのセキュリティが守れないのは勿論のこと、二次放送行為として罰せられる可能性があります。

「TS抜き」環境をベースとするメリットは、(この話に限りませんがメーカー独自仕様やガラバゴス規格に振り回される事なく)、HLSという次世代映像配信の主流に最も近いと目され今後の発展も見込まれる手順によって、機種を選ばず特別な端末用ソフトも不要な形で、「痒い所に手が届く」システムが構築できる点です。(考えてみればHLSもそうですがMPEG-DASH、MSEと次世代のストリーミング標準を競っている技術はどれも、配信のために毎回無数のビデオファイルに「ダビング」する仕様なので、「ダビ10」ルールでは永遠に利用できませんね。こんなところにもオープン性を欠いた規格が結局自らの将来性を閉ざしてしまうという事例が・・)

実際に試してみると確かにTVTestで直接観るのと比べれば遅延もありますが、家の中でiPad等でもTVが見られるのは単純に便利ですし、安いAndroid端末を防水パックした上で「お風呂TV」にするのも楽しそうですね。
外からだと家に帰れない時や出張中に見逃したくない番組や気になるニュースを見るのに便利です。(特にワンセグでも見られない衛星放送など。)
また録画したものをこの仕組みで外から再生するのも簡単で、一種のクラウド型サービスとして、異なる端末で再生シーンを引き継ぎながら観られるのも便利です。
但し画質や軽快さの点ではMP4化して持ち運ぶ従来型の動画視聴のほうが有利な面もありますし、移動中にWiFiではなく LTE/3G回線を多用していると月毎の7GB制限も気にしなければなりません。この辺の特性は(NexTV-Fの名前を借りて企画した企業が期待するような)iTunes同期に替りうるものではなく使い分けるとより便利で、逆に自宅での視聴でもタブレットがあれば、Spinel/TvTestで観るより気軽な面もあります。
なおスマホでのご利用にあたっては(当然の事ながら)パケット定額など、データ通信量が増えても料金の変わらない契約形態である事をご確認ください。知らずに過大な通信料金になったとしても、当方では責任は負えません。

    システム全体図

Whatistrvnew

最新版の視聴画面はこのようになっています。

Nicotvremote_w_2ch1

Musicstation

どのプラットホームでもブラウザから同じ手順で使えますし、全画面視聴もOKです。ブラウザ画面ならHTML5とAjaxの技術を使って、このようにニコニコ実況や2ch実況を流すことも出来るようになっています。

現在のバージョンでは並列ストリーミング数の上限が事実上なくなり、定義した数までサーバ能力が許す限りの並列ストリーミングが可能になりました。

Trvmanystream

またファイル再生については個別のファイル再生のほかにプレイリスト機能もあり

Pl1_natiogio

家のPCや通勤中のスマホで再生を引き継ぎながら長いシリーズ物等を鑑賞していくことも可能になっています。

またこちらはスマホのトップ画面の例ですが

Trvmobiletop

こんな感じで、プラットホームに合わせて自分で使いやすいようにカスタマイズできる点も特徴になります。

後日追加された機能として、ChromecastやFireTVAndroidTV等を併用すれば

Chrocastvr2

こんな感じで家にあるテレビや余ったモニターを活用して、大画面でもストリーミング&実況を楽しめるようになります。
勿論それらにPCを繋いでも同じことは出来ますし、テレビはテレビ本来のチューナーも持っていますが、Chromecastとストリーミングを使うメリットは自在なコンテンツの扱いや実況など豊かな楽しみ方ができること、画面1つ映すのにかかる費用やN/Wコストが僅かで済むこと、それでいて十分な画質で楽しめること等がポイントで、この辺は実際使ってみると実感できると思います。

写真に映っているWiFi経由のリモコン機能は当初Chromecast専用だったのですが、最新バージョンではどの端末画面でもリモコンから操作できるようになりましたので、テレビ代わり(あるいはテレビの置き換え)として使うのにも便利になっています。

当記事ではこのようなソフトの使い方を以下の内容・順番でご説明いたします。

1.TvRemoteViewer_VBの導入
 1) 準備
 2)各ソフトウェアのダウンロードと配置
 3)カスタマイズ用ファイルの追加(上書き)
 4)一旦起動して、初期パラメータをセットする。
 5) 番組表の正常表示のための設定

2.家庭内LAN上での使い方
 1)トップメニュー
 2) 番組表からストリームを起動
 3)Rockバー型番組表について
 4)ニコニコ実況表示機能
 5)2ch実況表示機能
 6)ファイル再生のストリーミング
 7)プレイリスト機能
 8)ファイル/プレイリストのストリーミングも実況付きにする
 9) 0.5倍速再生~2倍速再生
 10)チャプター機能
 11)リモコン機能で操作する
 12)ファイルの無変換ストリーミング
 13)二ヶ国語放送(または録画)で日本語/英語音声を選択する
 14)タイムゾーンの変更
 15)視聴画面をポップアップ型の別ウインドウにする
 16)お休みタイマ・お目覚めタイマ
 17)サーバー低負荷モード
 18)サーバーイベントログ表示機能
 19)手動配信
 20)その他の管理・設定機能
 21)スカパープレミアムの配信について
 22)インターネットラジオ(超!A&G+)の実況付き視聴

3.外部から家庭内LANにアクセスして視聴するためにDynamicDNSとVPNを設定する
 1) 設定手順
 2) 解像度とビットレートの関係について
 3) SoftEther VPN を利用して1)より強力なVPN環境を作成する。

4.使い勝手の向上とストリーム起動の安定化のためにSpinelとRDCTを利用する
 1) 主要なメリット
 2) Spinelの説明と導入方法
 3)RDCTの説明
 4)自動生成プログラムによるクイック導入

補足.改訂履歴

なお、後日の重要なトピックとして、ハードウェアエンコード(QSVおよびNVEnc)の本格サポートが追加されました。これは単なる機能追加と言うより、TVRemoteViewer_VBの活用範囲が大幅に拡がる話なので、別記事にまとめてあります。
これによって今持ってるPCがかなり古かったりショボくて、とか、PCすら持っていないという方でも、気楽にロケフリ&ストリーミング環境が作れるようになります。
ぜひそちらもご参照いただければと思います。

また、TvRemoteViewer_VBはアップデートが速く、機能の進化や使い勝手の改善も多いです。既にTvRemoteViewer_VBをお使いの方も、折を見て最新版にアップデートするのをお勧めします
更新は後日公開した「TvRemoteViewer_VB バージョンアップ支援ツール

Trvi1_2

を使えばほぼ自動化でき、数分もかかりません。リンク先を読んでご利用いただければと思います。

1.TvRemoteViewer_VBの導入

まずは家庭内LAN/Wi-FiI環境で、スマホ・タブレットやPCから自由に視聴できる環境を作成します。ここをしっかり作っておけば、リモート視聴に必要なのはVPN環境の追加だけです。

1) 準備

そもそもの前提として、この記事の手順でロケフリ環境を作るには、"TS抜きチューナー"をお持ちであることが前提になります。
(チューナー無しでも”ファイル再生”は使えますが、その場合もプロテクト無しの映像ファイルである必要があります。)

この機会に新規にチューナーを導入される場合、このBlogに PX-W3U3/S3U2/W3PE/Q3PE/S1UD/BCUD のようなPLEX系チューナーの導入記事がありますので、それらを導入される方はご参考にしてください。またPT3の導入もWiki等がいろいろ存在しています。
既にPT1/2、FSUSB2/HDUx/DY-UD200/Friio等をお使いであれば、それで問題なく動きます。(ただしそれらは新規入手は難しいですし、今から敢えて選ぶメリットも無いと思います。)

その上で、まずは以下の準備作業から始めてください。

① TvRemoteViewer_VBを動かすPCには、以下のランタイムが必要です。

  Microsoft .NET Framework 4.0または4.5
    (4.5は4.0の上位互換です。 Spinelで必要なFramework 3.5とは別ですのでご注意ください。)

お使いのPCにどのバージョンのFramework が導入されているかは、以下のファイルを解凍したbatファイルをダブルクリックしてみれば判ります。

「checkvdnfw.zip」をダウンロード

(これはatmarkITさんの記事にあったバッチファイルを少々修正の上転載させていただきました。)

Tvremoteviewer_dotnetcheck

ここに「Framework 4.0(または4.5)がインストール済み」と出てくればOKです。
未導入の場合は、Windows7かそれ以前であれば、以下のリンクからダウンロード&導入してください。

http://www.microsoft.com/ja-jp/download/details.aspx?id=30653

またWindows8以降であれば、コントロールパネル(またはスタートボタン右クリックで)→プログラムと機能で、「Windowsの機能の有効化または無効化」を選んで、以下の場所をチェックした上でOKを押し、Framework 4.5を有効化してください。

Tvremoteviewer_dotnet45on8

② Windowsファイアーウォールでポート40003へのアクセスを許可する。

TvRemoteViewer_VB のアクセスには、家庭LAN内であってもリモートであってもポート40003を使いますので、TvRemoteViewer_VBを動かすPC上で該当ポートを開けておく必要があります。ここではデフォルトで動いているWindowsファイアーウォールの設定手順を解説しますが、もし他のファイアーウォールソフトを導入している場合には、それぞれの手順に従ってポート40003のアクセスを許可しておいてください。

コントロールパネルでWindowsファイアーウォールをクリックします。

Tvremoteviewer_fw0

「詳細設定」をクリックし、Windowsファイアーウォールの設定画面で、左の「受信の規則」をクリックし、次に右の「新しい規則」をクリックして、出てくるウイザード画面で「ポート」を選択して「次へ」を押します。

Tvremoteviewer_fw1

「TCP」を選択し「特定のローカルポート」を選択して入力欄に「40003」と入れ、「次へ」を押します。次の画面で「接続を許可する」、その次の画面でドメイン・プライベート・パブリックを全てチェックします。

Tvremoteviewer_fw2

その次の画面ではルールの名前を聞いてきますので、TVRemoteなど適切な名前を付けて、「完了」を押します。これでファイアーウォールの設定完了です。

確認のため、Windowsファイアーウォールの設定画面で(左で「受信の規則」が選択されているのを確認の上で)上で付けた名前を探し、ダブルクリックしてください。

Tvremoteviewer_fw3_2

設定内容が出てきますので、特に「プロトコルおよびポート」のタブで「TCP」、「特定のポート」、「40003」が選ばれていることを確認してください。(もし間違っているようであれば、ここで修正するか、右クリック→削除 で一旦該当ルールを削除して、もう1度定義し直してみてください。ここを間違うと視聴は確実に失敗しますので慎重に。。)

③ 対応ブラウザの準備

PCからTvRemoteViewer_VBにアクセスする場合、IEでは正常にアクセスができません。
理由はWindows環境に必須のFlashフォールバック・プレーヤー(Projekktor)がIEでうまく動かなかったためで、そういった経緯で初期の段階から独自性の高いIEのCSS形式等は一切考慮しておらず、トップページの表示自体も崩れますが、本質的にはプレーヤーが動かないのが理由です。
それ以外のブラウザであればほぼ問題なく使えます。Windows8.1までの環境であればChrome/Firefox/Opera のいずれでも使います。このアプリは一部webkitしかサポートしていない装飾を使っている関係で、Firefoxでは表示が格好良くない部分があるかもしれませんが、いずれにしろ問題なく使えるはずです。
またWindows10から標準添付されているEdgeブラウザは、Windows環境では初めてHLS動画を標準サポートし、綺麗で滑らかな画質での再生が可能になっていますので、Windows10を導入された方には第一のお勧めです。→解説記事にしてあります。

もしいずれも未導入のかたは、お好みのものをリンク先から導入しておいてください。(視聴する側のPCにも。)
尚いつもの事ですが、導入時に何も考えずに次へ、はい、などと答えていくとデフォルト(標準)のブラウザが変更されますので、変える気がなければ「デフォルトのブラウザにする」のような該当箇所でチェックを外す/いいえと答えるなど、しっかり意思表示してください。
(たとえばOperaは導入最初の画面で小さく「標準ブラウザにする」の選択肢がチェックされているなど、初めての人にわかりにくくなっていると思います。うっかり変更してしまった場合は後からIEなどデフォルトにしたいものを立ち上げ直して、出てくる確認メッセージに答えてデフォルトブラウザを戻してください。)

尚スマホ側はSafari、Chromeなど標準のブラウザでOKですし、Lunascapes等でも同じように使えます。iOSの場合は個人的には後述の理由で、ilunascape、Android環境ではDolphinBrowserがお勧めになります。

④Flash Playerの導入

PCのブラウザからストリームを再生するためにはFlash Playerが必要ですので、リンク先から導入してください。(但しChromeブラウザは現在Flashプラグインを標準添付していますので、導入不要です。またWin10のEdgeの場合はそもそもFlashを使いませんので、ここは飛ばしてください。)
これは③の使用するブラウザ導入の後にやらないと該当ブラウザにFlashのプラグインが導入されません(その場合は再度Flashの導入が必要です)ので、このタイミングがお勧めです。

なお、FlashPlayerを導入するとMcAfee Securty Scanなるプログラムも勝手にインストールされてしまうことがあります。(実は上記の画面で導入確認のチェックボックスが付いているのですが、よく判らずチェックされたまま「今すぐインストール」を押してしまう場合が多い。) 導入時に判りますので、うっかり導入してしまって不要な際は、導入後に「プログラムと機能」からMcAfeeをアンインストールしてください。
あと毎度のことながらAdobeのアップデートメッセージは煩いので、途中で出てくる「Flash Playerの環境設定を更新」のダイアログでは、「新しいアップデートの有無を確認しない」にしっかりチェックして「次へ」を押すことが(個人的に)お勧めです。

⑤導入するPCのIPアドレスを固定する。

iOSやAndroid端末からこのPCにアクセスするためには、このPCのIPアドレスを固定する必要があります。
というのは、PCからのアクセスであればローカルLAN内のコンピューターに対しては、
http://server1:40003/
のように、コンピューター名だけ指定すれば、アドレスが固定されていなくても常にアクセス可能なのですが、iOS等のブラウザの場合は(恐らくセキュリティ上の配慮だと思いますが)、IPアドレス以外のドメイン名が入力されると、そのドメイン名が公開されているかをどこかのホストに問い合わせに行き、公開されていないドメイン名だとアクセスを拒否してしまいます。
IPアドレスを直接書けば素直にアクセスしてくれますので、配信するPCはIPアドレスを固定しておいてください。固定IPアドレスの設定方法はこちらのリンクにあります。

ここで例えば192.168.0.200 と設定しておけば、TvRemoteViewer_VBの利用の際はブラウザのアドレス欄に
http://192.168.0.200:40003/
と入れれば良いわけです。といっても毎回入れるのは面倒だと思いますので、アクセスできたらこれをブックマークに登録しておくと良いと思います。
2台以上のPCでTvRemoteViewer_VBを動かして使い分けする時は、それぞれのPCのIPアドレスを
192.168.0.201、192.168.0.202
のように固定していけば良いです。
(これはあくまで例ですので、実際のアドレスはLAN上で他の機器やDHCPとバッティングしない値を設定してください。)

2)各ソフトウェアのダウンロードと配置

最初に各種ソフトウェアパッケージをダウンロード・解凍して、以下のように配置します。

Tvremoteviewer_fig1

なお全体の注意点ですが、導入するフォルダ、およびその上位フォルダには日本語(を含む2バイト文字)は使わないようにしてください。例えば上記①~⑦のフォルダ名が全て英数字名でも、全体が「D:\ロケフリ\DIR\」 のようなフォルダの下にあるとNGです。(ffmpegがうまく扱えないようです。)  ご注意ください。

① TvRemoteViewer_VB パッケージはリンク先

http://vb45wb5b.seesaa.net/

の「ロケーションフリー TvRemoteViewer_VB」の記事に、バージョンの新しい順に「v0.XX」のリンクでアップされていますので、最新版をクリックしてダウンロードし、適切なフォルダに解凍した上で、中身を実行用フォルダ(以後、\TvRemoteViewer_VBフォルダとします)にコピーしてください。
なお TvRemoteViewer_VB v1.30 以降では、\TvRemoteViewer_VB フォルダのセットの中に CtrlCmdCLI.dll というファイルが追加になりました。これもコピー、また以前のバージョンから移行する際は必ず追加してください。このdllがないと1.30以降ではうまく起動しません。

さて、TvRemoteViewer_VBは簡易Webサーバの機能を持っていますが、これは(Windows Vista以降では)管理者モードでの起動が必要な場合があります。(でないと、うまく動かないだけでなく起動すら失敗する)。したがってこのタイミングで、\TvRemoteViewer_VBフォルダにあるプログラム本体 TvRemoteViewer_vb.exe の上で「右クリック→プロパティ」から「互換性」タブを開き、

Tvremoteviewer_8managementmode

「管理者としてこのプログラムを実行する」をチェックして、OKを押してください。
(あるいはコマンドプロンプトを管理者モードで開いて、 netsh http add urlacl url=http://+:40003/ user=Everyone  を実行しても良いです。)

② 次に、\TvRemoteViewer_VBフォルダの下に\htmlフォルダを作成してください。

②のフォルダに、\TvRemoteViewer_VBフォルダ下の「_設置用ファイル\ HTML_WWWROOTに設定したフォルダにコピー」 フォルダにある(index.htmlなど)全てのファイルをコピーしてください。

ストリーム用一時ファイルの作成場所として、たとえば\htmlフォルダの下に \streamフォルダを作成してください。

      なお、TvRemoteViewer_VB v0.77以降で 「\streamフォルダは必ず\htmlフォルダの下に作る」という制限が取り除かれましたので、別の場所、例えば別のSSDやRamDiskに作っても構いません。下の図にある%FILEROOT%の設定値に \streamフォルダの場所をきちんと指定すれば、どの場所に置いてもよいようになっています。
フォルダの名前も\streamでなくても良いですが、必ずルートドライブ指定(F:\ 等)ではなく、何かのフォルダを作って指定してください。(ルート指定ではうまく動きません。)
私の場合、ファイルを大量に作成しては削除 を繰り返すこの\streamフォルダ は、システムSSDの性能を長持ちさせるのとアクセス競合を避けるために、別の(ちょっと容量が小さくて他の使い道がなかった)SSDを繋いで \stream専用領域にしました。

ffmpegはお使いのWindowwsの32bit/64bitに合った最新のものをリンク先の「Download FFmpeg git-xxx XX-bit Static」をクリックしてダウンロードし、適切なフォルダに解凍した上で、中身を実行用フォルダ(以後、\ffmpegフォルダとします)にコピーしてください。

*なお、TvRemoteViwer_VB最新版で利用しているhlsセグメントの機能は最新版(2014年12月5日以降に公開)のffmpegでなければ対応しません。
今後新規に導入される方、またTvRemoteViwer_VBを最新版に更新される方は、必ずffmpegは上記サイトから最新版をダウンロードしてお使いください。
古いffmpegバージョンを差し替えの場合は同じフォルダに上書きするだけでOKです。

次に、\ffmpegフォルダの下の\presetsフォルダに、\TvRemoteViewer_VBフォルダ下の「設置用ファイル\ffpreset_ffmpegインストール先のpresetsフォルダにコピー」フォルダにある、libx264-ipod640.ffpreset ファイルをコピーしてください。

RecTaskはリンク先 (うまくDLできない時はこちらのリンク)からダウンロードして適切なフォルダに解凍し、中にある

RecTaskCentre.exe
RecTask.exe
RecTask.default.ini

の3つのファイルを実行用フォルダ(以後、\RecTaskフォルダとします)にコピーしてください。

なお放送の視聴のためにはスクランブル解除が必要です。
PCにUSBカードリーダーとB-CASカードが挿さっていれば、RecTaskは自動的に使いに行きます。
USBカードリーダーではなくFakeWinSCardのような代替手段を使っている時はリンクのようなwinscard.dllなどの必要なセットを、\RecTaskフォルダにコピーしておいてください。

またBonCasLinkを使っている時は、RecTaskはBonCasProxyは使えませんので、BonCasClientが必要になります。
\RecTaskフォルダにBonCasClient.dllと、BonCasServiceのアドレスを記述したBonCasClient.iniを入れた上で、RecTask.ini で、
 General.CardReader=BonCasClient
と指定することで、サーバ上のB-CASを使うようになります。
但しBonCasClientは現在非常に入手性が悪いので(作者の方が現在非公開方針で、どこかにアップされてもすぐに削除されてしまう)、お持ちでない場合の1つの代替案としては、カードリーダーと同じPCにTvRemoteViewer_VBも立てる、というのが良いのではないかと思います。BonDriver自体はSpinelを使えばどこからでも使える訳ですし。

\RecTaskフォルダに配信に使うBonDriverファイルと、対応する.ch2ファイル(チャンネル定義ファイル)を、ご使用中のTVTest(等)からコピーしてください。
この際BonDriver_Spinelのdll.iniファイル、PLEX系のBonDriver***.ini ファイル、PTxのChSet.txt、PTCtrl.exe ファイルなど、BonDriverの動作に必要な付帯ファイルがあれば、それらも忘れずコピーしておいてください。

なお後の4章で解説しているBonDriver_Spinel/RDCTを使う場合は、BonDriver、ch2ファイルなど必要なセットは全て自動生成しますので、そこから\RecTaskフォルダにコピーするだけで良いです。

もしSpinelを導入済であれば、BonDriver_Spinel/RDCTの利用は強くお勧めします。(このためにSpinelを導入するのも良い機会だと思います。)
という理由の1つ「は、BonDriver_Spinelを使えばリモート視聴が録画タスクと競合するのを避けられる ため、使い勝手が上がります。
Spine+RDCTを導入する場合は先にやっておいたほうが手間がかかりませんので、こちらをご参照ください。

3)カスタマイズ用ファイルの追加(上書き)

Tvremoteviewer_fig2

以下のリンクからカスタマイズ用ファイル群をダウンロードし、適切なフォルダに解凍してください。この中身を2)で配置したフォルダに(上書き)コピーしていきます。

「TvRemoteFiles_190.7z」をダウンロード

注: TvRemoteFiles ver1.70 より以前のバージョンから上げる時は、ffmpegも最新版にバージョンアップしてください。,→参考
なお、ver1.05からアーカイバを圧縮率の高い7zに変更しました。適切な解凍ソフトを導入していない方は、フリーの7-Zip http://sevenzip.sourceforge.jp/ を導入すればファイル右クリックで7-zipのメニューが追加され、そこから展開(=解凍)できます。)

中にあるhtmlフォルダの中身を、2)の\TvRemoteViewer_VB\html フォルダに、サブフォルダも含めて全て上書きコピーしてください。
これは端末側で動くJavaScriptプロフラム+HTMLで、サーバーと連携して豊富な機能を提供します。

同じく中にある\rootフォルダの中身(HLS_option.txt、HLS_option_ffmpeg_file.txt、HLS_option_ffmpeg.txt)を、\TvRemoteViewer_VBフォルダに上書きコピーしてください。これはffmpegのhls用新オプションに対応(2015/3/1)のほか、低ビットレート用プロファイル等が追加してあります。

中にある\RecTaskフォルダのRecTask.ini を\RecTask実行用フォルダにコピーしてください。これはNHK-BSの視聴が失敗する問題に対する対症療法のパラメータ(Logging.OutputToFile=true)を書き加えたものです。

4)一旦起動して、初期パラメータをセットする。

ここまでセッティングできたら、一旦\TvRemoteViewer_VB フォルダのTvRemoteViewer_vb.exe ファイルをダブルクリックして起動してください。
タスクトレイにこのようなアイコン Tvremoteviewer_icon が出ていたら立ち上がっていますので、これをダブルクリックしてください。設定画面が表示されます。

Tvremoteviewer_setting1

ちなみにTvRemoteViewer_VBの画面をタスクトレイに戻す際には、間違ってもTvremoteviewer_endボタンを押してはいけません。(TvRemoteViewer_VBが終了してしまいます。)
タスクトレイに戻すときには必ず、Tvremoteviewer_minimize最小化ボタン_ を押してください。

なお、この画面で「BASIC認証」も設定できるようになっていますが、これは空欄にしてください。
(ちょっとした経緯でこの機能は残っていますが、BASIC認証を掛けるとモバイル系の端末でうまくアクセスできないトラブルが続出しますし、そのサポートもいたしません。)
またサーバを直接外部に晒すような構成でBASIC認証程度ではセキュリティ上、物の役にも立ちませんので、外部からのアクセス制御は必ずVPNの構成にすることをお勧めします。

① フォルダ/ファイルの場所、および固定値の指定

Tvremoteviewer_setting11

上図の赤い囲みのように、2)で配置したフォルダおよび実行ファイル/フォルダの情報を反映させてください。
[...]をクリックすればファイル/フォルダの選択ダイアログが表示されますので、マウスで探して設定していくことができます。

また緑の囲みの部分は[初期値]のボタンを押せばセットされますので、3箇所とも初期値を設定してください。

②デフォルト解像度の設定

Tvremoteviewer_setting2

次に上図の赤い囲みの解像度の設定をプルダウンから適切に選んでください。すると緑の囲みにある「HLSオプション」に長い文字列が記入されます。(ここの編集は必要ありませんので、弄らないでください。)
これは配信のデフォルト解像度で、配信起動する時に解像度を指定しなければ自動的にこの解像度になります。
(注意) ここをきちんと設定しておかないと、解像度を指定しないデフォルト解像度(---)での配信スタートが必ず失敗します。

③iniファイルの設定

Tvremoteviewer_setting21

図の「設定ファイルを編集」ボタンを押すとTvRemoteViewer_VB.ini ファイルの編集画面が立ち上がります。
(エクスプローラーからTvRemoteViewer_VB.ini ファイルの上で「右クリック→編集」でも構いません。)
ここでは上のほうから以下のようにセットしていってください。

TVRemoteFiles Ver1.82以降とTVRemoteViewer_VB V2.39以

MAX_STREAM_NUMBER= 20    (等、使い方に合せてセット)

Trvmaxstr

並列して配信可能なストリーム数の上限です。以前のバージョンではシステムの作り上8ストリームまででしたが、最新バージョンではその制約が取り除かれ、20ストリームでも100ストリームでもここで定義しておけば並列配信可能になりました。
但しテレビ放送のストリームのようにCPUがリアルタイムにトランスコードするものはサーバCPU能力による限界があり、それ以上の並列ストリーミングでは映像がスムーズではなくなりますので、能力の範囲に収まるよう利用時に気をつけてください。それを越えるような数の並列配信は、エンコードの終わったファイル/プレイリストのストリーミング(特に無変換配信)を多数並べるような使い方に活用できます。
そういう場合、ここに必要なだけの数をセットするのも可ですが、増やす場合も20~30ぐらいにしておくのがお勧めです。あまり大きな数にすると定期的な監視タスクの負担になり、特にトップページを開いて暫くの間固まったようになりますので、ご注意ください。

tsfile_wait = 2

Tvremoteviewer_tsfile_wait
デフォルトでは3になっていますが、2に修正してください。(このほうが配信開始が早くなります。)

STOP_IDLEMINUTES = 0

Tvremoteviewer_timeout

視聴端末が無い状態でここに指定した時間(分)が経過すると、動いているストリームはすべて停止します。
ただし、ファイル再生のストリーミングでは意図的にストリームを保持したい場合が多いですので、ここは特にこだわらない限り 0 (つまり、自動では停止しない)の設定にしてください。
また本来、「視聴していなければ」ストリームを止めるタイマなのですが、視聴中でもこの時間でストリームを止めてしまうケースがあるようです。そういう現象を避けるためにも、ここは 0 の設定が推奨です。

TVRemoteFilesNEW = 1

0_3
TVRemoteFiles Ver1.82以降とTVRemoteViewer_VB V2.39以降の組み合わせであれば、ここの設定でストリーム起動時の画面遷移がより快適になります(別記事)ので、忘れずセットしてください。

VideoPath = "録画先フォルダのフルパス1","録画先フォルダのフルパス1",・・・,"録画先フォルダのフルパスn" 

Tvremoteviewer_iniedit2

録画ファイル配信機能ではここで指定したフォルダにあるファイルを一覧にしますので、必要なものを列記してください。
ただしネットワーク上で共有しているフォルダについては、X: のようなドライブ名が割り当ててあってもそれは使わず、上図のようにネットワークパス="\\コンピュータ名\・・・" のような形式で書いてください。(割り当てドライブ名を使うとTvRemoteViewer_VBがアクセスできない現象が起きやすいです。)
ネットワークパスは図のように、エクスプローラーで「ネットワーク」から辿って行くと表示されますので、そのアドレス欄からコピペすれば良いです。

Tvremoteviewer_iniedit22

沢山ファイルがあっても選ぶのが大変、と思われるかもしれませんが、ファイル再生ではキーワード検索やソート機能がありますので、あるだけ登録しておけば割と自由に観たいファイルを指定できます。

一覧に表示するファイルタイプは、以下のように VideoExtensions = ".拡張子1", ".拡張子2" で指定できます。
Tvremoteviewer_iniedit21

ここに何も指定しないと単なるテキストファイルやログファイル等も全て一覧表示されるので煩雑ですし、うっかり選ぶと配信エラーを起こして時間の無駄になります。
.ts .mp4 、他に.mkvや.mov を利用される方はその辺も指定しておけば良いと思います。

以降はその他の項目の推奨設定です。

.
NHK_dual_mono_mode = 3

NHK-BSプレミアムで特殊な音声チャンネル構成になる場合に対する設定です。とりあえず余り悩まずこれで。

Allow_BonDriver4Streams = 1

1つのBonDriverを複数ストリームで利用することを許可するオプションです。デフォルトでは許可しない = 0 になっていますが、PT1/2/3、PX-W3U3など、もともと1つのBonDriverで複数チューナーが使えるタイプも多いですし、Spinel/RDCTを使う場合、意図的に1つのBonDriverを使い回すことがありますので、ここはこの設定を推奨します。

.
もしRecTaskを同じPC上でTVRock録画などの用途でも使っている場合、以下のパラメーターもセットしてください。

Stop_RecTask_at_StartEnd = 0

これはTvRemoteViewer_VBの都合でRecTaskCentreを終わらせないための指定です。

また同じような話として、もしffmpegを別の用途、例えばエンコードやビデオコンバータで利用している場合、デフォルトではTvRemoteViewer_VBがいくつかのタイミングでffmpegのプロセスを全て終了させてしまうため、巻き添えで落ちてしまいます。それを避けたい場合、以下のパラメータをセットしてください。

Stop_ffmpeg_at_StartEnd = 0

更に追加の同じような話で、(この記事の手順では今のところ利用していないのですが)もしvlcをストリームエンコーダとして利用する場合、TvRemoteViewer_VBの都合で巻き添えになることがないよう、以下のパラメータもセットしてください。

Stop_vlc_at_StartEnd = 0

5) 番組表の正常表示のための設定

① 共通設定

TvRemoteViewer_VBは番組表から選局したり、また視聴画面で視聴中の番組や他局の番組情報を表示する機能を持っていて、基本的にTVRock、EDCB、ptTimer、Tvmaidのいずれか、またはその組み合わせから情報を取得します。

ただ地デジの番組情報だけはネットからも取得でき、それらのバックアップとして使えますので、まずはその設定をご説明します。

TvProgramD = xx   ;地デジ番組表で表示する地域の番号

Tvremoteviewer_terraprogram

各地域の番組編成に合わせるための指定値は TvRemoteViewer_VB.ini の中にコメントで列記してありますので、ご参照ください。

② 難視聴地域用地上波チャンネルの関連情報は削除しておく。

これはTvRemoteViewer_VB.iniの設定ではありませんが、念のためにこのタイミングで各BonDriverのch2ファイル、またTVRock、EDCB等の設定をチェックして、もし残っているようなら削除しておくことを強くお勧めします。
削除する理由は

・サービスIDが他のCSのチャンネルと重複するため、誤動作の原因になる。
・そもそも2015/3月末で終了したサービスで、定義を残しても意味がない。

というもので、うっかり残したままだと結構悪さをしますので、ご注意ください。削除手順は以下の通りです。

i) BonDriverXXXX.ch2 から削除する。

RecTaskが使用するBS/CSチューナーのそれぞれのch2ファイルから、難視聴用チャンネルの定義が残っていたら全て削除してください。

Tvremoteviewer_

ii) TVRockから削除する。
リンク先のチャンネルを削除する方法 と同じ手順で、BSの難視聴用チャンネルを全て削除してください。

iii) EDCBはチャンネル削除というよりEPG取得対象外にしてください。また現段階でBSをチャンネルスキャンし直せば、難視聴チャンネルは除外されるはずです。

iv) ptTimerは現段階でBSをチャンネルスキャンし直せば難視聴チャンネルは除外されるはずです。

v) Tvmaidは利用するTVTestのそれぞれのch2ファイルから同じ手順で削除し、終わったらチューナを更新してください。

③ TVRock番組表関連の設定

TVRock番組表を利用する場合は、TvRemoteViewer_VB.ini に以下を設定してください。

TvProgram_tvrock_url = "http://127.0.0.1:8969/nobody/iphone"   ;TVRockがTvRemoteViewer_VBと同じPCで動いている場合

Tvremoteviewer_iniedit4

TVRock番組表を利用する場合は上のように設定してください。(但し番組表パスワードが掛かっていないのが前提です。)
TVRockが別のPC上で動いている場合、(ここはPC間のアクセスですので)TVRock側のIPアドレスを固定する必要はなく以下のように、

TvProgram_tvrock_url = "http://コンピュータ名:8969/nobody/iphone"   

と、コンピュータ名の指定で構いません。
iphone用番組表を指定しているのは単に加工元としてiphone用番組表を使うのが理由なので、別にiphoneを使わない場合でもこの指定にしてください。

ちなみに注意点として、実際にこのiphone用番組表を別途利用されている方は、そこで何か操作をしたら必ず最後に「チューナー選択なし」「3番組(以上の)予約表示」の状態に戻しておいてください。
というのは、前者でチューナーがどれか選択された状態だと、地上波/BSCSのどちらかの番組しか表示されない状態になったり、後者で「予約表示・無し」の状態にしていると次の番組が表示されない状態になりますが、TvRemoteViewer_VB側はその状態のままの番組情報を読んでしまうので、一部の表示が欠けることになります。

iphone用番組表は同じURIでアクセスしても前回の操作状態が引き継がれる造りになっていてTvRemoteViewer_VBからはその辺をうまくコントロールできませんので、実際にiphone用番組表をお使いの方はその点をご留意いただければと思います。

④ EDCB番組表関連の設定

EDCB番組表を利用する場合は、以下 i), ii), iii)  の設定および作業をおこなってください。

i) TvRemoteViewer_VB.ini に以下を設定

EDCBがTvRemoteViewer_VBと同じPCで動いている場合
TvProgram_EDCB_url = "http://127.0.0.1:5510/api/EnumEventInfo"

別のPCで動いている場合
TvProgram_EDCB_url = "http://コンピュータ名またはIPアドレス:5510/api/EnumEventInfo"

Tvremoteviewer_iniedit6

またWeb番組表が利用できるよう、EpgTimerSrv.iniも、コメント文通りの設定がされているか確認してください。

ii) EDCBのTCP機能をONにする。

EpgTimerの設定画面を開き、動作設定→その他 で以下のチェック、および記入がされていることを確認して、「OK」を押してください。

Epgtcp

iii) EDCB Velmy版または niisaka版を使用している際の設定

上記バージョンを使っている場合は渡されるデータのフォーマットが少し違いますので、TvRemoteViewer_VB.ini に以下の指定をおこなってください。

EDCB_Velmy_niisaka = 1

また、それに限らず実際に動かしてみてうまくEDCB番組表が表示されない時は、以下を指定してみてください。

EDCB_thru_addprogres = 1

⑤ ptTimer番組表関連の設定

ptTimer番組表を利用する場合は、以下のi)、ii) の設定および作業をおこなってください。なお、ptTimerを利用する場合は必ずTvRemoteViewer_VBと同じPC(Windows)上で動いている必要があります。

i) TvRemoteViewer_VB.ini にptTimerの実行フォルダを指定。

ptTimer_path = "ptTimerの実行パス(フルパス)"

Pttimerfolder_2

ii) sqliteのモジュール 「sqlite3.exe」 を \TvRemoteViewer_VB フォルダにコピーする。

こちらのサイトの左にある

Sqlite1
「Precompiled Binaries for Windows」の「sqlite-shell-win32-x86-xxx.zip」をダウンロードして解凍してください。

すると中に「sqlite3.exe」というファイルが入っています。
これを \TvRemoteViewer_VB フォルダにコピーしてください。

⑥ Tvmaid番組表関連の設定

Tvmaid番組表を利用する場合は、 TvRemoteViewer_VB.ini で Tvmaid_url =  を適切に指定してください。
Maid1

⑦ TvRemoteViewer_VB.iniを保存してTvRemoteViewer_VBを再起動する。

以上で「ファイル→上書き保存」を選んで設定内容を保存し、メモ帳を終了させてください。

設定内容の反映のために、一旦TvRemoteViewer_VB設定画面右上のTvremoteviewer_end_2 をクリックしてTvRemoteViewer_VBを終了させた後、再度TvRemoteViewer_vb.exeをダブルクリックして起動してください。

この状態で同じPCからブラウザ(FirefoxまたはChrome)を立ち上げて、アドレス欄に

http://192.168.xxx.xxx:40003/

と、192.168.xxx.xxxの部分に 「上記⑤で設定したIPアドレス」 を指定した上で、Enterを押してください。ここまでの設定に間違いがなければ、TvRemoteViewer_VBのトップ画面が表示されるはずです。

なお(このタイミングではありませんが)最初にストリームを起動しようとした時に、以下のようなファイアーウォールの警告が表示されると思います。

Tvremoteviewer_ffmpegblockwhenfirst

これには速やかに「アクセスを許可する」と答えてください。

ブラウザには図のようなトップメニューが表示されます。

Trvnewtoppage00_2

ちなみにこの画面は今後の実利用でのトップ画面になりますので、「ブックマークに登録」しておくのをお勧めします。

⑧ 番組表にアクセスしてみる。

まずはご利用のTVRock、EDCB、またはptTimer/Tvmaidの番組表ボタンを押してみてください。現在は新番組表がデフォルトで表示されるようになっています。基本はこちらを使いますが、下記⑨のインターネット番組表を初期設定するために、旧番組表(TvRemoteViewerがもともと用意していたもの)の機能も残しています。

⑨ インターネット番組表(ネットから取得した地デジ番組表)の紐付け情報を定義

トップメニューの一番下にある「インターネット番組表」は補助的な位置づけですが、TVRock/EDCB/ptTimer/Tvmaid番組表と違って番組表のチャンネルとチューナー(RecTask)のチャンネルとの紐付けを自動でやってくれません。(一応試みますが、紐付け情報がないとかなり不正確です。) よって紐付け作業が必要になります。

ただし番組表自体が補助的な位置づけですので、ご面倒な場合はここの作業は省いて構いません。
(お時間のある時にやっておけば、万一EDCB/TVRock/ptTimer/Tvmaidの不具合があった場合にバックアップとして、「インターネット番組表」が実用的に使えるようになります。)

紐付けは以下のようにおこないます。

トップメニューで「管理タブ」の「Rockバー型の番組表を使う。」のチェックを一旦外した上で、「インターネット番組表」をクリックします。
Tvremoteviewer_dchmatch1

ここでメモ帳を開いて、番組表の()内のチャンネル名を一行ずつコピペしていってください。
次に、半角の : を各行末に付加
Tvremoteviewer_rockmatcha2

次に「地上波対応BonDriverのch2ファイル」をどれかメモ帳で開いて、各行に対応するチャンネル名をそれぞれの右側にコピペしてください。
Tvremoteviewer_rockmatcha3

各行を半角の" ", で囲んで
Tvremoteviewer_rockmatcha4

下の方から行末で「DEL」キーを順に押していけば、これらが一行にまとまります。(一番最後の, は削除しておいてください。)
Tvremoteviewer_rockmatcha5
この一行を  TvRemoteViewer_VB.ini のTvProgramD_channels = の後にコピペし、保存してください。

以上でTvRemoteViewer_VBを再起動すれば、インターネット番組表が正確に表示されるようになります。
.

2.家庭内LAN上での使い方

ここまで設定が終われば、家の中でPCだけでなくスマホやタブレットからも、自由にテレビや録画ファイルの視聴ができるようになります。
使い方は実際触れてみればすぐに判ると思いますが、簡単にご説明いたします。
(リモートでの視聴もこの応用になりますので、まずはここでしっかり操作方法を習熟して、ブックマークも付けておいてください。)

1)トップメニュー

一旦TvRemoteViewer_VBを落して再起動してください。
なお今後日常的に使っていく上では、TvRemoteViewer_VBをWindowsの起動に合わせて自動起動するのが良いかもしれません。
(いざ外から観たい、というときに立ち上がっていなければ元も子もないですので。。)
これは「いじくるつくーる」を導入して「起動時に毎回実行」に指定すると割と簡単です。

ただしうちの環境でテストした限りでは、Windows8以降の環境では何故か自動起動できない、という問題が起きるようです。
恐らくこれと同じ問題で、対策としては間にバッチを噛ます必要がありますので、そのサンプルバッチを添付しておきます。
「TvRemoteViewer_VB_bat.zip」をダウンロード
ダウンロード&解凍後、バッチの中を編集して、お使いのTvRemoteViewer_VBの実行パスに修正した上でお使いください。このバッチを上記「いじくるつくーる」等でスタートアップ登録すれば、無事自動起動するようになります。

なお別の話として、TvRemoteViewer_VB ver1.08以降では起動パラメーターに -dok と指定することで多重起動させることができます。(スカパープレミアム専用の環境を立てる、家族で配信元のフォルダを分ける、等の応用ができます。)
多重起動させる際はそれぞれのTvRemoteViewer_VB を上記バッチで

start "" "C:\BON\TvRemoteViewer_VB\TvRemoteViewer_vb.exe" -dok

と少し書き換えたもので起動してください。その上で片方の設定で、HTTPポート/UDPポートを40004/42425 のように別の値に変え、そちらのHTTPポートもファイアーウォールの設定に追加すればOK。片方はhttp://アドレス:40004/でアクセスできます。

TvRemoteViewer_VBが起動したら、そのPCのアドレス(ここでは仮に192.168.0.192 とします。)を使って、他のPCやスマホ/タブレットのブラウザからポート40003にアクセスしてください。
具体的はアドレス欄に
http://192.168.0.192:40003/
と入れて Enter を押します。
すると以下のようなトップメニューが表示される筈です。(まだブックマークしていない場合は、ここでブックマーク登録しておくと良いと思います。)

Trvnewtoppage0_3

ここで既に配信中のストリームがある場合はこのように

Trvnewtoppage3_2

下のタブが「ストリームサービス中」の表示になり、「表示」ボタンを押すと現在配信中のストリーム一覧が表示されます。
観たいストリームを一回クリック/タップして反転させ、もう1回クリック/タップすれば、そのストリームをすぐに視聴できます。

またTvRemoteFiles 1.77以降ではこの各ストリームの先頭にΘボタンが付き、これを2回クリックすれば該当ストリームを簡単に終了できるようになりました。

Stopbutton1

なお、TvRemoteFiles v1.51以前のバージョンでは、このトップ画面は次のようなデザインでした。、

Tvremoteviewer_web11

V1.52でデザインが大分リフレッシュされています。

以下の解説では「旧版」の画面のまま特に差し替えていないものも多いのですが、基本的な操作は一緒です。

iPhone等でも画面の広さが違うだけで操作は変わりませんが、iPhoneの場合はプルダウンメニューは、プルダウンはせず次のような選択画面になります。

Tvremoteviewer_web12iphone

この辺はiPhoneを使っている方にはお馴染みですね。

こういう微妙な違いはありますが、iPhone/iPad/AndroidでもWindowsでも同じような操作性を実現しています。(ブラウザベースですから当たり前ではありますが。)

なおTVRemoteViewer_VBの視聴のためには、ブラウザのcookieを有効にしておいてください。
cookieが無効でも使えない訳ではありませんが、端末側のカスタマイズを全く覚えてくれなかったりファイル再生で所有権が取得できなかったりで、いろいろと不便です。
現在のPC用ブラウザではcookieは(敢えて設定しない限り)大抵は有効になっていますが、iPhone/iPadやAndroidでは意図的に無効化されていたり、「訪問先のみ」というような制限付きの設定になっている場合があります。それらの機器を使う場合、以下のように設定されているか確認してみてください。

Cookie_ios iOS 設定→Safariの設定から

Cookie_andro Android ブラウザのSetting→Privacy&Security

また、スマホからアクセスする場合別の注意点ですが、スマホでカスペルスキーのようなセキュリティソフトが動いている場合、TvRemoteViewer_VBのようなプライベートサーバは見知らぬサイトと見なして、アクセスをブロックしてしまう事があるそうです。(トップページはアクセスできても、ストリーミング開始と同時にブロックされる等。)
そのような場合はセキュリティソフトの設定で、危険サイトブロックをOFFにしてお使いください。

他にモバイル系ブラウザで注意してほしいのは、設定で「ユーザーエージェントを弄って別のプラットホームのふりをする」ことが出来るブラウザがありますが、

Dolphinbrowserandroid Dolphin Browserの例

ここを弄てしまうと「プラットホームを判別してTvRemoteViewer_VBの操作系を最適化するロジック」が働かなくなってしまうので、そこは弄らず、AndroidならAndroid、iOS系であればiOS系が正しく選択されている事を確認してください。

2) 番組表からストリームを起動

使用していく上で最も良く利用するのは番組表からのストリーム開始だと思います。
使い方についてはまず、トップメニューで番組表のボタンを押してください。「トップページ-管理タブ」で「Rockバー型の番組表を使う」にチェックしておけば、次のような番組表が表示されます。

Newprogramtable1

観たいチャンネル/番組の行をクリック/タップすると、上の絵の「日テレ1」のように選択された状態になります。
これをもう1度クリック/タップすると、次のようなポップアップが表示されます。

Newprogramtable2

放送内容を確認のうえ、このまま視聴する場合は、ストリーム番号と利用するBonDriver、および解像度を選んで、[視聴]ボタンを押してください。
視聴しない場合は周りの暗いエリアのどこかをクリック/タップすればポップアップは消えます。

この時、どのストリーム番号とBonDriverを選択すれば良いかの手助けとして、既に他で使われているストリーム番号とBonDriverには頭に*が付き、使われていないもので最も番号の若いものがデフォルトで選択されますので、普通はこのまま視聴ボタンを押せば良いです。
(ちなみにBonDriverは複数回使えるタイプもありますが、そういう使い方をする場合は*が1個ついている状態のものを改めて選んでください。2回使われているものには*が2個付きます。)

.視聴ボタンを押すと、次のような「配信準備中」の画面になります。

Tvremoteviewer_1

この画面が出ている間、サーバ側で配信用のデータファイルを準備していますので、しばらくお待ちください。視聴ボタンを押してから約5~10秒で準備完了して視聴画面に切り替わります。

しかし、設定や指定が正しくないと何十秒経っても表示が変わらないか、場合によっては「配信されていません」と表示が変わったままになることがあります。

Tvremoteviewer__2

これは例えば、そのチャンネルの受信に適切でないBonDriverが指定されていたり、そもそも設定の問題としてスクランブル解除の設定がうまくできていない、デフォルト解像度が設定されていない、というようなミスがまず疑われます。いくつかのチャンネル/BonDriverでやっても同じ現象が起きる時は、設定を再度見直してください。

④ 視聴画面の操作について

無事配信が開始されれば、まずは標準のブラウザ視聴画面になります。

Tvremote_browserscreen
(右の実況勢いエリアは「実況」ボタンを押せば出現します。)

ただしスマホ/タブレットの場合、多くのブラウザでは「ストリームの開始は必ず人が介在する」 という暗黙のルールに従っており(無駄なデータ課金を避ける意図があるようです)、したがって動画は本来自動開始できず、動画エリアには最初、Tvremoteviewer_playbutton のようなボタンが表示された後、数秒で図のような大きなスタートボタンが表示され、これをタップすることで動画がスタートします。

Trvstartbutton1_2

この大きなボタンは日頃スマホ等をどのように持つかに合せて、出現位置をカスタマイズすることができます。(トップページ管理タブ)
Autostartsetting

但しモバイル環境でもブラウザによっては、自動開始をサポートしている=毎回スタートボタンを押さなくてもよいタイプもあります。ちょっと調べてみた結果はこちら。

Autostartmatrix3

iPad/iPhone のiOS環境ではiLunascape、AndroidではDolphin Browserが自動開始をサポートしています。ただ機種や回線速度によっては自動スタートできない事もありますので、その時はスタートボタンで開始してください。
特にiPad/iPhoneの場合iOS 9.x以降はタイミングにシビアで、動画読み込みが間に合わないと一発でスタートできない事があるようです。その際はちょっと待ってから、(スタートボタンタップ後に現れる)図のボタンを押してみてください。
Iosrestart

このような自動スタートにそれほど拘らないのであればお好みのブラウザが使えます。他の機能との兼ね合いもあります(例えばiPadのiLunascapeはPiPと相性が悪いという話もあります)ので、使い勝手の気に入ったものを選べば良いです。

他の基本設定として、AndroidやiOSの場合、デフォルト設定では動画再生にNative HLSプレーヤーをそのまま使うようになってますが、(トップページ管理タブで図の位置がチェックされた状態になっている)

Hlsrel1

このチェックを外せば添付の汎用プレーヤー(Projekktor)が動くようになります。
通常はAndroid、iOSの環境でProjekktorを使うメリットはありません。(但しFirefoxはNative HLSプレーヤーが使えませんので、デフォルトでチェックされていない=Projekktorを使う設定になっています。)
ただ、少し古いAndroidではProjekktorのほうが再生安定する場合があります。
もしAndroid 4.2x以前のバージョンで動画再生が安定しない場合は、上図のチェックを外してみてください。
.

さて動画を起動すると、iPhone の場合は、再生開始と同時に全画面表示になり、iPhone標準のビデオプレーヤーで視聴する形になります。仕様上動画のブラウザ視聴はできません。

Tvremoteviewer_iphone iPhone全画面表示
(上下のバーは数秒で消え、画面タップで再表示。これは他も同じ。)

iPad/Android の場合はブラウザ画面のままで再生開始します。

Nicotvremote_w_nico_ipad_2 iPadブラウザ表示

全画面ビデオプレーヤーの方が良いかたは「動画エリアの右下」をタップすれば、それぞれOS標準のビデオプレーヤー全画面表示になります。
全画面だと実況が流せないのが弱点なのですが、映像に集中したい時はこちらでどうぞ。

Tvremoteviewer_ipada2 iPad全画面表示

このタイミングで画面が止まっている時は、下のPlayボタンTvremoteviewer_playstart を押せば動画開始します。

なお回線状態が悪いと、映像/音声が時々止まったまま自動で再開しないことがありますが、そういう時もこのボタンを順に StopStopbutton PlayTvremoteviewer_playstart と押せば大抵の場合再開します。(ブラウザ視聴の場合も左下のボタンを同じように2回押してみてください。)

iPhone/iPadとも元のブラウザに戻る時は画面をピンチインするか、「完了」をタップしてください。
.

いっぽうブラウザ視聴ではPC/Mac/iPad/Androidとも共通で、以下のような視聴画面&操作になります。

Nicotvremote_w_nico_pcmain

画面構成はどの機種でも同じで、どちらかというとYouTubeの操作に近くなります。
下のコントロールバーは暫くすれば消えますが、マウスの軌跡によって消えないことがありますので、以下の絵もご参考に。

Funcbar

動画エリア右下のボタンを押すと全画面表示になります。但しPCで全画面視聴しようとすると、全画面化直後に右・下が欠けた状態になるかもしれません。
その際は動画が表示されているエリアのどこかを1秒程度の間隔を置いて2回クリックしてください。それで正しく表示されるようになります。

Tvremoteviewer_projekktor_a2

PCの画面操作にはこのようなちょっとしたクセがありますが、慣れの問題かと思います。

なおPC視聴の場合、TvRemoteViewer_VBサーバに最初にアクセスして全画面表示する時だけ図のような「許可」を求めてきますので

Tvremoteviewer_projekktor11Chrome
Tvremoteviewer_projekktor1Firefox

速やかに「許可」してください。それ以降の全画面視聴時には聞いて来なくなります。

全画面から元の画面に戻るときはEscキーを押すか、右下のTvremoteviewer_tonomalscreen をクリックしてください。

全画面表示は「ながら見」に不便で実況も表示できませんので、汎用的にはブラウザ視聴のほうがお勧めできます。その際動画サイズ調節機能としては「ズームバー」をご活用ください。
下のスクリーンショットのように視聴画面で「ZoomBar」のボタンを押すと、動画エリアの上にズームバーが表示されます。

Newzoom1
           ↓
Newzoom2

これをスライドさせていくことで、画面に合ったお好みの動画サイズに調整できます。
バーを操作しにくい時は ±ボタンで10%ずつの調整ができ、また Xボタンで100%に戻すこともできます。

ただAndroid端末の場合殆どのブラウザでは、動画入り画面(すなわち視聴画面)では、縦横の向きを切り替える度に全体が強制的に縮小表示される仕様になっているため、操作ボタンが小さ過ぎると感じるかもしれません。
そうなるのを出来るだけ防ぐためには、事前にZoomを使って動画サイズと文字サイズの差が大きくなり過ぎないよう調整しておくのがお勧めです。
全く別の対策としては、DolphinBrowserのように縦横入れ替えでも勝手に縮小表示されない(されてもワンタップで元に戻せる)ものもありますので、Androidでお使いの方は試してみると良いと思います。

DolphinBrowserの設定例
Andrdol1
Andrdol2 Iruka1

他に、再生中のストリームのURLを表示したり、外部プログラムと連携させる機能もあります。
URLボタンはデフォルトでは非表示になっていますので、

Urlstream

この機能を使いたいときはトップ画面・管理タブの「URLボタンの設定」で適切な機能を選んでください。例えば「ストリームURLを表示」を選んでおけば、以下のようにボタンが表示され、押すことで現在のストリームのURLが表示されます。

Nicotvremote_w_nicourlbtn1

Nicotvremote_w_nicourlbtn2

これは他の動画プレーヤーで視聴する場合を想定しています。例えばAndroid環境でMX動画プレーヤーなどで観たい、Mac環境で(こういう話もありますので)QuickTime X をテレビ代わりにして観たい、というような場合、ここからストリームURLをコピペすれば良いわけです。

また、ここを「ブラウザに渡す(アプリ選択機能前提)」または「MIMEタイプ指定でリンク」に設定すれば、URLボタンもそれぞれ以下のようなボタンに変わり

Urlbuttonalterd

これを押せばそれぞれの方法で、ブラウザ経由でのアプリ起動を試みます。
外部プレーヤーの連携ではHabit BrowserのようにURLのパターンで起動アプリを指定できるものは前者で良いと思いますし、標準ブラウザやChrome、Firefoxの場合後者の指定で、初回にこのストリーミング・タイプに紐づけて起動するアプリを選べますので、MX動画プレイヤー等に紐づけすることができます。

この機能はAndroid端末では元々こういう話があり、外部プレーヤーと連携させたいというニーズに対応したものです。

但しTvRemoteViewer_VB v1.03、TvRemoteFiles v1.04以降の組み合わせで利用すれば、このAndroid端末での再生問題はほぼ解決しますので、敢えて外部プレーヤーを利用する必要性は減っている筈です。
.

⑤チャンネルの切り替え

視聴画面で図のチャンネル名をクリックすればプルダウンでチャンネルが選択できますので、ここで選んで[視聴]を押せば、視聴中のストリームのチャンネルと解像度を切り替えることができます。(解像度だけの切り替えもOKです。)

Changingchanneldirectly

ただ、ここでのチャンネル切替えは一覧性が良くありませんし、各チャンネルで放送中の内容もいちいち情報ウインドウで確認することになります。
この辺のチャンネル切替えをもっと使いやすくするために、TvRemoteViewer_VB v1.05以降では、サイドパネル番組表の機能を付けました。

Sidepanelpg2

Sidepanelpg3

「番組表」ボタンを押すと、右側のサイドパネルに図のような番組表が表示されます。
ここに現在のストリーム(BonDriver)で視聴可能なチャンネルと番組の一覧がリアルタイムで表示されます。
この表示は3)の新番組表の仕様に準じます(但し局名とタイトルのみ表示)ので、詳しくはそちらを参照してください。

「番組表OFF」ボタンを押すと番組表は非表示となります。(もし実況ONの状態なら、隠れていた勢いカウンタと遅延時間バーが表示されます。)

Sidepanelpg

また上の図にあるように、番組表をクリック(タップ)してチャンネルを選択状態にすると(約10秒)、番組詳細が情報ウィンドウに表示され、選択状態のチャンネルをもう一度クリック(タップ)するとチャンネルが切り替わります。
その際にチャンネル切替えを実施するかどうか確認メッセージ

Confirmchchange

を表示することも可能で、これは「トップページ-管理タブ」で設定できます。

Sidepanelpgctrl

これをチェックしない(デフォルト)のほうがチャンネル切替えが素早くできますが、逆にタップ操作のミスの多いタブレット/スマホでは、チェックしたほうが「うっかり操作ミス」による意図しないチャンネル切替えが防げますので、却って使いやすくなります。この辺の設定はお好みでご選択ください。

さてHLS配信は仕組み上、TVチャンネル切り替えそのものは速くない(5~10秒)のですが、TvRemoteViewer_VBの場合、多ストリームの利用でそれを補うこともできます。
もしメインの番組を見ながら時々チェックしたい裏番組があるとか、いくつかのチャンネルをザッピングしたいという場合には、いちいちチャンネルを切り替えるのではなく、(チューナーの数にどれだけ余裕があるかによりますが)複数ストリームで観たいチャンネルを予め立ち上げておくと良いわけです。
複数ストリームが立ち上がっていれば、視聴画面では図のように表示されます。

Trvswcnl

ここで切り替えたいストリームを選択して「切替え」ボタンを押せば、ほぼ瞬時にそのストリーム視聴に切り替わり、まさにザッピングしている感覚になります。(機能上は並列配信数の制限はなく、MAX_STREAM_NUMBERで定義した数までの並列配信が可能です。)
この辺の使い勝手は多ストリームでの安定動作を目指したTvRemoteViewer_VBのメリットになります。

並列配信は実際に視聴していない限り回線の負荷にはなりませんが、TV放送をストリーミングする場合サーバ側はその間ストリーム数分のエンコードを常時おこなっているわけで、可能な並列数はCPUの能力と配信解像度に依存します。(配信解像度が低いほど負荷は低くなります。)

ちなみにうちにあるi5 3570Sのマシンを配信サーバにして実際に並列テストしてみたところ、解像度[320x180L]では8並列でもCPU使用率80%前後で問題なく配信、[640x360]では4並列で80%程度で5並列では100%に達しました。(ソースはいずれも地上波HD)
3570Sは4コアでミッドレンジの上程度の能力ですので、ご参考まで。
.

視聴が終わったら画面下の操作エリアにある「このストリームを終了する」をクリックすれば、現在のストリームを終了した上でトップメニューに戻ります。また「この」を「全ての」に替えれば、自分自身も含めた全てのストリームを終了させた上で、トップメニューに戻ります。
とりあえず視聴を中断するけれどストリームは維持したい、という時は「トップメニュー」をクリックするだけで良いです。

ストリームを維持しても他の画面に遷移すれば、他の端末で該当ストリームを観ていない限りは実際の配信は行なわれず、回線も無駄遣いになりません。但しサーバ側ではエンコードをずっと続けますので、その分のCPUを使い続けます。その辺の操作の選択は、使い勝手とサーバの余力で都度選べば良いです。

3)Rockバー型番組表について

さて、サーバーの基本機能て提供される番組表はベタに文字を並べたインターフェースなのですが、逆にスクロールが軽快に動く点で使いやすいと私は思い、最近まで改良を加えていませんでした。
しかし流石に一覧性の悪さや目的の番組を探すまでの時間が気になってきましたので、TvRemoteFiles V1.02では、「スクロールが速い」という長所を残しつつ、この番組表をRockバー風の機能のものに差し替えられるようにしました。

既にここまでで軽くご紹介済みですが、ここではこの番組表の使い方をもう少しご説明いたします。

Newprogt1

Rockバーと同じくリアルタイムに内容が更新されていきます(TvRemoteFiles V1.03以降)ので、開きっぱなしにしておけば今どの局で何をやっているのかが判りやすいと思いますし、後のほうにあるポップアップ起動の設定に変更すれば、この「Rockバー型」を常駐させた上で、視聴画面を毎回動画サイズに合わせた別ウィンドウで起動させることもできます。

またこの番組表フォーマットで、トップ画面にお気に入りチャンネル(番組表ポータル)を表示することや、視聴画面のサイドパネルに表示しながら、直接選局することも可能になっています。

これを使うにはトップ→管理画面で

Pgsetting

番組表設定のところで「Rockバー型の番組表を使う」にチェックをしてください。それで番組表を呼べば新しい番組表が立ち上がるようになります。

この新しい番組表はいろいろカスタマイズが可能です。その場合「番組表カスタマイズ」ボタンを押してください。すると以下のような画面がポップアップします。

Pgcustom

ここで設定した項目は、右下の「適用する」を押せば反映されます。

まず表示項目については、上にある「時間を表示」「詳細を表示」で選択できます。
画面が広い端末では両方とも「表示する」のままで良いと思いますが、スマホなど狭い画面の端末では

Newprogt2

このように「番組時間」を省略したほうが一覧性が良くなります。
番組の時間も判らないのでは番組が始まったばかりなのか終わる間際なのかも判らない、という声もあるかもしれませんが、実は「色」でそれを表すようにしました。大まかな目星は見た目で付けられます。

局名以外のエリアは指やマウスで左右にスクロールしますので、詳細情報は敢えて省かなくても、必要な時に右に辿って行って見ることができます。

(尤もPCであればモニターで充分横全部の情報を表示できます。)
Newprogt3_2

またマウス操作のPC/Macでは、番組名のところにマウスオーバーすれば最初の絵のように詳細情報がポップアップするようになっていますので、日頃はこれもRockバーのように縦長にして置いておくのも良いかもしれませんね。

さて、この番組表から観たい番組が決まったら、その行で一回クリック/タップしてください。すると行が反転しますので、

Newprogt4

この状態でもう1回この行をクリック/タップすれば

Newprogt5

開始指示の画面が出てきますので、ここでストリームを起動すれば良い訳です。

またこのポップアップ画面は番組内容の確認用に使っても有用です。(ポップアップエリア外の暗くなっているところをクリック/タップすればポップアップは消えます。)

なお、タップ操作のモバイル系の場合、あまり急いで2回タップするとダブルタップと見なされて(拡大/縮小など)別の動作をしてしまいますので、タップの間隔は気持ち1呼吸入れるのがコツです。(マウス操作の場合はダブルクリックでも構いません。)

この番組表の文字の色は、番組の進捗を表しています。
Newprogtprogress
(実装では一応色覚にハンデのある方でもわかるよう微妙な明度の差もつけたつもりですが、わかりにくい場合は教えてください。)

このように番組が進むに従って色が変わっていき、赤やグレーになった番組は今から見てもほぼ終わっているか、既に終わって(特にBS/CSの場合、番組時間帯の終わりは長い通販や番宣が入ることが多いですので)余り今からチャンネルを合わせる意味がないかもしれない、という意味になっています。(他に放送休止中や通販番組もグレーアウトします。)

次の番組は?

番組時間が残り9分以下になると、番組の表示はグレーアウトしますが、「詳細」欄には次の番組情報が表示されるようになります。

Nextprogram

Nextprogram2

次はどのチャンネルに行くか、迷ってる時のご参考にどうぞ。

番組表ポータル

他の便利な設定もご紹介します。
カスタマイズ画面の上にある「ポータル」Pgportalchk をチェックすると、トップ画面にも図のように番組表がリアルタイムに表示されるようになります。

Pgportalview

ここから直接視聴の開始も可能です。

ポータルに表示する放送局はカスタマイズ画面のチェックマークで選択できます。

Pgportalsetting

あまり沢山表示するとポータルの意味がなくなってしまうので、30局を上限にしています。
(それ以上はチェックできませんので、入れ替えたいときは不要な局のチェックを外してください。)

ちなみに番組表の下には以下のようなコントロールが付いています。(ポータル・各番組表共通で表示されます。)

Pgcolorsetting

これは番組表背景の色と明るさをカスタマイズするものです。
色は青緑赤の三色から選べます。

Pgcolor

背景は暗くすれば文字はくっきりしてきますが、あまり暗いと進行に合わせて変わる文字色の違いが判りにくくなる点はご注意ください。(明るめの背景色のほうが番組が終わりに近くなると背景に溶け込んでいく効果があるのと、全般に目にも優しいです。)

また、番組表の表示順もここで変更できます。
(サーバiniファイルでも表示順は設定できますが、ここでの設定はそれを上書きするものになります。)

Pgreorder

局の上でクリック/タップしていけば複数局が選択できますので、その状態で「上へ」「下へ」のボタンを押してください。選択した局が1つの並びになったうえで上下に動きますので、

Pgreorder2

気に入った並びになったら「適用する」で保存してください。

なお、(他の項目は端末/ブラウザ毎の設定ですが)この局の並び替えだけはサーバーで共通の設定になります。
これは表示量は端末毎の特性で変えたいのに対し、どの局を上に表示するかは端末によらない好みの話ですので、一箇所で変えれば全体に反映させた方が便利じゃないかという発想です。

以上が新番組表です。他にもいろいろなタイプを考えたりもしたのですが体力との兼ね合いもありますので、とりあえずはこの辺をうまく使っていただけると。

4)ニコニコ実況表示機能

視聴画面に「実況」のボタンが表示されている時は、ニコニコ実況を表示できます。

Nicotvremote_w_nico1nicobtn1
        ↓
Nicotvremote_w_nico1nicobtn2

① ニコニコ実況って何?という説明は今更不要かと思います。(こちらにもちょっとした説明があります。)
これがあると楽しい、という方にとってはなくてはならないものですし、邪魔という人にとっては大した価値もないものかもしれませんが、少なくともテレビの楽しみ方の新しいバリエーションかと。

この機能もここでは汎用的なブラウザのHTML5とAjaxの技術(のみ)を使って実現していますので、プラットホームを選びません。

Nicotvremote_w_nico_ipadnico これはiPad画面

但しブラウザの機能を使うため、全画面表示では使えません。現在ブラウザ視聴でもZoom機能によって好みのフレーミングで視聴できますので、通常は余り大した問題ではないのですが、iPhoneに限っては(全画面表示でしか動画を表示できないため)うまく使えないのがちょっと残念な所です。(但しiPhoneでの代替の楽しみ方も後ほどご紹介します。)

またスマホ/タブレットでは動画エリアにタップすることで操作する場合がありますが、コメントが流れている時は(コメントが動画の上に被っているため)うまく操作できない場合があります。その際は「実況OFF」のボタンを押してコメントを消してから操作してください。再度ボタンを押せば実況はまた表示されるようになります。

② さてリモート視聴、特にHLSを使う場合、リアルタイムの放送とはちょっと時差(遅延)がありますので、コメントの表示タイミングの調整が必要になる必要があります。その調整に使うのが右側に現れる「コメ遅延時間」のスライドバーです。

Nicotvremote_w_nicodelaybar

視聴開始時にはシステム側が計算してこの遅延時間を自動でセットしますが、このスライドバーを動かすことで、コメントのタイミングがずれていても、タイミングを合わせていくことができます。
小さな調整幅であればコメントもバーに合わせて前後に巻物的に動きますので、ズリズリ動かしながら調整していくと判りやすいと思います。

また、短い時間であれば動画は止めることもできます。(動画エリアの左下をタップ。)その際はコメント表示も連動して停止しますので、遅延時間がそれに応じて増えていきます。

遅延時間が60秒まで定義してあるのはこの意図的な動画停止による大きな遅延を想定しています。
なぜ60秒が上限かというとサーバ側が放送ストリームの場合、そもそも遅延が60秒弱までの分しか動画を保存していないためで、それ以上止めてしまうとそのうち不意に再生位置がジャンプして、結局60秒以内の遅延に落ち着きます。

ちなみにストリームを開始した場合には遅延も十秒台で、システムがセットする値との誤差も少ないのですが、
車輪の絵が回転しているバッファリング状態もきちんと検出して時間調整しますが、時々ストリームをうまく繋げられずに動画が止まっているような状態は検出できませんので、その時はスライドバーで遅延時間に加えてください。)
それに比べると既に存在するストリームを視聴する場合は、HLSの特性上開始位置が不確定で誤差が大きくなりますので、タイミングの判りやすい場面で大まかなずれの秒数を数えて、それで調整するとよいと思います。

③ 実況勢い表示

さて、サイドパネルには各チャンネルの実況勢いが表示されます。

Trendpanel1_2

BSや一部のチャンネルは勢いが0でない時のみ表示されます。またこのサイドパネルは番組表を表示している間は下に隠れますが、番組表OFFにすればまた現れます。

勢いが気になるチャンネルをクリック/タップすれば、10秒間だけそのチャンネルが赤くなり、情報ウインドウに現在のそのチャンネル(またはご視聴可能な系列局)の番組内容が表示されます。

Trendpanel2

その10秒の間に再度そのチャンネルをクリック/タップすれば、(使用中のBonDriverで切り替え可能であれば)そのチャンネルに直接切り替えることができます。

Trendpanel3

その際図のように確認メッセージを表示することもできますし、確認を省略することも出来ます。→設定方法はこちら

④ iPhoneでの実況機能利用

iPhoneは仕様上、HLSの再生は必ず全画面のビデオプレーヤーになってしまうため、このHTML5の仕組みを使った実況機能をそのまま楽しむことはできません。
ただ、もしテレビなどで別途視聴できる時は、iPhoneはブラウザ表示のまま、コメントプレーヤーとして使うこともできます。

Nicotvremote_iphone2

Zoom機能等を使ってコメントを見やすい大きさに調整した上で、下の⑤の図にある「プレーヤー停止中はコメントも停止」のチェックを外してください。テレビを観ながらiPhoneでコメントを眺める、という使い方が出来ます。

⑤ コメント表示エリアの制限、実況文字の不透明度、文字サイズの調整

トップページ管理タブに、実況表示関連の設定項目があります。

Jkparms

このうち「表示領域を制限する」の設定では、スライドバーでコメント表示エリアを調整することができます。(動画エリア上辺を0%として、コメント表示エリアを上下%で指定する。)
例えば動画エリアの上端にだけコメント流したいとか、真ん中から下のエリアにだけ流したいという場合には、ここで調整してみてください。

また「不透明度」の設定では、流れる文字の(不)透明度を指定できます。(100%で完全に不透過。数字が小さくなると透明度が高くなる。)
いわゆる「弾幕」で動画が全く見えなくなるのも困る、という方はここを調整してみてください。

更に現在のバージョンでは、実況文字サイズの変更ができるようになりました(標準サイズの0.4倍~2.4倍 0.2倍刻み)。動画サイズに対してコメントの大きさを変えたい時はここで調整してください。

⑥ 最大コメント表示数の調整機能(TvRemoteFiles ver1.14以降)

端末の能力を超えてコメントが大量に同時表示されると、コメントの流れのカクつくようになったり、映像もカクつくことがあります。

意外なことですが、コメント数が多い時の映像のカクつきはCPU性能控えめなAndroidやiOSよりも、Flashで動画再生をソフトウェアエミュレーションしているPCのほうが出やすい傾向があります。(映像解像度を下げると緩和されます。)
また後日サポートされたChromecastやFireTV Stickの場合、映像自体はH/W動画支援のおかげで元々スムーズなのですが、Javascriptの処理能力は限られているため、コメント数は絞らないとスムーズに流れなくなる他、あまり無理をさせると映像のほうまでカクついてきます。

またそもそも実況表示エリアを絞っている場合は、あまりコメントが多すぎても重なって読みにくくなるだけですので、ある程度絞ったほうが快適になります。

そこで、現在のTvRemoteViewerでは最大コメント数を、Chromecastのような性能の限られた環境ではデフォルト40、それ以外ではデフォルト120にセットした上で、これを10~360の間で調整できるようにしてあります。(それを越えた数のコメントは間引かれます。)
コメント数20程度だと大分寂しいものの負荷はかなり軽くなります。40ぐらいにすればちょっとした(100コメ/分ぐらいの)勢いでもカバーできますし、120もあれば、よほどの弾幕状態にならない限りは十分だと思います。
1000コメ/分のような弾幕状態をそのまま表示したい場合は、ここを200以上に(処理能力に余裕があれば)設定しても良いと思います。

この設定は実況サイドパネルの図の位置にある調整用スライダーで調整します。

Jkmaxmsg0

このスライダーを動かすとボタンに表示されている数字が赤くなりますので、

Jkmaxmsg

確定したい数字になったらボタンを押してください。するとコメントプレーヤーが再起動してシステムに反映されます。

コメントの負荷は表示だけではなく、単なる読み込みにも負荷もかかっていますので、同じ環境で同じ最大コメント数設定でも「弾幕状態」の番組では重くなります。したがって映像やコメントが重いと感じた時や、重なって読みにくくなくなった時は、都度ここを下げてみてください。

⑦ 実況がうまくスタート/表示されない時はコメントプレーヤーを再スタートしてみる。

どういうタイミングで起きるのかは何とも言えないのですが、実況がスタートされていて、実況サイドパネルも表示されてそこそこのコメントもある筈なのに、数十秒待っても実況コメントが全く表示されない事があります。(特にiPadで起きることが多い。)

そういう時は実況プレーヤーを再スタートさせれば復旧することが多いです。
やり方は、「⑥最大コメント数の調整機能」 のボタンを、スライダーを動かさずにそのまま押してみてください。すると単純に実況プレーヤーが再スタートします。
大抵はそれで実況表示されるようになると思います。

⑧ 投稿機能は保留

現在のTVRemoteViewer_VBサーバはプロキシ機能も持っているため、サーバを経由してニコニコにログインしてコメントを投稿する機能も容易に実現できると思います。

ただリモート視聴でのタイムラグを考えるとコメント投稿は(数秒先を読む「心の目」がない限り)いまいちノリの悪いものになる気がしますので、いまのところ実装の優先順位は下げています。現状ここはあくまで見て楽しむということで、投稿したい時は気合入れてTVTest+NicoJK等でタイムラグ無く参加するのが良いと思います。twitterと違ってタイミングに合せた”シンクロ率”がニコニコ実況参加の醍醐味ですから。

5)2ch実況表示機能

TvRemoteFiles ver1.14以降では2ch実況を流す機能が追加になりました。

Jikkyomix1

表示はニコニコ実況と一体化していますが、どちらがどちらのコメントか判るように2ch実況にはお好みの色を付けることができます。

Jkmsgcolor

またver1.22以降では、(2ch実況はこうでなくては、という方もいるかもしれませんので)色をランダムに付けるモードも追加しました。ランダムとは言っても一応同じIDの人のコメントは同じ色になります。

Random1

Random4

なおAndroidでHabit Browserからこの機能を使う場合、「設定→コンテンツ」 で「広告ブロックを利用する」をOFFにしてください。(ONだと2chで送ってくる広告データを検出して通信をブロックしてしまうようです。)

2ch実況を加えることのメリットは、(NHKやキー局の)局専用板があるのとは別に、BS、CS、野球/サッカー/スポーツ等のカテゴリー板や、いわゆるなんJ等もあってそれなりに実況民が集まる番組であれば必ずどこかに実況スレがある点です。

ただ逆を言えばニコニコのように放送局ごとの実況場所が決まっている訳ではないので、システムにとっては適切な板/スレを探す機能や、実況中のスレが1000レスに達して次のスレに移る時に(スムーズに次スレが立つと決まっている訳でもないので)それを自動で検知して適切な次スレに繋げていく機能も必要です。
あるいは局専用板でも番組が切替われば主スレが途中で切替わりますので、それらを想定した都度のスレ勢い計測も必要になるなど、いろいろと仕組みが必要になります。そういうことを考えながら開発にも時間をかけていました。
結果としてこのプログラムでは、一旦板/スレを選べばあとはほぼ自動で動きます。

2ch実況を開始するには、(ニコニコ)実況機能を開始したあと、実況サイドパネルに新しく追加された「2ch実況」ボタンを押せば、

Jikkyomix3

以下のポップアップが表示されます。

Jkpup1

この段階で主要キー局/系列局や、BS/CS/スカパープレミアムでも常設スレが立っているような局では上のようにデフォルトの板が表示されています。
が、そうでもない局やスポーツ専門チャンネルでは「板選択」とだけ表示されますので、

Jkpup2

まずはプルダウンで希望する板を選択してください。

Jkpup1boards

なお、デフォルトの板が表示されるチャンネルでも、野球/サッカー/テニス/競馬などは専用板の試合/チーム専用スレや「なんJ」スレのほうが活発に実況がされていますので、番組内容によってそちらも見て、勢いをチェックしてから選んだほうが良いと思います。

プルダウンでは局の特性によってできるだけ適切な板が上に来るように都度調整されています。

Jkpupsports スポーツ専門局でのプルダウン

Jkpuplocal 地上波独立局のプルダウン

地上波NHK/キー局で局専用板の実況を流す場合は、「■■ 自動選択 ■■」という項目があってデフォルト選択されています。

Jkpup1_2

その状態のまま「開始(あるいは変更)」を選べば、その板で最も勢いのあるスレを常に自動選択するようになります。(これを仮に「板指定モード」と呼びます。)

また、前回視聴時に実況ONの状態で終わっていれば、その端末で次にテレビ視聴する時も実況自動スタートの際に、「板指定・自動選択が使えるチャンネルであれば」、それが指定されたものとして自動で2ch実況もスタートします。

局専用板の無いチャンネル、また東京MXのように局専用板があっても殆ど機能していないチャンネルでは、この「自動選択」という選択肢はありませんので、希望する板とスレを選んでください。(但しかなりの数の局でデフォルト板とデフォルト起動スレの参考名がサーバーファイル「2chThreads.json」に設定されていて、とりあえずその設定で「スレ指定モード」の自動起動を試みるようになっています。)

またデフォルトの板が表示されているチャンネルでも、野球/サッカー/テニス/競馬などは専用板の試合/チーム専用スレやなんJのほうが活発に実況がされていますので、番組内容によってそちらも見て、勢いをチェックしてから選んだほうが良いと思います。

Ch1_2

「勢い測定」ボタンを押すと、(表示中のスレ一覧を取得した時点からシステムが最低10秒程度の間を置いた上で)増加したレス数を計算し、上図のように増加の多い順にスレが表示されます。これでどのスレが生きているか、適切に実況されているスレか、が判断できると思います。

ここからスレをクリックして選んだ上で「開始(あるいは変更)」ボタンを押せば、

Thrpower

そのスレを使った実況表示が始まり、そのスレが終了した後も

「最初に指定したスレタイにどれだけ名前が似ているか、またスレ勢いはどうか」

を総合的に判断しながら適切なスレを選んでいきます。(これを仮に「スレ指定モード」と呼びます。)
一度2ch実況をスレ指定モードで起動すれば、「その番組時間が終わるまでは」、サーバーに「チャンネル+指定した板/実況スレの紐付け情報」が記録されます。
この機能によって、他の端末に移ってそのチャンネルを見続けたい時や、一旦別のチャンネルを観た後でチャンネルを戻しても、該当の番組が放送されている間は指定したスレの実況が自動でスタートします。この辺は特にスポーツ観戦時に便利かと。

一応ご参考までにまとめると、2ch実況の自動スタートでは以下の3種類のロジックが働くことになります。
Thrselection_4

2ch実況ボタンの下には、2ch実況のステータスが表示されています。
実況開始時に「板指定モード」を選んだ場合、また上の3つのどれかのパターンで自動起動する際は、最初に図のように

Thrselect1

黄色の背景でスレ選択中、というメッセージが表示されます。この間は勢いを自動計測しながら最適のスレを選んでいます。
十数秒で最初の選択結果のスレが表示されます。そのとき5秒間だけ、新しく選択されたことが判るように背景が赤くなります。

Thrselect2最初の5秒間だけ赤い背景で表示される

Thrselect3その後は通常表示に。(スレが変更されればまた5秒間赤背景になる。)

実況中はコメント取得の度に、取得したコメント数がスレ名の頭に勢いとして(7) のように表示されます。これは10秒間のコメント数ですので、6倍すればニコニコの勢いと比較できます。

スレが1000レスに達したら再度背景が黄色くなり、次スレを選択していきます。

Thrchange1
        ↓
Thrchange2
        ↓
Thrchange3

10秒~20秒で次スレが選択されてほぼ切れ目なく実況継続していきますが、スムーズに選択される場合は黄色背景の「次スレ選択中」が表示されない場合もあります。

この辺のスレの選択は勢いの揺らぎもありますので、コメントがまばらな時や、実況開始/スレ切り替え直後の数十秒間は最適のスレが選ばれるとは限りませんが、大抵は暫く待っていればより適したスレが選択し直されますし、板指定モードなら番組が替って主スレが替っても数十秒で自動追尾されます。

ただしたまにスレ指定モードでスレ名称ががらりと変わってしまったり元々名称が単純すぎる場合、あるいは局専用板でないにも関わらず番組専用スレが次々に立つ場合には、システムがうまく次スレを選択できない事もあります。そういう時にはポップアップからスレを指定してください。
(特にNHK BS板は、利用するチャンネルがBS101、BS102、プレミアムと3局あるにもかかわらず「あまちゃん」のような番組専用のスレが立つため、デフォルト定義では番組の切れ目で追尾できなくなる事があります。そういう時には明示的にスレを指定してください。)

なお、仕組み上は複数スレが盛況だったり候補になる場合(例えば巨神戦での巨専/とらせん、なんJスレなど)それらを同時に流すことも出来るのですが、実況板に余計な負荷をかけない観点で、同時に流せるのは1スレのみという仕様にしています。どうしても複数スレを流したい場合は複数画面を立ち上げてください。映像が不要な時は0x0モードで映像offにしたり音声offにしておけば良いです。

Jikkyomix2

2ch実況サーバ・アドレスの変更があったときに追尾する機能

今まで普通に使えていたのに2ch実況が全く表示されなくなり、暫くするとメッセージ欄に「通信エラー」と表示される事があります。
これは2chサーバが落ちているケースが多いのですが、たまに2chのサーバが変更になっている事があります。
今年(2015年)6月にも変更されたことがあり、その際はプログラムのリリースアップで対応したのですが、使う側に立ってみれば予告なしにおこなわれるこういった変更のたびにリリースアップを待たなければいけないというのも心許ないと思います。

そこでTvRemoteFiles v1.63では、サーバ変更を検査して変更があれば反映する機能を追加しました。
トップページ管理タブで、以下のボタンが追加になっています。

Trv2chaddrchk

これを押すと暫くアドレスを検査したのち、もし変更になったものがあれば、以下のように変更されたものの一覧が表示されます。

Trv2chaddrchkresult

ここで「反映」を押せばマスターに反映され、以後どの端末も2ch実況を今まで通り使えるようになります。2ch実況が表示されなくなった時はここでチェックしてみてください。(サーバが落ちている時は「アクセスできません」と表示されますので、判別できます。)
.
以上が2ch実況機能です。使う上では特に難しいことを考える必要もなくニコニコと並ぶ実況機能として使えますし、2chの実況板の性格を知っていけば更に便利に使えると思います。
尚、2chに関しては2015年3月以降いろいろな話があるのに対して、この機能は「公開されているスレを1つだけ標準のブラウザで開いて10秒単位で前回スレ番以降をリロードしながら動画の上に流す機能」なので、専用ブラウザの「2ch.netウェブサイトの閲覧及び書き込みを可能にする専用ソフトウェア」という定義には当てはまりません。(その辺の議論には応じられませんのでご遠慮願います。)
但しapiもdatも使用していないとはいえ、いつまで使えるかも保証はできませんので、あくまで期限不定のテスト機能としておきます。

ただ使ってみれば判る通り便利なのは確かですし、そもそも2chはニコニコのようにリアルタイムにコメントを読み込むような仕組みになっておらず、無理にやろうとすると数百ミリ秒単位に新規コメントを読みに行くような負荷をサーバーに掛けることになります。(それを避けるためNicortなども数秒~十数秒遅れのコメント表示になっているわけで。)

それに対して、TvRemoteViewer_VBはもともと映像自体に放送から十数秒の遅延がありますので、それを逆用すれば2chからの読み込みも十秒程度の間隔でゆっくりやって充分間に合いますし、もともとニコニコ実況用に作った遅延時間バーを使って映像にぴったり合うよう調整することもできます。(仕組み上、ニコニコと2chのタイミングがずれることは殆どありません。) そういう面でも2ch実況との相性は非常に良いと思います。
(残念ながら投稿機能やログを取る機能は無く、その辺に立ち入ると問題になりますのでやる気はありません。投稿する時にはお好みの専ブラを使ってください、ということで。)

6)ファイル再生のストリーミング

TvRemoteViewer_VBには、放送中の番組だけではなく、PCに保管されているtsファイル、mp4、avi、wmvファイルなど、大抵のメディアファイルの再生を配信する機能があります。(但しISOファイル直接再生はNG)

この機能を使うにはトップメニューから[ファイル再生]を押してください。iniファイルの指定に従ったファイル一覧が出てきます。

Filelist35
(サーバ起動後の初回のみ、サーバー側リスト作成ためこの画面を開くのに数秒かかります。)

ここの機能も豊富なのですが、要はリストで再生したいファイル名をクリック(タップ)して、上のほうでストリーム番号、解像度を指定した上で「再生」ボタンを押すだけでファイル再生が始まります。

という感じで気楽に使える機能ですが、以下ではもう少し使いこなすための機能をご説明します。

① ファイルリストは端末の能力に合わせ徐々に増えていく。

TS抜きチューナーを使い始めて日が浅いうちは、対象になる録画・映像ファイルの数もせいぜい数百個だと思いますので、どんな端末であっても扱いは簡単です。
ところがこれが何年も経って映像ファイルも数千を超えるようになと、PCでは何とかなるのですがモバイル端末だとファイルリストを軽快に扱う処理が難しくなっていきます。

そこでTVRemoteViewer_VBでは、最新の50件ほどのファイルリストで素早くファイル操作画面を起動した後、Ajaxを使って徐々に古いファイルリストを追加していく、という手法を取っています。
追加していくうちに端末の性能上これ以上のリスト追加は無理、と判断した場合、そこで取得は打ち切ります。
(このような作りの副産物として、多量のファイルリストで何件まで読み込めるか、をjavascript処理能力の簡易指標に使うことも出来ます。→参考

この形で端末の能力に合せてリストが表示され、また取得し切れなかった場合も後述の③ の方法でファイル名検索が出来ますので、iniファイルの指定はあまり難しいことは考えず、家庭内LAN上にある動画フォルダ全てを登録しておくことをお勧めします。

なお操作上の注意点ですが、ファイルリストの追加中(10秒に1回程度)は、HTMLに追加分を組み込むために一瞬動作を受け付けなくなります。

Filelist2

タイミングが判りやすいようにリストの背景が青くなりますので、その間(1秒前後)無理な操作はせずお待ちください。

ファイルリスト取得が完了した時点で、右下は日付ではなく「全てのファイル」という表記に変わりますし、もし端末の限界で取得を打ち切った時は件数の前に*が付いて、いずれにしろそこでファイルリスト取得は終了します。

ファイルリストの更新

このファイルリストはサーバーがリクエストの度に最新のものを作ってくれるのではなく、定期的にサーバーが作成したものがソースです。その更新間隔が結構長いため、端末側で何度表示更新しても、なかなか新しく録画した筈のファイルが反映されないような時があります。
そこで端末側からのリクエストで強制的に最新のリストを作って送り直してもらう「最新リストに更新」というボタンを追加しました。

Refreashfilelist

このボタンを押すと少し待たされますが、サーバー側が最新のファイルリストを作り直して送ってくれます。
録画したばかりのものがなかなか反映されない、という場合はこれを押してみると良いと思います。

② サーチ機能/ソート機能

画面上のほうにある「Search」欄を使ったキーワード検索で、リストを絞り込むことができます。

Filelistsearch1

この検索機能は

・英数大文字/小文字/半角/全角を区別せず検索できる。
・複数キーワードの指定には半角/全角スペースで区切る。
・not(含まない)という指定にはキーワードの頭に-を付ける。
・ -1のような文字自体を検索したければ"-1"と囲む。

という基本のほか、インクリメント・サーチに対応していますので、「検索」ボタン不要で、キーワードを入力/変更する度に即座に検索結果が反映されていきます。

ただし完全にインクリメント形式にするとスマホ/タブレットでは却って操作性が落ちます(カナ漢字変換で一時的に入れたアルファベットや平仮名にいちいち反応してしまう)ので、キー入力の度ではなく、スペース/Enter/バックスペースキーを押すことで検索が更新されるようにしています。
何か検索結果が更新されていない、と思ったらとりあえずスペースかEnterを押してみてください。PCなら検索欄やSearchの文字をクリックしてもOKです。

またTvRemoteFiles 1.77以降では(処理系によりますが特にPCでは)検索欄に履歴がプルダウンされるようになりました。

Srchhist1

検索結果からストリームを起動したりプレイリストに登録をおこなうと、その際の検索ワードが履歴に追加されていきます。

また実は画面最上部の赤い欄は、現在選択されているファイルを判り易くするという目的の他に、キーワードのコピペ元という意味も兼ねています。(色も特にスマホ/タブレットで選択エリアが判りやすい色にしています。)

これを活用するには、キーワードとして使いたい文字列を含んだファイルを選択した上で、PCであればここからマウスでコピペして検索欄をクリックすれば良いですし、

Filelistsearchpc1

スマホ/タブレットなら希望のキーワード辺りでロングタップ後、エリアを選択してコピーし、検索欄でペーストしてSearchを2回タップすれば検索結果に反映されます。

Filelistsearchipad1

尚、赤い欄はスマホ/タブレットでコピー操作の対象になるように編集可能属性になっていますが、ここでうっかり文字列を消去/変更してしまっても何の問題もありません。(単なる表示エリアですので。) 再度正しく表示させたければもう一度下のリストで選択すればOKです。

また、「パス名も検索」にチェックすれば、ファイルが存在しているドライブ名/パス名/ネットワークパス名 も検索対象になります。(リストには表示されませんが。)

他に、下のほうにある「名前順」「日付順」のボタンでリストをソートすることもできます。

Filelistsort1

これは特にシリーズ物の一覧を出したい時に便利だと思います。
現在選択中のファイルはソートしても必ず真ん中辺りにくるようにリスト位置が調整されます。リストの先頭に戻りたい時は「先頭行へ」ボタンを押してください。

このような検索機能を活用することで沢山のファイルの中から観たいファイルを探して再生するのが簡単になりますし、結果をプレイリストに登録すれば、毎回検索する必要もなく観たいファイルを順番に再生できるようになります。

リストを取得し切れない場合は「絞込み再ロード機能」を活用する。

①で説明のように対象ファイル数が多くなると、あまり速くないスマホやタブレットでは(たまに観たくなる)古いファイルがなかなかリストに出てこず、そのうちにリスト取得が打ち切られてしまう事もあります。
そういう場合は観たいファイルのタイトルがどういうものか大体判るはずですので、余り待たずに「絞込み再ロード」の機能を使って、サーバ側で予め絞り込んだファイルリストを送ってもらうことで、希望のファイルリストを素早く取得できます。

この絞込み機能の使い方は以下の通りです。

最初にファイル一覧を開いた状態です。右下に「キーワード絞込み再ロード」のボタンが表示されますが、有効になっていません。
Filelistselectedload1

ここで検索欄に観たい(昔録画した)ファイルのキーワードを入れ、EnterかSpaceを押して検索更新してみますが、まだその日時のファイルリストは取得されていないため、何も表示されません。
Filelistselectedload2

そこで(キーワードを入れた時点で「キーワード絞込み再ロード」のボタンが有効化されていますので)そのままの状態で「キーワード絞込み再ロード」ボタンを押してみます。
すると、そのキーワードがサーバに送られ、しばらくすると結果のリストが以下のように表示されます。この場合リストは日時で分割ロードされず、条件に合致するものがファイル日付に関係なく一挙に表示されます。
Filelistselectedload3

ここから希望のファイルを選んで再生スタートすれば良いわけです。

右下には絞込み件数が表示され、また絞込みを解除して元の全体リストに戻りたい時は、「絞込み解除して再ロード」のボタンを押せば元の全体リストに戻ります。
観たいファイルのキーワードが判っている時は、この機能を使って目的のファイルがすぐに見つかると思います。

但し(この絞込み再ロード機能はサーバ側の簡易な検索機能を使いますので)以下のような弱点もあります。うまくリストが表示されず空欄になってしまう時は、一旦絞込み解除した上でキーワードを変えてリトライしてください。

・キーワードは端末側サーチ機能と違って、 英数大文字/小文字/半角/全角を区別しますので、それらは正しく入れる必要があります。
 例えばMLB とMlb、MLB は区別しますので、ファイル名と同じものを正確に入れる必要があります。 またnot条件(-XXX)はサポートしていません。
・ブラウザの再ロードボタンを押しても、全体リストには戻らず絞込み状態のままになる。
 ページ移動せずに全体リストに戻りたいときは、ブラウザの再ロードではなく「絞込み解除して再ロード」ボタンを押してください。

なおこの「キーワード絞込み再ロード」ボタンは、全ファイルのリストを取得した時点で消えます。画面に表示されないかあっという間に消えてしまう、という方は十分に速い端末を使っていると思いますので、そもそもこの機能は不要かと思います。

④ フォルダ・ビュー(保存場所で絞込み)

TvRemoteFiles ver1.20 以降ではファイルの保存場所で絞り込む機能も追加になりました。
図のような「保存場所で絞込み」のチェックボックスが追加され、チェック状態にするとファイルリストの左側に図のようなフォルダリストが表示され、クリックして選択することで、そのフォルダ下に保存されているファイルだけが表示されます。

Folderview

「保存場所で絞込み」のチェックを外すか「TOP」をクリックすれば絞込みは解除されます。

エクスプローラーでファイル一覧を表示しているイメージに近くなり、フォルダの先頭の[+]をクリックすれば一階層下のフォルダ一覧が表示され、[~]をクリックすれば下の階層は隠れます。
ただしエクスプローラーと違う点は、

(1) コンピュータに存在する全てのフォルダではなく、表示対象の映像ファイルがあるフォルダだけが一覧になっている。
(2) 選んだフォルダの下位の階層に存在する全ての映像ファイルが表示される。(エクスプローラーでは直下のファイルのみ)

特に(2)は映像ファイルを扱う上ではこちらのほうが便利と考えていて、この辺のポリシーはWhiteBrowserを参考にしています。つまりファイラではなく映像データベースに近く、フォルダ名もあくまで絞込みキーワードの一種という扱いになっています。

⑤ ファイル再生開始

以上のようにして選択したファイルは、上の「再生」ボタンを押すことで再生スタートしますが、この際に指定するストリーム番号/解像度などの選択は、番組表の操作と殆ど同じですので、適切なものを選んでください。

Playfilestart

ここで「開始シーク位置」は番組表にはない指定ですが、これは映像ファイルの先頭から指定秒数だけ経った位置から再生する、というパラメーターです。(ちなみに秒数だけでなく、15:30 のような分:秒形式 の指定もOKです。)
ファイル再生直後は下にあるように再生位置の変更ができませんので、これは特に先頭がCMや番宣であると判っていて時間も概ね判る時にそれらをスキップする、という使い方に便利です。

またストリーム番号は空いているものが自動選択されていますが、これも番組表からの起動と同じように、既に使われているストリーム番号をわざと選んでそこにある既存のストリームを「潰して」、そのストリーム番号を再利用する、という使い方もできます。
ファイル選択画面の場合最下行に、各ストリームの概要が判るボタンが付きますので、

Filelist36

ここで現在動いているストリームの状況を確認できます。
(もちろんボタンを押すことで、それらの視聴画面に直接ジャンプすることも可能です。)

なおファイル再生ストリームのボタンはストリーム番号の後に F の文字、その後にファイル名の先頭数文字、という表示がされますが、これは他の画面でも同じルールです。(文字数は画面によって違います。)

以上でファイル選択画面の説明は終わりで、これ以降では実際の再生画面をご説明します。

⑥ ファイル再生画面

(1) 一般的な使い方

ファイル再生の画面構成もテレビ視聴の場合と殆ど同じで、「チャンネル切替え」関連のボタンが無いかわりに「シークボタン」が付いて、また下のほうに(再読み込みボタンではなく)「再読込操作ボタン」が表示されるぐらいの違いです。

Filestream1
中ほどにあるストリーム一覧ではストリーム番号の後に「F」が表記されて、ファイル再生とわかるようになっています。

ファイル再生がテレビ視聴と違うのは、好きな所に飛んだり戻ったり、あるい途中で止めたあと一仕事終わってから続きを見る、というような事が出来るわけで、シークボタンはその「飛んだり戻ったり」の機能になります。
具体的には好きな所にジャンプしたり、CMになったら1~2分程飛ばしたりすることができます。

また、ファイルの再生位置はストリームが維持されている限りはサーバーに記録され続けていますので、別の端末で視聴を渡り歩いても、同じストリームの再生シーンは引き継がれます。具体的にはスマホやタブレットから外で途中まで見て、家に帰ってからPCで続きを見る、(あるいはその逆) という視聴の流れが、特に意識することなく自然に実現されます。 一種のクラウド型サービスになるわけです。

Photo

またその際に

 「スマホでは帯域も限られるので低めの解像度で観る」  「PCでは高解像度で観る」

というような切り替えが都度できると便利ですが、その機能が「再読込操作ボタン」に割り当てられています。
下のほうにある「再読込操作」ボタンを押すと図のようなポップアップが表示されますので、

Popup

ここで「今の場所から再開」のままで解像度だけ変更すれば、視聴中のシーンから解像度を変えて鑑賞を継続できるわけです。

ファイルの再生位置をストリームを維持している間だけではなく常に覚えていてくれると更に便利ですが、とりあえず一般のファイル再生では、映像を続けて鑑賞したい場合はストリームを停止させずに維持してください。(エンコード済みになればストリーム維持しても殆ど負荷はかかりませんし。)
再生位置をストリームの生死に関係なく常に記憶しておくには 6) のプレイリスト機能を使います。

(2) 「エンコード進行中」 と「エンコード済み」の違い

HLSストリーミングでファイル視聴する仕組みが放送視聴の仕組みと一番違うのは、サーバー側がエンコードをどんどん先に進めていって、エンコードが完了するとプレーヤーの振る舞いが変わる点です。

HLSのプレーヤーは「エンコード進行中」には殆どの細かい操作ができず、作られていくストリームデータを決められたロジックで再生することしかできません。どこを再生するかをユーザー側は指定できず、エンコード進行中にページを離れて暫く後に視聴再開すると、再生位置は最新のエンコードデータの辺りに移動してしまいます。
(この辺の作りを見るとHLS再生の仕組みはもともとはライブストリーミングを想定して作られていることが伺えます。)

エンコードが完了すればプレーヤーの機能でシーク操作ができるようになりますので、普通のファイルをメディアプレーヤーで再生するのと同じような操作性になるのですが、そうなるまではストリームを開始してから性能の良いサーバでも数分(30分番組で3~4分)は待たなければなりません。
この辺の制限について改訂前の記事ではいろいろ注意点を書きましたが、ファイル再生がいま1つ使いにくいと感じる原因になっていたのではないかと思います。

この制限を取り払うために、現在のバージョン(TvRemoteFiles v0.64U 以降)ではサーバ側(TvRemoteViewer_VB v0.96以降)の機能を使って、エンコード進行中であってもプレーヤーに頼らずにシークできるようにしました。

それでも 「エンコード進行中」 と「エンコード済み」 の状態では操作にいくらか違いがありますので、ここではそれも踏まえて説明いたします。
エンコード進行中とエンコード済みの状態でのシーク動作の違いは以下の通りです。

Seekinglogic
(なお一部の生tsファイルでは経過時間を計算するための構造が壊れているものがあり、左のサーバー側でのシークはうまく使えず、やろうとすると常に最初に戻ってしまうものがあります。そういうファイルではエンコード終了して右側の状態になるまでシーク操作は待つか、一旦mp4にエンコードして欠陥を取り除いたファイルを使う必要があります。 また一部の古いAndroidでは「エンコード終了後のシーク動作」が未実装のため、ずっと左の状態のままのものもありますが、ご了承ください。)

左側のエンコード進行中は、シークや再読み込みを実行するたびにストリームの再起動をおこないますので動作のタイムラグがあります。ただしファイル再生ストリームの再起動は放送ストリームと比べて仕組みが単純で速い(数秒程度)ので、十分実用的に使えます。
右側のエンコード終了状態になると、シークや再読み込みはプレーヤーの機能のみでサクサク反応するようになります。(但し回線速度が遅いと、シーク位置の頭出し動作のためにやや時間がかかる事があります。)

このような振る舞いの変化がありますので、シークボタンはエンコード進行中とエンコード済みで以下のように変わります。

エンコード進行中
Seekbtn1(右側に青い帯が付きます。)

エンコード済み
Seek2sft(エンコード終了したがプレーヤーが未認識の状態)

 ↓ (iOSでは自動的に切り替わります。PC、Androidでは赤丸部を押せば切り替わります。
   また「リモコン操作モード」の場合はPC/Androidとも自動的に切り替わりますが、その際プレイヤーをリセットするため一瞬画面が暗くなります。)

エンコード済み。プレーヤー認識済み。
Shift1

.
最初のエンコード進行中のシークボタンでは、押した分の時間を加(減)算したものが青いボタンに表示され、

Seekbtn2

これを押すことでシークが実行されます。

シーク動作にストリーム再起動が伴うため、例えば10分移動するのに5分ボタン2回押して2回シーク動作させていると非効率です。よってこの状態でのシークは、必要な分をまとめてから実行させるわけです。

また+の時間でシークすると一旦以下のようなメッセージが表示される事があります。

Seekbtn3

これはファイルの全時間がまだ判らない時に時間を加算する方向のシークをする際のメッセージで、全長を越える時間指定だとストリーム起動が失敗する、という問題を避けるための確認です。十分判っていてもうっかりやってしまうことがありますので、毎回の確認が有用と判断しました。
(観てる方はこれが30分番組なのか1時間番組なのか程度はだいたい判ると思いますので。)

なお、このようにエンコード進行中のシーク動作は原則ストリーム再起動を伴いますが、最新版のTvRemoteViewer_VBでは一部の環境(iOSやWindows10のEdgeなど)で、この条件でも一定範囲内で軽快なシーク動作が可能になりました。あとでこちらの記事も読んでみてください。

一方エンコード終了すれば、シークボタンを押すと右側に以下のように数字が表示されるだけになり

Shift2

最後にボタンを押してから2秒でシークが発動します。これはプレーヤーの機能のみでシークしますので、待ち時間は殆どありません。(リモート環境でビットレート/回線速度に余裕がない状態だと数秒かかるケースはあります。)

2秒以内の間隔で複数回ボタンを押せば押した分の時間がどんどん加(減)算されていきますし、押す度に発動まで2秒の猶予が与えられますので、その間に必要なボタンを順に押していけば良いわけです。
(モバイル系端末では、あまり急いで連続タップするとダブルタップとみなされて、画面の拡大/縮小など余計な動作をしますので、トン・・トン という感じの間を置いてタップすると良いです。)

この辺は本来はTvtPlayのようにボタンを押す度に即シーク実行する形でも良かったのですが、プレーヤー機能のシークをいろいろテストした結果、HLSプレーヤーの場合次のシークコマンドを受け付けるまで暫く時間がかかることが判りました(無理にシークを連発するとハングがありえます)ので、連続シークするよりも予めまとめたほうが良いと判断した次第です。

実際特にモバイル系の場合、シーク実行後しばらくシークボタンの文字がかすれてボタン操作を受け付けなくなるタイミングがありますが、

Shiftinactive

これはまだ次のシークを受け付けない状態を示します。数秒待てば元に戻りますので、追加でシークしたい場合は一寸だけ待っていただければ。

・サムネイル機能

最新版(TvRemoteViewer_VB v1.55以降+ TvRemoteFiles 1.49以降)では、このシークおよびチャプタ移動の際にサムネイルを表示できるようになりました。

Thumb1

シーク先を予めサムネイルで確認できますので、よりクイックに希望する場面に移動することができるようになります。

この機能は図の、「サムネイルON/OFF」ボタンで有効/無効化できます。
無効の状態では従来通りの動きになりますが、有効化した場合、指定したシーク先の映像(静止画)が図の位置に4秒間だけ表示されます。
その際再生ファイルがエンコード完了していても従来とは違い、シークが自動的に(2秒後)発動する事はなく、シーク秒数が緑のボタンで表示されます。
サムネイルを確認してOKであればこのボタンを押すことにより、シークが発動します。

(3) ファイル再生ストリームの所有権と監視機能について

現在のファイル再生ではこのように再生位置合わせのためのストリーム再起動を多用しますが、複数画面で同じストリームを思い思いに再起動できてしまうと収拾がつかなくなりますので、ストリーム再起動をともなう操作ができるのは1つのストリームにつき1つの画面だけ、というルールにしました。

Ownership1
(基本TvRemoteViewer_VBは個人用途なので、複数端末で同じストリームを同時に観るというケースは少ないと思いますが。。)

他の理由として、ストリームのエンコード途中に再生位置を正しく把握できるのは現在のストリームを起動した画面だけ、という理由もあります。(エンコード中に途中から視聴を始めた画面は再生開始位置が不定なので、「ストリーム起動位置+Play時間」で正しく再生位置を計算できません。)
したがって正しく再生位置を記録していく上でも、今のストリームを開始した画面に所有権と再生位置記録の義務を与えています。

所有権は図のように引き継がれていきます。

Ownership2

再生位置は所有権付与と同時に最後に記録された位置に調整されます。 (その時点でエンコード未了ならストリーム再起動で位置合わせしますし、エンコード終了していればアクセス直後にプレーヤーのシークが発動します。)

このような仕組みで、視聴を中断したり他の端末に変えたり、途中で解像度や音声チャンネルを切り替えたりしても、再生は正しく継承されるわけです。

この引継ぎがスムーズにおこなわれるように、視聴を中断する際に内部的に「所有権の返上」という処理がおこなわれます。
これによって次にそのストリームを開く画面は速やかに所有権を獲得し、まだエンコード中の状態であればストリームの再起動をおこなって位置合わせするようになっていますが、視聴中断のやり方によってはこの「所有権の返上」がきちんと行われない事があります。

所有権が返上される所有権は返上されない

ファイル再生画面からトップメニューに戻る。

ファイル再生画面から番組表やテレビ視聴画面等に移る。

ファイル再生画面を開いたまま放置。
 (この場合は閉じない限り所有したままになる。)

ファイル再生画面を開いたままブラウザを落とす。PCを落とす。

ファイル再生画面から他のサイトに直接移動。
 (移動後、1分以内にトップメニュー等に戻れば返上される。)

こういう動作ルールがありますので、視聴を中断する時は、視聴画面を開いたままブラウザを終了させるのではなく、トップメニューなど他の画面に移ってから終了させるのがお勧めです。

所有権が返上されていなくても所有者の生死はどの画面でもモニターしていますので、ファイル視聴画面を開きっぱなしでない限り、「所有者がいなくなる=所有権をもった画面が別の画面に遷移したり落ちてしまえば」、ハートビートが更新されなくなったのを検知して、2分ほどで所有権を剥奪します。
但し再生位置は正しく中断処理しなければ中断時のものが記録されていませんが、中断処理されていなくても再生位置は必ず20秒置きに記録されていますので、直前のものまで遡るだけです。

端末側の画面にはこういう監視モニターとしての機能もありますので、サーバ側でも監視のために常にブラウザからトップメニューや番組表を開いておくのがお勧めです。(監視機能は今後プレイリストの管理のためにも重要です。)

Monitoringbrowser
 (こんな感じでサーバでもトップメニューか番組表を監視機能として常に起動しておくのがお勧め。)

もちろんサーバ側の画面が立ち上がっていなくても端末側で画面を開いた瞬間に監視機能も働き始めますが、所有の返上がないままのストリームを次の画面がいきなり開いた時はスムーズに所有権が引き継がれず、2分ほど所有権がない状態になり、再生位置の調整ができません。ここはちょっとした注意点になります。

(4) シークボタンのカスタマイズ

シークボタンは\HTMLフォルダの seekbutton.json というファイルに定義してあり、数やシーク秒数をカスタマイズ可能です。

Seekbutton

注)内部的に利用しているjson読み込み関数があまり高機能ではないため、コメントや文法の誤りがあると読み込めません。カンマの打ち場所等も間違わないようにしてください。また全角文字はUTF-8でないと正しく読めないので、全角を使う時はサクラエディタ等の利用がお勧めです。
.

7)プレイリスト機能

ここではTvRemoteFiles v1.00 で追加した「プレイリスト機能」をご説明します。

プレイリスト機能はファイル再生の拡張ですので、基本的な操作は前節のファイル再生機能もご参照ください。

プレイリストになると便利になる点としては、シリーズ物や観たい録画を順に登録しておけば自動再生していくので「ながら見」に最適、という点は勿論ですが、機能的にも次のようなものが使えるようになります。

・ ファイル再生と同じくプレイリスト再生状態もサーバに記録されるので、外出先と家で端末を変えながら続きを見ていくことができ、途中で解像度を変えればそれも引き継がれていく。

・ 更にプレイリストの再生位置はストリームを終了しても保持されるので、一度作成すればいつでも観た所の続きから観ることができる。

Plinitcontinue1

これは単体ファイルでも結構有効なので「ファイル1個だけを登録したプレイリスト」という使い方もあります。

・ 再生時に横にプレイリスト一覧を見ながら再生ファイルを切り替えたり、少し覗いてすぐに元の再生位置に戻す、という事もできる。

Pllist1

・ 「サブストリーム」を使って、再生しながら裏で次のファイルもスタートさせてエンコード終了させる機能を実装した。
これによってリストのファイルをスムーズに切り替えながら、切り替え直後から再ロード不要の素早いシークができるようになります。

・ 各ファイルに開始オフセットだけでなく、終了オフセットを設定できる。

特にBS/CSの番組では本編終了後にまとめて長い番宣や通販番組が入りますが、その時間を予め終了オフセットで省いておくことで、後ろの長いCMを飛ばしながら連続再生できます。

おおまかには以上のような特長があります。と言っても使っていくうちに判ると思いますので、まずはクイックに利用する流れをご説明します。

① クイックスタート

「ファイル再生」画面で「プレイリスト」タブを押すと、図のように赤い背景のプレイリスト画面が表示されます。

Pl1a

・ プレイリスト作成

ここで「新しいプレイリスト」の先頭にある「+」ボタンを押せば

Pl1_new

プレイリスト作成/編集モードになり、また下のファイルリストにはそれぞれの先頭に「+ボタン」が表示されます。これを押していくことでプレイリストにファイルが登録されていきます。

Pl1_new2

登録直後は図のように選択状態になっていますので、ここで「1つ上へ」「1つ下へ」ボタンを使って再生順を好きな所に移動できます。

ファイルをクリック/タップすれば選択⇔非選択と変わり、複数選択も可能、また「選択解除」ボタンで全て非選択にすることが出来ます。(うっかり目的外のファイルを移動しないよう、何かの操作の前に都度「選択解除」するのは割と重要です。)

プレイリスト先頭のΘは削除のボタンです。

Pl1_delete1

これはうっかりタップで削除しないよう2回押す必要があり、1回目で「削除」候補の表示に変わり、これをもう1回押すことでリストから消えます。

Pl1_delete2

「削除」候補状態のまま放っておいても何も起きませんが、うっかりもう1回タップすると削除されますので、この状態を取り消すにはボタン以外の文字部分をクリック/タップしてください。

リストが作成できたらタイトルの欄にプレイリストの名前を入れてください。

Pl1_new5
(ここが空欄の場合でも先頭のファイル名を元に名前が付きます。)

以上で「保存」ボタンを押してください。

これでプレイリストが1つ登録されました。

Pl1_new7

この状態で先頭の「Edit」ボタンを押せば編集画面に戻りますので、追加・変更がいつでも可能です。

・ プレイリストの再生

さて実際にこれを再生してみます。このリストの名前部分をクリック/タップすれば選択状態になりますので、選択したうえで「選択したプレイリストを再生」ボタンを押してください。

Pl1_play1

すると図のような再生指定のウインドウがポップアップします。

Pl1_play2

ここで再生ストリーム、解像度、どこから再生するか、再生順、を選択してください。

Pl1_play3

ここで選択した再生ファイルや解像度・再生順の設定は視聴画面でいつでも変更でき、

(例えば解像度の変更は通常のファイル再生と同じく、「再読込操作」ボタンで可能です。)
Pl1_edit3

変更した解像度等の設定は以後も引き継がれていきますので、ここでの指定は「とりあえず」のもので構いません。

以上で「再生」ボタンを押せば、プレイリスト再生画面が起動します。

Cosmos1

特に普通のファイル再生と変わらないように見えますが、良く見ると自分のストリーム表記の先頭に、ファイル再生の「F」ではなく「PLxx」とプレイリスト番号が付いており、また「プレイリスト」というボタンが加わっています。

この「プレイリスト」ボタンを押すと、右側にプレイリスト情報サイドパネルが出現します。

Cosmos2

プレイリスト情報のサイドパネルを開いておけば現在の再生位置が判りますし、またここから別のファイルにジャンプすることも出来ます。

Pl1_play6

ただ、ここから簡単に他のファイルに飛べるのは便利なのですが、反応の遅いタブレットやスマホで操作する場合、リストをスクロールするつもりがうっかり2回タップして再生が切り替わってしまう、という誤操作が発生するかもしれません。
(タップのインターフェースはこのような誤操作を起こしやすいところが弱点だと思いますが閑話休題)

このような誤操作を抑止するために、トップ画面の「管理」タブで「切替え確認メッセ―ジの表示」を設定できます。→設定方法はこちら

これをチェックしておくと、サイドパネルから再生ファイルを切り替えようとした際に図のような確認メッセージが表示されるようになります。

Pl1_play8

ここで意図せず再生が切り替わりそうになった時はキャンセルすれば良いわけです。
私が自分で使ってみた限りでは、PC(つまりマウス主体の操作)や動作の軽快なタブレットではここはチェックしない、反応の遅めなタブレットやスマホではチェックした方が使いやすいと思います。

以上が大まかな操作になります。

ちなみにプレイリストの再生も通常のファイル再生と同じく「所有権」が必要になります。所有権の無い状態でプレイリストを観ようとすると、図のように

Pl1_notowned

エンコード中のシークボタンが無効化されており、また図のように「プレイリスト」ボタンが無く、実況情報表示ボタンだけになっています。
逆にプレイリスト再生している筈なのにプレイリスト関連の機能が一切使えない、という時は所有権がないことになります。

他の画面が再生している場合はそちらを終了させてから視聴画面を開くかリロードすれば、所有権が取得され、通常の操作が出来るようになります。

また直前の視聴が綺麗に終わらなかった場合も所有権がすぐに取得できない事があります(特に監視画面がどこにも動いていない場合)
そのような場合は2分程度待ってから再度視聴画面を起動するかリロードすれば所有権が獲得され、正常にプレイリストを操作できるようになります。

② プレイリストの編集

さて、もう少しプレイリストを作り込んでみましょう。

・ プレイリスト一覧で各プレイリストの先頭にある「Edit」ボタンを押せば編集モードになり、中身を弄ることができますが、この際一覧で、「再生中」や「待機中」となっているものは現在ストリームに存在しているプレイリストで、これらは(動作がおかしくなるのを防ぐため)編集できないようになっています。

Pl1_play9
(ちなみに「再生中」はどこかの画面が所有して再生している最中、「待機中」はストリームに存在しているが誰も再生していないものになります。)

これらを編集したければストリームを止めてしまえば良いのですが、止めたくない場合はリスト上で「COPY」ボタンを押せば、

Pl1_dup1

全く内容の同じプレイリストのコピーができますので、これを改めて編集して利用する手もあります。
コピーしたプレイリストは最新の再生位置情報も含めてコピーされます。

Pl1_dup2

・ 編集画面ではファイルの追加、削除、ファイル名でのソート、並び替えができます。

ファイルを追加する場合、既に該当プレイリストに登録済みのファイルは重複登録できません。
この辺はiTunesの仕様と同じなのですが、要はプレイリスト上のファイルはリスト上の番号ではなく、あくまで「ファイル名(フルパス)」で判別しますので、1つのプレイリスト上でファイル名はユニークでなければならない、という仕様のためです。

ただ一旦作成したプレイリストを改めて編集する場合、下のファイル一覧には登録済のファイル情報は(パフォーマンスの観点で)反映しておらず、全てのファイルに「+」ボタンが付いています。ここで既に登録済のファイルを改めて登録しようとしても図のように

Pl1_new3

「+」ボタンは消えずに「X」マークに変わり、既に登録済なのが判るようになっています。

・ ファイル編集中に別の画面に移動したりリロードボタンを押すと編集中の状態は破棄されますので、一旦保存するよう注意してください。

ただし、編集中にファイルリストがまだ全部取得出来ていない状態で、「キーワード絞込み再ロード」 および「絞込み解除して再ロード」でファイルを探せると便利なので、この操作は編集中にも使えるようになっています。(編集中に絞込み再ロードしても、編集中の状態はそのまま維持されます。)
古めのファイルをプレイリストに加えたい時にご活用ください。

・ 編集リストを右にスクロールしていくと、図のような入力/選択欄が現れます。
Pl1_edit1

ここの開始オフセット、終了オフセットを指定しておけば、再生開始は先頭からのオフセットでシークしてから開始しますし、終了/次のファイルへの切替えはファイル末尾ではなく、末尾から終了オフセット分だけ遡ったタイミングになりますので、前後の長いCMを飛ばしながら連続再生するのに便利です。

設定には秒数またはmm:ss、hh:mm:ss の形式で入力します。(秒数で入れても図のようにmm:ss、hh:mm:ss形式に直されます。)

なおここの入力(およびタイトルの入力)の際のちょっとした注意点ですが、入力してカーソルを入力欄に置いたまま「保存」ボタンを押しても内容が反映されなかったり、「変更項目なし」と見なされて保存ボタン自体が押せないままの場合があります。
これはWebフォームのちょっとした弱点で、入力欄にカーソルが留まったままではシステムでは入力未確定と見なされて値が読めないからで、しっかりシステムに入力内容を教えるためにはEnterキーを押すか、一旦他の入力欄やファイル名などをちょっとクリック/タップしてから「保存」ボタンを押すようにしてください。

次の音声(「主・副」「主」「副」「音声2」) の設定は、

Pl1_edit2

次節でご説明している二ヶ国語放送のプリセットです。
主・副がデフォルトですが、それ以外を設定しておけば二ヶ国語放送を再生する際に言語を選択できます。

以上のような形でお好みのプレイリストをカスタマイズしていってください。

・ なお作成できるプレイリストは01番から99番までの99個で、番号は自動採番されます。また1つのプレイリストに登録できるファイル数の上限も99個です。

これらの数が十分か少ないかの議論はあると思いますが、自分が日常的に使うiPhone等のプレイリストは到底そこまでの数にならないのと、リモート環境でも出来るだけ動作の軽快さを保つためにもこの辺の上限を置いています。99個なら4クールの放送でも楽に登録できますし。(さすがに朝ドラ全部は無理ですが)

またプレイリストはこの節の最初に書いたように1個のファイルだけで構成しても良いのですが、プレイリスト再生時に「1個のファイルだけをリピート」するシングルモードもありますので、むやみにプレイリスト数を増やさなくても、とりあえず観たいファイルをまとめて1つのプレイリストに登録しておいて、「再生時にシングルモードで再生する」という使い方も実用的だと思います。

「全ファイルを順番に再生しリピート」「1個のファイルだけをリピート」「ランダムに再生」のモードは再生中にプレイリスト操作パネルの上にあるボタンで切り替えできます。

Pl1_play55

これも一旦変更すれば、以後も引き継がれていきます。

③ サブストリームと「20秒」ルール

プレイリストの再生では「サブストリーム」を使って、次に再生する予定のファイルも予めスタートさせ、実際に視聴する時にはエンコードも完了させておくことにより操作性を上げ、次のファイルに素早く切り替わる機能を持っています。

図で説明すると以下の通りです。下がサブストリームを使った再生になります。

Pl1_substream4

サブストリームは「予定される次のプレイリスト項目と仕様」をシステムが判断しながら維持したり再生成しますので、例えば途中で解像度を変えたり、再生モードを「順番」から「ランダム」に変えた場合には適切なものがダイナミックに再生成されます。

この辺を利用者は殆ど意識する必要はありませんが、次のファイルへの切替えが近づいた頃にモード変更をおこなうと、次のファイルのエンコード完了が間に合わない場合もあります。(その時は切り替えのタイミングで次のストリームが再起動されます。)
その辺はベストエフォート型の機能という事で。

サブストリームの存在は視聴画面やトップ画面、ファイル選択画面でのタスク一覧には出てきませんが、

Pl1_substream1

停止対象のストリームとしては表示されますし、

Pl1_substream2

新規にストリームを立ち上げる際にも「使用中」のストリーム番号となりますので、存在は判ります。

トップ・管理画面では図のように現在動いているサブストリームの情報も表示されます。

Pl1_substream3

サブストリームは勝手に停止させてもプレイリストを再生している時にまた起動されますし、空いているストリームが無い時や必要な時にサブストリームが消えていても、それに合わせた動きをします。またプレイリスト本体が停止されれば、サブストリームも自動で停止します。

このように通常は特にサブストリームの存在を意識する必要はありませんが、ストリームをできるだけ節約したいとか、サーバの能力に余裕がなくで勝手に裏でエンコードが動くのは不安、という場合、「サブストリームを使用しない」設定もできます。

Pl1_substream6

デフォルトではチェック(=使用する)になっていますので、気になる方はここをチェックアウトしてください。

ただしここのチェックを外しても、サブストリームを使わなくなるわけではありません。あくまで積極的に使わないだけで、再生ファイル切り替え時には切り替え前のストリームが20秒程度「サブストリーム」として残ります。

またこの設定に関係なく、プレイリストの再生では使用するストリームは一定しておらず、再生ファイルが切替わるたびに空いているストリームを適切に選んで動いていきますので、再生中のプレイリストを選ぶ際はストリーム番号ではなく、PLxxのプレイリスト番号を見てください。

ちなみにこの「直前のストリームが20秒間だけ残っている」という特性は、サイドパネルからザッピングの感覚で視聴ファイルを切り替える場合にちょっとだけ便利です。

図にすると以下のようになります。

Pl1_substream5

プレイリストで再生ファイルが切り替わると、元のストリームはすぐに消えるのではなくサブストリームとなり、新しい「主(プライマリ)」ストリームが該当プレイリストの再生状況を管理することになります。

新しいプライマリストリームは起動後20秒で最初のチェックをおこない、自分のサブストリームをあるだけ検出した上で、自分が予定しているもの(次の再生ファイル)の仕様に合ったものだけを残して、残りは停止させます。
この時点で元のストリームも通常は(プレイリスト要素が2個しかない場合を除いて)消えることになるのですが、そうなる前に元のストリームの再生に戻せば、前のストリームの状態を継続して視聴できることになります。

要は監視タスクにかかる前に(同じファイル内のシークも含めて)再生を切替えていけば元のストリームは保持されたまま保たれるわけで、少し他のファイルを覗いてみたい、というザッピングの時には便利かもしれません。

Pl1_zap

ちょっとトリッキーですが20秒ルールと言いましょうか。。(本来はうっかり操作ミスの救済策として付けた機能です。)

④ プレイリストファイルについて

作成したプレイリストは、サーバ側で\htmlの下に \file フォルダが作成され、そこに保存されています。
フォルダ内容は図のようになっています。

Pl1_file1_2

これらのファイルもバージョン移行の際には忘れずコピー(または保持)するようにしてください。

拡張子.jsonのファイルは管理ファイルですので弄れない(誤動作の原因になる)のですが、拡張子.m3uのファイルはTvtPlay(放送TSファイルで構成されている場合)やMPC-HC、VLCでも使えるプレイリストファイルになっていて、内容は以下のようになっています。

Pl1_file2

当プレイリストで独自拡張している音声選択や開始・終了オフセットのような情報は単なるコメント扱いとなり意味を持たなくなりますが、その点を除けばコピーして簡単に使うことができます。
TvtPlay等のプレイリスト作成機として使えることになりますね。

ちなみに実は逆も真なりで、他で作ったm3uファイルやここで作ったm3uファイルのバックアップを、PLxx(xxは01~99)の名前でここに置けば、普通に読み込まれます。
ただしその番号のプレイリストファイルが存在することをシステムに教えなければなりませんので、ダミーのプレイリストを一旦適当な中身で登録してから同じ番号の名前で上書きする必要がありますが、沢山作りたい時のバックアップ/リストア方法としても使えますので、ご興味のある方は試してみてください。

なおm3uファイルの一般的な話として、記載されているファイルパスが絶対パスなので、該当のサーバー機以外では一般的には使えないという問題がありますが、最初からTvRemoteViewer_VB.iniでリモートフォルダだけでなくローカルフォルダのパスもネットワークパスで記載しておけば、同じLAN上のどこからでも使えるプレイリストが作成できます。
.

8)ファイル/プレイリストのストリーミングも実況付きにする

TvRemoteViewer_VBでは、録画したファイルを実況付きで再生することもできます。
ただし別のソフトの機能や運用との連携が必要ですので、最初のTVRemoteViewer_VB導入の際には飛ばしてかまいません。十分に使い慣れてから導入するのがお勧めです。

Softsubsid

利用のためには録画内容に応じた実況ログファイルが必要になりますが、その手順を自動化するためにTvRemoteViewer_VBは2つの仕組みを用意しています。

長所弱点
NicoJK用に保存した実況ログを流用する方法

・既にNicojCatchの仕組みがあれば利用は簡単。

・実況再生に必要なASSファイルはファイル再生の都度作成するので、事前に準備したりメンテナンスする必要がない。

・録画時に実況ログを保存していないものはこの方法は使えない。(JikkyoRecで保存した実況ログにも非対応)

・「祭り」状態が続くような巨大な実況ログになると再生開始時のASS作成処理に暫く待たされる。
(一度スタートしてしまえばシーク等の再始動の時間は通常通り。)

NicoConvAssで改めてニコニコ実況ログを取得してASSファイル化する方法

・NicojCatchの仕組みで実況を保存していなくても、生の放送TSファイルが保存してあれば実況再生可能。(この場合ニコニコ実況のみ)

・再生の都度ASSを作成する訳ではないので、ファイル再生時のレスポンスが良い。

・ASSさえ用意してあればMP4やMKVファイルでも実況付きで再生できる。

・準備に手間がかかる。(一旦準備してしまえば後は楽。)

・ファイルと同じ名前で同じ場所にASSファイルがなければならないので、ファイルの移動やリネーム時に注意要。

現在は両方式ともNicojCatch + 2ch2NicoJK で保存された実況ログがあればそれを活用できるようになっていますので、このシステムがリアルタイムに流す実況と同じく、ニコニコ実況 + 2ch実況 の豊かなコメントを再生時にも流すことができます。
(多少違うのは2chスポーツ実況のように本スレが判りにくいものでもリアルタイムなら見比べながら選べるのに対し、2ch2NicoJKで保存したければ条件設定が必要な点ですが、これは実況板の性格上止むを得ないところです。)

これら2つの方法は併用できます。併用する場合、NicojCatchで実況ログが保存してあるものは①、ないものは②の方法が自動的に選択されます。

それぞれを準備する手順は後で説明するとして、まずは実際の実況付き再生がどうなるかをご紹介します。これにも2つの形式があります。

実況付き再生の2つの形式

ファイル/プレイリストの実況付き再生には[ハードサブ]と[ソフトサブ]の2つの形式があります。

[ハードサブ] 実況を映像に焼きつける方法

Withassview

[ソフトサブ] ニコニコ実況や2ch実況と同じく、端末側でHTML5の機能を使って実況をオーバーレイさせる方法 (TvRemoteFiles v1.19以降の新機能)

Woassview

ハードサブの場合はサーバーでコメントが焼き込まれた状態で配信されますので、端末側ではほとんどやる事がありませんが、ソフトサブの場合はニコニコ実況や2ch実況と同じ仕組みを使っていますので、端末側操作のためのスライダーやボタンが追加されます。

それぞれの利用手順について

利用手順

|

単体のファイル再生では、以下の「実況焼込」をチェックすればハードサブの指定になります。

Withass1ハードサブの指定

同じくプレイリスト再生時も、実況焼込のチェック/非チェックを選択します。

Withass2ハードサブの指定

ファイル/プレイリスト再生中は「再読込操作」のポップアップでハードサブするか否かを変更でき、指定変更後「ストリームを再起動」すれば即座に反映されます。

Withass3ハードサブに変更する指定

  

ソフトサブを指定するには、まずはハードサブの指定をおこなわない、すなわち「実況焼込」のチェックをおこなわない状態でストリームを起動します。
あるいはハードサブで再生中であれば、「再読込操作」のポップアップで「実況焼込」のチェックを外して再起動してください。

Woass1

この状態で起動あるいは再起動した視聴画面では、実況サイドパネルを表示すると以下のようなバーとボタンが表示される筈です。

Woassside1

この「実況ログを再生する」ボタンを押せばソフトサブでの実況表示が開始されます。
(但しASSファイルが存在していない時は、「ASSファイルが存在しません」というメッセージが表示されて、このボタンを押すことはできません。)

このボタンを押さなければ実況表示のない普通の再生になります。また実況再生中にこのボタンを押せば実況表示は停止します。

前回視聴終了時に「実況ログ再生」がONの状態であれば、次に視聴画面を立ち上げる時にも(他の条件も合って実況ログも存在するならば) 実況再生の自動起動を試みます。

上の「タイミング調整」スライダーは、遅延時間スライダーと同じような役割で、+の数字ならコメントが流れるタイミングが遅れる方向になり、-(マイナス)の数字ならその秒数だけ、コメントが進んでいる方向になります。調整幅は-30秒~+5秒です。

この調整幅になっている理由は、通常のソフトサブであれば(ハードサブと同じく)元データに起因する誤差がありますが、最大±5秒程度のタイミング調整ができれば良いので+方向は5秒としています。
一方、仕組み上ずれがでてしまう「Androidでエンコード未了のファイルストリームを再生する」ケースでは、コメントは必ず映像より遅れる方向にずれますので、その調整可能幅をマイナス方向に30秒と設定している訳です。、

   

ハードサブとソフトサブの選択について

最初このシステムはハードサブの仕組みだけしか持っていませんでしたが、(特に可変速再生で)負荷が高く、また画質が落ちるため通常より2段ぐらい高い解像度にしないと満足いく画質にならない、という弱点が気になってきましたので、後になってソフトサブを追加しました。

といってもそれぞれ特長と弱点がありますのでそれぞれ補完するものとして、都度使い易い方を選べば良いと思います。
PCやiPad、Androidで普通に使う場合はソフトサブが使い易いと思いますが、iPhoneではそもそも全画面でしか動画を観られないので、ハードサブにする必要があります。

長所弱点

・全画面でも表示できるのでiPhoneでも実況が楽しめる。

・端末側負荷がかからないので、Chromecastなど処理能力の低い環境でも滑らかな実況表示が楽しめる。

・映像に同期して焼き込まれるため、映像と実況コメントのタイミングの誤差はせいぜい±5秒以内である。
(この誤差はプログラムの問題ではなく、そもそものニコニコ・ログ上のタイムスタンプの問題)

・サーバーの負荷が高く、特に1.5倍速や2倍速の映像に実況を焼き込もうとすると、ハイエンドのPCでも処理が追いつかないことがある。(映像が頻繁に一時停止する。)
ストリーム起動/再起動時の「配信準備中です」の待ち時間が長く、全体的に再起動を伴う動作がもっさりする。

・画質上不利。特に弾幕状態になると映像がかなり崩れる。

・映像と実況コメントのタイミングの誤差は小さいが、補正もできない。

・コメントを消したい時でもストリームの再起動が必要。表示位置や透過度も調整できない。

・文字は焼き込みなのでサイズは動画の表示サイズが小さくなれば比例して小さくなる。

・サーバーに負荷はかからない。エンコードも通常通り終わる。

・画質への影響がない。

・文字サイズは動画サイズを調整しても端末の画面に合わせたサイズのままなので、過度に大きくなったり小さくなることがない。

・映像と実況コメントのタイミングに(ハードサブと同じ理由で)±5秒以内の本来的な誤差があるが、それもスライダーで補正できる。

・表示位置を制限したり文字を透過させるような調整が可能。

・全画面では利用できない。

・Androidで「エンコード未了」の状態では(Androidの標準プレーヤーの特性で)タイミングに大きな誤差があり、スライダーで毎回補正が必要。(エンコード完了すれば解消する。PCやiOSではこの問題は無い。)

・実況開始時にASSファイルを映像とは別にサーバーから読み込むが、回線速度やASSファイルのサイズによっては無視できない待ちが発生し、その間以下のようなメッセージが表示される。

Readassmsg_2

ASSファイルのサイズは通常は数百KB程度なので殆ど気にならないが、たまに「祭り」の「1時間以上の映画や番組」だと数MBに達する。

以上が実況付き再生の手順で、ここからはこの機能を使うための設定手順です。

① NicoJK用に保存した実況をそのまま流す方法

この方法を利用するには、既にNicoJK + NicojCatch を使って録画と同時にニコニコ実況(および2ch実況)を取り込んでいることが前提になります。

関連フォルダを以下のように指定してTvRemoteViewer_VBを再起動するだけで、実況付き再生ができるようになります。

Usenicojk

図にあるNicoConvAss.exeはTvRemoteViewer_VBと同じ作者さんが提供しているツールです。
このツールは「② ニコニコ実況を取得してASSファイルを作成する」手順でも使いますが、ここではコメントのフォーマットを整えるためだけに使います。

作者さんのサイトを下に辿って行くと

おまけ ~ ニコニコ実況の過去ログを取得し字幕ASSファイルを作成するソフト

という記載があります。そこに

NicoConvAss vx.xx 20xx/xx/xx

という行があり、そのvx.xx という所がファイルのリンクになっていますので、クリックしてダウンロードし、解凍した上で、適切な導入用フォルダを作成して(以下では\NicoConvAssフォルダと呼びます)、解凍した中身を全てコピーしてください。
Nicoconvassfolder

その上でTvRemoteViewer_VB.ini に、このNicoConvAss.exeへのフルパスを(図の例であれば) NicoConvAss_path = "C:\BON\NicoConvAss\NicoConvAss.exe" のように指定してください。以上で準備完了です。

ただしこの方法で実況を表示する場合、内部的にはTvRemoteViewer_VBが(NicoJKフォルダにある実況ログから)毎回自動的にASSファイルを作成するのですが、文字の大きさや実況密度の条件を決める「-height」のパラメータ(→参考) はNicoConvAssが持っているデフォルト値が使われ、利用時に指定することはできません。

これをiPhoneのような小さな画面でハードサブで再生したい場合、文字サイズをもっと大き目にしたい場合があるかもしれません。また逆に充分大きな画面のPCで再生する事が多い場合、コメントをシステム側で勝手に削ってほしくない場合もあります。
heightのデフォルト値は、\NicoConvAssフォルダにある form_status.txt ファイルを編集することで変更できます。

Assdefaultheight

この TextBoxVheight = の値がデフォルトのheight値になります。
再生の都度この設定を変更することはできませんが、最も利用の多いシーンを想定して設定すると良いです。
(ちなみに私はこの辺どうしてるかと言うと、録画終了後にリンク先のエンコードバッチでiPhone用SD画質のMP4とそれ用の -height 720 設定のASSを生成してiPhoneでは配信も持ち運びもそちらのファイルを使うと同時に、PCやタブレットではTSファイルを直接再生することでデフォルトの大きな画面用パラメータで実況再生、というような使い分けをしています。)

なおこのform_status.txt ファイルが見つからない場合、1度でもNicoConvAss.exeを起動すれば自動的に作成されます。

② NicoConvAssでニコニコ実況を取得してASSファイルを作成する方法

この仕組みでは①でも利用したNicoConvAssと、実況データ取り込み用ソフトのJKCommentGetterを活用します。概要と設定手順は、以下のようになります。

niconicoアカウント取得とログイン Ruby環境の導入 SQLiteの導入 JKCommentGetterの導入 cookie位置の記述 NicoConvAssの導入 NicoConvAssにNicoJKパスを定義 ffmpegにfontsを定義 ts用assファイル mp4用assファイル

一見複雑な仕組みに見えますが、基本は各ソフトを導入していくだけでOKです。
それぞれの手順は赤枠内をクリックすれば出てきますので、Firefoxでniconicoにログインした上で、(1)から順に実施してください。

なお(5) NicoConvAss は で導入済みであればそれをそのまま利用できます。
その場合(3) JKCommentGetter の導入の際には新規フォルダを作るのではなく、NicoConvAss導入済のフォルダにまるごとコピーてください。

また① で導入したものを流用する場合でも、(6)NicoJKで保存している実況ログを活用する設定を(NicojCatchを導入済みの方は)おこなってください。そうすればNicoConvAss.exeを呼ぶ際にオプション -nicojk 1 を指定することによって、NicoJKフォルダの実況ログを優先して読み込むようになります。
尤も① と併用する場合は、TvRemoteViewer_VBがNicoJKフォルダに実況ログがあれば直接取りに行くので、ここで実況ログ保存済みのファイルにASSを作成してもあまり意味はありません。(といっても保存済みかどうかの判別も面倒ならとりあえずまとめて作っておいても構いません。)
併用しない(①でNicoJK_first=0 とする)場合には意味があります。(ストリーム起動時に毎回ASSを作成しないのでストリームの起動が速くなる、というメリットもあります。)

また、(1)~(6)を導入するのはTvRemoteViewer_VBが動いているPCである必要はありません。もしTVRockやEDCBで予約録画に使っているPCが別にあれば、そちらに導入するのが適切です。ただし(7)についてはTvRemoteViewer_VBの動作環境に導入してください。

この仕組みの流れは簡単に言えば、録画したtsファイルに埋め込まれているチャンネルや時刻の情報をNicoConvAssが解析の上、NicoJK用に保存された実況ログがあればそちらから、それが無ければJKCommentGetterというツールを使ってniconicoのサイトに問い合わせて実況ログを取得した上で、ASSという字幕ファイルを吐き出す手順になっています。

ASSは汎用的な字幕ファイルで、ここではそれに実況風の「横に流す」オプションを付けることによって実況の雰囲気を再現しています。
元の映像ファイルが「映像1.ts」というファイル名なら同じフォルダに「映像1.ass」という名前で置いてあれば、TvRemoteViewer_VB側ではそれを対応する実況ログとして取り込む仕組みになっています。

またこの仕組みで準備したASSファイルは、MPC-HC等で再生する際もそのまま働きます。但しMPC-HC/VLC等での使い方はここの主題ではないので、ご興味のある方はリンク先を参照してください。

このASSファイルを対象の録画ファイル分予め用意しなければなりませんが、録画ファイルがtsで取ってあれば何年前のものであっても自動で生成でき、外出時に仕掛けておけば数千ファイル分でも半日ほどで仕上がります。
ファイル容量はテキストファイルなので大したことはなく、過去にNicojCatchでコメントを取っていなかった頃とか取り損なっていたtsファイル分も改めて実況取得できるので、新たな発見もあります。(え、あの番組にはこんな実況コメントが入ってたのか!とか。。)

なお、RubyはJKCommentGetterを動かすために必要なスクリプト言語環境、またsqlite3はFirefoxのcookieにあるniconicoの認証情報を読み出すためのデータベースソフトです。

fonts.confはffmpegでASSの字幕焼き込みをおこなうためのフォント管理情報です。この導入は以下のようにしてください。

・TvRemoteViewer_VBで使っているffmpegのbinフォルダ(ffmpeg.exeがあるところ)で、右クリック→新規作成→フォルダー で新しいフォルダーを作成し、 fonts という名前にしてください。
Ffmpegfonts1

リンク先からzipファイルをダウンロードし、解凍した中にある fonts.confを作成した\ffmpeg\bin\fonts フォルダにコピーしてください。以上でffmpegのフォント管理ファイルが導入されます。

.
さて、これを活用する上でもう1つ必要なのは、録画のたびにASSファイルを自動で生成したり、既に大量にある録画済みデータにまとめてASSを付加する仕組みです。
片っ端からASSを付加しておけば、TvRemoteViewer_VBでは視聴時に実況付きにするか否かをいつでも選択できることになります。

NicoConvAssはショートカットを作っておいてASSファイルを生成したい録画tsファイルをドラッグ&ドロップするだけでASSが作成できますが、1度に1個しかドロップできず、リストを作ってバッチで処理するのも数が増えれば面倒です。
そこで、

(a) TVRockやEDCBの録画後処理で、自動的に実況ファイル(ASSファイル)を作成する。

(b) 既に録画済みのtsファイルや、それを保管したフォルダを一括してドラッグ&ドロップで一気にASS作成できるようにする。

以上の仕組みがあればより利用が簡単になると思います。

(a) の仕組みは、実はと併用する場合には不要です。(NicojCatchが導入済であれば、録画の際にNicoJK用の実況ログが作成されて、TVRemoteViewer_VBは再生時に毎回そちらを使ってASSファイルを作成します。)
と併用しない(NicoJK_first=0 の指定)の場合は録画後処理でASSを作成するのが便利です。ここではTVRockでの指定をご説明しますが、EDCBでも中の%1を$FilePath$と書き換えて後処理に組み込めば良いです。

まず、以下の録画後処理用バッチファイルをダウンロードし

「RecConvAss.zip」をダウンロード

解凍した中にある RecConvAss.bat を\NicoConvAssフォルダにコピーしてください。
次に(TvRockの場合)、設定→プロセス タブ に

TN:"C:\BON\NicoConvAss\RecConvAss.bat" "%1"

という一行を加えてください。(赤い部分は導入環境に合わせて修正してください。)

Asspostprocess2

TN:は録画後何も指定がない場合にデフォルトで呼び出される処理です。もし既にTN:で指定してある処理があれば、それにこの1行を並べれば良いです。
また他の録画後処理と併せて実行する場合も、それに並べて加えてください。(例えばCOPY: という後処理が定義してあれば、その先頭に COPY:"C:\BON\NicoConvAss\RecConvAss.bat" "%1" という行を加える、など。)

RecConvAssはNicoConvAssを呼び出す際に

i) まず何もせず4分待つ。これはNicoJKから実況ログを取得する場合に、2ch2NicoJKが録画終了3分後に処理することを想定した待ち時間
ii) パラメータに NicoJKフォルダの実況ログを優先して読み込むための -nicojk 1 を指定
iii) パラメータに、(ハードサブをおこなう場合の文字の大きさに関連する)-height 720 を指定

以上の前処理やパタメータをセットします。

Recconvass1

カスタマイズする場合、-height 以外のパラメータは特に弄る必要はないと思います。

-heightについては、これを大きくしていくと、「ハードサブ」で観る時の文字サイズが小さくなります。(「ソフトサブ」では文字サイズは端末側が再調整しますので、特にこの数字は関係ありません。)
デフォルトの-height 720だと iPhoneサイズで見るには丁度良いですが、PCやタブレットでは字が大きすぎるかもしれません。尤もPCやタブレットではソフトサブの方が便利だと思いますので、ここはむしろ(ハードサブしか使えない)iPhoneのようなデバイスを優先して決めています。

ただ、それとは別の考慮点として、-height 720程度だと NicoConvAssは、非常に密度の高い実況になった時に 「小さな画面には表示し切れない」と判断してコメントを削ってしまうことがあります。

例えば有名なこのシーン

Laputa

は本来これだけの弾幕になるのですが、-height 720の設定で作ったASSファイルを大画面&ソフトサブで実況表示した場合

Laputa2

半分以上のコメントが削られていることが判ります。

もちろん広い画面一杯にコメントを表示させて再生するような必要がなければ削られてもあまり気にならない(むしろ読みやすくなる)ような違いなのですが、もしハードサブの利用は考えておらず、ソフトサブで大画面で再生する時のコメントも取りこぼしがないようにしたい場合、むしろ-heightは実際より大きく(例えば-height 2160 ぐらいに)しておいた方が良いです。(そのぐらいの設定だとコメントが削られることはありません。)

あるいはそういう「祭り系」映像ファイルだけ、改めて (b) のAutoAssConvに直接ドラッグ&ドロップして、ASSファイルを作り直す方法もあります。

(b) の一括処理については、(そもそもは自分用のつもりで)ツールを作成しましたので、ご活用ください。
使い方は、以下のファイルをダウンロード&解凍して、

「AutoAssConv0102.zip」をダウンロード

中にある
AutoAssConv.exe
AutoAssConv.ini
MsgBox.exe

を \NicoConvAssフォルダにコピーしてください。

Autoass2

このAutoAssConv.exe をデスクトップ等にショートカットを作っておけば、複数ファイル/フォルダをまとめてドラッグ&ドロップして

Autoass1

一挙にASSファイルを作成できます。フォルダについては下の階層にある全てのtsファイルにASSを生成していきます。

処理進行中でも別のファイル/フォルダ群をドラッグ&ドロップすれば、並列で処理します。
生成が終われば図のようなポップアップで

Autoass3

処理したtsファイル数が表示さます。

ただし対象が数百個以上になるとそれなりに時間がかかりますので、寝る前や出かける前にまとめて仕掛けておくのがよいかと。

なお、AutoAssConv.ini を編集すれば一括処理のパラメーターを設定可能で、デフォルトでは以下のようになっています。

Autoass4b

ここでも重要なのは上の録画後処理の場合と同じく「height=」 の数字ですので、一括で適用したいパラメータをここで指定してください。

また応用として、AutoAssConv.exe とAutoAssConv.ini の組み合わせは名前を変えたものを別の設定で動かすことができますので、例えば同じフォルダで以下のように別の名前にコピーしたものを作ってiniファイルの設定を変えた上で

AutoAssConvLarge.exe
AutoAssConvLarge.ini    (例)

対象のファイルをD&Dすれば、その分だけ別の設定、例えばheightを大きくとったASSファイルに差し替えることが可能です。

以上が録画ファイルを実況付きにするためのASSファイル作成手順になります。
他に、tsファイルだけでなく録画をエンコードしたmp4/mkvファイルもASSファイルが使えますが、手順はリンク先をご参照ください。リンク先の手順ではmp4/mkvファイル用のASSをまた改めて作りますので、そちらはそちらで利用画面サイズに合せた設定が出来ます。

以上の手順で一度実況ログファイル(ASS)を作成すれば準備完了です。以後新規に録画されるファイルにもASSが自動的に作成されるようになります。

9) 0.5倍速再生~2倍速再生

TvRemoteViewer_VB v1.24とTvRemoteFiles v1.17以降の組み合わせなら、ファイル/プレイリストの再生で通常の等倍速再生の他に

1/2 3/4 1.3 1.5 1.7 2.0 倍速

の音声付き再生ができます。

利用方法は簡単で、ファイル再生で最初から速度指定したい場合は、図の位置に緑色のボタンがありますので、

Trickplay1a

これをクリック/タップすれば(ロックが外れて)再生速度のセレクトボックスが現れます。

Trickplay1b_2

ここで速度を指定して「再生」ボタンを押せば、最初からその速度での再生になります。

等倍速以外の再生では、図のように視聴画面の情報パネル先頭に、現在何倍速で再生中かの情報が表示されます。
Trickplaypanel

同じようにプレイリスト開始時も同じボタンが追加されていますので、

Trickplay2a

押して速度を指定してください。

Trickplay2b

プレイリストの場合は(途中で意図的に変更するまでは)同じ速度で後続のファイルも再生されていきます。

ファイル/プレイリストの再生中に速度を変える場合は、(ストリーム再起動を伴う操作になりますので)「再読込操作」ボタンから操作します。

Trickplay3a
Trickplay3b

使ってみた感じでは(番組の性格によりますが)1.5倍速程度までなら台詞もほぼ理解でき、ニュースのようにゆっくり喋ってくれるものや野球中継なら(そもそも解説をあまり真面目に聞くものでもなく絵と球場の雰囲気が味わえればよいので)2倍速でも十分実用的です。

但し、等倍速以外ではプレーヤー下の経過時間/全体時間 が意味を持たなくなりますので、ご注意ください。
Trickplaynote

これはプレーヤーが実際に再生する時間なので、等倍速以外では「ファイル本来の再生位置/全体時間」ではなくなります。
TvRemoteFiles内部ではその辺の時間補正をきっちりおこなっていますので、再生位置/全体時間は何倍速であっても正しく把握されています。あくまでプレーヤーが表示しているこの数字は正しくありません、という意味です。

10)チャプター機能

TvRemoteViewer_VB v1.40以降と TvRemoteFiles ver1.27以降の組み合わせではチャプター機能が使えるようになりました。
これはチャプター移動、自動スキップと、それをナビゲーションするための進捗バー、時間表示等の周辺機能で構成されます。

ただしチャプター機能を使うためには別のソフトの機能や運用との連携が必要ですので、最初のTVRemoteViewer_VB導入の際には飛ばしてかまいません。十分に使い慣れてから導入するのがお勧めです。

① 進捗バーと時間表示の機能

チャプター機能を説明する前に、チャプターファイルの有無に関係なく、全てのファイル再生共通で新たに使えるようになった機能をご説明します。
表示は以下のようになります。

Progress1

右端の時間表示は現在の再生位置の、ファイルの先頭からの経過時間です。
途中で再ロードしたり倍速再生にしても関係なく、ファイル先頭からの時間を常に表示しています。

また進捗バーは、ファイルの全体時間の中の現在の再生位置をバーで表示します。
ただし全体時間が判らない間はバーは表示されません。(とはいえ、現在はエンコード終了を待たなくてもASSファイルやチャプターファイルから全体時間を推測しますので、どちらかがあれば最初からバーは表示されるようになりました。)

エンコード進行中は、進捗バーは上の図のように青で表示されます。一方エンコードが終了すれば、バーは赤い色に変わります。

Progress2

尚、途中で再ロードした状態でエンコード終了した場合、再ロード位置より前が青いバー、再ロード位置より後ろが赤いバーになります。

Progress3

赤い色は再ロードせずにプレーヤーの機能だけで移動可能な範囲、青い色は移動するのに再ロードが必要な範囲になります。
この識別はチャプターを移動する際にも重要です。

② チャプター機能

 ②-1 チャプターファイルを事前に用意しておく方法

チャプター機能を本格的に使いたい時は事前に、リンク先を参考にしてチャプターファイルを作っておくのがお勧めです。
リンク先でご紹介しているツールは地上波キー/系列局とそのBS/CS再放送の番組限定ですが、チャプターイン/チャプターアウト、つまり本編と思われる部分とそうでない部分(恐らくはCM)の区分け情報を自動で作成してくれます。

なお、このツールがチャプター作成できる対象はtsファイルのみですが、作成した.chapterファイルをエンコードファイル名に合せてリネーム(例えば ファイル名.QSV.mp4 なら ファイル名.QSV.chapter)すれば、mp4等でも同じようにチャプター機能が使えます。

このツールでは字幕の空き時間を評価しながら作っていきますので、たまに台詞や説明のない長いシーンやOP/EDなどを本編以外と誤検出することもありますが、TvRemoteViewer_VBのチャプター機能は自動でスキップしながら違うと思ったら手動に切り替えるなど、いろいろ気楽に使えるようになっています。

さて、チャプターファイル(ファイル名.chapter)が添付されたファイルをTvRemoteViewer_VBで再生すれtば、図のような表示になります。

Chapt1

今までのシークボタンの左側に、切替用の緑ボタンが追加され、SKIPと表示されたものを押せばチャプタースキップのボタンが表示できるようになります。

Chapt2_2

SEEKと表示されたものを押せば元ののシークボタン表示に戻ります。

エンコード途中の状態ではこのように青いボタンに指定先チャプターの時間が表示され、これを押すことで(リロードを伴った)チャプター移動ができます。

自動スキップはチェックはできますがグレーアウトしており、該当時間帯に差し掛かっても発動はしません。

一方、エンコードが終了していれば、表示がこのように変わります。

Chapt3

インターフェースは殆ど同じですが、チャプターを移動するのに改めて青ボタンを押す必要は無く、最後にチャプター指定ボタンを押した4秒後に自動的にチャプター移動が発動します。
(もし取り消したい場合は、4秒以内に「SEEK」ボタンを押してボタンを切り替えてください。)

また自動スキップが働くようになり、図のようにチャプターイン/アウトに囲まれた領域をスキップするようになります。

Chapt4

いわゆるCMスキップ機能として使えますね。

なお、ファイル再生途中でリロードをおこなった場合、エンコード完了後の進捗バーは以下のような表示になります。

Chapt5

つまりプレーヤーの機能だけで移動できる範囲とリロードを伴った移動が必要な範囲が混在することになりますが、このチャプター機能では移動先によってどちらになるかを自動判断し、それに合わせてボタンの色も変わります。

 ②-2 再生開始時にチャプターファイル作る方法

チャプターファイルの別の生成方法として、TvRemoteViewer_VB v1.50 以降では、実況ログから特徴的な語句(キタ-,op,a,b,ed,予告 等の集中)を検出して自動でチャプターファイルを生成する機能が追加され、更に便利に使えるようになりました。

Asschaptdisp

これは実況ログが利用できる条件で、TvRemoteViewer_VB.ini の以下のパラメータに"1"(デフォルト)がセットしてあれば、ファイル毎に再生起動する最初のタイミングで動くようになってます。

Asschapt

これはそこそこの実況ログのある録画、また語句の性格からしてもアニメ30分番組でなければあまり意味のない機能で、また「CMのエンドには打ててもCM開始は検出できない」ので自動スキップには使えない(IN-OUTの区別がない)のですが、上でご紹介したツールではチャプターが打てないMX等のアニメ番組でも適切なチャプタが打てるようになります。
また実況ログさえあれば良いので、mp4など非tsファイルでもそのまま使えます。

ただこれがONになっていると、ファイル再生の起動が、特に実況の重いファイルで数秒間余計に待たされることはご注意ください。それが気になる方でこのチャプタが要らない方、あるいはそういった独立局アニメの録画自体が少ない方は敢えてONにせず、iniファイルで make_chapter = 0 にして明示的にOFFを指定すると良いと思います。(ストリーム開始時に作成しなくても、NicoConvAssを自動で動かしている方は予め録画と同時にこれを作成しておくことも出来ます。→ご参考

以上がチャプター機能の概説になります

11)リモコン機能で操作する

① 概要

TvRemoteFiles ver1.34以降では、任意の端末から任意の端末をリモコン操作できるようになりました。
リモコン機能そのものは、もともとキーボードもマウスも無いChromecast/AndroidTV用に開発したものです(→ご参考)がこれが汎用化され、PC/Mac/タブ/スマホのいずれもリモコン操作できるようになりました。
機能も豊富で、直接操作でできる事はほぼ全てリモコンから操作可能というのはもちろん、直接操作にはない便利な機能も加わっています。

実際にリモコンで操作する用途の他にも、リモコン制御モードで「全画面表示」の指定にしておけば、視聴画面を開いた時に常に横幅一杯の動画サイズに調整されますので、モバイルの普通の視聴でも便利です。、

リモコンの起動
Ccremocon1

  ↓
リモコン画面
Trvrcsample2_2

またテレビや大画面モニタに繋いだPCで、ブラウザごと全画面表示にしておいて、手元のタブレットやPCからテレビのように操作することも出来ます。

Trvrcsample1b
これは2画面マルチモニタ構成の片側にTvRemoteViewerを全画面表示したスクリーンショットですが、このように同じPCの別のモニタにリモコンを表示して操作する、という使い方もできます。

ブラウザを全画面表示にするには、ブラウザの以下の場所をクリックします。

Trvbr1_2Chromeの場合

Trvbr2_2FireFoxの場合

(全画面を解除したい時は画面の上端にマウスを持って行ってクリックすれば、解除用のポップアップかメニューが表示されます。)
Trvbr3

この場合の全画面表示は、ブラウザ/HTMLの枠内を越えてOS機能を使って実装されているプレーヤー機能の全画面表示と違ってあくまでブラウザ機能として実装されているので、実況等もそのまま表示されますし、画面遷移しても全画面が保たれます。

今まではスクリーン一杯に動画を表示したくても、操作ボタンやズームバーがないと操作ができなくなるので、それらが少し見える程度の倍率で視聴していた方が多いのではないでしょうか?その辺の使い勝手が上がります。

また最近出てきたスティックPC等もChromecastのように使えるようになります。Chromecastとは違って端末起動~ブラウザの起動の部分をリモコン操作することはできないので、そこはマウス操作かAutoStartで立ち上げる必要がありますが、以降の操作性はほぼ同じです。

Chromecast対抗デバイスであるAmazon FireTV Stick(および据置型のFireTV)も、このリモコン機能を使って高画質の視聴環境として活用できますが、それについては別記事にまとめました。

他のデバイスもブラウザが起動できれば、多分ですが同じようにTvRemoteViewerの端末として使え、それをリモコン操作出来るようになります。

TvRemoteFiles ver1.68以降では、下の手順でリモコン制御モードONの状態にしておけば、視聴画面から直接リモコンを起動できるようになりました。

Activerc

リモコン制御モードでは図の位置に「リモコン」ボタンが表示され、これを押すことでリモコンを起動できます。
動画を画面一杯に表示した際にはリモコンの方が操作しやすくなるほか、現在は「動画の全画面⇔タイル表示の切替え」、「実況エリアや文字サイズのリアルタイムな変更」など、リモコンのみでできる操作もありますので、必要な時だけ呼び出す形でも便利に使えます。

② リモコン制御 ON⇔OFF の切替え

以上の機能を使う際は、トップページの「デバイス(Cast)タブ」に追加された以下の欄で設定します。

Trvrc1

まずデバイス名にユニークなIDを入れてください。

Trvrc2

他と重複すると動作がおかしくなりますので、必ず「1つの端末の1つのブラウザ」毎にユニークな名前にしてください。
またデバイス名は制御ファイル名としても使いますので、Windowsのファイル命名規則に違反しないものにしてください。
TvRemoteFiles ver1.36以降では、「リビングPC-その1」のような日本語のデバイス名を付けることができるようになりましたので、判りやすい名前を付けると良いと思います。

ここで注意点ですが、例えば1台のPCでChromeとFireFoxは別の名前の付いた別のデバイスとして別々に動作することは可能ですが、同じChromeのTvRemoteViewerの端末画面に別々の名前を付けて操作することは出来ません。リモコンで操作する時は、対象の画面は1つだけが立ち上がっている状態にしてください。
(但し別のTvRemoteViewerサーバに繋いだ画面なら、それぞれを1画面づつ独立して動かすことが出来ます。)

ユニークなデバイス名を入れたら、右の「ON」のボタンを押してください。(ボタンが押せない時は一度デバイス名の欄でEnterを押してからボタンを押すと良いです。)
トップ画面がリロードされ、左上に「R」マークが表示されたら

Trvrc3

これでリモコン制御状態になり、デバイスリストに表示されるようになります。

Trvrc4

このデバイス名を使って別の端末(あるいは同じ端末でも構いませんが)からリンク先の手順でリモコンを起動して操作できるようになります。手順も簡単ですので試してみてください。
またこれもChromecastと同じですがファイル/プレイリストの再生は他の端末から、デバイス名で宛先指定して起動できるようになります。

リモコン制御モードを解除する場合は、上図のようにデバイス名の横のボタンが「OFF」に変わっていますので、それを押してください。トップ画面がリロードされて左上の「R」マークが消え、リモコンモード解除された状態に戻ります。

リモコン制御モードでも今まで通りの操作もそのまま出来ますので、リモコンモードを解除しないまま運用しても構いませんが、その場合以下は注意してください。

(1) 視聴画面のズーム倍率は、現在のブラウザサイズに合わせて毎回自動調節されますのでちょっと使い勝手が変わります。またブラウザ内スクロールも抑止されます。
特にリモコンから「全画面」を指定したままだと毎回ブラウザ一杯に動画が表示されますので、今まで通りのボタン操作やサイドパネル操作を優先したい場合は、リモコン側で「タイル表示」のモードに切り替えておいてください。(この画面モード切替えはリモコン側でなければ出来ません。)

(2) 複数のTvRemoteViewer_VB画面を動かすこと自体は問題ありませんが、その状態のままリモコン操作しようとするとコマンドを取り合って動きがおかしくなりますので、リモコン操作する際は1画面だけ残して、それ以外は落してください。

(3) 以下の機能はリモコン制御モードでは使えなくなります。
・ポップアップモード: 複数画面が競合することを抑止するため、「視聴画面をポップアップで起動」は強制的にOFFになります。
・一部の確認メッセージ: リモコン操作中に確認用ポップアップで動作の流れが止まるのはまずいため、「チャンネル/再生ファイル切替え時に確認メッセージを表示」は強制的にOFFになります。
・(Rockバータイプではない)旧番組表モード: リモコン制御機能が無いため、番組表は強制的にRockバータイプの番組表モードになります。

③ 機能上の留意点

なお、端末の特性上リモコンの機能が制限されるものがあります。以下の点もご留意ください。

音量調節/ミュート機能

iOS/Androidでは、モバイル端末としての特性上HTML5/Javascriptから音量調節することは出来ない制約があり、リモコンで音量調整はできません。(サイトに埋め込まれたスクリプトで勝手に端末全体の音量が変えられるのを避ける意図のようです。→ご参考
AndroidTVについてはそもそもCast機能はAndroidではなくGoogle Castの仕様に従っているためこの問題もなく、快適に使えます。

動作未確認ブラウザ

AndroidのDolphin Browserがうまくリモコン制御できないので、原因調査中です。
→ TvRemoteFiles ver1.35で問題解消し、普通に使えるようになりました。

モバイル系ブラウザの自動スタート

モバイル端末をリモコン操作する場合、元々モバイル系ブラウザは動画の自動スタートが出来ない(動画開始時に人手の介入が必要な)ものが多い点もご注意ください。
自動スタート出来るタイプであるiOSのiLunascape、AndroidでのDolphin Browserについては、リモコン制御下でうまく動くことを確認しました。

12)ファイルの無変換ストリーミング

TvRemoteFiles 1.40以降ではソースファイルがH.264動画の場合、ソースをエンコードしながらストリーミングするのではなく、ソースファイルをそのままHLS仕様の細切れファイルに加工してストリーミング、という選択も出来るようになりました。

選択方法は、ファイル再生の指定で「ファイルがTSファイル以外」の場合、図のように
Ne_selectvideo

解像度に 0x0noenc という選択肢が現れますので、これを選択して「再生」ボタンを押してください。

またプレイリストでも同じように選択できます。

Ne_playlist

プレイリストの場合TSファイルでなければこれがそのまま適用されて無変換ストリーミングになりますが、TSファイルはこれは適用されず、デフォルト解像度での通常のストリーミングになります。

視聴画面の動きも通常のファイル・ストリーミングとはちょっと違い、視聴画面開始直後にストリーム用ファイル生成が完了(今までで言うところの「エンコード完了」)します。
エンコード完了を自動検出できるiOS系の端末ではこれは開始後数秒で反映され、シークボタン等も「エンコード完了」状態に切り替わりますが、自動検出できないPCやAndroidの場合は図のように

Ne_viewvideo

「ここを押せばシーク可能」のボタンが 30秒~1分 程度で表示されますので、ここを押すことで「エンコード完了」状態になります。

このように直ぐに使いやすい状態になるのがメリットですが、もう1つのメリットは、ストリーミングに伴うエンコード処理がないので、サーバ負荷が極めて軽くなる点になります。

もちろんエンコードは事前にやっておくことになり、その際の負荷は掛かる訳ですが、これは予めサーバが空いている時間帯に、HandBrake-QSV等を使ってエンコードしておけば良い訳で、もしHDDに余裕があるなら外出用と宅内視聴用のMP4ファイルを録画後処理でそれぞれ用意しておけば、比較的CPUパワーの限られた環境でも便利に使えると思います。
(実際、メーカー製レコのリモート視聴の仕組みも予めそのように配信用ファイルを何種類か作っておく形になっています。基板容積や冷却能力に制約のあるレコ等と違ってPCはトランスコードを積極的に使ってその能力を有効活用すべきだと思いますが、PCにそれほどの能力がない場合でもそういう選択ができる、という仕組みになります。)

但し以下のような点にはご注意ください。

・無変換ストリーミングでの解像度や音声言語は元のファイルのままの決め打ちになります。(表示の初期状態は640x360のスケールになりますが、実際の解像度は元解像度のままです。)

・実況焼込みや再生速度変更のようなビデオファイルの再変換が必要な選択も出来ません。(選択しても無視されます。) 実況表示はソフトサブをご利用ください。
再生開始位置を指定して途中から視聴開始することは可能ですが、先頭から開始してもすぐにシークで飛べるようになるので、プレイリストで続きから自動再開する時ぐらいしか使わないかも。

・コンテナはMP4でもMKVでも構いませんが、コーデックはH.264でなければなりません。それ以外の動画形式で無変換を選択するとストリーミング起動待ちのまま先に進みません。(その場合はトップ画面→管理タブから停止させてください。)

・ストリーム用ファイル生成があまりに速いため、HLSプレーヤーがそれにつられて、最初はちょっと先のシーンから再生開始し、秒表示と実際のシーンも合いませんが、30秒~1分で上記「ここを押せばシーク可能」のボタンが出現し、それを押すことで「正常な再生位置」に戻り、また「エンコード完了」の状態になります。
iOSの場合はもっと早く数秒でこれを自動検出した上で、自動的に「エンコード完了」状態になるため、操作は必要ありません。
ChromecastやAndroidTVの場合は30秒~1分で自動検出しますが、プレーヤーの状態を「エンコード完了状態」にするため一旦プレーヤーをリセットさせます。そのため最初1分程度は映像が止まったり暗くなったりの動きがあり、その後通常再生が始まります。

このように視聴開始直後はちょっと今までと違った動きをしますが、その後は「エンコード完了」状態になって、自由にシークやスキップができるようになります。

13)二ヶ国語放送(または録画)で日本語/英語音声を選択する。

日本の放送では、二ヶ国語放送の際に(番組表には[二]のように表記されます。)、おおまかに2つの方式のいずれかを使います。

Dualmono

Inputがチューナーで受信したストリームです。(これ以外に映像ストリームがあります)

①は(アナログ放送時代からなんとなく引き継がれた方式として)本来右左の音声を流すチャンネルでそれぞれ左に日本語、右に英語の音声を流す方式で、当システムのデフォルトでは左右から日本語と英語の音声が同時に聞こえます。

②はデジタル放送になって実現した、音声ストリームを2つ作ってそれぞれステレオで日本語、英語を流す方式で、当システムのデフォルトでは日本語のみがステレオで聞こえます。

どちらの方式を使っているかは局によって違い、またNHKのようにニュースでは①、映画やドキュメンタリーでは②の方式を混成で使っているケースもあります。

①の場合は左右のどちらかを選べないと二ヶ国語が混ざって非常に聞き取りにくくなりますし、また②の方式で敢えて英語の音声を聞きたいケースもあるかもしれません。

そこで当システム最新版では、TV視聴時に言語を選べるように以下のような選択肢を付けました。

Audioselect1

ここでデフォルトの「主・副」を選べば

- 二ヶ国語放送でなければ通常のステレオ音声
- ①Dual Mono Modeであれば左から日本語、右から英語音声
- ②ステレオ二ヶ国語であれば日本語のステレオ音声

になります。
「主」を選べば、いずれの場合も日本語(モノラル)が左右から聞こえ、

「副」を選べば①Dual Mono Modeであれば英語、それ以外であれば日本語のモノラルが聞こえます。

「音声2」を選べば

- ②ステレオ二ヶ国語であれば英語のステレオ音声
- それ以外であれば基本は無音、但したまに「解説音声」が聞ける番組もあります。(NHK朝ドラなど番組表に「解」の表記があります。)

どのパターンかの自動判別は残念ながらできませんが、判らないときはとりあえず「主・副」でスタートしてみて、二ヶ国語が混じっている場合は①のパターン、二ヶ国語放送の筈なのに日本語しか聞こえない場合は②のパターンとして、再度言語を選択すれば良いと思います。
視聴画面では以下のセレクタで言語を選択し直してストリーム再スタートすることができます。

Audioselect2

これらはファイル再生でも基本的に同じですが、放送の生ストリームを録画したTSファイルと、それをエンコードしたMP4、MKV等では、扱いが少し異なります。

TSファイルであれば上記のストリームがそのまま保存されていますので、選択肢も同じで、再生開始時に以下のセレクタで選択します。

Audioselect3

プレイリストでも各ファイルでデフォルトの音声選択ができます。

Audioselect4

再生中にもこの選択は「再読込操作」ボタンからいつでも変更できます。

Audioselect5

またプレイリストの場合、この「再読込操作」で設定値と異なる音声トラックを選択した場合、以後のファイル再生でも(再度変更しない限り)、その選択が引き継がれます。

ただ、ファイルが二ヶ国語放送のTSファイルを元に、例えばMP4やMKVの形式にエンコードされていると、以下のように少し形式が異なってきます。

Mp4stereo
これは①Dual Mono Modeと殆ど同じに見えますがシステム的な扱いは少し違っていて、音声はストリームもチャンネルも1つで単なるステレオ音声として記録されています。

ここから日本語/英語だけを再生するために、それらのファイル形式の場合は(似たような選択ですが)「主(L)」 「副(R)」の選択肢が表示されるようにしました。

Audioselect6

これで二ヶ国語放送の録画をエンコードしても、音声言語の選択ができます。(なお、「音声2」は通常のエンコードでは破棄されます。)

この辺は元のTSと同じような使い方なのですが敢えて説明したのは、(普通にエンコードすればこうなる筈なのですが)、人によっては(音声の品質を重視して)エンコード時に音声は敢えて元のストリームから変換しない、つまり「AACパススルー」を使う場合もあります。
また「音声2」も保存するために、MP4/MKVでも音声を2ストリームで作成している場合もあるかもしれません。

そういった場合この「主(L)」 「副(R)」方式では日本語・英語の分離はできませんので、下に「passthru」の選択肢を加えました。これはTSの場合の「主」「副」「音声2」と同じ処理をおこないますので、そういったケースでも問題なく扱うことができます。
(逆にそういった事をしない場合はpassthruの選択肢は無視して構いません。というか、使っても効果はありません。)

14)タイムゾーンの変更

古いバージョンのTvRemoteFiles では端末を海外で使うことも想定して、時差を手設定して日本時間で進行していく番組情報を適切に更新できるようにしていました。

しかし、TvRemoteFiles ver1.14以降ではその時差情報を自動で取得できるようになりましたので、設定不要になりました。(なんでこんな簡単なjavascript機能も知らなかったのか・・勉強不足です。。)

当システムはロケフリなので、当然海外出張や旅行の際にもLAN/WiFiの環境さえあれば、PCやタブレット、あるいはChromecastのようなデバイスから日本に居る時と同じように、テレビや録画を(実況付きで)視聴でき、結構便利だと思います。
今はホテルで自由に使えるLAN/WANの環境がかなり充実していますので、その辺の安価で帯域十分な回線が確保できれば、ほぼストレスなく使えると思います。

15)視聴画面をポップアップ型の別ウインドウにする

端末ごとにお好みに合わせて、テレビやファイルの視聴画面を常に別ウィンドウでポップアップさせるような設定ができます。
設定はトップの管理タブでおこないます。

Pupsetting

この設定にした場合、番組表やファイル再生画面の「視聴」ボタンでストリーム開始したり、既存のストリームのボタンを押したタイミングで、図のように最小限の装飾かつ視聴画面サイズに適正に合せた別ウィンドウが立ち上がります。

Pupbsc

番組表やファイルリストを常に表示したままで視聴画面を、必要があれば複数起動できる点も便利で、リンクのように番組表/ファイルリストを(視聴画面のサイズとは関係なくなりますので)見やすい大きさで縦長にしてデスクトップに並べておいて、観たいものがあったらいつでもそこから起動、という使い方もできます。

但し、この機能はタブレットやスマホでは(そもそも非マルチウィンドウで、動画表示も同時に1画面しかできないので)あまり意味がなく、またスマホ/タブのブラウザでは「閉じる」ボタンがうまく働かないような問題もありますので、主にPCやMac向けの機能と考えてください。 

ウィンドウサイズは画面起動時に適正に調整されますが、ズームで動画エリアを調整したり、サイドパネルをON/OFFした場合には、ウィンドウの枠をつまんでサイズ調整しても良いですが、もっと簡単な方法として画面の再読み込みをおこなうだけで、ウィンドウサイズが適正に修正されます。

再読み込みは「再読み込み」ボタンを押すだけで良いのですが、押しにくい位置にある時は図のように
Pupbscadjust

Chromeでは上辺のバーで右クリックから選択できますし、Firefox/Opera/Safariではページ内の(映像以外の)エリアで右クリックすればメニューから指定できます。
Pupffrelo Pupoperelo_2

なお、ポップアップ型に切り替えた直後、ブラウザによっては「視聴」ボタンを押しても視聴開始できない場合があります。
これはブラウザがセキュリティの観点でポップアップを弾いているのが原因で、よく見るとポップアップブロックのメッセージが表示されている筈ですので、速やかにポップアップを許可してください。なおトップ画面はOKでもファイル再生画面ではブロックされる事もありますので、視聴画面が立ち上がらない場合は都度、それぞれの画面で許可してください。(ちょっと面倒ですが最初だけです。)

Pupblock1Chromeではこのようなメッセージが表示されるのでクリックして

Pupblock2 この画面で許可

Pupblockmoz
 Firefoxではこのようなメッセージが出るので、「設定」から許可する。

ポップアップ型画面の通常との流れの違いを以下の図にまとめました。

Pupflow

ポップアップ型に設定した場合、視聴画面からトップ画面や番組表画面への遷移は(操作系が混乱するだけですので)出来ないようになっていて、代わりに「閉じる」というボタンが加わります。
ファイル/プレイリストの再生時には前述の所有権受け渡しが円滑におこなわれるよう、視聴終了時にはウィンドウをTvremoteviewer_endボタンで強引に終わらせるのではなく、できるだけ「閉じる」ボタン又は「(この)ストリームを終了する」ボタンを使うようにしてください。

視聴画面でのチャンネル/ファイル切替えや別ストリームへの切替えは今まで通りになります。

16)お休みタイマ・お目覚めタイマ

① お休みタイマ

ちょっとした機能ですが、TvRemoteFiles v0.57U以降、でお休みタイマを付けました。
使い方は簡単で、視聴画面で下の操作バーに「タイマ」のボタンがありますので、これをクリックしてください。

Tvremote_sleeptimer1_2
すると「時間のセット」→(タイマ稼動中)「タイマの取り消し」の順にボタンが切り替わります。

Tvremote_sleeptimer2

これは私自身が欲しくて付けた機能なのですが、スマホやタブレットで「ながら視聴」しているうちに、うっかり映していることすら気にならなくなってしまい、必要もないのに長時間付けっぱなしになってバッテリー切れを起こす事があります。(スマホ・タブレット・PCとも、動画が動いている間は画面スリープに移行しない設定になっている事が多いですので、バッテリー消費も多くなります。)

そういう場合、予めタイマをセットしておけば良いわけです。セットしても視聴を続ける時は簡単にセットし直すことができます。

また、私は寝る時にナショジオ等の録画を流したまま寝ることが良くあります。(教養系の番組は刺激や音量変化が少なくいい具合に眠れます。決して学生時代に授業中居眠りしていたのが子守唄として身に染み付いている訳ではありません。)

今まではTVTestの「スリープタイマ」の機能が使いやすく、VLC等と外部のタイマソフトの組み合わせで使うよりずっと手軽な反面、MP4のファイル等の再生には使えないのが弱点でした。そのTVTestと同等に簡単、かつ更に汎用的なタイマが欲しいという発想です。

javascriptそのものの機能では機器/OS個別のスクリーンOFFやスリープ機能を直接起動はできませんので、設定した時間になったらストリーム終了(但しファイル視聴のストリームは、存続してもシステム負荷が殆どないため保持)の上で、視聴画面を終了させ、専用の黒背景のシンプルな画面に移行するという形になります。

黒のブラウザ画面では只の誤魔化し、という声もあるかもしれませんが、動画が終了すればスマホ/タブレットでは程なくスクリーンOFF/休止状態に移行しますし、PCでも(動画表示中は保留されていた)スクリーンOFFやスリープ移行のタイマが(設定されていれば)働き始めます。

Tvremote_sleeppowersave

実際のハードの制御はこの辺に任せる、という発想です。

② お目覚めタイマ

TvRemoteFiles v1.60以降では、リモコン制御モードの端末を指定時間に再生開始させる「お目覚めタイマ機能」が使えるようになりました。思えばテレビの目覚まし機能は古いようで新しい定番のニーズだと思いますが、カタログに謳う価値がないと見なされているのか最新のテレビでも殆どやっつけ仕事で、むしろ退化していたりしますね。
ここでは(自分自身の要件に沿った結果)どっこい高機能なものになりました。

Trvtimerassist

詳しい使い方はChromecastの記事にまとめてありますので、ご参照ください。もちろんChromecastだけではなく、リモコン制御モードにしておけば全ての端末で使えます。(動画自動開始できないタイプや基本スリープ状態のモバイル端末ではあまり意味がありませんが。)
パソコン、Chromecast/AndroidTVやFireTVを使えば、寝過ごしたくない時にあるだけの端末を目覚ましにしたり、例えば出張中で起こしてくれる人が居ない時にも活用できます。

17)サーバー低負荷モード

TvRemoteViewer_VBサーバーはストリームごとに配信用のファイルをエンコードしながら作成していきますので、それなりにサーバー負荷が掛かります。
しかし例えば解像度を低くする、ストリームの数を1個に絞る、ファイル・ストリーミング時はass(実況ログ)の焼き込みをおこなわない、等の工夫で、ローエンドCeleronのような非力なサーバーでも実用的に使うことが出来ます。
(テレビ視聴での実況表示は端末側が独自に取得しますので、サーバー負荷には関係ありません。)

ただしバージョンを重ねるにつれて、視聴中も単にストリームを受け取るだけではなく裏でいろいろな処理が動くようになってきたため、このような工夫でなんとか動かしている場合だと、特に視聴開始時のサーバー使用率が100%に張り付くケースが出ています。
そこでそのような非力なサーバー用に、できるだけ負荷のかかる裏の処理を減らすモードを追加しました。

設定にはトップ画面の管理タブで、以下のチェックをおこなってください。

Lowload1

これがチェックされた端末では、視聴画面が

① 番組表の問い合わせを行なわない。
② ストリーム監視を10秒間隔から20秒間隔に変更する。
③ ファイル再生では再生状態の監視と記録を20秒間隔から1分間隔に変更する。

という動作に変わります。
但し、①によってサイドパネル番組表の機能と、実況勢いウインドウクリック/タップでの番組情報表示、およびチャンネル直接切り替えの機能は使えなくなります。

また②では現在動作中の他のストリーム情報の更新が遅くなるほか、他の端末の操作で視聴中のストリームが不意に停止したり、チャンネルを切り替えが発生した場合に「自分のストリーム消失を検知して視聴画面を終了させる動作」や、「自分のストリームの変化を検知して画面の再ロードをおこなう動作」 が遅れ、結果として(PC視聴の場合)Flashがハングすることがあります。その場合ブラウザ上部にFlashハングのメッセージ

Flashhang

が表示されますので、ボタンを押してFlashを一度停止させれば、再びページ移動や再ロードなどの操作ができるようになります。
この辺は負荷を下げることとのトレードオフとしてご了解いただければ。

なお、ファイル再生時のエンコード負荷が高いと言うのはそれだけ有効にCPUを使いに行って早くエンコードを終わらせようとしている訳で、タスクの優先度自体は低いので他の処理に影響を与える訳でもなく、あまり気にしなくても良いと思います。)

18)サーバーイベントログ表示機能

TvRemoteViewer_VB v1.14で追加されたWEBインターフェース・ログの機能を使って、サーバーイベントログを表示する機能を追加しました。
トップ画面管理タブの一番下に「サーバーイベントログ」というボタンがありますので、

Eventlog1

これを押せば別画面でログ表示画面が起動します。
Eventlog2

通常はあまり使わない機能ですが、何か動きがおかしかったり視聴が開始できない時に、この画面でサーバーの動きを調べることができますし、掲示板で問い合わせる時もこの情報が役に立つと思います。
この画面は別ウインドウで起動し、「閉じる」で終了します。スマホやタブレットでも一応使えますが、「閉じる」ボタンが効かない場合がありますので、その際はブラウザの機能を使ってウインドウを閉じてください。

ここに表示されるログはTvRemoteViewer_VB の設定画面下

Tvremoteviewer_originallog

に表示されるものと同じです(但し自分自身のリクエスト/WI_SHOW_LOG.htmは省略しています)が、サーバー画面ではログがどんどん流れていくのに対してこのWeb画面では(意図的に)「更新」ボタンを押さない限り表示更新しない仕様になっています。

また簡単なログ分析機能として、サーチ機能を付けました。サーチ動作自体はファイル再生画面用のサーチ機能に準じますので、そちらをご参照ください。
サーチが効いている状態で「更新」ボタンを押してもサーチ条件は維持されますので、特定イベントだけを監視したい時にメッセージフィルタとして使えます。

例えば図では2つのキーワードを指定することで、特定のストリーム配信の進行を監視しています。Eventlogsrch1

またサーチ結果に出てきた特定のイベントの前後のログを知りたい時は、そのイベントをクリックして選択状態にした後、

Eventlogsrchclr1

「クリア」ボタンでサーチ条件を解除すれば、

Eventlogsrchclr2

選択したイベントが画面中央あたりに表示された状態になり、その前後のイベントも表示されますので、ログの分析に役立ちます。

19)手動配信

トップメニューで「手動配信」のタブを押すと、図のようなメニューが表示されます。

Tvremoteviewer_web12

ここからストリーム番号とBonDriver 、および解像度を選んで配信をスタートさせることができます。

ただしこの手動配信でしか出来ないような事も特にないので、今となっては何かうまく動かない時のテスト用途以外では使わないと思います。

20)その他の管理・設定機能

トップメニューの管理タブにある設定項目の使い方は、各機能に紐付くものはそれぞれの説明の中にありますが、ここではそれ以外の機能について説明いたします。

① ストリームの管理

Tvremotesysmgt

ここで現在Activeなストリームの一覧を見て、既に不要になったものは個々に、あるいは全部のストリームを停止させることができます。

ストリームの停止だけであれば視聴画面でも出来ますが、ここは各ストリームの内容と使っているBonDriverの情報を見渡すことができる唯一の画面ですので、ストリームの状況をチェックしながら整理するのに便利です。

② 背景画像と背景色の選択

TvRemoteViewer_VBの端末側はブラウザの機能だけで動いており、現在のHTML5やJavascript/JQuery/Ajaxの機能の豊富さ/パフォーマンスの高さを我ながら実感していますが、(つまらない話かもしれませんが)「余白」の部分がブラウザデフォルトの白い背景のままだと、

Nicotvremote_andro_main

いかにもブラウザの中に間借りしてます、という風にちょっとプアな感じです。

ちなみにこれも関係のない話で、最近往年のWinampの機能をHTML5とJavaScriptだけで動かしてしまった、という話もあって、技術的には結構参考になります(しかもやっぱりIEは対象外orz)が、それに対する反応が「良くやった」という声より、単に「ブラウザの枠が邪魔」という感じなのは笑えました。まあWinampはブラウザで動かす必然性が少ない(しかもローカルファイルを開く仕様は実はプラットホームフリーではない)のも事実ですが、ブラウザ上でアプリ実装する場合はやはり単に箱庭的なアプリではなく様々なブラウザ画面サイズを活かした機能域のスケーラビリティ (つまり小さい画面なら小さいなりに、大きければより広さを効果的に使う工夫)も必要で、加えて空白部の装飾も重要ですね。

そういう事の対策と言えるほどの大した機能ではありませんが、以下のように背景画像や背景色も指定できるようにしました。ここで指定した背景はトップメニューと視聴画面、およびファイル選択画面で有効になります。

Bgsample2

Tvremote_settingbgcolor

背景イメージはTvRemoteViewer_VBの\htmlフォルダに入れておけばここのプルダウンに出てきますので、好きなものを選んでください。解除するときは空欄を選択すればよいです。

背景色は背景イメージが指定されていない時に有効です。プルダウンでカラー名を選ぶことができます。
モノトーン系とか赤系・青系のように分類されていますので、いろいろ試してみてお好みのものを選んでください。
(何故ここでカラーチャートのような形にせずカラー名で選ぶようにしたのか?という点については、何となく名前で選ぶ方がどんな色になるのか楽しいんじゃないかと。。)

21)スカパープレミアムの配信について

当システムを使えはスカパープレミアムも、(BonDriverの使えるチューナーをお持ちであれば)ここまでの手順そのままでリモート/モバイル機器やMacで視聴することが可能になります。

Psprogram1
(上のスライドスイッチにスカパープレミアムのみを表示する"PS"という選択肢が加わりました。)

Psprogram2

といっても私自身スカパープレミアムの受信環境を持っていませんので、チューナーの設定/RecTask/EDCB(TVRock)の設定等についてあまり語れませんが、その辺は以下のサイトに

http://dtv.air-nifty.com/sphd/blog_index.html

とても詳しく説明されていますので、これから導入されるかたはぜひご参照ください。

また、当システムでの利用法もこちらに解説していただきました。参照がループするのもどうかと思いますので、設定手順そのものについては該当箇所をご参照いただくとして(但し現在のバージョンでは TvProgramEDCB_channels = の設定は不要になっています) 、ここでは特に、地上波/BS/CS110とスカパープレミアムの共存環境を想定してTvRemoteViewer_VB ver1.12以降に追加されたパラメーターを解説します。(といっても、本質的に1ヶ所だけ。)

共存環境で問題になるのは、以下の2点です。

① RecTaskの使い分け

スカパープレミアムは地上波/BS/CS110とはスクランブル解除の方式がB1とB25と異なるのですが、RecTaskはEDCB、SpinelやTvTest0.9.0 と違って1つのインスタンスで両方の処理の共存はできません。スカパープレミアムのスクランブル解除にはRecTask for SPHDを使いますので、1つのTvRemoteViewer_VBで共存させる場合は、他の放送波(B25)用のRecTaskとは分けて立てる必要があります。
(共存ではなくスカパープレミアム専用のTvRemoteViewer_VBを別個に立てる場合は、それぞれで今までの手順通りにRecTaskを(ポート番号を分けて)立てればOKです。
また、Spinel側でスクランブル解除するならRecTask1個でもOKです。Spinel側の解除では衛星チューナー同時使用数が3個以上になると負荷が重くなる弱点がありますが、SpinelではBonDriver_Spinel毎にスクランブル解除をSpinel側に依頼するかしないかの指定ができますので、例えばB1対応のRecTaskが手に入らない/うまく動かないような場合、1つのRecTaskに纏めた上でプレミアム用のBonだけB1処理をSpinelにやってもらうという選択肢もあります。)

このシステムで使うRecTaskが1個だけの時はここまでの説明通りの手順になりますが、共存環境でRecTaskを2個立てる場合、地上波/BS/CS110用のRecTaskは従来の設定画面で指定する一方、スカパープレミアム用のRecTaskは、TvRemoteViewer_VB.iniの

RecTask_SPHD =
Psrectask_3

にて指定する必要があります。(逆の指定にならないようご注意ください。)

② 番組表の使い分け

EDCB、TVRockとも、地上波/BS/CS110とスカパープレミアムの両方を管理対象にすることができます。(但しTVRockは対象放送波が3波までなので、RDCTを使って地上波とBS/CSを1つのチャンネル空間にまとめる等の工夫が必要です。そもそもプレミアムの利用はEDCBを使う情報が多いかと)

といっても共存環境だと放送局が非常に増えますし運用も異なると思いますので(当システムではEDCB、TVRockとも対象は1インスタンスということもあり)TVRockで地上波/BS/CS110、EDCBでスカパープレミアムを分担させるのも1つの方法になります。

その場合、現在は特別な設定は必要ありません。それぞれを分けて立てた上で、EDCB、TVRockそれぞれで必要なiniパラメータをセットするだけでOKです。

また、特にスカパープレミアム用という訳ではないのですが、チャンネル数が増えて観ない/契約していないチャンネルも多くなるということで、当システムの番組表から除外する指定がより有効になると思います。その場合iniファイルではもともと表示除外のパラメータ

TvProgramEDCB_NGword TvProgramTvRock_NGword

とEDCBから番組情報を取得しないパラメータ

TvProgramEDCB_ignore =

Psng_2

があり、今回のスカパープレミアム対応を機に、これらに局名ではなくサービスIDで指定することが可能になりました。
サービスIDが判らない時はRecTaskのch2ファイルを見ればわかります。

Psidカンマで区切られた6番目がサービスID

サービスIDで指定すれば正確なマッチングができますし指定もシンプルになりますので、この辺もご活用いただければと思います。

22)インターネットラジオ(超!A&G+)の実況付き視聴

TvRemoteFiles Ver1.48以降では、アニメ好きの方のためにインターネットラジオ「超!A&G+」の再生機能を追加しました。
これは文化放送が提供している視聴ソフトと比べて特に違ったことをする訳ではありませんが、インターフェースをTvRemoteViewer_VBに合せた上で2ch実況を流せる点がちょっと便利なところかと思います。

使い方は、トップページの「地デジ/ラジオ番組表」を押せば、

Radio0 (従来「地デジ番組表」だったボタン)

下の列にA&G+の番組が表示されますので、

Radio1

ここをクリック(タップ)して反転させた後、再度クリック(タップ)すれば視聴画面が起動します。

Radio6

ただ見た目は今までとほぼ同じですが、実際の動画/音声は局側がFlash(flv)で流しているソースをそのまま表示しているだけですので(TvRemoteViewer_VBサーバ側は殆ど何もしていない)、動画停止、シーク等の細かい操作はできず、サイズ変更(ズーム)の他には、もともとのFlashで提供されている音量調節のみが可能です。
(音量コントロールの操作域は表示より少し下にずれていますのでご注意ください。)

Radio3

また、Flashが故の以下の制約があります。

① Flashが再生できる端末のみで視聴できます。具体的には以下の表の通り。

端末環境Flashサポート状況=A&G+再生サポート
Windows (Chrome/Firefox/Opera/Edge) ○ (TvRemoteViewer視聴の前提として導入済の筈。
 またEdgeは標準でFlashプラグインが導入済)

Android(4.4以降)
 (4.3以前はFlash導入可能なので○)

○ Dolphin BrowserまたはFlashfoxを使う。
△「超オプ」を使って実況と映像をならべて再生。
iOS △専用アプリで音声だけを流しながら実況再生
Chromecast X
Mac ○ Flashを導入すればOK

Windowsであれば(Edgeを含め)どれもOKで、MacもFlashを導入すればOKです。
(但しWindowsMobile10はFlashをサポートしないようです。)
またAndroid環境では、4.4以降では多くのブラウザではFlashを利用できませんが、Dolphin Browserを使えばFlashの再生もサポートしており実用的です。
Dolphinで使うには、「設定」でJetpackをオンにし、「Flashプレイヤーを常にオン」にしてください。その上で こちらのサイトで下に辿っていけばFlash Playerのダウンロード・ボタンがありますので、そこからapkファイルをダウンロードしてください。
それを(拡張子がzipになっていたらapkに修正した上で、)野良アプリとして導入してください。以上でFlashが再生できるようになります。

また、Andoridでは上記のFlashが動くブラウザを使う方法以外に、アプリの「超オプ」を使って再生画面をPinPの形で再生しながら TvRemoteViewerで実況画面と並べて観る、という視聴方法があります。実況と並べて観る形になりますが、再生環境を選ばないので、Jetpackの使えないインテルベースのAndroid端末等で1つの選択肢になります。

iPhone/iPad/ChromecastではFlashが動かないので、どのブラウザでも再生できません。iPhone/iPadで2ch実況を流しながらA&G+を視聴するには、オフィシャルアプリ を導入の上で、映像は諦めて音声のみのモードにして裏で流し、TvRemoteViewer_VBを実況プレーヤーとして動かす、という使い方になります。

② コメント遅延時間をシステムが自動計算することができないため、「コメ遅延時間」は番組と聞き比べながら手動で調整する必要があります。(サーバや視聴ソフトの状態によって大きく遅延する事があります。)

③ 番組の開始/終了時間は表示されず、また番組進捗しても番組表の表示色は変わりません。

④ サーバがストリームを配信/維持する訳ではなく、それぞれの端末側が勝手に外部のサービスを利用するだけですので、トップページや視聴画面の「ストリーム一覧」にA&G+の再生状況は表示されません。視聴画面は端末側で毎回、「地デジ/ラジオ番組表」から起動してください。

以上のようにちょっと勝手の違った面はありますが、割と気軽に使える機能かと思います。(これ以外のインターネットラジオは2ch実況スレがないためここで使う意味があまりなさそうで、対応する予定は今のところありませんが。)
.

以上で一通りの操作手順の解説は終わりです。特に視聴画面についてはプラットホームによって微妙に使い勝手が違いますので、まずは使って慣れるのが早道だと思います。
.

3.外部から家庭内LANにアクセスして視聴するためにDynamicDNSとVPNを設定する

さて、1.の設定が終わっていれば、家庭内のLAN環境であればスマホ/タブレットでもPCでも、同じ手順でストリームを視聴できるようになります。

これを家の外から使うためには

・外部インターネットから家のLANに"セキュア"な「通り道」を作って、"192.168.*.*"のような「家庭内プライベートアドレス」へのアクセスをそちらの通り道に誘導する仕組み(VPN)

・その「通り道」を確かに家のルーターに向けて張るために、家のルーターに割り振られた(しょっちゅう変化する)「グローバルIPアドレス」にドメイン名でアクセスできるようにする登録サービス(DynamicDNS)

以上が必要になります。

これらを準備しておけば、外からでも家のルーターに与えられたドメイン名を使ってアクセスして、ID&パスワードで(内部LANと)「接続」すれば、あとは家の中のLANに接続したのと同じ状態になりますので、全く同じ手順でストリーム視聴ができるようになります。 
(違うのは回線の太さだけですので、無理のないビットレート(=解像度)指定などをおこなってください。またイントラネットからアクセスする際は、ご家庭のIPアドレス体系と重なっていないことをご確認ください。)
なお企業や一部ホテルのイントラネットからアクセスする場合、セキュリティポリシー上PPTPやL2TPを外にも出さない設定になっていて繋がらない事があります。これは企業のセキュリティポリシーにも依りますので無理にやることはお勧めできませんが、PCからのアクセス前提でより確実性を担保したい時には 3)でSSTPを併用する方法もあります。

一点つまらない事ですが重要な話として、VPNを設定すると自宅から2chに書き込みができない、という思わぬ問題が出るようです。これはリンクのようなルーターのパケットフィルタ設定で回避できますので、2chを使う方はVPN設定時に一緒にやっておけば良いと思います。

1) 設定手順

セットアップのフローは以下のようになります。

なおこれとは別の構築方法として 3)のSoftEtherを使うやり方もあります。そちらも構成要素はほぼ同じですが個別に導入する必要はなくパッケージ化されており、申し込み等も不要ですので、これから環境構築される方にお勧めです。
※なお、iOS10からPPTPが使えなくなっていますので、iPhoneやiPadをリモートで使いたい場合、PPTPしか使えないタイプのBuffaloルータではVPN接続はできません。またWindowsVPNサーバ機能もセットアップした直後はPPTPなので、L2TPやIPSecに切り替える必要がありますが、ちょっと面倒です。そういう場合もSoftEtherのほうが簡単です。

セットアップのフロー
 赤枠内をクリックすると手順の説明にジャンプします。(外部サイトを含みます。)

D
D
N
S






DDNS申込み DiCEのセットアップ ルーターDDNS ログ画面

V
P
N






ルーターVPN Windows VPN 端末側VPN

① DynamicDNS(DDNS)とVPNの設定は、それぞれルーターの機能が利用できるかどうかによって少しフローが異なります。(上図)
ただやることの大まかな流れは同じですので、一例として以下のリンクをご紹介いたします。大体の雰囲気を見ていただければ。自分で書かずに済みません(^^ゞ
リンク先ではDDNSのIPアドレス更新機能、VPN(PPTP)機能とも、ルーターの機能を使える前提で書いてあります。

http://blog.ap.teacup.com/applet/tomba/20111020/archive

リンク先ではVNCによるPCのリモート操作とTVRock番組表へのアクセスも説明されていますが、いずれもTvRemoteViewer_VBを使う上でズバリ役立つと思いますので、DDNSとVPNの設定が完了したら、そちらも試してみられると良いと思います。
(例えばTvRemoteViewer_VBが何かの理由でハングしたと思われる場合は、VNCを使ってTvRemoteViewer_VBの終了/再起動の操作を外部からおこなうことができます。)

ただ一点残念なのは、リンク先で紹介されているDynamicDNSサービスのDynDNSは、古くから良く使われていて多くのルーターがDDNSサポートしている無料サービスだったのですが、現在有料(年25ドル)になってしまいました。
それを置き換える無料DynamicDNSサービスについては、例えば以下のリンクに紹介されているものが使いやすいと思いますし、特に[mydns]が、このサイト管理者自身で申込み~導入の手順を丁寧に解説しており、DiCEの利用法もあわせてワンストップの解説になっていますので判り易く、お勧めできると思います。

http://viral-community.com/other-it/ddns-praise-service-2065/ 
(登録時の自分のグローバルアドレスはこの辺のサイトで判ります。)

② DynamicDNSサービスは、ご自宅のルーターのグローバルIPアドレスがころころ変わっていくのを自動的に検出してくれる訳ではなく、自分のグローバルIPアドレスが変わるたびに「自動的にIPアドレス更新登録」をおこなうクライアント機能が必要になります。
これをルーターがおこなうのがルーターDDNS機能で、またWindowsのプログラムとしておこなうのがDiCEです。

ただこれはそれほど複雑な処理ではありませんし、ルーターDDNS機能がサポートするDynamicDNS業者は極めて限られていますし、自社の運営するDDNSに誘導しようとします(別に使っても構わないのですが有料だったりしょっちゅう旧サービス廃止で買い替えを促進したりします)ので、通常はDiCEを使う前提で構わないと思います。
DiCEを使うPCではWindowsのスタートアップに登録するのが良いと思います。これは「いじくるつくーる」を導入して「起動時に毎回実行」で「C:\Program Files (x86)\Sarad\DiCE\dice.exe」を登録すれば簡単です。
DiCEは負荷は無きに等しいのですが、たま~に空振りしたり落ちていることがあります。いざ外から使おうとした時にVPN繋がらない、となると困りますが、DiCEは別に1台である必要はありません。家で(Atomでも)常に動いている複数のPCがあれば、2,3台で動かしておいても構いません。あるいはこのようなプログラムを使って落ちたら再起動させることで、信頼性を上げるのも良いと思います。

③ 一方VPNについても、ルーターにその機能がない場合は、それに代わって
Windowsの機能を使ってVPNを構築する手順をご紹介します。
これも大して複雑な設定ではありませんので、リンクのようなガイドを参考にすれば数十分でセットアップできると思います。
(ルーター・ポートマッピングのLAN側ホストには、いずれもPPTPサーバ役のローカルIPアドレスを設定します。)
Windows VPN設定のトラブルシューティングにはこの辺の記事も参考になります。自分でもちょっと試してみましたが、Windows VPNを使う時のコツは、上記トラブルシューティング記事にあるように「IPアドレス割り当て範囲」を明示的に指定することと、スマホ(等の端末側)で、「全ての信号を送信」の項目は、ガイドとは異なりOFFにすることでしょうか。(ルーターと違って通常のWindows PCではDHCPとかDNSの役割は設定されていませんので、一見VPNが繋がったように見えても前者の明示がなければ適切なIPアドレスが取得できず何もアクセスできない、後者がONだと家のLAN内にしか繋がらなくなります。)

なお上にも書きましたが、iPhone/iPadの場合iOS10でPPTPをサポートしなくなりましたので、Windows VPNもL2TP/IPSecに変更するための追加手順が必要です。ご注意ください。

VPNサーバ役のWindowsマシンはTvRemoteViewer_VBの動いているサーバでなくても構いません。(もちろん全て1台で賄ってもかまいません。) このマシンもIPアドレスは固定する必要があります。またVPNアクセスしたい時に動いていなければならないので、常時稼働しているPCが望ましいです。

④ Windowsの機能を使う方法は上記手順にある通り、外部インターネットにVPNサーバ役PCの特定ポートを公開することになります。
結局「家のルーター」に対して、外部から特定ポート宛のVPNセッションがリクエストされると、ルーターにその機能があればルーターが、機能がなければルーターはそれをそのままVPNサーバ用PCに転送してそちらが、まずID/パスワードをチェックし、OKであればそことリモートの端末との間でセキュアな(暗号化された)通り道が作られて、そこを通して通常のプライベートネットワークの通信が行なわれる状態になるわけです。 

WindowsのVPN機能がルーターのVPN機能に比べて劣るのは以下のような点ですが、とはいえ、当面の代替としては十分に使えると思います。
 ・ポートを限定するとはいえ、VPNサーバ役PCの一部を外に公開するのはルーターに比べるといくらかセキュリティ面が劣る。
 ・クライアント系WindowsのVPN機能だと同時に1端末しか繋げない。

リモート視聴の便利さが気に入り、多用するようになった時には改めてVPN機能付きのルーターを購入検討するのも良いと思います。対応ルーターはピンキリですが、家で使うならこの辺この辺で十分だと思います。(但し下にあるSoftEtherのほうが費用は掛からず高性能なので、よりお勧めです。)
VPN機能付きのルーターを使いたいけど今のルーターは光/ADSLのプロバイダから提供されているから簡単に交換できない、と思われるかもしれませんが、別にそれは普通の環境です。
そういう場合はプロバイダ提供のルーターと購入するルーターを2段にして、後者(のWAN側)を固定アドレスにして前者からDMZとして定義し、全てのLAN側機器は新しいルーターの下に繋ぐ形に変えれば良いです。(DHCPや無線LANホストの役目も新しいルーターに移行すればOK。この辺の図を参考にしてください。)
そうすれば2段目のルーターが実質唯一のルーターとしてフルに新しい機能を使えるようになります。

⑤ 端末側のVPN設定は、iPhoneiPadAndroidWindowsMac と、それぞれの手順を参考にしてください。上でも少し書きましたが、VPNサーバにWindows機能を使う時は、

iOS系であれば、「全ての信号を送信」の項目をOFFにする。
AndroidであればDNS探索ドメインを設定する。
Windows端末であれば「ゲートウェイを使用する」のチェックを外す。
Macであれば「すべてのトラフィックをVPN経由で送信」のチェックを外す。

という設定が必要です。(それをしないと、全てのインターネットアクセスをVPNを通してやろうとするため、DNS機能の無いWindows経由では外部インターネットに繋がらなくなってしまう。)
これは別にルータVPNを使う場合でも同じで、(この設定にしなくても繋がりますが)インターネットアクセス全てがご自宅のルーター経由になるわけで非効率ですし、その経路ではイントラネットからご自宅にアクセスしている場合はイントラネットに繋がらなくなりますので、とくに理由がない限りこの設定にしてください。

2) 解像度とビットレートの関係について

主に家庭内で視聴する場合は高めの解像度で問題はありませんが、リモート視聴を予定さていれる方は、家からプロバイダへのアップストリームの帯域、および利用する端末がそれぞれの場所で使える帯域をよく考えて、余り無理のない解像度を選んでください。各解像度のモードでストリームあたりに必要な帯域は以下の通りです。

Tvremoteviewer_bitrate3

アップストリームについては例えば、10Mbpsのアップリンク帯域がある場合は解像度[1280x720]でも3本のストリームを同時配信できますが、ADSLのように数百Kbpsのアップリンク帯域しかない場合は、見合った解像度をデフォルトに設定しておく方が無難です。

うっかり能力を超えた解像度に気付かずに動画開始しようとすると、画面が妙に重くなったり、バッファリング中の車輪が延々と回転するだけの状態になります。
またビデオのシーク時には部分的とはいえビデオファイルの中の情報を舐めていきますので、ビットレート/帯域 に余裕がないとシークや頭出しのレスポンスが悪化する点にもご注意ください。
逆にそういう現象はこの解像度の選択が原因というケースが多いですので、そういう場合視聴画面からもう少し軽いビットレートの解像度を指定し直して(→TV視聴時ファイル再生時)、ストリーム再起動すれば良いです。
仮に回線の状態が悪くても最も軽い[256x144L]解像度なら大抵は大丈夫だと思いますし、この解像度でもスマホ画面ならそこそこ視聴できます。また音声のみの[0x0sound]というモードを選択すれば、絵は出ませんが極めて低いビットレート環境でとりあえず音声は聴けます。
(但し音のみだとスマホやタブレット標準設定では、画面放置したのと同じく1分程度で自動ロックがかかりますので、利用する間は自動ロックを解除しておいてください。)

このような低ビットレート設定は通信条件の悪い場合に使えるほか、LTEや3Gの7GB制限に引っかかった場合にも有用です。
(何を隠そう、私自身最近それに良く引っかかるのが[256x144L]モードを作った理由です。リモート視聴はできるだけWiFiサービスを有効利用すべきですが、もしLTEや3Gで使いまくってこれに引っかかった場合でも、この辺なら100kbps程度の速度でも何とか使えますので、制限が解除されるまでの救済策になります。)
不安定な通信環境ではバッファが追い付かず再生が止まる事がありますが、この辺の操作もご参考に。

また別の問題として、あまり重いアップストリーム帯域を多用した場合プロバイダのアップストリーム帯域規制に引っ掛かる危険性はありますので、プロバイダの規制値(大量データ転送量制限:一日十数GBと決められている場合がある)をネットなどで調べておくのが無難です。
(それを越えてもいきなりペナルティがあるのではなく警告のメールが来ますので、その時点でアップストリーム使いすぎ、という事が判ります。)

この辺はもともとはファイル共有ソフトの帯域浪費を懸念しての対策なので、ストリーム配信ではよほど1日中高解像度で見っ放しでもしない限り大丈夫だとは思いますが。
(例えば2Mbpsの動画をずっと外から見続けた場合、約11時間で10GB + α のデータ転送量になります。)

リモート側で何台かの端末で同時に1つのストリームを受信する場合も、アップストリームの帯域はそれらを足した分だけ必要になります。(なぜなら配信はマルチキャストではなく1対1で個別におこなわれますので、帯域も同時視聴台数分を足したものが必要、ということです。)
逆にストリームが起動していても再生中の端末が無い場合は、回線帯域は全く消費しません。(サーバ側でひたすら配信用ファイルを作っては消して待機しているだけで、実際は配信されていない形になります。)

以上のようにどの辺の解像度を常用するかは、快適なリモート視聴環境にしていくために結構重要ですので、システムが完成したらよく視聴しそうなロケーションでいろいろ試してみてください。

3) SoftEther VPN を利用して1)より強力なVPN環境を作成する。

国内の大学発プロジェクトの成果物(かつてはベンチャー化されていましたが現在はオープンソースプロジェクトとなっています)であるSoftEther VPNを使うことによって、1)でご説明したものを、より強力な形で全て置き換えることができます。

但し非常に高機能であるため、初めて自宅とのVPNを構築される方にとっては(まずマニュアルの用語を理解するところからして)少々取っ付きにくいかもしれません。よってここではオプションとしてご紹介いたしますが、手順としても1)よりシンプルですので、これから導入される方にはこちらがお勧めです。(単に私が不勉強で知らなかっただけで;; ただ1)はVPNとは何ぞや?という説明にはなっていると思います。。) 現状この用途での利用については全て無料です。
 1)の方法と比べて、以下のような利点があります。(もちろん回線能力でストリーミングの絶対性能は縛られますのでそこを変えることはできませんが。)

① VPNを構築するのに必要な機能はパッケージ化されています。またデフォルトでPPTPよりセキュリティの高いL2TPを利用できます。
L2TPを利用するため、最初にあるような「2ch書き込みのためのパケットフィルタリング」のような設定も不要です。

② DDNSを別途契約する必要はありません。導入の際に自宅のドメイン名を設定することができ、それをそのまま利用できます。(実際はプロジェクトが運営するサーバがDDNS機能を提供しており、設定時に自動的に接続・登録され、更新もDiCE相当の機能で自動化されています。)

③ WindowsVPNでは(Windows Server版でない限り)同時1クライアントでしか利用できませんが、その制限がありません。またルーターVPNを使えば複数クライアントの同時利用はできますが、数千円台のルーターでは性能が低く、そこそこの回線能力がある場合ボトルネックになります。その点SoftEtherの場合一般的なPCをVPN Serverとして使いますので、処理能力は遥かに高くなります。
ちなみに1)のWindowsVPNを立てる場合と同じですが、SoftEther VPN Server役のWindowsマシンはTvRemoteViewer_VBサーバと同じでも構いません。IPアドレスは固定する必要があります。

1つ注意点ですが、SoftEtherは定番とはいえそれなりに高機能なソフトが常駐することになるので、システムや他のソフトとの相性が起きることもあります。(早い話私自身の経験ですが、録画PCと同居させたところそれまで安定していたシステムが日に1回の頻度でハングするようになりました。)
負荷はPCにとって大したものではないので、そういう場合余っているノートPC等があれば、VPNサーバとして別立てにするのもお勧めです。

詳しいマニュアルも公開されています。

https://ja.softether.org/4-docs/1-manual

が、豊富な機能を詳しく説明したマニュアルですので、こういう単機能の利用のためには取っ付きにくいかもしれません。
(逆にここで利用する機能についてはWindowsへの導入リモートアクセスVPNモバイルにおけるVPN あたりにまとめてありますが、これは端折り過ぎな気がします。)

そこでこういうケースでの導入事例として、こちらをご紹介します。

http://solomon-review.blog.so-net.ne.jp/2014-12-13

読みながら導入してみて、判らないところがあればマニュアルの各項目を参照する形が良いと思います。
Windowsクライアントの接続設定はSoftEtherページのこちらに、またAndroidはここ、Macはここにあります。
ちなみに1)での注意点と同じですが、ガイドでは端末側で「すべての信号を送信」を 「オン」の設定にしていますが、これだと全てのインターネットアクセスが自宅経由になってしまうので、特に理由がない限り1)での推奨通り、「OFF」等にすることをお勧めします。

私自身良く判らず混乱していたのは、SoftEtherのマニュアルには「NAT トラバーサル機能を使うのでルータ/FWのポート開けは不要」というようなことが書いてある一方、導入事例では「やはりポートを開ける」という情報が圧倒的に多い事です。
結果としては上記記事の説明によると、「Windowsから、また特にVPN Azure中継サービスを併用する場合は穴穿け不要(参考)、しかしスマホやタブからL2TPで接続する場合は設定すること。」という事になるようです。
開けなくても良い環境もあるかもしれませんが、一応私が理解できている手順は以上です。

孔が開いてないはずのルータ・FWを越えてしまうというのはかつてSoftEtherが大企業のシステム管理者の頭を抱えさせた特徴なのですが、元々のSoftEtherはPCを相対させたリモートブリッジのような使い方が主に想定されていた気がしますので、その場合はこの特性が効いてくるんだろうと思います。ただ汎用的なVPNとして使うにはL2TPのようなプロトコルサポートも必要ということで、ルーターの定義も必要になるのでしょう。
Winノート/タブでの利用が前提ならSSTPを使ったルータ・FW越えも可能だと思いますので、学内や社員寮などでそういった環境に鯖を置かざるを得ない方は(管理者に断りの上で)試してみるのも良いかもしれません。

外部視聴のための手順は以上です。

4.使い勝手の向上とストリーム起動の安定化のためにSpinelとRDCTを利用する

さてTvRemoteViewer_VBを実際に使ってみると、これを使う上でSpinelが非常に有効であることに気が付きました。
といっても私の家の環境ではもともと全てのチューナーをSpinel経由で使っているので、何かトラブルがあって改めてSpinelでそれを解決した、という事ではないのですが、何度かうっかり操作をやっては「これはSpinelがなければフラストしていたな」と感じることがあり、操作性の上でもうっかりミスを防ぐためにもメリットが大きいと考えています。

またテレビ番組表が3波区別なく表示されているのに対して、BonDriverが地上波・衛星用に分かれているとBonDriverを一々チャンネルに合わせて選択しなければなりませんが、RDCTを使って「BonDriverの3波化」をおこなえばこの辺を意識したりうっかり間違える事もなくなり、使い勝手が上がります。
こういう利点がありますので、既にSpinelが動いている環境ではRDCT併用を推奨、またSpinelが動いていない環境でも、この目的でSpinelを入れるのもお勧めしたいと思います。

1) 主要なメリットを以下にまとめます

Spinelを使うメリット

・TvRemoteViewer_VB配信中に同じBonDriverを使って録画タスクが開始しようとすると、Spinelがなければ録画タスクが該当BonDriverを掴めないため録画失敗する。リモート環境ではそのような事態を十分把握できない。

・更に配信タスクがハングした時に管理画面で「配信を停止」してもRecTaskはBonDriverを掴みっぱなしになる事があり、Spinelで優先権を設定していなければ録画タスクは失敗する事になる。

・Spinelを経由して録画タスクに優先権が設定されていれば、先に使っていたストリームはその時点で停止するが、録画タスクに影響はない。

・既に配信で使っているBonDriverを別の配信でうっかり重複使用してもエラーにならない。1個のチューナーで何種類かの解像度での並行配信も可能である。

RDCTを使うメリット

・地上波とBS/CSのBonDriverを束ねることによって、「チャンネルごとに使うBonDriverの種別を意識する」という必要がなくなり、全てのBonDriverで全てのチャンネルを視聴でき、使い勝手が上がる。
特に視聴画面から直接別のチャンネルに行きたい時に、地上波/BSCSの区別なく移動できるのが便利。

・本来独立して使える地上波と衛星のチューナーを1個にまとめるのは贅沢に思えるが、実は1個のBonDriver_RDCTで地上波と衛星は独立して操作できる。

2) Spinelの説明と導入方法

Spinelの概要は以前の記事でまとめましたので、「何ぞや?」という方はこちらをご参照ください。以下の絵はそこからの抜粋です。

Spinelexcl

これからSpinelを導入される方はこちらを見ながら導入されると良いと思います。
リンクの記事にあるSpinel定義体はPT3やQ3PE、Bulldogなども定義した最新版になっています。

これはドングル用の解説ですが、ある程度汎用性を持たせてあります。(「その他のプログラムの導入」の前、PX-S1UDやPX-BCUDに関するものを除いたSpineの導入とBonDriverの配置だけ実施すればOKです。またSpinelさえ立ててしまえば BonDriver_Spinelの設定については後ほどご紹介する導入支援プログラム GenBonSpr で自動生成できますので、作業不要です。)

なおSpinelを導入したら、他のチューナーを使うアプリケーションでもBonDriver_Spinelを使うように設定変更しないとあまり意味がありません。(設定変更しなくても使い続けられるのですが、共有や同時使用時優先権の機能が効きませんので、Spinelを使うメリットがないです。)

TVTest、EDCBについてはBonDriverをBonDriver_Spinelに置き換えるだけで良く、TVTestの場合はch2ファイルも4)のGenBonSpr で一括して生成できます。

TVRockの場合はDTune.batを再度動かして、BonDriverをそれぞれ地上波・衛星対応のBonDriver_Spinelに書き換えれば良いです。

更にTVRockでBonDriver_RDCTを使いたい場合はチューナーの性格が変わりますので少々の追加作業が必要ですが、これについてもGenBonSpr 添付のreadmeで説明してあります。

3)RDCTの説明

RDCT(BonDriver_RDCT)は、異種のBonDriverを組み合わせて単一イメージで利用できるようにする一種のラッパーです。
RDCTは同種のチューナーを複数組み合わせて中で順番に割り振る、というような使い方もできるのですが、ここではあくまで「地上波チューナーと衛星チューナーを組み合わせて仮想的な3波チューナーにする」ツールとして使います。

また配下に置くBonDriver は必ずしもBonDriver_Spinel である必要は無いのですが、RDCTはもともとBonDriver_Spinel での利用を主眼にしていますし、実際に(BonDriver_Spinel を使っている限りは極めて安定しているのですが)普通のBonDriverを配下に置くとやや不可解な動作が出てきます。
ここでは1)にあるSpinel環境由来のメリットとの相乗効果を併せ、RDCTとBonDriver_Spinelの併せ技としたいと思います。
.

4)BonDriver_Spinel/RDCT自動生成プログラムを使ってTvRemoteViewer_VB(用RecTask環境)にBonDriver_RDCTを導入する。

Spinelさえ動いていればBonDriver_Spinelはコピペしながら決められたルールで作っていけば良いのですが、最も面倒で間違いも起こしやすい所だと思いますし、それとRDCTが組み合わされば尚更で、構成変更時のメンテナンス性も悪いです。

この辺がSpinelのとっつきにくい所とは前から感じていましたので、RDCTも組み合わせた自動生成プログラムを前から考えており、実際にその部分は完成していました。
ただ、それだけではなくTVTest/TVRock/EDCB/その他BonCasLinkやSpinel本体 等についても導入補助できるプログラムに仕上げようと、のんびり作成中だったのですが。

しかしここでRDCT化が特に有用ということで、TvRemoteViewer_VBの導入支援用としてBonDriver_Spinel/RDCTに関する機能だけ切り出したものを公開したいと思います。

これを使えばお手持ちのチューナーを組み合わせてRDCT化したBonDriverをほぼ自動生成できますので、それをRecTaskの環境に入れるだけでTvRemoteViewer_VBから使えるようになります。
以下で利用手順をご説明いたします。

① 動作環境

(1) OS・前提ソフトウェア

Windows XP/Vista/7/8.x
Spinelが(何れかのPCに)導入され動いていること。

(2) VC++ 2010(x86)のランタイムが必要ですので、まだ導入されていない方はリンク先からダウンロード&導入してください。

(3) また言わずもがなですが、BonDriver_Spinel(RDCT)を動かす各PCで、以下のFrameworkが必要です。
 .NET Framework 3.5 Service Pack 1
 .NET Framework 3.5 SP1 Language Pack
 .NET Framework 3.5 SP1 修正プログラム KB959209

これは TvRemoteViewer_VB用のFramework 4.xとは別物ですので、こちらも忘れず導入してください。
お使いのPCにどのバージョンのFramework が導入されているかは、Framework 4.xの時と同じバッチでチェックできます。これを使って

.NET Framework 3.5 Service Pack 1 がインストール済みです
 日本語Language Pack(Service Pack 1)がインストール済みです

と出てくればOKです。
未導入の場合はXP/Vistaであれば「Windows Update-重要な更新プログラム」から導入できます。個別に入れる時は以下のリンクから順に、お使いのPCに合ったものを導入してください。
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&displaylang=ja
http://support.microsoft.com/kb/959209

またWindows7、Windows8では本来導入済ですが、有効化されているかどうかチェックし、されていない場合は有効化 をおこなってください。

②プログラムのダウンロードと解凍

このプログラムはSpinelを動かしているPC上で実行してください。ネットワーク上にある別のPCのSpinelフォルダを参照しても、正しい宛先アドレスが判らないため動作しません。

(1) 以下が導入支援プログラムの本体になります。zipファイルをダウンロードし、適切な実行フォルダに解凍してください。

「GenBonSpr.zip」をダウンロード

ちなみにこのプログラムを別の場所にコピーする場合は、このフォルダ構造ごとコピーしてください。(初期状態でサブフォルダの中にあるファイルは、プログラムの実行に必須です。)

このプログラムはネットワークの共有フォルダからでも実行できますし、またUSBメモリからでも正しく動作します。複数のPCでSpinelが動いている時は、そうやって共有しながら順番に動かしていけば各Spinel用のBonが一括して作れますし、各種取り込みも1回で済みます。

(2) 準備が済んだらGenBonSpr.exeを ダブルクリックすれば、以下の初期画面になります。

Genbonspr_init

赤枠内をそれぞれ指定してください。
リンクをクリックすればブラウザで、各プログラムをダウンロードするページが表示されますので、適切にダウンロードし、ダウンロードが終わったら(圧縮ファイルのままで構いませんので)それを指定してください。
選択ボタンを押せばファイル/フォルダの選択ダイアログが表示されますし、ファイル/フォルダを直接指定欄にドラッグ&ドロップしても構いません。

指定が終わったら[次へ]を押してください。内容に問題がなければ次の画面に移ります

(4) Spinel環境を解析した結果のBonDriver一覧が表示されます。

Genbonspr_tunerlist

ここでの作業は地上波用と衛星用のBonDriverを1個づつ指定しながら「コンボ化」ボタンを押して、RDCT化する組み合わせを決めていくことです。

Genbonspr_combine

「コンボ化」が指定されたものは、その組み合わせでBonDriver_RDCTが生成されます

ネーミングルールは図にある通りですので、順番を変えたければ対象を選択した上で↑↓ボタンを押してください。

「コンボ化」が指定されなかったものは、そのままBonDriver_Spinelが生成されます。

指定が終わったら「次へ」を押してください。

(5) この画面ではch2ファイル生成に使うプリセットファイル(BS/CS)と、地上波ch2ファイルを参照する既存のTVTestフォルダを指定します。

Genbonspr_getch2

プリセットファイルは特にこだわりが無ければ、「ダウンロードのリンク」からダウンロードしたものを指定してください。
これは最新の編成になっている筈ですし(TvRemoteViewer_VBの動作に悪影響のある)難視聴用チャンネルも除いてあります。

尚、BSのチャンネルマップは機種毎や同じ機種でも(例えばPT-S.ChSet.txt の定義次第で)違ってくるのですが、ch2ファイルの生成時にできるだけその辺の特性に対応させています。(従ってch2ファイルの内容は個別に違うことがあります。)

地上波については、既にお使いのTVTestがあればそちらを指定してください。あるいは「テンポラリなTVTestを使ってチャンネルスキャンを実施する」を指定すればここでスキャンすることもできます。その場合次の画面になります。

Genbonspr_tvtscan

ここではスキャン用TVTestのあるフォルダ(または新規にダウンロードした場合はそのzipファイル)を指定して、地上波チャンネルスキャン用最小構成のTVtestを起動します。

「スキャンの開始」ボタンを押せばブラウザでスキャン手順が表示されますので、その手順に従って、同時に立ちあがったTVtestの初期画面を操作してください。手順通り進めれば地上波チャンネルのスキャンが動き出しますので、終了まで数分待ってください。

なお放送していない局はスキャンできませんので、この作業をやるときはできるだけ(深夜のような放送休止のある時間帯を避けて)どの局も放送している時間帯にしてください。漏れがあると後でやり直しが発生します。
スキャンが終わったら「OK」を押してその後TVTestを終了させれば、自動的にch2ファイルが取り込まれます。

全て指定が終わったら「生成」を押してください。BonDriver_Spinel/RDCTと対応するch2ファイルの生成が始まり、メッセージ欄に進捗が表示されます。

(6)生成完了したら以下の画面になります。

Genbonspr_finished

ここにある通り、生成したBonDriver_Spinel/RDCTは以下の場所に保管されます。

\GenBonSpr実行フォルダ\resources\コンピューター名
\BonSpinel
  |→ Watch
  | 視聴用に使うセットです。幾つでも共有でき、家庭内LANの何処からでも視聴できます。
  |→  Rec
  |     TVRockやEDCBなど録画用です。チャンネル優先権を持ちますので安全な録画が出来ますが、
  |     ここの同じBonDriverを2箇所以上で使わないようにしてください。(片方の利用が弾かれます。)
  |
  |→  Watch_Local
  |     上記Watchと同じですが、Spinelと同じコンピューター(OS)上だけで使えます。
  |     TCP/IPの代わりにnamed pipeを使いますので負荷が軽いです。
  |→  Rec_Local
      上記Recと同じですが、Spinelと同じコンピューター(OS)上だけで使えます。負荷が軽いですので
      Spinelと同じコンピューター(OS)でTVRockやEDCBを使う場合はこちらを使ってください。
\BonSpinel64
       上記セットの64bit版です。通常の32bit版TVTest/RecTaskでは使えません。敢えて使う必要はありませんが、
       64bit版TVTestや64bit版EDCBを導入する時はこちらを使ってください。

ここまで終ったら、TvRemoteViewer_VB用の\RecTaskフォルダに、古いBonDriver関連ファイルを削除した上で、上のWatchフォルダ (但しSpinelと同じPC上であればWatch_Localフォルダでも可) の中身を丸ごとコピーしてください。 

以上でTvRemoteViewer_VB を再起動すれば、BonDriver_Spinel/RDCTを使う環境が完成します。

.

終わりに

機能的にはかなりリッチなものになりましたが、導入が面倒なのは自覚していますので、後日作成したアップデートプログラムを拡張して、導入支援プログラムも作成したいと思っています。ただそもそも外部プログラムとの連携が多いので、それほど単純ではありません。まあ、体力がある時にでも仕上げようと思っています。

補足. 改訂履歴

・2017/4/24 TvRemoteFiles ver1.90
1)一部2ch板のフォーマット変更に対応(とりあえず)
2)hls.jsを実装 (トップメニュー 管理タブで選択してください。iOS以外なら大抵のプラットホームで使えますが最新のブラウザが推奨です。)
3)デフォルト属性に音声(正副)の選択を追加
4)視聴画面サイドパネルにニコニコ実況の表示/非表示の選択ボタンを追加。

・2014/10/6 初版

2014年8月 3日 (日)

電源制御型USBハブでUSBチューナーの見失い状態を解消する。(PX-W3U3、S3U2ほかUSBチューナー汎用)

当Blogでたびたび取り上げているPX-W3U3等のUSBチューナーでは、スリープ/休止状態からの復帰やシステム障害から再起動する際に、一部が認識されなくなるケースがあります。
これはPXシリーズ固有の話ではなく、そもそも電源制御型ハブ利用の参考にさせていただいたこの辺の記事も、「24時間ワンセグ野郎」で使うチューナーの見失いに対する対策としてELECOMの電源制御型ハブ(U2H-SW4)を使う、という内容でした。

これは非常に有効な対策で、応用の監視バッチとともに過去記事で紹介させていただいていたのですが、残念ながらこのU2H-SW4

は既に製造終了しており、今年の7月に入ってから遂に流通在庫も尽きてきたようです。
まだ一部ネットで売られているものも見かけますがプレミア価格が付いており、もともと千円前後で気軽に導入できる対策としてご紹介していた意味がなくなってしまいました。
そこで代替策を、と考えたのが今回のきっかけです。しかしこれは良い契機で、調べていくうちにUSB機器の見失いや性能低下を防ぐにはどうすれば良いかの解決法がわかってきた気がしますので、この記事でご紹介させていただきます。

例によって「そもそも」の経緯や前置きが長いですので、その辺を飛ばしてすぐに対策を立てたいかたはこちらにジャンプしてください。

1.なぜ必要?

USBチューナーの見失い現象は、PCとの組み合わせによって全く起きなかったり無視できない頻度で起きたりとまちまちで、起きにくいシステム環境を作ってしまえば気にもならない話なのですが、私がこのような話に興味を持ったきっかけも、後から録画サーバとして追加した水冷機でそれまでのPCでは起きなかったこの現象が度々起きるようになったのが原因でした。

このマシンの場合は、システムがハングした際に無理やり電源OFFにして再起動した時などにこの現象が起きがちで、USB2.0/3.0のどちらのポートに繋いでも余り関係ないようです。起きてしまうとPCを何度再起動しても治らず、復旧のためにはUSBケーブルの抜き差しが必須で、ちょっと面倒でした。
それの根本的な対策を探しているうちに上記記事を見つけ、そこで提供されていたプログラムと自作の監視バッチを組み合わせたところ完全に対策できたため、ご紹介させていただいた経緯があります。

思うにUSBデバイス、特にUSBチューナーのようなある程度自立したコントローラを持って高度な処理をしているデバイスはかなり独立した動作をしており、本体のPCとはUSBケーブルを介した「ゆるい」結合になっています。
本体PC側が不意に再起動しても内蔵カードのようにハード的なリセットがかかるわけでもなく、PC側とのやりとりが突然断たれた等によってバッファ・オーバーフローなどおかしな状態になってしまうと「USBを抜き差ししなければ回復しない。」という状況が起き得るようです。
抜き差しをすればUSBからの給電が途絶えますので、基本的にUSB給電で動く設計になっているデバイス・コントローラも強制リセットされ、ほぼ例外なく復旧します。ただこれは日常の対策としては面倒ですし、録画用デバイスのように年中繋ぎっぱなしのUSB機器ではいつの間にか認識不良が起きていたのに気付かず大事な録画を失敗してしまった、ということに繋がります。
そこで、PC側のプログラムで認識不良がないかを適時監視し、発見したら「意図的にUSBの給電をOFF/ONしてデバイスをリセットする」という仕組みが必要になるわけです。

実はこの辺の特性も、「PCによって認識不良が起きなかったり起きやすかったりする」という違いが出る原因になっています。
USB給電はマザーボードによってシャットダウン/スリープ/休止の状態で給電を切るものもあれば入れっぱなしのものもあってまちまちで、設定ができるものもできないものもあります。また後に述べますが、OSのコマンドでリスタート時やサスペンド時に給電を切るタイプのハブ・コントローラもあり、そういうのが内蔵されているマザーであれば頻繁にUSBデバイスにもリセットがかかっているため、現象が起きにくくなっているわけです。
実際今になって調べてみると、もともと私がW3Ux用のメインマシンに使っていたITX機の場合、Windowsのリスタート時にUSB給電が必ず一旦切られる作りになっていました。いっぽう上記新サーバの水冷機は常時給電タイプでUSBチューナーがリセットされるタイミングが無く、そこに振る舞いの違いが出たようです。

しかしマザーやPCでそういうのが明記されているのは希ですし、わざわざここの仕様でPCを選ぶのも本末転倒です。(むしろスマホや携帯オーディオの充電のため逆に「電源切っても何があっても常時USB給電しますよ!」と謳ってるマザーが増えているのが現状。。)
そこで後付け対策として、「その手の」ハブ・コントローラを内蔵したUSBハブが役立つわけです。

2.USB給電をどうやってOFF/ONするか?

ELECOMの電源制御型ハブ(U2H-SW4)がスグレモノだったのは、「プログラムからポート毎の給電をOFFにしたりONにすることが可能」と明確に謳われていて、Windows用のプログラムも添付されていたことです。
ハブに添付されたプログラム自体は余り出来の良いものではなかったのですが、その動きを解析してバッチからコマンドを出せるようにしたツールを上記iteclubのブログさんが公開されており、それを使えば任意のタイミングで「USB給電のOFF/ON = USBチューナーのリセット」 が可能になっていました。
このハブが入手できないとすれば、代わりの物としては以下の3つの可能性があります。

1)実はU2H-SW4と互換のUSBハブが後継品や他の会社から出ている。

2)U2H-SW4と互換ではないけど、給電を制御するプログラムが公開されているUSBハブが存在する。

3)明確に謳われていないものの、ある種のUSBハブではプログラムで給電制御が可能である。(プログラムが無いなら作れ!)

で、結果ですが、1)はすぐに存在しないことが判りました。エレコムさんとしても震災に先立つ2010年に「節電ハブ」としてU2H-SW4を売り出したのですが、後継品も存在しないということはあまり良い商売にならなかったのでしょうか?ちょっと残念です。

2)についてはいろいろ調べた結果、「Linux向けであれば」給電制御のプログラムが有志によって公開されているハブが存在していることが判りました。具体的な現行品としてはシステムトークスさんが出している「SUGOI HUB4X」で、


全ポートではないのですが、うち2ポートが給電制御可能となっており、値段も二千円台とまあまあです。

参考にした記事

http://solarisintel.blog.fc2.com/blog-entry-5.html
http://yamada468.blogspot.jp/2012/05/usbonoff.html
http://www.ebimemo.net/diary/?date=20110530

公開されているLinux向けソース
http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/
http://www.ebimemo.net/diary/pic/201105/hub-ctl.c

で、このような記事やソースプログラムを調べてみて判った意外な事実は、以下のような点です。

 ・本来、標準的なUSBハブ・コントローラー・インターフェースには「ポート毎の給電OFF/ON」のコマンドが定められている。

 ・しかし、多くのUSBハブでは給電制御の回路が省略されており、そのようなコマンドには無反応になっている。(常時給電している。)

 ・本来の給電制御コマンドを受け付けるハブとして ELECOM U2H-G4S、SANWA USB-HUB14GPH(いずれも既にWithDrawn しかも高価!)といったものがあり、現行品で値段も手ごろなものとしてSUGOI HUB4X がある。

 ・そのようなUSBハブに本来の電源制御コマンドを発行してポート毎の給電制御をおこなうのが、上記プログラムである。

これはかなり期待ができる内容ですね。残念ながらこれらのハブを制御できるようなWindows向けプログラムは見つからなかったのですが、このLinuxプログラムを解析してWindowsにポーティングできれば目的は達せられますし、それが特殊な仕様ではなく「USBハブ・コントローラーの本来の仕様」なのであれば、そうと謳われていないハブでも制御できる物が見つかる可能性も高く、3)の話にも繋がります。

3.案ずるのは易し、しかし生むは難し

しかし、上記Linuxソースとiteclubのブログさんが公開されているU2H-SW4制御用のソースを見比べているうちに、話はそう簡単ではないことが判ってきました。なるほどWindows版が公開されていない訳です。
というのはLinuxではUSBハブのコントローラー自体が/proc/bus/usb以下に見えているので、そこにメッセージを送る(usb.hをincludeした上でusb_control_msgコマンド等を発行する)だけで様々なコマンドを発行することができます。
具体的には例えば、

03 08 00 01 00 00 00

というコマンドを送れば、「ポート1に電源供給を開始せよ」という意味になります。
上記リンクにあるhub-ctl.cもそのような手順で制御していました。

ところが、Windows環境下ではこの辺の「USBハブ(デバイスマネージャでユニバーサルシリアルバスコントローラーの下に見えているデバイス)」タイプの制御はOSがしっかり握っており、これに対してコマンドを発行するAPIライブラリは殆ど公開されていません。

デバイスタイプがHID(ヒューマンインターフェースデバイス)であればライブラリが公開されており、hidsdi.hをincludeするだけで、ファイルにリード/ライトする感覚でコマンドのやりとりができますが、それとは難易度が段違いに高くなります。

ELECOMのU2H-SW4の場合はUSBハブとしてはかなり特殊な仕様で(というか、給電制御用のコントローラーを別に持っていて)、それがHIDデバイスとして見えており、ここにコマンドを発行することでWindowsから電源制御ができていたのですが、試しにSUGOI HUB4Xを入手して接続してみたところそのようなHIDデバイスは認識されず、すなわちU2H-SW4と同じような手順では制御できないことが判りました。

残る方法としてはWindowsでこのUSBハブ型のデバイスに命令を発行する手順を見つけてゴリゴリとプログラムミングするしかありませんが、情報も少ないですし、そのような原始的な手法をうっかり行うと(本来デバドラが管轄している領域に立ち入ることになりますので)マザーのルートハブが動作しなくなったりなど不安な事例もありましたので、一般に公開するプログラムとしてはどうかと思えました。

4.いやもっと簡単な方法があった

行き詰ってぼんやりとUSB HUBの制御を解析した記事を眺めていたところ、何とWindowsはUSB HUBを認識するハンドシェイクの過程で、わざわざUSB HUBのポート1個ずつに「電源供給を開始せよ」というコマンドを送っているではありませんか!
大抵のハブでは無視されるこの「電源供給を開始せよ」というコマンドを律儀に送っているのは上の方で述べたように、

・本来、標準的なUSBハブ・コントローラー・インターフェースには「ポート毎の給電OFF/ON」のコマンドが定められている。

からと思われますが、それだけではなく

・本来、標準的なUSBハブ・コントローラー・インターフェースではバスリセットのコマンドの直後には給電がOFFになっている。

ためではないかと予測しました。

バスリセットでの電源OFF自体は情報がほとんどなく予測にすぎませんでしたが、これ以降は実験したほうが早いと思い、せっかく買った「本来の標準的なUSBハブ・コントローラー・インターフェース」になっているはずのSUGOI HUB4Xの左2ポートにUSBライトを繋ぎWindowsを起動してみたところ、確かにWindows開始時に「BIOS(UEFI)の画面」から「ようこそ画面」に移る間に一瞬、USBライトが消灯→点灯することを確認しました。

節電ハブの機能としてこれ以外にも「ホスト側のUSB給電が停止すると連動してハブの給電も停止」という動作をしますが、例え繋いでいるPC側のUSBポートが常時給電タイプであっても、このようにWindows開始のタイミングで一瞬給電のOFF/ONが起きます。
家にある他の何種類かのUSBハブ(SANWA USB-HUB226G、ELECOM U2H-MB410BBKなど)ではこの現象は起きず、一方Windowsが使っているドライバはGeneric USB Hubでどれも同じ(=同じコマンドを送っている筈)ですから、これは確かにWindowsのコマンドによって起きていで、それを正しく実行できるハブのみがこの動きをするものと判断できます。

Windowsは確かに、起動時にUSBハブにバスリセットのコマンド→給電開始せよのコマンドを送っており、対応したハブであればその瞬間に(短い時間ですが)給電が切られるようです。
その間僅かコンマ数秒程度ですが、USBライトで確かな点滅が確認される程度の時間であり、USBチューナーにリセットをかけるには充分です。
チューナーだけではなく一般的なUSB機器であってもここでリセットされることになるわけで、こういう解釈も可能です。
「USB機器は、本来の仕様のUSBコントローラやUSBハブに繋がっている限り、OS起動と連動してリセットがかかる仕組みを持っている。しかし現在の多くの内蔵ポートやUSBハブでは給電制御の仕様が省略されているため、それが機能していない。この原因でイレギュラーな状態が保持されてしまう事がある。」と。。

なお、この「Windows起動時の点滅の振る舞い」 はPC側USBポートの給電仕様によっても変わります。PCによってはハード的なリセットによって一瞬本体のUSB給電が途切れるものもあり、その場合はBIOS画面が表示される瞬間にライトが消え、Windosが起動している最中に(Windowsのコマンドによって)再点灯する場合もあります。
動画のように一瞬の消灯が起きるパターンは全く途切れることなく常時USB給電しているPCの場合で、何も対策しなければ最も見失いの起きやすいタイプになります。
.

さて、次に、任意のタイミングでこの給電OFF/ON をおこなうために、DevConユーティリティを使うことを考えました。
DevConユーティリティはUSBデバイスに、Windows起動時のハンドシェイクと同等なリスタートコマンドを発行できるため、過去記事でもW3Ux/S3U2の見失いの対策として一時ご紹介していたのですが、対応策としては不十分であり(結局USBチューナー側がハングしているケースではリスタートコマンド自体を受け付けない)、もっと確実な方法として「ELECOMハブを使った給電OFF/ON」の手順に差し替えた経緯があります。
しかし今回の場合、デバイスそのものではなくデバイスが繋がっているUSBハブにリスタートコマンドを送る事によって、デバイスの状態に関係なく給電OFF/ONして確実なリセットができますので、根本対策になりそうです。
DevConは対象がUSBハブの場合、ハブの下にデバイスが繋がっているとこの辺の記事で紹介されているような、disable/enableコマンドは受け付けませんが、restart コマンドは受け付けます。実際にテストしてみた結果、

確かにrestartコマンドで給電OFF/ONが観測され、繋がったデバイスをリセットできることがわかりました。
これはELECOMハブと同じというよりも、ELECOMハブの場合はOSの関り知らない所でのデバイス・リセットなので、それをOSにきちんと認識させるためにある程度電源OFF→ONの時間を置く必要がありましたが、こちらは正規のOSの再認識プロセスの中でリセットが行なわれて確実かつ速やかにデバイスが認識されるので、より信頼のおける手順になります。この仕組みを使うことがチューナー見失いの根本対策になることがわかりました。

5.バリエーション

以上の経緯でSUGOI HUB4X とDevConでUSB給電制御ができることが判りました。制御といっても一瞬OFF/ONするだけで、上記2-2)で紹介されているような、ポート毎に継続的にONしたりOFFしたりという制御ではありませんが、目的がUSBチューナーのリセットであればこれで充分です。

ただ、SUGOI HUB4X だけだとまたいつ販売終了になるかもわかりませんし、必要なのは特殊な作りではなく「電源制御を省略していない本来のUSBハブ・コントローラー・インターフェースを持つ」というだけですから、もっと他にも対応するUSBハブはあるはずです。
そこでちょっと気になった、Buffaloの節電ハブも入手してテストしてみることにしました。

(単なるテスト目的のために購入するのは無駄遣いなのですが、せっかくアフィで溜まったギフトポイントもあるので、ささやかな恩返しのつもりで。。)

気になったというのは、これらのハブは一般に「節電ハブ」「電源連動ハブ」と言われているのですが、単にPC側のUSB給電に連動するだけであればバスパワーのハブでも同じでありわざわざ謳っているようなメリットがあるのか判りませんので、もしかしたらOSからの給電停止せよ/開始せよ 等のコマンドに反応して給電をOFF/ONできるという事ではないか、と気づいたわけです。
ちなみに余談になりますが、Windows Vista以降で節電機能として設定できる「USBセレクティブ・サスペンド」というのは、

Usbselective4suspend

まさにこの「本来の標準的なUSBハブ・コントローラー・インターフェースが持っている給電ON/OFFのコマンド」等をWindowsが積極的に使って節電状態で給電を落とす機能と思われ、「節電ハブ」を名乗っているのはこの辺の仕組みにもきちんと対応してるよ、という意味かもしれないと思ったわけです。
尤もセレクティブ・サスペンドの機能自体はいろいろなトラブルの元になるので使わないのがお勧めですが。。

で、入手してテストしてみたところ、見事!この2種のハブでもDevCon restartコマンドで給電がOFF/ONでき、「本来の給電制御仕様に従った」USBハブであることが判りました。

この小さな4ポートタイプの場合は何もしなくても全ポートが対応しています。また7ポートタイプの場合は、端の「常時給電」2ポートを除く5ポートで、スイッチを「SAVE」モードにしておけば使える(給電OFF/ONできる)ことが判りました。
これらは値段も千円台と安いですし入手も簡単で、実はSUGOI HUB4Xと比べても、給電OFF/ONに使えるポートが多い(SUGOI HUB4Xは2ポートのみ)という他にもちょっとしたメリットがあります。(6.でご紹介します。)

Buffalo節電ハブは以前からW3Uxスレなどで「見失いが起きなくなった」という推奨の意見があったのですが、これで理由が判りました。単にPCの給電に連動するだけではなく、たとえPC側のポートが常時給電タイプであっても、Windows起動の度に一瞬USB給電をOFF/ONしてくれるので、USBチューナーはその度にきちんとリセットされ、結果安定運用に貢献しているわけです。
ただしそれだけでは片手落ちで、実はスリープからの復帰の際にはWindowsはデバイスにリスタートコマンドを発行しないので、これらのハブを使っていても給電OFF/ONは起きず、よって「スリープ復帰での見失い」には対応できていない筈です。そのようなケースにも対応するためにはスリープ復帰時にも意図的にDevConコマンドを発行してハブにリセットをかける必要があります。

その辺の仕組みを簡単に導入するプログラムを作成しましたので、以下でご紹介したいと思います。

6.「電源制御型USBハブでUSBチューナーの見失い状態を解消するバッチ」を生成するプログラム

長い題名になりましたがここからが主題です。

1)準備するもの

① 電源制御型ハブ

以下のような製品が対応しています。

iBUFFALO USB2.0ハブ 4ポートタイプ ACアダプタ付 【電源連動タイプ】 BSH4AE06

iBUFFALO USB2.0ハブ 7ポートタイプ(ACアダプター付) 節電モデル BSH7AE03

システムトークス SUGOI HUB4X ACアダプタ付 電力供給安定型 USB2-HUB4XA

Buffaloの4ポートタイプの場合は何もしなくても全ポート対応、Buffaloの7ポートタイプの場合は、端の「常時給電」2ポートを除く5ポートで、スイッチを「SAVE」モードにしておくことが前提、またSUGOI HUB4Xの場合はSUGOI HUBのロゴを上にした正面から左の2ポートが対応しています。

意外ですが、以前の記事でご紹介していたELECOMの電源制御型ハブ(U2H-SW4)はこのような「USBハブ標準のコマンドによる電源制御」には対応しておらず、独自の方法で電源制御しますので、以下の方法は使えません。既に販売終了製品ですので過去記事も新しい手順に置き換えましたが、すでにU2H-SW4をお持ちの方用の手順もここに残しておきます。

U2H-SW4によるPLEX USBチューナーの監視方法

リンクで解説されているようなプログラムを活用して該当ハブに繋がったデバイスのリセットを適切なタイミングでおこなえば、デバイス見失いがあっても解消できます。(但し記事が最近リンク切れしているようなので、プログラム自体はこちらにミラーを上げておきました。もし問題がありましたら教えてください。)
これを使いこなすための
サンプルバッチを添付しましたので、ご活用ください。(使い方は中にコメントしてあります。
Windows7以降であればこれと上記リンクのプログラムを入れて、中のデバイス数をご利用環境に合わせて書くだけで使えます。Vista以前の場合はPowerShellの導入、更にXP Home Editionに限ってはコマンドファイルの追加も必要ですので、詳しくはbatファイルの中を読んでいただければと思います。

他にも対応している製品もあるかもしれません。当プログラムではハブのテストができるようになっていて、このようなUSBライトがあれば簡単に確認できます。

(百円ショップにもよくあるらしい)

あまり"高級"なUSBライトだとオサレなソフトスイッチが付いていて、一旦OFFになるとスイッチを押さない限り点灯しないものもあるので、上図のような単純なタイプがお勧めです。
発見できたら随時追記していく予定ですので、電源制御可能なUSBハブを発見された方はコメントで教えていただければ幸いです。

② バッチ自動生成プログラム

前提ですが、このプログラムの動作にはVC++2010(x86)のランタイムが必要ですので、まだ導入されていない方はリンク先からダウンロード&導入してください。

 Visual C++ 2010 再頒布可能パッケージ  (x86)

さて、この電源制御機能を使うにはお使いのWindows(32/64)に対応したDevConのプログラムが必要ですが、4.でご紹介したDevConの記事からダウンロードできるのは32bit版だけです。(64bit版のように見えるのはIA64、すなわちItanium版なので、通常のWin64では使えません。)
その辺のダウンロードの手順と取り込みを極力自動化し、また対象となるUSB HUBの検出も自動化した上で、検出されたUSBハブ・デバイスにDevCon restartコマンドを発行するバッチを生成するのがこのプログラムです。

生成するバッチは単純に発見したUSB HUBにrestartをかけるもの(HUBReset)の他に、予め登録したPLEXチューナーの個数と見えている個数を比較して、見えている数が少なければ(録画タスクが動いていないタイミングで)チューナーへの給電をOF/ONすることでリセットをかけるもの(PLEXReset) 、の2種類を生成します。(後者はPLEXチューナーを使っている場合のオプションです。)

ご利用には、以下のzipファイルをダウンロードして、適切なフォルダに解凍してください。インストールは不要です。

「HubReset.zip」をダウンロード

なおこのフォルダのHubReset.exeからプログラムが起動できますが、いくつかの機能を使う際にVista以降では管理者権限が必要になります。UACの設定によっては単純にダブルクリックで起動すると権限チェックによってDevCon restartが弾かれてしまって 2)-③でUSBライトを使ってテストしても何も反応しなかったり、生成先のフォルダが作成できない、スタートアップ登録ができない、などの問題が出ます。

これを避けるためにダブルクリックではなく、「右クリック→管理者として実行」で起動してください。

Hubreset0

これは生成されるバッチでも同じで、手動で起動するときは「管理者として実行」するのが確実です。(スタートアップやタスクスケジューラからの実行ではもともと管理者モードになっていますので、特に気にする必要はありません。)

また、他のフォルダや他のPCで使う場合は、このフォルダ構造をそのままコピーしてください。(HubReset.exeだけコピーしてもプログラムは起動しません。)

フォルダ全体をUSBメモリやネットワークの共有フォルダに置いてそこから実行すれば、一度取り込んだdevcon.exeを複数PCで使い回しますので、それなりに便利です。

2)プログラムに従ってバッチを自動生成する。

以降、大体は画面を見ながら進めれば判る筈ですが、一応解説しておきます。

① DevConユーティリティを取得する。

Hubreset1

既にdevcon.exe をお持ちの方は下のファイル指定欄に直接D&Dしても良いですが、OSが32bitなら32bit版、64bitなら64bit版が必要です。(合っていなければ弾かれます。)
お持ちでなければ、画面上のリンクからダウンロードして指定してください。リンクをクリックすれば図のようなブラウザのダウンロード画面になりますので、

Hubreset2
保管場所を指定してダウンロードしてください。(ブラウザやバージョンによってこのダウンロード画面の出方は違います。)

ダウンロード終了したら、保管場所の該当ファイルを指定して、「次へ」を押してください。

Hubreset4

なお、下の方の「給電ON/OFFのハブは使わず、チューナー内部ハブをリセットする」は通常はチェックしないでください。

これは、「電源制御型のハブはまだ入手していないが、とりあえず見失いがあったら、まずはDevConユーティリティでチューナーのリセットを試みたい。」という場合に使うオプションです。
この対策で効果があるのはチューナーの内部にハブを持っているPX-W3UxとS3U2のみで、これを選択した場合はこれ以降の画面でのガイドも少し変わります。
ただし上の4.で書いたように、この方法はチューナー見失いに対する対策としては不完全で、効果がない場合も多いです。
(そもそもDevConでやるのと同じことをWindowsは起動の度にチューナー内部ハブに対しておこなっているわけで、それで復旧しないケースがあるからこそ、この記事のような対策になるわけです。その辺の解決にはなりませんが、ある程度のケースは救えます。)
とりあえず金をかけない形での見失い暫定対策として使ってください。

② USBハブのハードウェアIDを取得する。

USBハブは実はもともとPC本体が内蔵しているものも何個かありますので、デバイスマネージャーで見ても一体どれが新しく追加したハブなのか判りにくく、またこれもややこしい点として、USB2.0/3.0のどちらに繋いでいるかによってIDも変わります。(3.0なら先頭にVが付く。)
これを簡単に取得するために、該当のUSBハブを繋いでいない時と繋いだ時でデバイスマネージャーの内容を比較して、目的のハードウェアIDを判別する、という手順にしました。
まずはこの画面で、「電源制御用USBハブ」を繋げていない状態で「現在のデバイス構成を取得する」のボタンをクリックします。

Hubreset5

次にPCに「電源制御用USBハブ」 を繋げて10~20秒程度待ったのち、下のボタンを押してください。

Hubreset6

ここで余分なデバイスまで検知してしまわないよう、この時点では電源制御用USBハブの先には何も繋げないようにしてください。

「以下のUSBハブ・デバイスを検出しました。」というメッセージが表示されたら成功です。

Hubreset7
なお、ここで2個以上のハブを繋いでもそれらが同じハードウェアIDを持つ場合(同じハブを2個とかBuffaloの4ポートタイプと7ポートタイプの混成の場合)、検出されるハードウェアIDは1個だけです。DevConが無駄なコマンドを出さないために重複チェックして省いているだけで、検出ミスではありませんのでご安心ください。

確認したら「次へ」を押してください。

なお、「次へ」を押すと以下の警告メッセージが出ることがあります。

Hubreset75

これは、「追加したUSBハブと同じハードウェアIDを持つUSBハブ・デバイスが他にも既に存在しているよ」、という警告です。
特にSUGOI HUBを使う時には、このように大量のデバイスが検出されることがありますが、これはSUGOI HUBで使われているNEC製のコントローラが割と汎用的にマザーボード上や市販のハブでも使われているからです。

同じコントローラでも大抵は電源制御回路は省略されているのでUSB給電のOFF/ONには使えないのですが、問題はDevConユーティリティは同じハードウェアIDを持つ物は区別ができず全てにrestartを掛けてしまいますので、それらのハブに繋がっているUSB機器も、全て一瞬接続が途切れてしまうことです。

すぐに回復しますので大抵は問題ありませんが、もしそのようなデバイスの中に読み書き中のUSB HDDなどがあると読み書きに失敗しますので、そのようなクリティカルなデバイスがUSBに繋がっている場合は、次のテスト画面で検証してから使ってください。

なおBuffaloの節電ハブであれば、あまり同じタイプのコントローラーがPCオンボードで使われないのか、うちで検証した限りではこのような現象は起きませんでした。その辺はBuffaloハブのちょっとしたメリットかと思います。

③ この画面ではUSBライト(など)を使って実際に給電のOFF/ONが起きるかをテストすることができます。

Hubreset8

1)-①でご紹介しているようなハブであれば敢えてテストする必要もなく、ここはスキップして問題ありませんが、もしご自分で他のハブをテストしてみたい時はUSBライトを用意してここでやってみるのも良いと思います。

また②にあるように、他のUSBハブ(やPC本体USBポート)も巻き添えの瞬断がおき得るようであれば、PCの動作上何か問題がないか、ここで確認してみてください。

④ ハブの給電OFF/ON用バッチの導入先と、PLEXチューナー向けの監視バッチを作成するか、作成する場合はWindowsのスタートアップに登録するかを選択。

Hubreset9

PLEXチューナー向けバッチは、起動するとデバイスとして見えているPLEXチューナーの数をかぞえ、それがここで設定されるチューナー台数より少ないと、DevConコマンドを発行して復旧を試みます。
復旧を試みた場合は10分間常駐して、チューナー数が設定台数に戻った事を確認した後、終了します。(戻らなければDevConをもう1回だけ試みます。)

これをWindowsのスタートアップに登録すれば、Windowsの起動/障害後再起動の際に必ずこのチェックをやるようになります。

ただしご紹介している電源制御タイプのハブの場合、起動時に必ず1回は給電OFF/ONが起きるので、ここは敢えて組み込まなくてもほぼ大丈夫です。より安心のためにきちんと台数チェックをして念押ししたい場合に組み込んでください。
PLEXReset.bat のより重要な使い方は、⑤のスリープからの復帰時に作動させることです。

なお、導入するPCのOSがXP、VISTAの場合は、PLEXチューナー向けバッチを動かすためにPowerShellを導入する必要がありますので、ガイドを出すボタンが表示されます。(XP HOMEの場合に限ってはtasklistの導入も必要ですので、それもガイドに従ってください。)

⑤ スリープからの復帰時にバッチを作動させるためのガイド

Hubreset10

④で「生成」を押せばバッチの作成と(指定した場合)スタートアップへの登録が完了しますが、この画面ではそれをスリープ状態からの復帰時に作動させるためのガイドが書かれています。

④にある通り、このタイプのハブではWindowsのスタートアップでわざわざバッチを動かさなくても給電のOFF/ONは必ず行なわれますので、そもそも見失いを起こしにくくなっており、U2H-SW4と比べてもスタートアップ時にこれらのバッチを動かす必要性は低くなっていますが、スリープからの復帰時にこのバッチを動かすことは、残る見失いの可能性を消すために重要になります。

文章を読めばほぼ理解できると思いますが、念のため設定画面を追ってみます。

(1)TVRockでスリープ復帰時にPLEXReset.batを動かす設定

Hubresetonrockwu.

(2)TVRockが動いていない環境ではタスクスケジューラを使って設定してください。

コントロールパネル→管理ツールからタスクスケジューラを開く。

Tasksche1

Tasksche2

タスクの作成

Tasksche3

あとは以下を参考に必要項目をセット

Tasksche4

Tasksche5

プログラム/スクリプトの欄に バッチ導入先フォルダ\PLEXReset.bat (またはHUBReset.bat)と指定してください。ここではバッチ導入先を D:\battest と仮定しています。

Tasksche6

Tasksche7_2

以上でOKを押せばスリープからの復帰時に生成したバッチを実行するタスクが登録されます。USBライトを持っていれば実際にスリープ→復帰をやってみて、ライトが点滅するか確認してみてください。
但しPLEXReset.batの場合は、チューナーの見失いが起きない限りハブのリセットもおこないませんので、動作テストにはHUBReset.batを使用してください。うまく動いたら実行するプログラムをPLEXReset.batに差し替えれば良いです。

これで設定は完了ですので、あとは使用するUSBチューナーを繋げて利用開始してください。
なおあまり関係のない注意点ですが、PX-W3Ux、S3Uxの場合、今までと違うコントローラを経由させて接続するとドライバが再導入され、認識完了するまで1分程度かかります。
これ自体は待てばよいだけの話なのですが、その際にLNAやLNB給電の設定が初期値に戻ってしまいますので、必ず再度、LNAやLNB給電ツールを適用することを忘れないようにしてください。

.
終わりに)

このバッチと電源制御型ハブの他の応用方法として、「定期的にUSB接続をリセットする」という活用方法もあります。

というのはUSBは何週間、何ヶ月と常時ONのまま長く繋ぎっ放しにしているといろいろエラーを拾って速度が低下することがあるらしく、USBハードディスクでも経験したことがありますし、PX-W3U3でもデバイスの認識に異常はないのになぜかDROPが発生してテレビ画面の動作もカクつき、USBを抜き挿ししたら回復したということがありました。常時ONのPC環境でそのような現象を防止するためには、例えば一週間に一度タスクスケジューラーを使って、上記PLEXReset.batで「チューナー個数を実際より多く設定したものを別のフォルダに生成」しておいた上で定期的に動かすようにしておけば良いと思います。チューナーが実数より多く設定されていれば、PLEXReset.batは必ずハブのリセットをおこないます。

Periodictunerreset定期タスクの定義例

曜日・時間帯は録画の少ない所を選べば良いと思いますし、もし録画と重なっても、PLEXReset.batは録画中であること(TVTestやRecTask、EDCBが動いている状態)を検知して、終了するのを待ってから動くようになっています。

他の汎用性の面で言えば冒頭の「1.なぜ必要?」で書いたように、USB機器はPC本体と同期してリセットされることもなく、放っておくと何ヶ月もリセットなしに運用している事になりがちで、そうなるとどんな機器でも何らかの不具合が出やすい状況になります。マウスやキーボードのような単純なデバイスなら良いのですが、もっと複雑な機器であれば適時リセットをかける仕組みとしてこの種類のハブとツールを使うのが、安定運用のために有効な対策になります。
(ツールを使わなくてもこの電源制御型ハブを経由させた時点で、PC側のリセットに連動して必ずUSB機器もリセットされることになるので、それだけで安定性は高まります。)
.

USB機器はこのように経験しながら対策していくような特性も多いのですが、きちんと対策すればこれほど拡張性・柔軟性に優れたものはありませんし、応用のための様々な機器も安価ですので、このようなプログラムも使いこなしのお役に立てれば幸いです。

2014年5月 1日 (木)

TS抜きにH.265エンコード環境/再生環境を追加する。

2014/09/18: HandBrakeのアップデートに伴い、記事を一部改修しました。HandBrake最新版でエンコード用バッチが動かないバグも修正しましたので、既にお使いの方はバッチの差し替えをお勧めします。

いろいろソフトウェアのサポートも増えてきたので、次世代コーデックと言われるH.265の活用方法についてメモしておきます。

この記事は最初、既存の記事に補足として付け足すつもりで書いていたのですが、補足にするにはやや冗長過ぎるのと、もしH.265を使わない場合には余計な注意点が増えるだけなので、新しい物好きな人向けの別記事にしました。
そういう目的なので、エンコード用バッチはTVRockやWhiteBrowserから呼び出すことを前提に書かれています(但しEDCBでも中の%1を$FilePath$に書き換える程度で使える筈です)。
また今回H.265を扱えるツール全てを横断的に評価しているわけではありません。そういう記事をお探しの方は、この辺のリンクもご参考に。

ちなみにPowerDVDもバージョン14 からH.265再生をサポート、編集環境のPowerDirectorもバージョン13からH.265の読み書き&編集をサポートというように、市販の動画ソフトもH.265対応が進みつつあります。
ただしiPhone/iPad、Androidのようなモバイル環境の対応はまだこれからですので、いくら圧縮率が優れていても携帯動画用としてこれを使うと、それらが対応してくれるまでの何年間か温存することになりますのでご注意ください。当面は保存の容量を圧縮する目的で使うことになります。

サンプルとしてNHKの大河ドラマ(45分)をHandBrakeのH.264とH.265でエンコードしたサンプルのシーンと、ファイルサイズを比較してみます。

まずは品質感の比較のためにサンプルシーンを切り出して比較してみます。

Yaeending

Yae1tsa_2

以下がこれをエンコードしたものの該当箇所になります。
プロファイル"VH"はピクセル数はソース維持(1440x1080)で品質パラメータのq を18.5にセット、"H"はピクセル数維持でq は23、"L"は横ピクセル数720に圧縮してq は24です。q は小さいほど画質が良くなります。
ちなみにq はx264、x265ともRF値と等価で、同じ値が同じ意味になるのかは判りませんが、多分エンコーダ側がうまく解釈してくれるんでしょう。。

x265のプリセットは「Medium」(=何も指定しないときのデフォルト)を使いました。このプリセットは圧縮率に関係していますが、Fast系を使うとエンコード速度は多少速くなるもののファイルサイズが1.5倍以上大きくなって敢えてH.265を使う意味がなくなり、またSlow系を使うとエンコード時間は更に劇的に増えますがサイズは数%小さくなるだけなので、いずれもメリットは感じませんでした。

他にもx264/x265のパラメータは多数ありますが、x265はパラメータがよく判っていないのでとりあえずデフォルトを使っています。そういう意味で完全に同じ条件での比較ではなく、細かい品質感なども比較していませんので、あくまでご参考です。
Yae3265vha
Yae5265ha
Yae7265la

なるほど、判ったようなよく判らないような・・・
ご興味のある方はブラウザを拡大して比べて見てください。そもそもソースのMPEG2-TS画像自体、微妙なグラデーションが表現し切れずブロックノイズが現れてるような画像ですが、同じプロファイルで比べるとH.264のほうは明暗の変化のところでザラザラ感や偽色を出すのに比べて、H.265の方はむしろブロックを消して本来のグラデーションを滑らかに表現している感じで、この辺は予測単位を広く取れるH.265の仕様が活きている感じです。
またVH → H → Lのように帯域を落とした時の変化は、H.264のほうが処理し切れない部分を不用意に幾何学的なノイズで残したり、それでも足りなければ一挙にグラデーションを消失させてしまうのに対し、H.265のほうはグラデーションの正確さを乱して情報量を落しながらも、なんとか本来の明暗パターンを表現しようとしている感じですね。人が見た時に不自然さを感じないようにぼかす、という設計思想がH.265にはあるのではないでしょうか?このサンプルだけであまり大したことは言えないのですが。
全体的にはH.264とH.265でそういった違いはあるものの、同等プロファイルでの画質の差はほとんど感じられませんでした。

一方ファイルサイズのほうは、以下の通りです。

Decordedlist

こうやって比較すると確かにH.265はH.264の二倍の圧縮率という謳い文句があながち嘘でもなさそうです。画面サイズを小さくして圧縮を高めるとその差は縮まりますが、これはH.265の特性と言うよりも音声データの占める割合が増えるためだと思います。(音声コーデックは両方同じものを使っていますので。)

エンコード時間はH.264の約2倍かかります。(といっても以前は4倍以上かかっていましたので、エンコーダのx265も急速にチューニングされつつあります。) 但しQSVなどのハードウェア支援は現状使えません。

うちで使っているi7-2700Kだと、ソフトウェアH.264エンコードで地上波HD(1440x1080)がソースの場合
プロファイル"L"だと実時間の約1/3
"H"だと実時間の約8割
"VH"ではほぼ実時間

というのがエンコード時間の目安ですので、H.265のエンコードでは
"L"が実時間の7割程度
"H"が実時間の約1.6倍
"VH"だと実時間の約2倍

という時間がかかることになり、ローエンドや古めのCPUではもっと掛かります。
(ちなみにソースがDVDのようなSD解像度なら既に"VH"でも実時間未満でエンコードしますので、速度はソース解像度に大きく依存します。またH.264の場合QSVを使うと、どのプロファイルでも実時間の1/5~1/10程度でエンコードできますので、H.265もハードウェア支援が待たれるところです。)

この辺総評すると、圧縮率2倍というメリットが有意義でCPUパワーも十分(あるいはPCの余剰時間にひたすらエンコードさせたい)という人向きでしょうか。

.
ただし、動きの速い映像だと、H.264だろうがH.265だろうが圧縮率は低下します。テストとして図のような

Jojo_bs11

ジョジョ・スターダストクルーセイダーズ(BS11)のOP映像(約1分30秒)を切り取ってプロファイル"H"で圧縮してみたところ、200MB程度のTS(MPEG2)映像に対してH.264ではほとんど圧縮できず、H.265でも100MB程度と、TS(MPEG2)の半分にしか圧縮できませんでした。
これらのプロファイルは品質指定でエンコードしますので、動きの速いシーンでも映像情報が大きく破綻することはありませんが代わりにそのシーンのビットレートが高くなります。「優秀な圧縮アルゴリズム」であっても動きが速かったり細かい線や点が沢山ある映像では圧縮が効かない」、という例になります。

なおこのシーンは東京MXテレビが「優秀な圧縮アルゴリズムを使ってマルチ編成でも8セグ(通常地上HDは12セグ)でHD放送」したところノイズだらけになった、という現象の典型的な例ですね。

Jojo_mx1同じシーンのMX版

(ただ、全然別の話ですが、敢えてマルチ編成に挑戦しているMXの姿勢を私は悪く言いたくはありません。そもそもMXのアニメ枠は広告で制作費が出せる訳もなく、制作側が枠を買ってBDなどのコンテンツで利益を出すのが前提のショールーム的な放送なので、画質を落としても沢山の放送枠を確保する方向は正論で、今後の放送のあり方を占っていると思います。ただ別にHDに拘る必要はない筈で、もうちょっとうまくやってほしいな、と。。)

蓄積型メディアの場合は一部のビットレートが高くても全体で容量に収まれば良いのですが、放送の場合はビットレートの上限は固定されており、一部シーンだけ上げるわけにはいきませんので、いくら最新のエンコーダで平均ビットレートを低く抑えても帯域が狭まった分特定シーンが破綻する、という現象が起き易くなります。圧縮コーデックが優秀なほど平均値とピークの差が大きくなる傾向があるわけで、この辺のシーンは仮にMPEG2ではなくH.264/AVCを使ったとしても破綻は避けられそうにないですね。

ちなみに現在一部で検討されている4K放送も「優秀なH.265/HEVCを使うからその気になれば地上波13セグの帯域幅のままで4K放送ができる」などと言ってる人もいるようですが、技術を知らない人/あるいは盲信者 の典型的発言だと思います。尤も4K放送はそれ以前に商業ベースに乗るか極めて疑問ですが。典型的なハコモノ行政で、取らぬ狸のなんとやらでしょう/閑話休題。

ここではひたすら、今までの「ts抜きチューナーの録画・再生環境」関連記事でご紹介してきたツール類にH.265機能を追加する方法に絞って解説します。具体的には3点

1.エンコードツール HandBrakeのH.265対応版 → HandBrakeの使い方そのものについてはこちらこちらを参照

2.再生プレーヤー VLCおよびMPC-HCのH.265対応版 → VLCとMPC-HCの使い方そのものについてはこちらを参照

3.動画管理ツールWhiteBrowserでH.265ファイルのサムネイル管理 → WhiteBrowserの使い方そのものについてはこちらをご参照

以上をご説明いたします。

.
最初に作業項目を表にまとめておきます。

ツール名役割H.265対応状況問題点対策
HandBrake ・録画後の自動エンコード

・WhiteBrowserからの手動エンコード

・GUIを使って手動エンコード
最新版0.10.0 で対応

特になし

(日本語ファイル名関連の問題も最新版で解決済)

特になし

VLC 再生プレイヤー 公式最新版で対応
(ver2.2.0以降)
特になし 特になし

MPC-HC

再生プレイヤー 公式最新版で対応
(公式版とNightlyの区別がない)
特になし 特になし
MPlayer WhiteBrowserが内部的にサムネイル作成する際に使用する。 公式最新版で対応 公式最新版はあるバージョン(svn-35952)以降は日本語ファイル名のDVD-ISOファイルが読み取れず、真っ黒なサムネイルが作成されてしまう。 (したがって過去の解説ではその直前のバージョンsvn-35935を導入するガイドになっていた。) ・基本は公式最新版を使う。

・ただしDVDから作成したISOのサムネイルを表示してくれるのは便利なので、利用される方はISO用にsvn-35935も導入してMPlayer-ISO.exeとリネームし、iso.batがそちらを利用するよう差し替える。

以下では表のそれぞれの項目についてご説明します。

.

1.HandBrakeによるH.265エンコード

過去の記事では

HandBrakeを使って、TVRockの録画後処理でMP4(H.264)エンコードする方法、および

動画管理ツールWhiteBrowserから対象映像を指定してMP4(H.264)エンコードする方法

をご紹介しました。

ここではそのいずれかの環境でHandBrakeが呼び出せる状態になっていることを前提にします。
したがってもしまだ環境構築されていない方はリンク先等を参考にして、まずはTVRock、EDCBのような予約録画の仕組みと録画後バッチを呼出せる環境、およびオプションとして映像管理ソフト WhiteBrowserを使える状態にしておいてください。

HandBrakeは最新版0.10.0 でH.265エンコードをサポートしていますので、基本は最新版を導入するだけで、H.264エンコードとH.265エンコードの両方を容易に利用できる環境が出来上がります。

個人的見解になりますが、H.264、H.265の処理でHandBrakeが推せるのはカスタマイズ性の高さの他に、その確実性があります。
ソースの動画に(他のソフトでは処理停止や音ずれが発生するような)ちょっとした不良があるケースでも、結構高い確率で許容範囲内のエンコードファイルを仕上げてくれます。この辺恐らくは単にx264やx265の活用ソフトというだけでなく、エンコーダに渡す前の段階で処理不良の様々な原因を取り除く前処理がされているのだろうと思います。それでいて(家電系のトランスコーダチップのように)圧縮率や画質を下げて確実性を取るような下手な方法ではなく品質にも妥協がありませんので、この辺は流石世界的なコミュニティが育ててきたソフトだなぁと思います。
私も動画処理にTMPG系やAviUtl関連など色々なフリーウェアや有料ソフトを使って来ましたしHandBrakeも7~8年前から時々評価していましたが、特にここ2年くらいでHandBrakeの熟成度が上がった感じで、余計な処理は要らない・とにかく速く確実にソースに忠実なエンコード処理をしてくれ、という場合(つまり殆どの自動処理)はHandBrakeに任せるようになりました。一番はこの確実性が理由です。

但しですが、
HandBrakeは0.10.0 ではWindowsXPがサポート対象外となり、実際にXPの環境では起動もできなくなりました。XPでHandBrakeを使うには旧版0.9.9 を使うようガイドが出ています。但し旧版ではH.265やQSVをサポートしませんので、H.265エンコードを利用する場合はWindowsVista以降の環境をご準備ください。

またVista以降の環境であっても、Windows 32bit版は(提供されてはいるものの)「正常動作のためにはメモリの制限がきつく、非推奨」との但し書きが付いています。重い処理になると問題が発生する可能性もありますので、できるだけ64bit Windows環境で64bit版を利用するのがお勧めです。

・導入準備

(Nightly Buildを含めた)HandBrakeが既にPCに導入されている場合、そのまま新しいバージョンを入れようとすると、過去のバージョンのアンインストールが一部うまくいかず、新しいバージョンのGUIが立ち上がらないことがあります。
これを回避するために、まずコンントロールパネル→プログラムと機能(Vistaならプログラム)を開いてHandBrakeを選択し、「アンインストール」または「削除」ボタンを押します。
Handbrake_uninstall

HandBrakeがリストから消えたら、必ず一旦PCを再起動させてください。以上で正常にアンインストールされます。

・導入

HandBrakeには、以下のランタイムが必要です。
  Microsoft .NET Framework 4.0または4.5
    (4.5は4.0の上位互換です。 Framework 3.5やそれ以前とは別物ですので、それらが導入されていても別途導入が必要です。)

お使いのPCにどのバージョンのFramework が導入されているかは、以下のファイルを解凍したbatファイルをダブルクリックしてみれば判ります。
「checkvdnfw.zip」をダウンロード
(これはatmarkITさんの記事にあったバッチファイルを少々修正の上転載させていただきました。)
Tvremoteviewer_dotnetcheck

ここに「Framework 4.0(または4.5)がインストール済み」と出てくればOKです。
未導入の場合は、Windows7かそれ以前であれば、以下のリンクからダウンロード&導入してください。
http://www.microsoft.com/ja-jp/download/details.aspx?id=30653
またWindows8以降であれば、コントロールパネル(またはスタートボタン右クリックで)→プログラムと機能で、「Windowsの機能の有効化または無効化」を選んで、以下の場所をチェックした上でOKを押し、Framework 4.5を有効化してください。
Tvremoteviewer_dotnet45on8

以上の準備が終わったら、HandBrake公式サイトから「Download HandBrake 0.10.0 for Windows Vista or later」ボタンをクリックして、HandBrakeプログラムをダウンロードしてください。お使いのWindowsに合わせて64bit版/32bit版が自動的に選択され、暫くすればダウンロード開始します。
適切なフォルダに保存したらダブルクリックで実行してください。あとは普通にダイアログに答えていけば導入されます。(開発の中心であるフランス人の上品な気質か?余計なガジェットの導入を促されることもなく安心して導入できます。)

但し、Windows8以降では以下のような画面が表示されるかもしれません。
Hbwin8screen1
この画面では「OK」を押すのではなく、「詳細情報」の文字をクリックしてください。すると次の画面になりますので、
Hbwin8screen2
ここで実行を押せば導入開始します。

導入が終わったら確認のために、デスクトップに表示されたHandBrakeアイコン
Handbrake_icon

をダブルクリックしてください。やや起動に時間が掛かりますので、しばらく待ってください。正常にGUI画面が表示されれば導入OKです。
なお、最初だけ次のようなメッセージが表示されることがありますが、
Handbrake_initmsg

OKを答えればよいです。

・バッチファイルの準備

汎用的にHandBrakeが使えるように、H.264エンコード(x264およびQSV)用のバッチをダウンロードします。以下のzipファイルをクリック&ダウンロードし、適切なフォルダに解凍してください。

「batch_for_handbrake.zip」をダウンロード

H.265エンコード用のバッチとしては、以下のzipファイルをクリックしてダウンロードし、同じく適切なフォルダに解凍してください。

「H265Bat4Nightly.zip」をダウンロード

以下では後者を使ったH.265エンコードの活用法をご説明しますが、前者のH.264エンコードバッチの使い方も全く同じです。同じ場所に配置して、H.265エンコードとうまく使い分けてください。

尚、エンコードしたファイルを別記事のTvReomteViewer_VBでリモート視聴する場合、従来の設定ではffmpegと相性の悪いパラメーターがあったようで、QSV以外の「H」「VH」のプロファイルでは画面がカクつく、音ずれする、という現象が起きるようです。
2015/4/6に対策済みのものにアップデートしましたので、それ以前のバージョンを使っていてリモート視聴を使う可能性のある方は、新しいものに置き換えてください。

① TVRockの録画後コマンドでH.265エンコードをおこなう方法

上で解凍した各フォルダの直下にある「HandBrake-XXX.bat」というバッチファイルを全て\TVRock作業フォルダにコピーしてください。
H.265エンコード用としては、TVRockの「設定→プロセスタブ」に、以下の三行を追加します。

265L:"HandBrake-265L.bat" "%1"
265H:"HandBrake-265H.bat" "%1"
265VH:"HandBrake-265VH.bat" "%1"

Tvrockhandbrake265bat

#を先頭に付けるとコメントになりますので、後から判るような説明を付けておくと良いです。
他にH.264エンコード用とQSV用バッチも、それぞれ

HD:"HandBrake-H.bat" "%1"
iPod:"HandBrake-L.bat" "%1"
VH:"HandBrake-VH.bat" "%1"

HD_QSV:"HandBrake-H_QSV.bat" "%1"
iPod_QSV:"HandBrake-L_QSV.bat" "%1"
VH_QSV:"HandBrake-VH_QSV.bat" "%1"

のように追加してください。なおQSVエンコードが使えるのはH/Wがサポートしている場合に限りますが、ここのテーマではありませんので、詳しくはこの辺をご参考に。

以上を準備した上で、録画予約で後処理エンコードをおこなう方法は以下の通りです。
単発の予約に対しては「録画予約登録・変更」の画面で「終了後コマンド」欄で指定して「予約を変更」を押してください。

Recordcommand

または「自動検索予約」で番組をキーワードで検索して自動録画していく場合は、「自動検索予約リスト」画面で同じく「終了後コマンド」を指定して「自動検索予約変更」を押してセットしてください。

Autorecordcommand

TVRockの後処理では、エンコードが走っている間も画面上に何か表示されるわけではありません。(TVRockログには後処理の起動と終了のメッセージが表示されますが、あっさりしたものです。)
H.265エンコードは非常に長い時間がかかりますので、処理中にうっかりPCを落したり再起動しないよう気を付けてください。
処理中かどうか確認するにはリソースモニタやCoreTempを見て、CPUが高い使用率に張りついていれば処理中だと判断できます。

② WhiteBrowserから映像ファイルを指定してH.265エンコードをおこなう方法

WhiteBrowserで使用するには、まず上記の各エンコード用バッチを\WhiteBrowserフォルダ直下にコピーしてください。
次に「ツール→共通設定」で適切なプログラム欄を選んで、これらのバッチのうち使いたいものを登録してください。

Handbrake_

プログラム欄は5つしかありませんので日常良く使うもの2種類ぐらいに絞るべきですが、別のバッチを使いたい時はその都度、この共通設定画面を書き換えるだけで直ぐに切り替えて使えます。(WhiteBrowser再起動の必要はありません。)
なお、ここの「プログラム・パス」入力欄をクリックすると[...]アイコンが表示され、これをクリックすることでダイアログからプログラムを選択できます。
Wb_programselecter
ダイアログを開いた直後は「ファイルの種類」が「実行ファイル(*.exe)」と指定されているため.batファイルが一覧に出てきませんが、ここを「すべてのファイル(*.*)」に変更すれば.batファイルも一覧できますので、簡単にこれらを選択したり差し替えることができます。

以上でHandBrakeからエンコードバッチを呼び出せるようになりますので、使いたい時は対象のファイルの上で右クリックして、「プログラムから開く→バッチ名」を選んでください。

Handbrake_afromts

エンコードが起動すると図のような画面が立ち上がっていますので、これで時々進捗を確認できます。邪魔な時は最小化しておいてください。

Handbrakeprogress

エンコードが終わったら「ツール→監視フォルダ更新チェック」を選べば、(正常にファイルが作成されていれば)サムネイルが作成されますので、それで結果を確認できます。
(なお、WhiteBrowserもH.265対応しないとH.265ファイルのサムネイルが作られずサムネイル欄が黒いままです。サムネイルが作成されるようにするには 「3.WhiteBrowserでH.265ファイルもサムネイル管理できるようにする」 をご参照ください。)

以上のような方法で、H.265エンコードを日常的に使えるようになります。

③ DVD/Blu-rayのエンコード方法

別にH.265エンコードに限った話ではないのですが、HandBrakeGUIでDVD/Blu-rayをエンコードする方法を簡単に解説しながら、注意すべき点を補足します。

デスクトップ上のHandBrakeアイコンをダブルクリックすれば、次のようなHandBrakeGUI画面が立ち上がります。

Handbrakeguisample0

(1)DVD/BDをマウントする。

ソースがディスクであれば、DVD/BDドライブに挿入してください。(但しプロテクトはかかってないのが前提です。)
ソースがブルーレイのISOファイルの時は、仮想ドライブにマウントしてください。
WhiteBrowserでリンク先のように定義しておけば、ISOファイルをVirtualCloneDrive を使って以下のようにしてマウントすることができます。

Vcdmount

なおソースがDVDのISOファイルの場合は、このように仮想ドライブソフトを使わなくても、(2) のSource欄にISOファイルをドラッグ&ドロップするだけで、読み込みが可能です。

(2)HandBrakeGUIで、ソースに仮想DVDのドライブを指定

HandBrakeGUIのSource欄をクリックしてください。DVD/BDがマウントされていれば、図のように円盤型のドライブが表示されますので、正しいドライブ名を選択してください。

Handbrake__2

(3)タイトル、チャプタ、出力ファイル名、コンテナ=Mp4 を選ぶ

DVD/BDは中にメニューとかCMなどの複数タイトルが存在しますので、図のようにTitle欄をクリックして本編と思われる(最も時間の長い)ものを選んでください。

Handbrake__4

またチャプター範囲も選べますが、タイトルを選んだ時点でそのタイトルの最初から最後までのチャプターが自動でセットされますので、通常は特に弄る必要はありません。

なお外国映画のBlu-rayで時々あることなのですが、このTitleの選択で本編と思しきものが複数出てくる場合があります。
Hbregionselect1
これはマルチリンガル対応のBDでリージョン毎にTitleを分けているケースでよくあることなのですが、違ったリージョン対応のものを選ぶと以後の音声や字幕の選択で日本語が選択できません。(BDプレーヤーはリージョンをプリセットすることでTitleを自動選択しますが、HandBrakeはリージョンにお構いなしに全てのTitleをリストしますので、このように複数の候補が出てくるわけです。)
これは音声・字幕の選択のときに気が付くと思いますので、日本語っぽいものが無い場合は、別のタイトルを選択し直してみてください。
Hbregionselect2
適切なものを選べばJapaneseの選択肢が出てくるようになります。

次にDestinationに出力ファイル名を フルパスで記入してください。

Handbrake__5

Containerは「Mp4」 を選んでください。

なお出力ファイル名の拡張子が勝手にm4v になっている時は、ここを一旦Mkvにして再度Mp4に戻せば、拡張子もmp4に変わっていると思います。

(4)各種パラメータを指定

下のタブが並んでいるところで、まずPictureを選んでください。
赤丸のところは目的に合わせて入力(または選択)し、緑のところはあまり考えずにこの通り入力(選択)すればOKです。

Handbrake_1picture

次にFiltersを選んで、以下の通りセットしてください。
Handbrake_2filters

次にVideoタブですが、これは重要な選択です。
Handbrake_3video

まずVideo Codecで、H.265でエンコードしたい時はここで指定し、あるいはH.264でエンコードしたいときはそちらを選んでください。

また、Qualityのスライダーを動かして品質レベルを決めてください。(小さいほど品質が上がります。)ただしこの値が16より小さくなるとファイルサイズがあまり圧縮されなくなるので、エンコードする意味がなくなってしまうと思います。
ちなみに3種のバッチエンコードでご提供している設定ではVH(最高画質)ではこれが18.5、H(高画質)では23、L(SD画質)では24にセットされていますので目安にしてください。

殆どの邦画や日本語のドラマの場合は以上で設定は終わりで、すぐに「Start」を押してエンコード開始してOKです。

一方、外国の映画やドラマ、また一部の邦画の場合は、音声トラックが各国語用やコメンタリ付きの複数トラックになっています。
また、英語でエンコードする場合は字幕も必要かと思います。
その場合、以下の(5)(6)(7) も設定してください。

(5)音声ソースを指定

Audioタブを選ぶと以下のような画面になりますので、Sourceで希望する言語/トラックを選んでください。
Handbrake_4audio

この選択肢は、実は表示内容が実態と合っていないことがあります。(例えばEnglishと書いてあるほうが中身は日本語だったり。。)
したがって必ず(7) で確認の上、意図したものでなければここで選択し直してください。

尚、「Add Track」などを押すと複数の言語が設定できるように見えますが、MP4の場合設定できる音声トラックは1つだけです。決して「Add Track」は押さないでください。(再生できないMP4ファイルが出来てしまいます。)

(6)【字幕を付ける場合】字幕を指定

字幕を付加するには、Subtitleタブで「Add Track」を押してください。出てくる行のSourceで字幕の言語を選んでください。
Handbrake_5subtitles

これも選択肢の言語表示は、実は正しくないことがあります。(EnglishとJapaneseの選択が実は逆だったりします。)
よって必ず(7)の手順で確認してください。それが意図した通りでなければ再度ここで選択します。

(7)「Preview」で短時間の仮出力を作って確認

音声言語(5)、字幕(6)を設定した場合、それが意図したものになっているか確認するのは重要です。というのはHandBrakeの場合、(5)(6)では表示されている通りの言語になってないことが多いので、それに気付かずにエンコードしてしまうと、せっかくの数時間の処理が無駄になってしまいます。
したがってエンコードを走らせる前にここで確認して、思った通りの音声言語や字幕になっていなければ指定しなおしてください。

・まず最初の準備として、プリビュー用再生プレイヤーにVLCを指定しておきます。(ただここの段階ではまだVLCもH.265の再生ができませんので、実際に使えるようになるのは下の「2.再生プレーヤー VLCおよびMPC-HCのH.265対応版の導入」を実施した後です。とりあえずここでは先に手順だけご説明しておきます。)

メニューバーから「Tools→Options」を選んでください。
出てくる画面でGeneralのタブを選び、ここのPath to VLC Player でvlc.exeへのフルパスをセットします。

Handbrake_6vlc

セットしたらCloseを押して設定を終了します。以上は最初の1回だけやっておけばOKです。

・プリビューを作成し、表示するために、「Preview」ボタンを押し、出てくるダイアログでチャプターと再生時間(秒)を選んでください。
Handbrake_7preview

日本語/英語の音声や字幕の出ているシーンでないと確認の意味がないので、最初の1ではなく途中のチャプターで、長さも30~60秒が良いと思います。
(確認できなかったら別のチャプターでやり直してください。)

・以上で再生されるサンプルを見て、意図の通りであればエンコード開始に進み、違っていたら (5)(6)(7) をやり直してください。

(8)エンコード開始

以上の設定が終わったら、「Start」を押してエンコードを開始してください。
Handbrake_8start

画面の下のほうに進捗が表示されます。
Handbrake_8guiprogress

以上のように、DVD/BDのエンコードはタイトルや言語、また字幕の選択も必要なので、GUIでのエンコードが基本になります。

しかし、これもHandbrakeのかなり便利な所なのですが、ソースが「DVDのISOファイル」で音声・字幕の選択の必要がない場合は、TSファイル等と同じように「ISOファイルから直接バッチでエンコード」することもできます。

Handbrake_9fromiso

ほとんどの日本語DVDでは音声も1種類しかなく字幕もいりませんので、HandBrakeCLIのデフォルト値で充分なわけです。特報や本編以外のタイトルが混在していても最も時間の長いタイトルを自動選択しますので、本編を外すことも殆どありません。

特にx264-QSV を使えば爆速で、出かける前の10分ほどの間にその日電車などで観たい映画を絵を見ながらサクッと選んで1~2本分のエンコードが出来てしまいますので重宝しています。

補足ですが、HandBrake用バッチを自分でいろいろ変更したり作ってみたい方は、ご提供したバッチも参考にしながら、HandBrakeCLIのヘルプを参考にしていろいろやってみてください。

https://trac.handbrake.fr/wiki/CLIGuide

ただしこれは「正式バージョン」の説明なのですが、0.10.0はまだ新しいためx265やQSV関連機能の説明はまだ反映されていません。どういう設定でどういうパラメーターが呼び出されるかは、HandBrakeGUIでエンコードを開始してみてActivityLogのボタンを押すことでHandBrakeCLIのオプションパラメータが表示されますので、その辺がとりあえずの参考になると思います。
またx265/x264関連のオプションパラメータ(-xまたは --encoptsの後に記述)はいずれにしろ、HandBrakeではなくそれぞれの機能を調べる必要がありますが、例えばX265はこの辺、x264はこの辺を参考にしてみてください。QSVに関してはHandBrake Wikiのここにパラメータの解説があります。

以上でH.265エンコード環境構築の説明を終わり、ここからは作成したH.265ファイルを再生する方法と、映像管理する方法をご説明します。

.

2.再生プレーヤー VLCおよびMPC-HCのH.265対応版の導入

H.265のフリー系の再生環境としては現状、最初にご紹介したリンク のようになっている筈ですが、ここでは以前の記事でご紹介したVLCおよびMPC-HCの対応方法に絞ってご紹介いたします。

なお、有料ソフトではPowerDVD14がUltra以上のグレードでH.265再生に対応しましたので、既に持っているかたはバージョンアップしてみるのも良いのではないでしょうか?(但しバージョンアップの際はこちらの情報も事前にご確認ください。)

PowerDVDは2chスレなどではいろいろ貶されたりもするのですが、ある意味PowerDVDはDVD/BD/HDDプレイヤーの領域を直接侵す製品なので、その辺伝統的にメディア再生マシンとしてPCが使われるのを毛嫌いする家電系の人々のデマが多く紛れていると思います。実のところTrueTheaterはかなり優秀で同じ映像ファイルでも簡単に安定した画質で再生することができ、また特にDVDやBru-rayのPC再生環境としてはVLCなどに比べてもずっと実用的な能力を持っていると思います。また既に下火になりましたが3D再生環境としても優秀ですし。。DLNAやソーシャルなど余計な機能も多いのですが。

さて本題に戻って、VLCとMPC-HCの説明を続けます。

VLCは現在はオフィシャル最新版で、問題なくH.265ファイルが再生できます。
以前のVer2.1.5までは、HandBrakeでエンコードしたファイルで以下のエラーが表示されて映像を再生できない現象があり

Vlcerror

このエラーを解消したVer2.2 は長らくNightlyBuildとして提供されていましたが、2015年2月末にVer2.2.0が正式リリースとなり、敢えてNightlyを使う必要もなくなりました。
VLCオフィシャル最新版は以下のリンクにありますので、これをダウンロードして導入するだけでOKです。

http://www.videolan.org/vlc/download-windows.html

インストーラで導入する場合はInstaller package、レジストリを汚さずに自分で適切な実行フォルダに置きたいときは7zipかZipパッケージをご利用ください。
この記事でVLC導入先フォルダとして例示してあるのはインストーラを使った場合のものになります。
(但しインストーラ版を使う場合、セットアップの際にTS含め全てのメディアファイルにvlcを関連付けしようとしますので、そのつもりがなければ全てチェックを外すよう注意してください。)

MPC-HCは最新版で普通にH.265再生に対応しています。こちらの「32bit zip版」からDLして解凍後、適切な実行用フォルダに入れておいてください。

http://mpc-hc.org/downloads/

以上で導入したVLC、MPC-HCとも、デスクトップ(等)にショートカットを作っておけばメディアファイルをドラッグ&ドロップするだけで再生できますが、以下ではWhiteBrowserから起動する場合の登録方法をご説明します。

WhiteBrowserのツール→共通設定で、適当なプログラム番号に表示名と、プログラムのパスを登録します。
またプログラム・パラメータ欄もそれぞれ、VLCの場合 --start-time=<sec> MPC-HCの場合 /start <ms> と記入しておきます。

Vlcmpc_entry

以上で登録されました。再生する時はサムネイル上の再生したい場所で「右クリック→プログラムから開く→VLCまたはMPC-HCの表示名」にて、そのサムネイルの位置から再生が始まります。

Whitebrowsers2

このようにWhiteBrowserを使えば、サムネイルで映像ファイルの概要を把握しながら、再生したいシーン直撃で再生スタートでき、シンプルかつ便利です。 

ただこのようにプレイヤー毎に呼出し方法を設定すると、いちいち再生の度に映像ファイルの種別を意識しなければならず、また再生スタート位置も必ずサムネイルのシーンからになりますので、ちょっと使い勝手が悪いと思います。
この辺の操作性を上げるために、再生プレイヤーを自動で選択してパラメーターも自動で渡す「ランチャープログラム」を作成しました。簡単なものですがなに気に便利だと思いますので リンク先の記事もぜひご参照のうえ、ご活用ください。

一方WhiteBrowser側も、このままではH.265ファイルのサムネイルが作られません。サムネイルもH.265対応にする手順を次に解説いたします。

.

3.WhiteBrowserでH.265ファイルもサムネイル管理できるようにする。

WhiteBrowserの導入手順自体は過去記事を参照してください。以下はその導入が終わっていることが前提です。

さて、TSやMP4(H.264)ファイル、DVD-ISOファイルはWhiteBrowserで便利に管理できるようになるのですが、この状態ではH.265ファイルはサムネイル作成されず真っ黒なままです。
この状態でも上記2.のプレイヤー登録が終わっていれば先頭からの再生はできるのですが、WhiteBrowserの特長であるサムネイルの俯瞰や特定シーンからの再生には対応しません。

実はこの対応は簡単で、WhiteBrowserがサムネイル作成のために使っているMPlayerを最新バージョンに差し替えれば良いのですが、1つ注意すべき点があり、(HandBrakeと似たような話として)現在のMPlayer最新バージョンはDVD-ISOファイル名に日本語など全角文字が使われているとうまく読み込み出来ず、サムネイルを作成できません。
正確には2013年の春ごろのバージョン(svn-35952)以降ずっとその状態です。

個人的には手持ちのISOファイルもサムネイル管理するのが便利なのでそのバグは許容できず、過去記事では敢えてMPlayerはその直前のバージョン(svn-35935)固定で導入する手順にしていました。
サムネイル作成するだけならそれで充分という判断だったのですが、新しいH.265にも対応するとなるとそうも言ってられず、しかも最新バージョンでもDVD-ISOのバグは治っていないようです。

そこで以下のような手順でこのバグを回避することにしました。 (なお、これは本質的に日本語DVD-ISOファイル対応するための手順ですので、そもそもDVDをイメージ化したISOをWhiteBrowserで管理するつもりがない方は、以下の①のみを実施すればOKです。)

手順

①MPlayer最新版を導入する。

②ただしISOファイル処理専用にsvn-35935のmplayer.exeも導入し、mplayer-ISO.exeとリネームしておく。
ISOサムネイル作成ルーチンのiso.batは、このmplayer-ISO.exeを使うよう修正したものに差し替える。

手順の説明

①MPlayer最新版を導入する。

MPlayer 最新版を以下のサイトからダウンロードしてください。

http://mplayerwin.sourceforge.net/downloads.html

使うのは32bit版(Binariesでx86_64が付いていない、ただのmplayer-svn-xxxxx.7zのほう)です。

解凍後、中の実行ファイル mplayer.exe のみを\WhiteBrowserフォルダ直下に上書きコピーしてください。

②ISOファイル処理専用にsvn-35935のmplayer.exeも導入し、リネームして使用する。

次に、DVD-ISO処理専用のMPlayer svn-35935 バージョンを以下のサイトからダウンロードしてください。

http://code.google.com/p/mplayer-for-windows/downloads/detail?name=mplayer-svn-35935.7z&can=1&q

解凍後、中の実行ファイル mplayer.exe を右クリック→名前の変更 から mplayer-ISO.exe (-ISOは半角大文字)とリネームし、それを\WhiteBrowserフォルダ直下にコピーしてください。

次に以下のファイルをダウンロードして適切なフォルダに解凍し、中のiso.bat とvlc.bat を\WhiteBrowserフォルダ直下に上書きコピーしてください。

「iso-Alter.zip」をダウンロード

以上でWhiteBrowserでH.265ファイルもサムネイル管理ができるようになります。既に黒い表示になっているファイルは「右クリック→等間隔サムネイル作成」でサムネイルが再作成されます。
かつ②の手順を反映すればDVD-ISOファイルのサムネイルも正常に作られます。(なおBlu-ray-ISOファイルのサムネイル表示は黒いままですが、残念ながらもともと対応していないためで、異常ではありません。)

ちなみにISOファイルをサムネイル位置から直接再生する場合、上記のiso.batではちょっと再生位置が不正確で、数分の狂いが出ると思います。
それが気になる場合、こちらのファイルの中にあるiso.batを上記iso.batに差し替えて\WhiteBrowserフォルダに入れれば、ISOファイルでもサムネイル・ジャンプが極めて正確なサムネイルが作成されるようになります。
ただ代わりにISOファイルのサムネイル作成が遅くなります。(1ファイルあたり24コマ作成する場合、ファイルごとに約1分かかる。)
その辺が許容できる場合に活用ください。(差し替え版のiso.bat では中を編集して、vlc.exe へのパスを環境に合わせて指定する必要がありますので、お忘れなく。)

.
駆け足でしたがH.265活用手順の説明は以上です。

最初のほうでも書きましたが、今のところH.265のメリットは、同じ画質なら半分の容量で済む、同じ容量ならより高画質で保存できる、という点に尽きます。
一方エンコード時にCPUパワーをバカ食いしますので、特にメリットが大きいと思われる長時間映画やスポーツ中継の圧縮に常用できるかはCPUの余剰能力次第ですね。6コアCPUやXEON-MP構成を持て余してる方には良い使い道かもしれません。x265はx264よりマルチスレッドが効きやすい作りになっていくようですし。
(最近はBitcoinの採掘が余剰パワーの使い道の流行りですが、もはや電気代にあまり見合いませんし、エンジンもCPUやGPUの汎用コアから専用ボード主体に移行しているようですので、汎用CPUにはもっとこういった高度な使い道が向いているのではないかと。。)
最近インテルの怠慢のせいか新しいPCを作る動機付けがめっきり減ってきた傾向があったのですが、こういう新しい目標ができると Haswell-EやDevil's Canyonを使った高速PCを作りたい気持ちもちょっと出てきますね。やはりPC関連マーケットの活性化のためにはCPU酷使型の新ワークロードは不可欠かと。モバイルクライアント用にも対応SoCが出てきているようですので、アンドロイドやiPhoneの対応も1年以内なのではないかと思われ、H.265エンコードのニーズは徐々に増えてくると思います。

個人的には細かい話になりますが、以前HandBrakeのバッチとして高画質版を-Hと-VHに分けたのは、本来高画質設定は-VHのプロファイルを常用したかったのですが、HandBrakeの特性として(というより恐らくはMP4コンテナの特性として)、出力ファイルサイズが4GBを越えると急速にファイルサイズが増大する問題があり、3時間前後の長尺映画でもそのサイズに収めるための妥協として-Hのプロファイルを追加した経緯があります。
ところがH.265だと-VHでもほぼそのサイズに収まるので、綺麗な画質のまま圧縮して保存しておきたい映画で使えるようになる点がちょっとしたメリットかなと感じています。

HandBrakeとWhiteBrowserを使ったバッチエンコードだと実は一旦H.264エンコードして保存しておいたものを後から再度エンコードしてモバイル向けファイルを作る、というのも自由ですが、最新版ではH.265ファイルの入力もサポートしましたので、一旦保管用にH.265で圧縮しておいて、そこから必要に応じてモバイル用H.264ファイルを作るのも自由になりました。
HandBrakeのH.265正式対応版 0.10.0 もリリースされ、今後いろいろ便利なツールの対応やパラメータのチューニングも出てくると思いますので、都度この記事に反映していきたいと思います。

フォト
無料ブログはココログ
2017年4月
            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            

ウェブページ