Welcome to MSDN Blogs Sign in | Join | Help

Michael Jackson Memorial ライブ中継 by Silverlight x IIS Media Services

米国時間7月7日午前10時(日本時間7月8日午前2時)より、ロスアンゼルスのStaples Centerで行われるMichael Jackson Memorialの模様をIIS Smooth Streaming とSilverlightを使って生中継!

URLはこちら。

http://inmusic.ca/news_and_features/Michael_Jackson

ぜひ、SilverlightとIIS Media Servicesのパワーを体感してください。

日本でも大きなイベントのライブ中継にSilverlightを利用したいです。

Posted by aonishi | 0 Comments
Filed under: ,

登る?上る? Noboru - Silverlight 3 Control

http://noboru.codeplex.com/

まだ実体は定かではありませんが、Office 2010のようなユーザーインターフェイスを提供するためのコントロールで、Visual Studio 2010, Expression Studio 3向けに作られるようです。

 

 

Posted by aonishi | 0 Comments
Filed under:

[今更聞けないかも] Expression Blend 2とVisual Studio 2008でSilverlight 2用のカスタムコントロールを作る

Silverlightのアプリケーションプロジェクトをビルドした時に生成されるDLLを他のプロジェクトから参照してみると何が起こるでしょうか。
Silverlightのアプリケーション開発は、画面の親要素がUserControlになっています。つまり、極端な話、開発したアプリケーションは丸ごと再利用できるコントロールになり得るわけです。とはいうものの、もう少し手軽にカスタムコントロールを作成したい場合、どうするといいでしょうか。

ここから先の話は、厳密性は問わず、Expression Blend 2を利用して再利用を考える場合の一つの例としてお考えください。

目標として、次のようなメディア再生コントロールを再利用するという簡単な問題で考えてみます。
次の図は、別プロジェクトで作成したコントロールを参照して、再利用できた状態です。

image

XAML上は、

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="MediaPlayer02.Page"
    Width="640" Height="480" xmlns:MediaPlayer01="clr-namespace:MediaPlayer01;assembly=MediaPlayer01">

    <Grid x:Name="LayoutRoot" Background="White">
        <MediaPlayer01:myMEControl Margin="41,58,47,102" MediaURL="Shoe_Circus.wmv" x:Name="player"/>
    </Grid>
</UserControl>

このようなコントロールを作るための簡単な手順を示します。

1.Expression Blend 2から新しいSilverlight 2アプリケーション[MediaBase01]を作成し、MediaElement一つと、Button三つを貼り付けた画面を作る
MediaElementの名前は[myME] AutoPlayプロパティはFalse、Buttonは、[playButton]、[pauseButton]、[stopButton]とする
image

2.MediaElementと3つのボタンを選択した状態で、[F8]キー(コントロールの作成)を押下する

名前に[myMEControl]と入力する

image

画面が次のように変わるのを確認する

image

ソリューションをビルドし、Page.xamlを改めて見ると、カスタムコントロールで表示されていることがわかる

image

3.カスタムコントロールに何もプロパティが存在しないので、外部から何かを設定する方法を考える

・単純な値を格納するだけであれば、myMEControl.xaml.csのmyMEControlクラスにパブリックなプロパティを用意すればよい

・同様にカスタムコントロールの公開メソッドについても同様にパブリックなメソッドを用意すればいい

例えば、次のようにMediaURLというプロパティを作り、Playメソッドにおいて再生する、Pauseメソッドで一時停止、Stopメソッドで停止という仕様にし、改めてビルドする

    public partial class myMEControl : UserControl
    {
        public myMEControl()
        {
            InitializeComponent();
            playButton.Click += new System.Windows.RoutedEventHandler(Play);
            pauseButton.Click += new System.Windows.RoutedEventHandler(Pause);
            stopButton.Click += new System.Windows.RoutedEventHandler(Stop);
        }
        private string m_MediaURL;

        public string MediaURL
        {
            get { return m_MediaURL; }
            set { m_MediaURL = value; myME.Source = new Uri(m_MediaURL, UriKind.RelativeOrAbsolute); }
        }

        public void Play(object sender, System.Windows.RoutedEventArgs e)
        {
            myME.Play();
        }
        public void Pause(object sender, System.Windows.RoutedEventArgs e)
        {
            myME.Pause();
        }
        public void Stop(object sender, System.Windows.RoutedEventArgs e)
        {
            myME.Stop();
        }
    }

4.カスタムコントロールのプロパティ[MediaURL]がExpression Blend 2から設定できることを確認する

image

なんらか手持ちのメディアファイルをプロジェクトに追加し、MediaURLに設定し、ビルドして結果を確認する

image

