今年買ったW10M端末とそれからアプリでのバックグラウンド再生実装

Windows 10 Mobile / Windows Phone Advent Calendar 2016の17日目、終わりも近づいてまいりました。

去年の11月末にNovember Updateのバージョンで正式リリースされたW10Mは、今年降ってきたAnniversary Updateが初めての大型アップデートとなりましたね。W10Mリリースが何だか遠い日の出来事みたいに感じるのですが、そう、まだ昨年末の話です。

NuAns NEO

現在メインで使用している端末です。注文自体は去年でしたが、端末の入手と支払いは今年なのでカウントします。

薄さ合戦が行われる中で敢えて厚くしてきたボディには、5インチ端末としては大容量のバッテリーが搭載され、またSuicaなどのカードを収納するスペースも用意されています。

さらにTWOTONEと呼ばれる上下半分に分かれたカバーをそれぞれ自由に付けて外装をカスタマイズできることも特徴で、私は通常版のTWOTONEを第一、二弾とも全種揃えています(コンプリート特典を貰った最後の1人)。

サイズとスペックのバランスから、まだしばらくはメインを張りそうです。

MADOSMA Q601

マウスが発売したMADOSMAシリーズ第二弾。初代Q501の5インチに対してこっちは6インチ。個人的に6インチは大きすぎるので開発機兼イベント用。

ふかふか団地として参加した文学フリマではUWPアプリとして自作した会計用のツールをこの端末で使用しました。

HP Elite x3

HPが出してきたW10Mでの世界最強スペック端末。Windows Helloによる虹彩認証と指紋認証を備え、SD820搭載ゆえの有線Continuum対応というすごいやつ。

5インチ以下なら間違いなくメイン端末にしていた。6インチってやっぱり普段使いするには大きいなぁ……。

スリープ状態のとき、指紋センサー部分に無駄に触れたくなるのが特徴。

NEOのカバー一式も含めると全部で20万円くらいでしょうか……うーん随分使いましたね。今年はしかもこの間AmazonのCyber MondayセールでSurface Book(もちろん言うまでもないほど至極当然のことだがメモリは16GBである)を22%オフだったとはいえ30万で買ってしまったので来年ちょっとどうしようかなぁという感じに。

Anniversary UpdateとUWPと超!A&G+プレイヤー

今年の前半くらいからUWP化しようと思ったまま作りかけで放置していた(その状態で毎週使っていた)超!A&G+プレイヤーを、Advent Calendarやるしそれまでに仕上げるかと思い立って書き直していたわけなんですが、いやはや今更ながらAnniversary Updateでのメディア再生API改善を知ってこれはもう良いじゃないのと。

昔ながらのバックグラウンド再生

Windows Phome 8.1向けに作成した超!A&G+プレイヤー 1.0はバックグラウンド再生に非対応で、つまりそのアプリを常に表示した状態でないと再生できません。動画無しの番組だから画面を切って再生したいとか、Twitterアプリで実況ツイートしたいとか、そういうことをしようとスリープさせたりアプリを切り替えたりするとサスペンドされて再生も止まってしまう……という少し残念な仕様でした。(実はアプリコーナーを使うと前者は実現できる)

もちろん実装したい機能ではあったのですが、WP8.1時点では(そしてW10MでもAnniversary Updateが来るまでは)フォアグラウンドとバックグラウンドをそれぞれ別のプロセスとして実行させる必要があり、それ故にその両方で別々にストリーミングサーバとの通信をしなければなりませんでした。

音声データであればバックグラウンド側に寄せてしまえば済むのですが、アプリ上に映像を表示しなければならない動画ではそうもいかず、アプリ切り替え時には通信が再開するまで数秒程度再生が中断されることになります。

それでもまあ実装できるならすればよかったのですが、微妙な挙動の上に実装が面倒くさいために見送っていました。

シングル プロセス モデルだと……!?

それでもやはり実装したいなと思い、UWPにする機会に対応させようと改めてバックグラウンド再生の資料を漁ってみると、「シングルプロセスモデル」なる表記が。Anniversary Updateから導入されたというではありませんか。

実装方法もMediaPlayerを使うだけ(画面で表示する場合はMediaElementではなくMediaPlayerElementを使いMediaPlayerを設定する)。ちょっとまって簡単すぎない? 今までのやり方と比べて遙かに楽なんですがこれ。

しかもフォアグラウンドとバックグラウンドで同じSourceを共有するのでアプリを切り替えても途切れることなく完全にシームレスに再生が継続する。ようやく、といったらまあそうなんですが、これが出来るようになってある種の感動を覚えました。

もっとも、コード側でやることが少なくないのでMVVM的にやりたいってなったらBehaviorを作るなりMediaPlayerElementを継承したコントロールを作るなりしてバインディング出来るようにするとかの一手間は掛かりますがIBackgroundTaskでごにょごにょするのに比べたら(比べなくても)すぐに済む作業ですよ。

と、いうわけでバックグラウンド再生に対応したUWP版の超!A&G+プレイヤー 2.0を申請しました(まだ通ってない)ので公開された折にはよろしくお願いします。

Advent Calendarも残すところもあと8日、明日の担当は Naba0123 さんです。

コメントを残す

メールアドレスが公開されることはありません。