[WinRT] ビデオ再生時の無線LANネットワーク負荷を考える

子供用の動画再生アプリを作っているのですが、動画が mp4 圧縮されているとビデオアプリ(Windows 8 に付属のビデオ再生の標準アプリです)が途中で止まるという現象が頻発。

■現象

ビデオアプリで、ホームグループ経由で mp4 の動画を表示させているとたまに映像が止まります。映像は止まるけど音声は止まらないので、普通に送られてくるけど描画が更新されていないという感じ。止まったときに、画面をタップして動画のタイムラインを少し動かしてやると再び描画が始まります(動画自体はジャンプした状態で再生される)。

最初は、無線LANのネットワーク負荷を考えたり、Surface RT の WiFi部分が…と思っていたのですが、配信PCのネットワーク負荷をみていくと、Surface RT で止まっている間もちょぼちょぼと配信しているようなのでネットワークが止まっている訳ではないようです。

■配信PCのネットワーク負荷

Surface RT は無線LANで受ける。配信PCはスイッチングハブを通してLANに接続、ってことでネットワーク負荷的には問題ないと思われます。圧縮率が高いためか mp4 のデータを一瞬だけ 10 Mbps 位送って、いったん休憩、再び送って…の繰り返しをしています。

Windows 8 Pro のタブレットPC(Acer w500 にインストール)の時に、フォルダ共有をして動画を流しているとこんな状態でも動画が止まることはなかったので、標準のビデオアプリにちょっと問題があるのかな、と思っています。デスクトップ版の Media Player を使うと大丈夫だった気が。このあたりは未検証。

Surface RT に入っているのは Windows RT なのでファイル共有ができないのと、ストアアプリが主なアプリになります。Windows RT には Media Player が入っていないので、標準のビデオアプリを使うことになります。

■で、いくつかパターンを考える

メディアタグの埋め込みをやって標準ビデオアプリの問題かどうかをチェックすることもできるのですが、それだけでは詰まらないし、回避策も思いつかないので、工作のパターンを考えてみます。

手っ取り早そうなのは、単体で動くパターン。メディアタグを埋め込んで作ってしまいます。ただ、これだと動画表示部分も作りこまないといけないし、なかなか満足できるものを作るのは大変そうです。趣味アプリとしては作業量が多いかなと。


 

それで適当に作ったのが、ひだまりアプリ自体はランチャーの役割しかしてなくて、実際の動画は別のアプリに任せるという方式です。ファイルストレージ(StorageFile)を取得して、Windows.System.Launcher.LaunchFileAsync で起動すればokです。拡張子(*.avi とか *.mp4とか)を判断して、自動的にアプリが起動するのはデスクトップアプリと同じです。起動するアプリはユーザーが決めるので、ランチャーのひだまりアプリは、そのあたりは関知しません。


 

もうひとつの方法は、ランチャーと、再生アプリを別々に作る方法です。標準のビデオアプリの差し替えということになるので、手間といえば手間なんですが。ええと、ビデオアプリ、再生アプリ自体はストアから買ってもいいわけだし、そのあたりは差し替えで。


リモート再生を使ってメディアをデバイスにストリーミングする (JavaScript と HTML を使った Windows ストア アプリ) (Windows) なんかを参考にして、他アプリから呼び出されるようにします。

 

今回ランチャーを作る理由としては、「2歳児にあのファイルピッカーは使えない」というのが主旨で、どうせひだまりしか再生しないのだから専用のボタン付きのランチャーを作れば ok って発想なのです。なので、ビデオアプリで開くファイルピッカーのほうを作るという技もあるかと。


ファイル ピッカー コントラクトとの統合(Windows ストア アプリ) (Windows) ただし、これが目的に沿っているかというと難しいところがあって、ファイルピッカーを起動するボタンは、ビデオアプリのほうにあって、このボタンを押すこと自体が難しい、という問題を抱えてしまいます。でも、まあ、ひとつの手段としてはありかなと。

 

ここまで考えて思いつくのが、それぞれ得意分野のアプリを別々に作っておくことです。


こんな感じで、別々に作っておくと再利用性は高いですよね。ライブラリとして用意してもいいんですが、ファイルピッカーを少し工夫したバージョンとか、年齢によって高機能だったり単機能だったりするバージョンとかが作れます。ちょっと、このあたりの組みあわせ、どんなことができるか実験してみようかなと。多分、コントラクタという仕組みを有効活用するには、これのほうが適していると思うので。

カテゴリー: WinRT パーマリンク