5.C:\Users\<ユーザー名>\Documents\Expression\Expression Blend Projects\MediaBase01\MediaBase01\bin\Debug のフォルダに、MediaBase01.dllが出来上がっていることを確認する

6.Expression Blend 2で新しいSilverlight 2アプリケーションを作成し、5で確認したMediaBase01.dllを参照し、アセットライブラリを確認する

image

7.myMEControlをPage.xamlに貼り付け、MediaURLプロパティにビデオを指定して動作を確認する
次の図は、ストリーミングサーバーのURLを指定した例

image

・・・

という形で、プロパティやメソッドのマッピングをコードで記述していくことで、カスタムコントロールを作成し、他のプロジェクトから再利用できることが分かりました。

 

冒頭で厳密性は問わず、と書いた理由は、この状態ではまだカスタムコントロールとしてスタイリングに対応できていなく、デザインの柔軟性を提供するにはテンプレートやVisual State Managerを利用して拡張が必要です。そのあたりの要求がない場合は、ここで紹介したレベルでも応用できるかと思います。

Posted by aonishi | 0 Comments

[今更聞けないかも] Silverlight 2ランタイムに対するHTML <object>タグからのパラメータ受け渡し

MSDN Silverlightフォーラムでも質問があり、よくお客様にも聞かれるものですが、Silverlightのプラグインを初期化する際に、HTML側からカスタムパラメーターを受け渡すことができます。メディアプレイヤーの再生内容を指定する場合や広告バナーのクリック後のURL指定など、動的にアプリケーションのふるまいを設定する場合に利用すると便利です。

方法は、MSDNライブラリに記載されています。<object>タグの中に、

<param name="initParams" value="key1=value1"/>

のように、キーと値のペアを記述することです。キーが複数存在する場合は、

<param name="initParams" value="key1=value1,key2=value2,key3=value3…"/>
のように複数のペアをカンマで区切って並べることができます。

「カスタム初期化パラメータを指定および取得する」
http://msdn.microsoft.com/ja-jp/library/cc189004(VS.95).aspx

ご注意いただきたいのは、App.xaml.csのApplication_Startupメソッドの中で値を受け取るということと、Page.xaml.csにはアプリケーション開発者が指定して値を渡すということです。
http://msdn.microsoft.com/ja-jp/library/system.windows.startupeventargs.initparams(VS.95).aspx

 

initParamsに渡せる値は単純な文字列に限らず、XML文字列も渡せます。Expression Encoder 2 SP1が生成するメディアプレイヤーが代表例ですが、再生リストやサムネイルなどのメタ情報をXMLで受け渡しています。

例:

<param name="initparams" value='autoplay=True,autoload=True,enablecaptions=True,muted=False,stretchmode=0,displaytimecode=False,

playlist=<playList><playListItems><playListItem title="" description="" mediaSource="video2008.wmv" adaptiveStreaming="False" thumbSource="" frameRate="29.97" width="640" height="360" ><chapters><chapter  position="25.967" thumbnailSource="video2008_25.967.jpg" title="a" /><chapter  position="123.207" thumbnailSource="video2008_123.207.jpg" title="b" /><chapter  position="185.086" thumbnailSource="video2008_185.086.jpg" title="c" /><chapter  position="267.961" thumbnailSource="video2008_267.961.jpg" title="d" /></chapters></playListItem></playListItems></playList>' />

 

ASP.NET Silverlightコントロールにおいてもパラメータ渡しができます。

MSDNフォーラムの「mediaelementのsourceをASP.NETのページから設定するには」をご参照ください。
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightmediaja/thread/ff330de5-4125-4888-8af7-c69315ae9a35

Posted by aonishi | 0 Comments
Filed under:

[今更聞けないかも] Silverlight 2のインストーラーのURL

Silverlightのインストールは、原則としてマイクロソフトのサーバーから最新のインストーラーを起動することで行います。

しかし、インストーラーのURLが存在することを知らないまま、http://www.microsoft.com/silverlight/resources/install.aspxなどインストール先のリンクがあるページへ誘導されている方もいらっしゃるかもしれません。

ぜひ、次のURLをご利用ください。

Silverlight 2のインストーラーURL: http://go2.microsoft.com/fwlink/?LinkID=124807

サポートされているブラウザからアクセスした場合、ブラウザのユーザーエージェントなどからサーバー側で判断が行われ、適切なインストーラーが起動するようになっています。

 

ごく稀に「Windows/Intel Mac版のインストーラーを直接起動するには」というお問い合わせを受けることがあるので、参考までに記しておきます。

直接Windows版のSilverlightインストーラーを読み込む場合は、
http://go2.microsoft.com/fwlink/?LinkID=107362
をご利用ください。

