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

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

 それでは、共有オブジェクトを使ったクライアントについて説明していきます。共有オブジェクトを使ったアプリケーションとしては、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");

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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30