ActionScript 3.0 での objectEncoding 概念
2007年05月04日 23:17
実家に里帰りして、桜祭りで AE-1 で写真撮影。リラックス出来ました。
ActionScript 3.0 でヘテムルのインフラを使い FMS アプリケーションに接続するテストをしてみた。接続の考え方は ActionScript 3.0 以前と同じなので ActionScript 3.0 の記述形式さえ書ければ特に問題ないが、objectEncoding の概念を理解していなくて接続に少し手間取ってしまった。理解されている方は特に問題ないのですが、自分は知らなかったのと検索してもあまり詳しく書いていなかったのでメモ。

ActionScript 3.0 での objectEncoding 概念概略図
アプリケーションサーバと Flash アプリケーションの通信のデータフォーマットは Action Message Format(AMF)でバイナリデータを送受信しているのだが、Flash Player 9 リリース以前はアプリケーションサーバへの接続には AMF のバージョンが 0(AMF0)を使用していたが、Flash Player 9 リリース以降の Flex 2.0 の様なアプリケーションサーバへの接続にはデフォルトで AMF のバージョンが 3(AMF3)が使用されている。Flash Player 9 は ActionScript 3.0 用の VM を搭載している様に、AS 3.0 ではすでにデフォルトで AMF3 がサポートされているので、ヘテムルでプレインストールしている Flash Media Server 2.0 や Flex 1.5 の様な Flash Player 9 以前にリリースされたアプリケーションサーバは AMF0 のみをサポートしているという矛盾から、今回接続が上手くいかなかった。
対応策は簡単で、ActionScript 3.0 内で明示的に NetConnection オブジェクトで FMS アプリケーションに接続する際の AMF のバージョンを objectEncoding プロパティで AMF0 に変更することで接続は出来るようになる。これは最近結構使っている RED 5 でのアプリケーション接続時も同様。
以下、簡単なサンプルソース(fmsEx.as)。
package {import flash.display.*;
import flash.net.*;
import flash.events.*;public class fmsEx extends Sprite {
private var _nc:NetConnection;
// コンストラクタ
public function fmsEx() {
_nc = new NetConnection();
_nc.objectEncoding = ObjectEncoding.AMF0;
_nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
_nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
_nc.connect(rtmp://******.fms.heteml.jp/アプリケーション名/[任意]インスタンス名);
}// NetConnection の NetStatusEvent 用関数
private function netStatusHandler(evt:NetStatusEvent):void {
switch(evt.info.code) {
case "NetConnection.Connect.Success":
// FMS アプリケーションへの接続に成功
break;
case "NetConnection.Connect.Failed":
// FMS アプリケーションの接続に失敗
break;
case "NetConnection.Connect.Rejected":
// FMS アプリケーション接続権限がありません
break;
case "NetConnection.Connect.Closed":
// FMS アプリケーションが無事に閉じました
break;
default:
// その他
}
}// NetConnection の SecurityError 用関数
private function securityErrorHandler(evt:SecurityErrorEvent):void {
// セキュリティエラー
}
}
}
【開発環境】
Flex Builder 2.01、ActionScript 3.0、Flash Media Server 2.0、Flex SDK
*テストでは Red5 使用。
【参考サイト】
livedocs.adobe.com
