連載
» 2008年01月29日 00時00分 公開

.NETを知らない人でも分かるSilverlight入門(2):SilverlightならWeb上で高精細な動画再生も簡単? (2/3)

[松原晋啓,@IT]

サポートするフォーマット、サポートしないフォーマット

 ここでは、SilverlightのMediaElementオブジェクトで扱うことができるメディア形式に関して解説します。

 MediaElementオブジェクトでは、ビデオコンテンツ、オーディオコンテンツのほかに、ストリーミングにも対応しており、それらのサポートに関して詳細に定義されております。

 まずは、サポートするフォーマットとサポートしないフォーマット、それにサポートするプロトコルに関して以下に列挙します。

サポートするフォーマット

  • ビデオコンテンツ
    • WMV1:Windows Media Video 7
    • WMV2:Windows Media Video 8
    • WMV3:Windows Media Video 9
    • WMVA:Windows Media Video Advanced Profile(VC-1ではない)
    • WMVC1:Windows Media Video Advanced Profile(VC-1)
  • オーディオコンテンツ
    • WMA7:Windows Media Audio 7
    • WMA8:Windows Media Audio 8
    • WMA9:Windows Media Audio 9
    • MP3:ISO/MPEG Layer-3
    • 入力:ISO/MPEG Layer-3 データストリーム
    • チャンネル数:1ch(モノラル)、2ch(ステレオ)
    • サンプリング周波数:8、11.025、12、16、22.05、24、32、44.1、48kHz
    • ビットレート:8〜320kpbs、可変ビットレート
    • 制限:“フリーフォーマットモード”(「ISO/IEC 11172-3 従属節 2.4.2.3」参照)はサポートしていない
  • そのほかコンテンツ
    • Windows Mediaメタファイルとして知られているASX(Advanced Stream Redirector)ファイルをサポートしているが、すべてをサポートしているわけではない。サポートしていない機能については表3を参照
表3 SilverlightでサポートしていないASX機能
ASX機能 詳細
PreviewMode属性 ASXタグに存在。この属性を指定すると「AG_E_ASX_UNSUPPORTED_ATTRIBUTE」エラーが発生
BannerBar属性 ASXタグに存在。この属性を指定すると「AG_E_ASX_UNSUPPORTED_ATTRIBUTE」エラーが発生
SkipIfRef属性 ENTRYタグに存在。この属性を指定すると「AG_E_ASX_UNSUPPORTED_ATTRIBUTE」エラーが発生
PARAMタグ このタグ要素を指定すると「AG_E_ASX_UNSUPPORTED_ELEMENT」エラーが発生
REPEATタグ このタグ要素を指定すると「AG_E_ASX_UNSUPPORTED_ELEMENT」エラーが発生
EVENTタグ このタグ要素を指定すると「AG_E_ASX_UNSUPPORTED_ELEMENT」エラーが発生
STARTMARKERタグ このタグ要素を指定すると「AG_E_ASX_UNSUPPORTED_ELEMENT」エラーが発生
ENDMARKERタグ このタグ要素を指定すると「AG_E_ASX_UNSUPPORTED_ELEMENT」エラーが発生
無効なコンテンツ ASXタグが受け入れられないコンテンツを指定した場合、MediaFailedエラーが発生
代替URL ENTRYタグが複数のREF子要素を持つ場合、最初の1つのみを読み込む。最初の1つの読み込みが失敗した場合、WMPとは異なり、Silverlightでは次の要素を読み込まずにMediaFailedエラーが発生

サポートしないフォーマット

  • インタレース処理されたビデオコンテンツ
  • Windows Media Screen
  • Windows Media Audio Professional
  • Windows Media Voice
  • Windows Media VideoとMP3のコンビネーション
  • 奇数サイズのフレーム(例えば、127×135)のWindows Media Video