Intel Mac版のインストーラーを読み込む場合は、
http://go2.microsoft.com/fwlink/?LinkID=107365
です。
それぞれ、最新版がダウンロードされるように構成されており、現状は、Silverlight 2 GDR 1 (2.0.40115.0)になっています。

Silverlight 3がリリースされたら、それぞれSilverlight 3のインストーラーに置き換えられる予定です。

Posted by aonishi | 0 Comments

MSDNフォーラム上で投稿したスレッド一覧

主にSilverlightが中心となりますが、MSDNフォーラムで何らかの回答・返信を行ったスレッドのリンクを記載しておきます。

 

大西 彰のスレッド:http://social.msdn.microsoft.com/Forums/ja-JP/user/threads?user=%e5%a4%a7%e8%a5%bf%e3%80%80%e5%bd%b0

回答している内容は大小様々ですが、何らかの参考になれば幸いです。

Silverlightではこの1年間で次のような内容に回答・返信しています。

メディアの再生位置をリアルタイムに更新して表示したい
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightmediaja/thread/f48f0f1e-7163-4141-8d0a-729d6d9f1e46

音ズレの問題
http://social.msdn.microsoft.com/Forums/ja-JP/silverlighthostingja/thread/da74a091-76b0-4234-99f9-68cc762a2941

スライダーを使って、メディアファイルのボリュームを変えたい
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightmediaja/thread/51f78752-ac47-4631-8973-a93f3a601b88

Silverlight3 のSaveFileDialogにデフォルトファイル名を指定したい
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/3685332b-1c12-423b-9647-c0dcfba87efe

Visual Studio 2008でビルドするとMediaError
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightmediaja/thread/2f8efd4d-e62e-4c81-bd6b-8394fe03a650

MediaElementの早送り
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/452afa23-ea38-4e93-a098-abfb294738d0

mediaelementのsourceをASP.NETのページから設定するには
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightmediaja/thread/ff330de5-4125-4888-8af7-c69315ae9a35

Silverlight 2でMVCアーキテクチャのV(View)を担当できるか
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/a7273730-67e9-4b38-904b-db91d48a3a84

Flashのようなテンプレート
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/bcf44089-2d6c-48e6-b8a0-7ce50bb634b0

無効なスレッド間アクセス
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/fa5dc29b-6894-4445-949d-c7728b7a3505

Silverlightの基本構成
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/a728292e-589e-4317-b7f0-d4ba8dc34049

WCFクライアント時のセキュリティエラー
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/c0c4f522-440c-440c-9d6c-1fd0a7fb5277

ソリューションにDeep Zoomを組み込む方法
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/49481332-43d4-446a-8922-f664b234d107

Silverlight2でキャプチャ
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/c4c8c193-658e-4fb3-aa27-2b4cb803c0d8

MediaElementを利用したストリーミングの再生 2
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/34006d96-2731-4c09-8f7e-c5616bfad3aa

四角形に文字を追加する方法
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/30a546db-5990-44fa-9735-b4ddbd7ff0d1

MediaElementを利用したストリーミングの再生
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/ebf9aafe-4000-45fa-861e-00e0af43344c

Silverlight 2 + JavaScript / Managed JScript の開発環境について
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/a8f6da33-6182-49ed-81bf-3639b06db5c7

HitTestはどこへ?
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/b66f7087-699f-4575-b255-1a1f47693d95

Silverlight2 beta2 とOracle DB接続について
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/af6d5ba7-f464-4ea2-a0ff-8c93cdb759ad

Silverlight 2 + JavaScript で開発する方法は?
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightjavascriptja/thread/50b64506-a0ab-45bd-bf79-90325af48ca1

SilverlightのキャッシュとFileDialog.ShowDialog()のエラーについて
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/5106a83e-4486-4b16-bf06-c17b27b81625

pathで描画した図形をクリックした際にリンクさきのページへ遷移する方法について
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/1e226fce-b07e-487b-9564-056c33f925b5

画像のクリックできる領域について
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/9f27af06-dfdc-47e1-a929-ac22f74c4544

ファイルのアップロードに関して
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/4ca1b8a3-acec-4fc1-8bc5-3870d7ae0bb8

ファイルのフルパス取得について
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/f817a553-6d42-4fd8-8d42-51aa418a9266

Silverlightによる帳票作成について
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/4e367b2f-a1aa-4c64-87a7-9fdda4ab995a

Silverlightの開発環境を整える上での問題を解決するには
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/881dd99c-8972-4518-8f97-b31ecd38818f

xap ファイルの読み込みエラー時の処理について
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightjavascriptja/thread/64384264-b1c7-49a3-bc91-189f18028524

DataGridの行数について
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/54119d99-fe7d-4d63-aacf-5cea6cd32d31

