はじめよう!Red5プログラミング

2008年11月19日(水)
澤村 正樹

共有オブジェクトを使うクライアント

 それでは、共有オブジェクトを使ったクライアントについて説明していきます。共有オブジェクトを使ったアプリケーションとしては、Red5のデモの一番頭にあたるロゴをドラッグして共有するものが典型的な例です。あのような動きはどうやって実現されているのでしょうか。

 まず、共有オブジェクトにあたるActionScriptのクラスをインポートします。

import flash.net.SharedObject;

 先ほど作ったNetConnectionオブジェクトをncとすると、接続がうまくいった時に次のように共有オブジェクトを呼び出します。

var so:SharedObject;
so = SharedObject.getRemote("ball", nc.uri, false );

 引数は、共有するためのラベルとなる文字列、NecConnectionオブジェクトのURIプロパティ、ローカルまたはリモートでのオブジェクトの永続性設定、となっています。このようにできたsoオブジェクトに書き込み/読み込みを行うことでローカルのオブジェクトとの共有が行えます。

 例えば、あるSpriteオブジェクトの位置を共有する場合、それをballPositionという名前のデータとして書き込む場合は次のようになります。

so.setProperty("ballPosition", {x: ball.x, y: ball.y} );

 第二引数として任意のオブジェクトを指定できます。ここではballというオブジェクトのxy座標をサーバーに送っているイメージです。

 それを取得するには、定期的に発生するSharedObjectのSYNCイベントのハンドラに次のように書きます。

so.addEventListener( SyncEvent.SYNC ,function( evt:SyncEvent ):void{ if( so.data["ballPosition"]){
// so.data.ballPosition.xなどを取得

 このような考え方をうまく使うことによって、サーバーを経由して複数台で動くFlash上のオブジェクトを同期させることが可能になります。

ウェブカムからの動画を扱うクライアント

 つづいて、ウェブカムからの動画を使ったクライアントの概要について説明します。まずは動画を再生するエリアが必要です。必要となるクラスは既出のNecConnectionに加えて次のようになります

・flash.net.NetStream // 動画データを扱う
・flash.media.Video // 動画を再生するパーツ

 また、ローカルのPCに接続したカメラやマイクにアクセスするには次のクラスを使います。

・flash.media.Camera // カメラから情報を取得
・flash.media.Microphone // マイクから情報を取得

 サーバーとのコネクションは前ページで説明したNetConnectionオブジェクトを使います。カメラとマイクで入力した情報をサーバーに送るには、次のような処理をNetConnectionの接続確立時のハンドラとして登録します。

 まずはCamera.getCamera()メソッド、Microphone.getMicrophone()メソッドを使ってカメラ、マイク情報のオブジェクトを作成します。そして、NetConnectionが確立したら次のようにストリームを生成し、カメラとマイクの情報をひも付けます。

var ns:NetStream = new NetStream(nc);
ns.attachAudio(myMicrophone); ns.attachCamera(myCamera);
ns.publish("demo","live");

 その後、publishメソッドを呼ぶことによってサーバー側への送信を開始します。publishメソッドの引数は、識別子となる文字列とストリームのタイプです。第二引数をrecordとすると録画モードとなります。

 動画を再生する場合には次のようになります。まずは動画を再生するエリアを作成します。

var vid:Video = new Video(320,240);

 そして、NetConnectionが確立したら次のようストリームを生成します。そしてそのストリームをVideoオブジェクトにアタッチしplayメソッドを呼び出します。playメソッドの引数はpublishと同様に再生するデータの識別子です。

var ns:NetStream = new NetStream(nc);
vid.attachNetStream(ns);
ns.play("demo");

 クライアントサイドのプログラミングのイメージがつかめたでしょうか。もちろん細かい注意点は多々ありますので、ところどころつまずくかもしれませんが、概要が把握できれば少しずつ進めていくことも可能だと思います。

NTTレゾナント株式会社
1976年生まれ、横浜国立大学電子情報工学科卒業。論文査読システムや写真ストックサイトなどのフロントエンドエンジニアリングを経て、角川書店系のウォーカープラス・ドット・コムにて各種サービス開発にかかわる。現在はNTTレゾナント「goo」にて検索サービスを中心としたエンジニアリングとユーザーインターフェース設計、および新サービスの企画立案に携わる。gooラボ:http://labs.goo.ne.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています