Xboxビデオで映画をダウンロードしてWindows Phoneで見る

Windows Phone Advent Calendar : Consumer Track Day 8 です。

Xboxビデオという映画の配信サービスがあります。Xboxで使われている方はいると思うのですが、これをWindows Phoneで見れることってあまり知られてないと思うのです。
というわけで今回はこのサービスを使ってみました。

といっても、Windows Phoneで直接ダウンロードできるわけではありません。Zuneを使います。Zuneのマーケットプレイスタブを見たら、映画がいっぱい並んでいます。

今回選んだのはこれ、はやぶさ。まだ見てなかったのでちょうどいいかなと。

購入押したら、Windows Live IDでログインという画面が出てきます。まだMicrosoftアカウントになってないですね。

確認画面出ましたが...たか!1020ゲイツMSP!!

いつもの僕だったらここでやめるところですが、今日の伊勢さんは違います。ポイント購入ボタンぽちっとやるとカード決済できるので、1200MSP購入しました。

購入を押せばすぐにダウンロードが始まり、コレクションに追加されます。


あとは音楽と同じように転送すれば、なんの問題もなく見ることができます。ちゃんとリジュームもされるので、ちょっとずつ見ていくとかもできますね。

ちなみに、今回はやぶさがやたら高かったのは「買い切り」だったからです。アメージングスパイダーマンとかはレンタルというのが選べるようになっており、再生できる期間が決まっている代わりに280MSPなどといったわりとリーズナブルな価格で見れるようになってます。

レンタルのときは、どちらで再生するかきかれます。


不満なのはMSPという単位がいまいちピンとこないとこと、品ぞろえ。僕スタートレック好きなんですが、スタートレック関連のものが一切なくて涙しました。

Windows Phone 8 のアプリ内課金をエミュレータで試す : (1)環境を作る

Windows Phone 8 SDK Advent Calendar Day 7 です。

Windows PhoneにLINEのスタンプがない理由の一つであるアプリ内課金でありますが、Windows Phone 8でようやくサポートされました。今回はこのアプリ内課金をローカルで試してみたいと思います。

アプリ内課金のフローとしては、下図の通りです。(Windows Phone 8 のアプリ内購入からの引用)

  • ストアにアプリと、アプリ内製品を登録します。(A,B)
  • アプリはアプリ内課金を行おうとした時に、ストアからアプリ一覧を取得します。(C)
  • 課金を実行(D)すると、ライセンス一覧を取得して課金が通ったものの一覧を取得できます。(E)
  • 課金によってコンテンツがサーバーから配信される場合はレシート情報を受信(F)してサーバーに送って(G)、ダウンロード(H)します。

iOS では、サーバーがレシート情報を照合する際、Appleのサーバーにレシートを送って正規性を照合するのですが、Windows Phoneでは署名を検証して行います。各開発者で実装の手間が増えますが、検証サービスに処理が集中してフローが失敗するということが起こりづらいのが利点でしょう。

このページではアプリ内課金のテストの方法として、「コンポーネントを分割しておいてちゃんと単体テストを書いてテストする」ということと「ベータ版配布を使って配布して確認する」という方法(ベータ配布のときは有料に見えるけど実は課金されない仕組みらしいです)、そして「エミュレータでテストする」の3つの方法が挙がっています。

今回はさっくり試すために「エミュレータでテストする」というのをやってみますが、これがまた結構泥臭かった…。設定するところまでで力尽きてしまいました。

IISASP.NET 4.5をインストール

このテストをするためにはローカルにストアのモックサービスを立てる必要があります。ASP.NET 4.5 の動くIISを立てます。Windowsの役割の追加から「インターネットインフォメーションサービス」の「Web管理ツール」の「IIS管理コンソール」と「World Wide Webサービス」「アプリケーション開発機能」の「ASP.NET 4.5」をチェックしてOKを押します。

次に、Web Platform Installer から Web Deployment Tool を入れます。

IISにモックサービスを登録する

まず、「C:\IapcatalogMockService\CatalogServiceMock」というディレクトリを作成し、 IIS_IUSRS に書き込み権限を与えます。

次にIISマネージャを開き、Webサイトの追加をします。