npctrl.dll アドオンのエラー
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightdotnetja/thread/0ba11299-2dcd-41c0-b2bb-139373bec83d

Silverlight Tools RC0
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/97ec5528-5c4e-4afd-baf9-80a64840909f

DRMについて
http://social.msdn.microsoft.com/Forums/ja-JP/silverlightgeneralja/thread/89f5102f-f16d-415f-85cd-cdc6f3e17515

Mac版プラグインのバグ?
http://social.msdn.microsoft.com/Forums/ja-JP/silvelightjavascriptja/thread/0dd1a218-164c-4ec9-b1bb-889227f098a7 

 

Posted by aonishi | 0 Comments
Filed under: ,

「今更聞けないかも」シリーズを投稿予定

Silverlight、Expression Blendの使い方で、基本的な部分だけどうまく活用されていない、とか、発表されて時間が経過しているけれども改めて訴求したいことなど、「今更聞けないかも」シリーズとして、短い記事を投稿したいと考えています。

「○○ってどうやって実現するんですか?」、「□□ってどんな構造になっているんでしょうか」など、聞きたいネタ(ただしあんまりディープなのはご勘弁)があればコメントなりご連絡ください。

Posted by aonishi | 0 Comments

VSUG Day 2009 Summer: Silverlight 3のセッションを担当します

2009年6月6日(土)  受付10時~
▼会場 ベルサール八重洲 3F
http://www.bellesalle.co.jp/bs_yaesu/images/shikihai.html

詳細は、http://vsug.jp/tabid/228/EventID/4/Default.aspx

私のセッションは、10:30-11:30です。Silverlightの概要、Silverlight 3の新機能、Expression Blend 3によるアプリケーション開発をご紹介します。

Silverlightによるメディア配信 - 2009年5月版 - Silverlight 2/IIS Media Services 2.0、Silverlight DRM、Silverlight 3/IIS Media Services 3.0

今月いくつかSilverlightについての最新情報を講演する機会がありました。
「Silverlight DRM Powered by PlayReady ~Windows Media資産の有効活用とHD配信の最新手法のご紹介~」という形で、最新のメディア配信技術についての紹介資料を公開しています。
MediaElementの基礎、IIS Smooth Streamingの概要、Silverlight DRM、Windows Media DRMコンテンツをSilverlight 2から再生する方法、Silverlight 3、IIS Media Services 3 (IIS Live Smooth Streaming)について触れています。

アプリケーションの配置と展開、HTMLブリッジ、Expression Blend 2 SP1とVisual Studio 2008によるメディアプレイヤー開発の基礎についても触れています。

フォルダ内は予告なく変更する場合がありますのでご注意ください。

Silverlight 2 クイックスタート (日本語翻訳版)

Silverlight 2のアプリケーション開発での重要な出発点を解説してある「Silverlight QuickStarts」の日本語翻訳版が公開されているので、お知らせします。

http://silverlight.net/japan/quickstarts/default.aspx

アニメーション: http://silverlight.net/japan/quickstarts/animations.aspx
Double(数値)、Color(色)、それぞれに対して時間とともに変化を指定する方法、Storyboardの利用方法、キーフレームアニメーションの基礎がわかります。 

オーディオとビデオ: http://silverlight.net/japan/quickstarts/audioandvideo.aspx
音楽やビデオを再生するためのMediaElementの基本的な使い方がわかります。

イメージ: http://silverlight.net/japan/quickstarts/Imaging.aspx
静止画像を表示するためのImageオブジェクト、画像を使ったブラシであるImageBrushの使い方がわかります。

Deep Zoom: http://silverlight.net/japan/quickstarts/DeepZoom.aspx
高解像度画像を拡大縮小して表示するDeep ZoomをSilverlightで利用する方法、アプリケーション内のイベントに応じてDeep Zoom画像をコントロールする方法の基本がわかります。

コントロールテンプレート: http://silverlight.net/japan/quickstarts/ControlTemplates.aspx
CheckBoxコントロールを題材として、コントロールのスキニング(外観を変える)方法とVisual State Managerを使った状態遷移についてに知ることができます。

コントロールへのデータバインディング: http://silverlight.net/japan/quickstarts/BindingToControls.aspx
コントロールとデータを自動的に結合するための、データバインディングについて、単一のオブジェクト、コレクションを利用した方法の基本がわかります。
加えて、DataTemplateの利用方法、マスター・詳細型の結合、IValueConverterを利用したデータ変換について知ることができます。

HTMLブリッジ: http://silverlight.net/japan/quickstarts/HtmlBridge.aspx
Silverlightの得意とする重要な機能であるHTMLブリッジを学べます。SilverlightからHTML DOMへのアクセス、HTML DOM内のイベントをSilverlightマネージコードへ対応づける方法、JavaScriptからマネージコードの呼び出し、マネージコードからJavaScriptを呼び出す方法、これでWebページとSilverlightの統合が自由にできます。

