[WinRT] 動画を表示する2GBの自作アプリを作ろう

Community Open Day 2013 用のネタの続き

Acer w500 に Windows 8 を入れて、Vaio のノートを Windows 8 に変えてから常々悩んでいたのが、セカンドモニタ(実際にはセカンドPC)への動画表示です。自宅で作業をしているのもあり、PCファンの音を消すためもあり、動画を流し続けていることが良くあります。本体のPCパワーを喰われたくないので、ノートPCかタブレットPCで動かしていることが多いのですが、ちょっと動画の切り替えが面倒。動画はストア版のVideoで動かします。*.mp4か*.aviであれば、そのまま表示できるのでこれで。*.mkv の場合はちょっとパワーが足りなくて(特に Acer w500 の場合)、ってことで Video で。

さて、ストア版の Video ではいちいちファイルを開くで、*.mp4 を選択しないといけません。


続けて作業をするのに、いちいちピッカーを開くのは面倒です。

なので、もっぱらデスクトップから mp4 を動かすのですが、エクスプローラーのアイコンが小さくて、ちまちま押すが面倒です。大きなアイコンを使えばいいのですが、これもなかなか妙な感じで使いづらい。

そんな訳で、

  • 指定フォルダから、さっくりと mp4 を再生させたい
  • Surface RTで動かすからストアアプリで

ってことを考えていた訳です。子供に映画を見せるのに、エクスプローラーから選ぶってのも大変なので、そのたりも考えて。

■真面目な方法を考える

真面目に考えると、「ストアアプリでは実現できません」という結論になります。ストアアプリのセキュリティ上、ビデオファイルの選択はユーザーの手に委ねられるので、これの抜け道はありません。かつ、マイドキュメントやマイピクチャじゃなくて、ネットワークドライブ上(ほかのPCなど)に置かれているファイルはアクセスできません。おしまい、ってな感じですね。

ストアに出したい場合はそこでおしまいなのですが、ストアに出さないのであれば、いろいろ考えられます。

■私的に利用するだけを考える

いくつかアイデアを並べてみると、

  • 動画を流すためのストリームサーバーを用意して、ストリームを受けるストアアプリを作る。
  • 初回だけ、アプリローカルに保存する動作をさせて、ローカルフォルダから起動する。
  • アプリに動画を含めてしまう。

正式にはストリームサーバーを用意するのが良いのですが、うーん、なんか面倒そうだし良くわかりません(これは、後で調べて実現したいかと)。初回だけコピーってのもいいけど、作りが面倒。なわけで、アプリに動画を含めてしまう方式をとってみました。

ワイドロゴも用意してみました。


プロジェクトに avi ファイルを追加していきました。


画面はこんな感じで。


コードはこんな感じで。

/// <summary>
/// ビデオを再生する
/// </summary>
/// <param name=&quot;sender&quot;></param>
/// <param name=&quot;e&quot;></param>
private async void VideoClick(object sender, RoutedEventArgs e)
{
    string path = &quot;&quot;;
    switch ( (string)((Button)sender).Content)
    {
        case &quot;第1話&quot;: path = &quot;hidamari-01.avi&quot;; break;
        case &quot;第2話&quot;: path = &quot;hidamari-02.avi&quot;; break;
        case &quot;第3話&quot;: path = &quot;hidamari-03.avi&quot;; break;
        case &quot;第4話&quot;: path = &quot;hidamari-04.avi&quot;; break;
        case &quot;第5話&quot;: path = &quot;hidamari-05.avi&quot;; break;
        case &quot;第6話&quot;: path = &quot;hidamari-06.avi&quot;; break;
        case &quot;第7話&quot;: path = &quot;hidamari-07.avi&quot;; break;
        case &quot;第8話&quot;: path = &quot;hidamari-08.avi&quot;; break;
        case &quot;第9話&quot;: path = &quot;hidamari-09.avi&quot;; break;
        case &quot;第10話&quot;: path = &quot;hidamari-10.avi&quot;; break;
        case &quot;第11話&quot;: path = &quot;hidamari-11.avi&quot;; break;
        case &quot;第12話&quot;: path = &quot;hidamari-12.avi&quot;; break;
    }
    if (path == &quot;&quot;) return;
    path = @&quot;video\&quot; + path;
    var file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync(path);
    var ret = await Windows.System.Launcher.LaunchFileAsync(file);
}

■出来上がったファイルを Surface RT に転送する

お手軽私的利用のアプリを早速Surface RTに転送する訳ですが、リモート接続で転送しようとすると video フォルダ内が 2GB ぐらいあって、ちょっとやそっとじゃ終わらない。なので、パッケージを作って転送しています。アプリケーション パッケージのローカルな共有 (Windows ストア アプリ) パッケージを作って、かつインストールします。

で、なんやかやでインストールができると、無事自作アプリからビデオで動画が表示できます。画像がついていないボタンなので内容がわかりづらいですが、子供用に画像をつけてやれば、それっぽいアプリになるかと。

日曜大工気分でプログラムは30分、転送などが1時間(苦笑)というパターンで出来上がるって訳です。

カテゴリー: C#, WinRT パーマリンク