サポートするプロトコル

 MediaElementオブジェクトでは、ダウンロードに加えて、Windows Mediaサーバからのストリーミングをサポートします。

 例えば、メディアURIにMMSスキームを指定した場合、MediaElementオブジェクトは最初にファイルをストリームします。それが失敗した場合は、ファイルをダウンロードします。逆に、メディアURIにHTTPやHTTPSを指定した場合、最初にファイルをダウンロードし、失敗した場合はファイルをストリームします。

 以下にMediaElementオブジェクトでサポートするプロトコルを列挙します。

  • HTTP
  • HTTPS
  • MMS(Multimedia Messaging Service)
  • RTSP(Real Time Streaming Protocol)
  • RTSPT(Real Time Streaming Protocol, with TCP-based transport)

Silverlight 1.0のイベント処理はどうなっているのか?

 JavaScriptアプリケーションやWindowsフォーム、ASP.NETなどの.NETアプリケーションには「イベント」と呼ばれる処理(イベントハンドラ)を定義できます。

 「イベントハンドラ」とは、何かの動作をトリガとして実行される処理のことで、例えば、PCを操作する際のキーボード入力やマウス操作などの動作もすべてプログラムでイベントをハンドリングして、文字を入力したり、マウスカーソルを動かしたりしています。

 Silverlightアプリケーションは、Webブラウザ上で画面として実行されるアプリケーションですので、当然「イベントハンドラ」を定義できます。ただし、この「イベントハンドラ」もすべてのことができるわけではなく、プログラム言語ごとにハンドリングできるイベントモデルが異なります。Silverlight 1.0におけるイベントモデルは表4のとおりです。

表4 Silverlight 1.0のイベントモデル
イベントタイプ イベント 概要
プラグインサポートやオブジェクト生存期間 OnError Silverlightプラグインがランタイムエラーを起こした際に発生
OnFullScreenChange SilverlightプラグインのFullScreenプロパティを変更した際に発生
OnLoad Silverlightプラグインがロードされた際に発生
Loaded(UIElement上) Silverlightコンテンツが解析された後、レンダリングされる前に発生
ダウンローダーサポート Completed ダウンロードリクエストが完了した際に発生
DownloadProgressChanged ダウンロードリクエストによってコンテンツがダウンロードされている間に発生
フォーカス GotFocus オブジェクトがフォーカスを得た際に発生
LostFocus オブジェクトからフォーカスが外れた際に発生
イメージ(ImageやImageBrush) ImageFailed メディア関連のエラーが起こった際に発生
DownloadProgressChanged DownloadProgressプロパティが変更された際に発生
キーボード入力 KeyDown プラグインにフォーカスがある状態でキーが押された際に発生
KeyUp プラグインにフォーカスがある状態でキーが解放された際に発生
メディア BufferingProgressChanged BufferingProgressプロパティが変更した際に発生
Completed ストーリーボードの再生が完了した際に発生
CurrentStateChanged CurrentStateプロパティの値が変更した際に発生
DownloadProgressChanged DownloadProgressプロパティが変更された際に発生
MarkerReached タイムラインマーカーがメディア再生中に接触した際に発生
MediaEnded MediaElementがオーディオやビデオの再生が完了した際に発生
MediaFailed メディア関連のエラーが起こった際に発生
MediaOpened メディアストリームが確認され、オープンされ、ヘッダーが読み込まれた際に発生
マウス入力 MouseEnter マウスがオブジェクトの範囲内で押された際に発生
MouseLeave マウスがオブジェクトの範囲内で解放された際に発生
MouseLeftButtonDown マウスの左ボタンが押された際に発生
MouseLeftButtonUp マウスの左ボタンが解放された際に発生
MouseMove マウスの座標位置が変更された際に発生

 これらのイベントは、すべてのオブジェクト上で使用できるわけではなく、オブジェクトごとに使用可能なイベントが定義されております。それについては、本連載で紹介しているタグオブジェクトのリファレンスやSilverlight 1.0 SDKに付属されているヘルプドキュメントを参考にしてください。

 次のページでは、さらにSilverlight 1.0におけるイベント処理について解説し、アプリケーション開発に欠かせないエラー処理について解説します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。