分離ストレージ: http://silverlight.net/japan/quickstarts/isolatedstorage.aspx
Silverlightから直接データアクセスできる領域としてIsolatedStorage(分離ストレージ)があります。ここではIsolatedStorageSetting、IsolatedStorageFile、IsolatedStorageStreamの使い方がわかります。

LINQ to XML: http://silverlight.net/japan/quickstarts/LINQtoXML.aspx
LINQ to XMLを利用してXMLデータを解析する方法をRSSフィードを読み込む例を利用しながら紹介しています。

配信フィード: http://silverlight.net/japan/quickstarts/SyndicationFeedReader.aspx
RSSフィードを受信するアプリケーションの簡単な例を紹介しています。コントロールへのデータバインディングを先に読んでからご覧いただくのがお勧めです。

Webサービス: http://silverlight.net/japan/quickstarts/WebServices.aspx
ASP.NETとWCFを利用した簡単なWebサービスの作成、非同期通信によるSilverlightからWCFサービスへのアクセスの簡単な例を紹介しています。

動的言語: http://silverlight.net/japan/quickstarts/dlrconsole.aspx
DLRコンソールの使い方について紹介しています。

 

Posted by aonishi | 0 Comments
Filed under:

インターネットラジオBrandnew-JがSilverlightでテスト配信中

J-WAVEのインターネットラジオ、Brandnew-JがSilverlightを利用した番組配信のβテストを実施しています。

http://prg.j-wavemusic.com/topics/archives/2009/04/silverlight.html

Silverlightによる配信は、Windowsだけではなく、Intel Mac (OS X 10.4.8以降)対応です。ラジオが好きな方は、ぜひβテストにご協力ください。

Posted by aonishi | 0 Comments
Filed under: ,

MSDN Azure Services Platform デベロッパーセンター

http://msdn.microsoft.com/ja-jp/azure/default.aspx

Windows Azure、Live Services、.NET Services、Microsoft SQL Services、マイクロソフトの「ソフトウェア+サービス」やクラウドコンピューティングについての情報が集約されています。日本語の情報もどんどん掲載される予定です。

また、Tech FieldersエバンジエリストコラムでもAzureについての情報が紹介されています。定期的にウォッチされるとよいでしょう。
http://www.microsoft.com/japan/powerpro/TF/list_column.mspx

WPFやSilverlightといったクライアント技術だけではなく、サーバー側の技術を利用したアプリケーションにおいても.NETやVisual Studioで開発ができる点が、マイクロソフトのプラットフォームを利用する上での便利な部分です。アプリケーション実行環境がどこに置かれようが、開発部分が.NETで共通化できるということは、単純なようで奥が深いものです。C#やVisual Basicという.NET言語が使えれば、自前でサーバーを所有しなくても、インターネット規模の大がかりなシステム開発と展開の中に入っていける、という時代になっていることを改めて考えてみると、これからの開発者のチャンスというのは相当大きいと感じます。

私自身も、改めて初心に戻り、実装に使える技術とサービスをわくわくしながら追いかけてみたいと考えています。

Posted by aonishi | 0 Comments
Filed under:

Silverlight 3 Beta ドキュメンテーションとサンプル

Silverlight 3 Betaを評価する上で、開発に必要となるドキュメントやサンプルの場所を知っておくことは重要です。

下記のリンクはよく使うかもしれませんね。

Posted by aonishi | 1 Comments
Filed under:

Expression Blend 3: Behaviorを使ったコーディングレスでのSilverlight 3アプリのインタラクションデザイン

Silverlight 3 Betaと同時にExpression Blend 3 Previewが公開されていますが、便利な新機能が搭載されています。

ここでは、Behaviorについて紹介したいと思います。

Blend 1/Blend 2を使ってSilverlight のアプリケーションを開発されたことがある人は、いつも次のような疑問を感じていたと思います。

「何かをクリックしたタイミングでタイムラインのアニメーションを簡単に呼び出す方法はないのだろうか」

「よく使うオブジェクトの操作をコードを書かないで実行できないのだろうか」

Blend 3からは、これらの疑問を解決する「Behavior」機能が搭載されています。

  • CallMethodAction : 指定したオブジェクトのメソッドを呼び出す
  • ChangePropertyAction: 指定したオブジェクトのプロパティを変更する
  • ControlStoryboardAction: 指定したStoryboardの動きを制御する
  • InvokeCommandAction: コマンドにパラメータを渡して実行する (現時点で詳細不明)
  • SmoothMoveBehavior: 水平・垂直方向のイージング(easing)を指定してアニメーションを実行する