「サイト名」に「IAPCatalogMockService」として、物理パスを先ほど作成した「C:\IapcatalogMockService\CatalogServiceMock」としておきます。

80番ポートでかぶるのですが、これはDefault Web Sitesのほうを無効にします。

そして、ストアのモックサービスをWindows Phone Mock In-App Catalog Service Source Code sample in C# for Visual Studio 2012からダウンロードしてきて、ダウンロードしてきたzipの中にあるzipを展開してパッケージをデプロイするのですが、このパッケージには問題がありパスがちゃんと合わないため、修正したものをこちらにあげておきました。*1

ダウンロードしたパッケージを展開し、管理権限付きのコマンドプロンプトでこのフォルダに移動して CatalogServiceMockDeploymentPackage.deploy.cmd /Y を実行します。

すると、http://localhost/v8/help を叩くとAPI一覧の画面を見ることができます。

内部IPアドレスを調べてファイヤウォールの許可ルールを作成する

Windows Phone 8 エミュレータは、内部通信用のネットワークポートを持っていますが、このポートの通信は初期状態だとWindowsファイヤウォールでふさがっているので、ここぞとばかりに開放します。

まず、コマンドプロンプトで ipconfig を実行して、 Ethernet adapter vEthernet (Internal Ethernet Port Windows Phone Emulator Internal Switch)のIPアドレスを調べます。(以下、ここでは内部IPと呼びます)

次に、Windowsファイヤウォールに規則の追加で「TCPの」「すべてのポート*2」を「ローカル側の内部IP」を「全通過」するルールを作ります。






Windows Phone Emulator のイメージを書き換えて、ストアの通信をモックサービスに向ける

今回一番黒い部分です。

まず、Hyper-Vマネージャを開いて、すべてのエミュレータを削除します。

次に、「C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Emulation\Images」をエクスプローラーで開き、作業するエミュレータの読み取り専用フラグを解除します。僕の環境では最初から外れていました。

次に、このVHDをダブルクリックでで開きます。一気に4つほどドライブがマウントされます。

ここでマウントされたドライブの中から、Windows\System32\drivers\etc\hosts を探して、管理者権限のあるテキストエディタで開きます。内部IPをmarketplaceedgeservice.windowsphone.comに向けるエントリを追加して保存します。

(IPアドレス) marketplaceedgeservice.windowsphone.com

保存したら、コンピュータでマウントされたドライブを選んでリボンから「取り外し」します。

アプリ内課金アイテムを設定する

「C:\IapcatalogMockService\CatalogServiceMock\IapcatalogMockService」にある「iapcatalog.xml」というXMLがアプリ内課金アイテムの定義ファイルになってます。必要に応じてこれを編集します。

プロジェクトのプロダクトIDを変える

プロジェクトのプロダクトIDを「ee29a261-80d0-4bdf-89bd-28b1ebbc8bd3」に変更します。

通るかどうかやってみる

ひとまず、こんなコード書いてやってみました。

using Microsoft.Phone.Controls;
using System;
using System.Diagnostics;
using Windows.ApplicationModel.Store;

namespace IAPTest
{
    public partial class MainPage : PhoneApplicationPage
    {
        // コンストラクター
        public MainPage()
        {
            InitializeComponent();
            ListingTest();
        }

        private async void ListingTest()
        {
            var list = await CurrentApp.LoadListingInformationByProductIdsAsync(
                new string[] {"Test1", "Test2"});

            foreach (var item in list.ProductListings.Values)
            {
                Debug.WriteLine(item.Name);
            }
        }
    }
}

これで、デバッグウィンドウにアプリ内課金アイテムの名前が出力されます。

実際の課金処理については次回に続きます...

*1:IAPCatalogMockServicePackage.pubxmlのDesktopBuildPackageLocationを環境に合わせて書き換えて、DeployIisAppPathをIAPCatalogMockService/に変更しています。こうしないとルートがv8になってくれないのです。

*2:もちろん80だけでもいいです

TrainTimeTableで電車通勤が変わる

Windows Phone Advent Calendar : Consumer Track Day 7 です。

Life changing な Windows Phone の Tips を紹介しようというのが趣旨でしたが、生活変わったアプリといえば TrainTimeTable ですね。電車通勤/通学してる人には絶対お勧めです。

