Windows Azure Blob StorageをProgressive Downloadに最適化させる設定

Progressive Downloadは、HTML5 Videoなどでの標準的なビデオのストリーミング手法です。
Streaming Serverが不要でWeb Serverだけで構成できますので、非常に気軽に利用ができます。
ただ、動画の場合は、別の時間にポイントしたときに「シーク」が行われますが、Web Serverが、HTTP Headerにて”Accept Byte-Range”を返さないと、すごく時間がかかります。殆どのIISやApacheでは標準対応しているので、多くは問題になりません。

さて、Windows Azure を考えてみると、「BlobはHTTPだから、Blobにファイルを置いたらHTML5 ビデオで再生できるじゃない!」と思ってしまいます。
ですが、実際には、再生自体は出来るのですが、シーク処理をするとレスポンスがかなり悪い場合があります。

その際には、Blob Storageに、バージョン設定をすると、正しく動作します。

Versioning for the Blob, Queue, and Table services in Windows Azure:

http://msdn.microsoft.com/en-us/library/dd894041.aspx

これを見ると、Windows Azure Storageにはバージョンがあり、「2011-08-18」バージョンで、”Accept-Ranges:bytes” に対応していることがわかります。

The 2011-08-18 version includes these changes:

Get Blob (REST API) returns an Accept-Ranges:bytes header in the response to indicate that the service supports range requests.

以下に、ストレージのバージョンを変更する、簡単なC#のプログラムを以下に示します。

using Microsoft.WindowsAzure.Storage;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace EnableProgressiveDownload4AzureBlob

{

    class Program

    {

        static void Main(string[] args)

        {

            var storageAccount = CloudStorageAccount.Parse(“AccountName=<your name>;AccountKey=<your key>;DefaultEndpointsProtocol=http”);

            var blobClient = storageAccount.CreateCloudBlobClient();

            // service properties 取得

            var serviceProperties = blobClient.GetServiceProperties();

            Console.WriteLine(“Old version: {0}”, serviceProperties.DefaultServiceVersion);

            // refer: http://msdn.microsoft.com/en-us/library/dd894041.aspx


            // 初期設定は null
ったりします・・

            // 2011-08-18 り高いバージョン設定をします。

            serviceProperties.DefaultServiceVersion = “2012-02-12”;

            // service properties 更新します。

            blobClient.SetServiceProperties(serviceProperties);

            Console.WriteLine(“New version: {0}”, serviceProperties.DefaultServiceVersion);

            Console.WriteLine(“Done”);

            Console.ReadLine();

        }

    }

}

設定前のHTTP Response

HTTP/1.1 200 OK

Proxy-Connection: Keep-Alive

Connection: Keep-Alive

Content-Length: 92287224

Date: Thu, 20 Jun 2013 10:30:12 GMT

Content-Type: video/mp4

ETag: 0x8D03BAFC5A2047D

Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

Last-Modified: Thu, 20 Jun 2013 09:29:18 GMT

x-ms-request-id: 42ae864f-c225-4eea-8f28-9173914b142f

x-ms-version: 2009-09-19

x-ms-meta-CbModifiedTime: Thu, 20 Jun 2013 09:25:56 GMT

x-ms-lease-status: unlocked

x-ms-blob-type: BlockBlob

設定後のHTTP Response

HTTP/1.1 206 Partial Content

Proxy-Connection: Keep-Alive

Connection: Keep-Alive

Content-Length: 46415872

Date: Thu, 20 Jun 2013 10:37:40 GMT

Content-Range: bytes 29261824-75677695/92287224

Content-Type: video/mp4

ETag: “0x8D03BAFC5A2047D”

Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0

Accept-Ranges: bytes

Last-Modified: Thu, 20 Jun 2013 09:29:18 GMT

x-ms-request-id: 36e940ac-e3ed-4bb4-9260-81d19ff815b4

x-ms-version: 2012-02-12

x-ms-meta-CbModifiedTime: Thu, 20 Jun 2013 09:25:56 GMT

x-ms-lease-status: unlocked

x-ms-lease-state: available

x-ms-blob-type: BlockBlob

うまくご活用ください!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中