この記事では、いくつかを使って、Silverlight 3でのメディア再生をコーディングを行わないで実現してみたいと思います。

Blend3-MediaDemo-001

GridをMediaElement側とButton側で分けて、上側にMediaElement (myME)、下側にButtonを3つ (playButton, pauseButton, stopButton)を配置します。

※ ここでは省略しますが、MediaElementに対しては何らかのSourceプロパティを割り当て、AutoPlayプロパティをFalseに指定してください。[Add Existing Item]でプロジェクトにメディアファイル追加する場合、現時点のビルドだと自動的にWeb Site側のプロジェクトにコピーされずテスト時エラーとなることが分かっています。

今までの開発ですと、それぞれのボタンのイベントハンドラをC#やVisual Basicで記述する必要がありました。Blend 3は違います。

貼り付けた3つのボタンにBehaviorを使い、MediaElementのメソッドを呼び出すためのトリガーを記述します。

[Asset Library]を開き、[Behaviors]をクリックすると、次のような画面になります。

Blend3-Behaviors

この画面から[CallMethodAction]をドラッグして、[Objects and Timeline]で一覧になっているplayButton、pauseButton、stopButtonへドロップします。
例: pauseButtonにドロップしている途中の画像

Blend3-DragDrop-Behavior

 

 

それぞれのButtonに対するCallMethodActionを指定します。

[playButton]に対して、[Miscellaneous]を展開し、
TargetName: myME
MethodName: Play

と指定します。

Blend3-CallMethodAction-Play

[pauseButton]に対して、[Miscellaneous]を展開し、
TargetName: myME
MethodName: Pause

と指定します。

Blend3-CallMethodAction-Pause

[stopButton]に対して、[Miscellaneous]を展開し、
TargetName: myME
MethodName: Stop

と指定します。

Blend3-CallMethodAction-Stop

[F5]を押してテスト実行します。

※ メディアファイルを追加した場合は、エラーとなるので、いったんBlend 3に戻り、プロジェクトのメディアファイルをWeb siteプロジェクトのClientBinにコピーして、再度[F5]で実行してください。

実行結果:

SL3-mediaplayback

続いて、Storyboardを定義して動かしてみましょう。Blend 3に戻り、[Objects and Timeline]の下にある[+]ボタンをクリックして、Storyboardを作ります。名前は「MyStory」としてください。

ここでは、Perspective 3Dを利用して、12秒かけて、myMEというMediaElementをx軸、y軸、z軸、それぞれ360度回転させてみます。

緑色の+をクリックして、0秒時点で、myMEに対してキーフレームを割り当てます。

Blend3-Timeline-01

タイムライン上、12秒後の位置に移動し、TransformのProjectionのX, Y, Zをそれぞれ360と設定します。

Blend3-Timeline-02

タイムラインを再生してみると、回転していることがわかります。

Blend3-Timeline-03

 

 

赤色の丸をクリックして、タイムラインの記録をオフにします。

[Asset Library]から[Behaviors]を選択肢、[ControlStoryboardAction] をplayButtonにドラッグ&ドロップします。

Blend3-ControlStoryboardAction

[F5]を押してテスト実行します。

実行結果の例:

SL3-mediaplayback-3d

 

というわけで、Blend 3を利用すると、今までコーディングが必要だった処理がBehaviorを使って、コーディングレスで実現できます。

参考までに、XAMLの中身は次のような感じになります。