TrainTimeTable | Windows Phone アプリ + ゲームストア (日本)

起動すると検索フィールドがでてくるので、目的の駅の名前を入れます。こなへんは普通の時刻表アプリですね。


すると時刻表が表示されます。

「タイルに登録」するとその時刻表がタイルに表示され、一発でアクセスできます(試用版では1枚まで)。いつも使う路線をタイルに登録しておきます。ちょっと見づらいですが、このタイルからも直近2時間の時刻を確認できます。

また、「お気に入りに登録」しておくと起動直後の画面にリストで表示されるので、たまに乗るレベルの路線ならこちらに登録しておくとよいでしょう。

このアプリ最重要なのが、設定画面で「カウントダウンをオンにする」こと。

カウントダウンをオンにすると、その電車の出発の時間までの時間がカウントダウンされます。というかこれデフォルトONにしておけばいいのに、とおもいました。

利用のモデルとしては、普段の通勤経路の駅をタイルに登録しておき、カウントダウンの時間を見ながら家から駅までダッシュするわけですね。
特にダイヤがめっちゃ強固な阪急を使ってる人はかなり恩恵を受けられると思います。

ちなみに、iPhoneではこれに類するアプリ知らないのですが、AndroidではjNTrainのウィジェットがおすすめです。

Pictures Hubの背景を固定

Windows Phone Advent Calendar : Consumer Track Day 6 です。

Pictures Hub の背景は、端末に入っている画像がランダムに表示されますが、固定することができます。この機能、WP7の頃はすごいわかりづらいところにあって隠し機能みたいになってましたが、WP7.5からは普通にメニューからできるようになっています。

「背景の選択」を選んで、写真を選びます。


すると、選んだ写真で Pictures Hub の背景が固定されます。

もとに戻すときは「背景のシャッフル」を選びましょう。

Internet Explorerで文字を選択して一発検索

Windows Phone Advent Calendar : Consumer Track Day 5 です。

Windows Phoneの正面についている3つの物理ボタンは戻る、スタート、検索で固定ですが、この検索ボタンはどの画面からもbingの検索画面を開いてくるようになっています。

ただ一つだけ例外があります。それがInternet Explorer

Internet Explorerで文字を選択して、検索ボタンを押します。

すると、検索してた文字がbingで検索されます。

うーん、これAPI公開して欲しかったなー。

Internet Explorerのピン機能を使っていつものサイトに一発アクセス

Windows Phone Advent Calendar : Consumer Track Day 3 です。

まあiPhoneにもある機能なんでしょーもないといえばしょーもないのですが、IEで表示できるページはスタート画面に保存できます。IEのメニューから「スタート画面に追加」です。

こんなかんじで追加されます。

特におすすめなのが、Googleをスタート画面においておくこと。普段の検索はbingで事足りる*1んですが、いざというときにさっとGoogle使えるのは便利です。

*1:bing使いにくい大したことないとか言うけど、IT系の検索しなければそれなりに使える感じなので、端末の検索ボタンでbing出してそれでもかからないときはGoogleって使い方してます

プレイリストを端末上で作る

Windows Phone Advent Calendar : Consumer Track Day 2 です。

Zuneの音楽再生は端末に転送してあるアルバムを聞くだけじゃなく、端末上で入っている曲を組み合わせてプレイリストとして保存しておくことができます。

まず、任意の曲を再生します。今回は、アルバム自体を選択しました。

再生ビューで再生されるので、バックキーで戻って、プレイリストに追加する曲を選びます。長押しして「プレイビューに追加」とします。

すると、今再生されていたアルバムの末尾に追加されるので、プレイビューに移動します。プレイビューへの移動は、Music+Videos hubのトップにある、「再生中」と出ている項目か、ボリュームを変えた時にでてくる曲名の部分です。

プレイビューが開いたら、曲名の部分をタップします。

今のプレイビューの内容が出てくるので、保存ボタンをタップします。

プレイリストに名前を付けて保存します。

これでプレイリストが保存されます。イケてないのが、Zuneにつないだ時に逆シンクされない、つまりWindows Phoneで作ったプレイリストがZuneに保存されないされないこと。これなんとかならないのかなあ。