<UserControl     
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    xmlns:i="clr-namespace:Microsoft.Expression.Interactivity;assembly=Microsoft.Expression.Interactivity"    
    xmlns:im="clr-namespace:Microsoft.Expression.Interactivity.Media;assembly=Microsoft.Expression.Interactivity"    
    x:Class="MediaDemo_0323.MainControl"    
    Width="640" Height="480">     
    
    <UserControl.Resources>    
        <Storyboard x:Name="MyStory">     
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="myME" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)">     
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>     
                <EasingDoubleKeyFrame KeyTime="00:00:11.2000000" Value="360"/>     
            </DoubleAnimationUsingKeyFrames>    
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="myME" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">     
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>     
                <EasingDoubleKeyFrame KeyTime="00:00:11.2000000" Value="360"/>     
            </DoubleAnimationUsingKeyFrames>    
            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="myME" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationZ)">     
                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>     
                <EasingDoubleKeyFrame KeyTime="00:00:11.2000000" Value="360"/>     
            </DoubleAnimationUsingKeyFrames>    
        </Storyboard>    
    </UserControl.Resources>    
    
    <Grid x:Name="LayoutRoot" Background="White">     
        <Grid.RowDefinitions>    
            <RowDefinition Height="0.79*"/>     
            <RowDefinition Height="0.21*"/>     
        </Grid.RowDefinitions>    
        <MediaElement x:Name="myME" Margin="1,1,0,0" AutoPlay="False" Source="http://myserver:8080/dlife.wmv">     
            <MediaElement.Projection>    
                <PlaneProjection/>    
            </MediaElement.Projection>    
        </MediaElement>    
        <Button x:Name="playButton" FontSize="24" HorizontalAlignment="Left" Margin="8,8,0,8" Width="204" Grid.Row="1" Content="再生">     
            <i:Interaction.Triggers>    
                <i:EventTrigger EventName="Click">     
                    <i:CallMethodAction TargetName="myME" MethodName="Play"/>     
                    <im:ControlStoryboardAction Storyboard="{StaticResource MyStory}" ControlStoryboardOption="Play"/>     
                </i:EventTrigger>    
            </i:Interaction.Triggers>    
        </Button>    
        <Button x:Name="pauseButton" Margin="216,8,220,8" Grid.Row="1" Content="一時停止" FontSize="24">     
            <i:Interaction.Triggers>    
                <i:EventTrigger EventName="Click">     
                    <i:CallMethodAction TargetName="myME" MethodName="Pause"/>     
                    <im:ControlStoryboardAction ControlStoryboardOption="Pause" Storyboard="{StaticResource MyStory}"/>     
                </i:EventTrigger>    
            </i:Interaction.Triggers>    
        </Button>    
        <Button x:Name="stopButton" HorizontalAlignment="Right" Margin="0,8,12,8" Width="204" Grid.Row="1" Content="停止" FontSize="24">     
            <i:Interaction.Triggers>    
                <i:EventTrigger EventName="Click">     
                    <i:CallMethodAction TargetName="myME" MethodName="Stop"/>     
                    <im:ControlStoryboardAction Storyboard="{StaticResource MyStory}" ControlStoryboardOption="Stop"/>     
                </i:EventTrigger>    
            </i:Interaction.Triggers>    
        </Button>    
    </Grid>    
</UserControl>    
 

今後もBlend 3を使ったSilverlight 3アプリケーションのデザインと開発について、紹介していきたいと考えています。

Silverlight 3ベータ版とExpression Blend 3 Previewの公開、加えてMIX09キーノートのポイント

現在、ラスベガスで開催されているMIX 09というイベントで、Silverlight 3ベータ版とExpression Blend 3 Previewが発表されました。

たくさんの新機能を一度に紹介すると大変なので、まずは触ってみたいという開発者のために、ポイントを紹介します。

注意していただきたいこととして、Silverlight 2の開発環境とSilverlight 3ベータ版の開発環境が同居できません。すでにSilverlight Tools for Visual Studio 2008をインストールしている場合は、アンインストールが必要です。それと、一般公開されるExpression Blend 3 Previewには、SketchFlowの機能は含まれません。

個別の機能については、後日、改めて紹介したいと思います。

主要なダウンロードへのリンク

Silverlight 3 開発者用ランタイムベータ版 Windows用: http://go.microsoft.com/fwlink/?LinkID=143433

Silverlight 3 開発者用ランタイムベータ版 Intel Mac用: http://go.microsoft.com/fwlink/?LinkID=143434

Visual Studio 2008 SP1用 Microsoft Silverlight 3 Tools Beta 1(日本語版) http://go.microsoft.com/fwlink/?LinkID=143571

Silverlight Toolkit http://silverlight.codeplex.com/

Expression Blend 3 Preview (英語版のみ) http://www.microsoft.com/expression/blendpreview

.NET RIA Services March ’09 Preview (英語版のみ) http://go.microsoft.com/fwlink/?LinkID=144609

Silverlight 3ソフトウェア開発キットBeta 1(日本語版): http://go.microsoft.com/fwlink/?LinkID=143435

Silverlight 3開発者用ドキュメント CHM版 (英語版のみ) http://go.microsoft.com/fwlink/?LinkId=144350

MIX09 Day 1キーノートのポイント

Bill Buxtonのキーノートでは、Return on experienceというテーマで、デザインの重要性が語られました。

デザインがビジネスにもたらす価値や、アイディアからスケッチを起こし、スケッチから具体化するという繰り返しのプロセス、お客様の体験・経験がビジネスにもたらすものという観点で、デザインとエクスペリエンスの関係について例示を用いた話がありました。

Scott Guthrieのキーノートでは、Web、Media、RIA、3つの技術エリアに対する発表がありました。

数多くの新発表があり、お客様による事例紹介やScott自身によるデモなど、今後のビジョンを含め、多くの情報が伝えられました。

  • Expression Web 3のSuper preview機能 (IE6/IE7/IE8/Firefox/Safariのレンダリング結果の比較: 重ね合わせと並べて表示)
  • ASP.NET MVC 1.0の発表
  • 将来の.NETとVisual Studio 2010におけるWeb開発サポートの主要機能
  • IIS 7の拡張プラグイン (データベースマネージメント、Secure FTP、URL Rewrite、Request routingなど)
  • Web Platform Installer 2.0 (http://www.microsoft.com/web/)の発表 主要なコンポーネントが簡単にインストール可能に
  • Web App gallery (http://www.microsoft.com/web/gallery/default.aspx) WordPressやDotNetNukeなどのアプリケーション公開とWeb platform installerからの簡単なインストールが可能に
  • Windows Azureの最新情報 (FastCGIなど)
  • Silverlight 3の発表
  • Expression Blend 3の発表 SketchFlowによるデザイン->プロトタイピングの強化、コーディングレスでのデザインの強化
  • IIS Media Servicesの発表 SmoothStreamingのライブ対応

ぜひ、http://videos.visitmix.com/MIX09/ へアクセスして、実際にご覧ください。

Silverlight 3 の特徴的な新機能


メディアシナリオ

・720p HD配信におけるIIS Media Servicesによるオンデマンド・ライブストリーミングへの対応
・VC-1/WMV/WMA/MP3のサポートに加え、MPEG-4ベースのH.264/AACをサポート
・GPUハードウェアアクセラレーション
・拡張可能なメディアフォーマットのサポート。RAW Audio/Videoのサポートにより、様々なサードパーティーコーデックの使用が可能

さらにリッチなエクスペリエンスの支援
・パースペクティブ3Dグラフィック、追加コードなしに、コンテンツを回転させたり、拡大したりすることが可能に(ポリゴンではありません)
・ぼかしや、ドロップシャドウなどのピクセルシェーダーエフェクト、独自のエフェクトを作成することも可能
・ビットマップキャッシング - ベクターコンテンツ、テキストおよびコントロールをビットマップにキャッシュすることにより、レンダリングのパフォーマンスの向上
・新たにビットマップAPIのサポート、ピクセルをビットマップに書くことが可能
・アプリケーションの外観をコントロールするテーマのサポート
・プリセットされたイージングパターンの利用、Springやbounceといった新しいエフェクトを提供
・コントロールのスキニングの向上
・テキストレンダリングとフォントサポートの向上
・Windows 7におけるマルチタッチへの対応

RIA開発の生産性向上
・100以上のコントロールとソースコードの提供、チャートやメディア、新たなレイアウトコンテナ、オートコンプリートコントロール、ツリービューコントロールなど
・RIA内での画面状態へのブックマーキングを可能にするディープリンクのサポート

データサポートの向上 
・ Element to Element binding : デザイナーは、二つのUIプロパティ間をバインドすることが可能
・ データフォーム、データフォームコントロールによって、フィールドのレイアウト、バリデーション、アップデートおよびページングをサポート
・ 正しくない入力内容を自動的に検知し、ユーザーに対して標準で注意を促すバリデーションコントロール
・.NET RIA Servicesを併用したクライアントおよびサーバーにおけるN層データのビジネスオブジェクトサポート
・オフライン機能、Silverlight 3 では、アプリケーションをユーザーマシン上の制限されたストアに設置し、ユーザーのデスクトップ、またはスタートメニュー、およびWindows 7 superbarから直接リンクすることが可能
・アクセシビリティ機能の強化、すべてのシステムカラーへのアクセスを提供

Silverlight.netにSilverlight 3のチュートリアルビデオが公開されていますので、ご覧ください。

http://silverlight.net/learn/videocat.aspx?cat=12

Expression Blend 3の特徴的な新機能

SketchFlow (アイディアをスケッチし、具体化するためにプロトタイプへ)

・動的なユーザー体験を検証しながら、より訴求力の高いプロトタイプの作成が可能
・デザインに関係する人々のコミュニケーションをスムーズにするためのコメント付加機能の提供
・SketchFlowでデザインした結果をWord文書として出力し、デザインドキュメントの作成支援

デザイン素材の再利用
・Adobe Photoshop およびAdobe Illustratorファイルのインポート

コーディングレスでのデザイン - ビヘイビア (behavior)
・複雑なインタラクションを再利用可能なコンポーネントとして、コードを書くことなく、直接アプリケーションUIの要素に追加可能

サンプルデータの生成
・実際のデータを用意することなく、サンプルデータを生成、またはXMLファイルから読み込みデータバインド可能なオブジェクトの生成
・ドラッグ&ドロップでデザイン時にコントロール内でデータをバインド

インテリセンスのサポート

C#やVBのコードエディタとXAMLエディタにおいて、インテリセンスに対応

・・・

これからが楽しみですね。

More Posts Next page »
 
Page view tracker