ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


翻訳:株式会社サムライズ

 

注意

Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。

 

4ストリーミングメディアアプリケーションの開発

 

 

Adobe®Flash®MediaServer ではFlash Player AIR にライブビデオや記録済みビデオをストリーミングしたりFlash Player AIR からストリーミングしたりすることができます記録済みビデオはオンデマンドまたは VOD(ビデオオンデマンド)と呼ばれます。

ライブアプリケーションは、ライブメディアをキャプチャ、エンコードおよびストリーミングします。ライブビデオは一般に、企業の会議、教育、スポーツイベント、コンサートなどのイベントに使用されます。

 

サーバーへの接続

 

NetConnection クラスについて

クライアントでオーディオやビデオを再生またはパブリッシュする前に、まずサーバーに接続する必要があります。接続要求は、サーバー上のアプリケーションインスタンスによって承諾または拒否されます。サーバーは、情報メッセージをクライアントに返します。アプリケーションによって接続要求が受諾されると、クライアントとサーバーの両方で、この接続を利用することができるようになります。

 

NetConnection クラスは、クライアントをサーバー上のアプリケーションインスタンスに接続します。接続するには、 NetConnection クラスのインスタンスを作成しconnect() メソッドを呼び出します。アプリケーションインスタンスの URI connect() メソッドに渡します。

 

var nc:NetConnection = new NetConnection();

nc.connect("rtmp://localhost/HelloServer");

サーバーは、接続に成功したかどうかをクライアントに通知する NetStatusEventを返します。

NetConnectionオブジェクトはパイプに例えることができます。このパイプによって、クライアントからサーバーに、またはサーバーからクライアントに、オーディオ、ビデオ、データがストリーミングされます。NetConnectionオブジェクトを作成すると、このオブジェクトに 1 つまたは複数のストリームを割り当てることができます。ストリームは、ネットワーク接続上でのオーディオ、ビデオ、データのフローを処理します。

1 つのストリームによって、複数の種類のコンテンツ(オーディオ、ビデオ、データ)を伝送することができます。ただし、

1 つのストリームのフローは 1 方向(サーバーからクライアント、またはクライアントからサーバーのいずれか)のみです。

クライアントとサーバーの間で、多数のストリームが 1 つの NetConnection オブジェクトを使用可能

A. Adobe Media Server B. データの単一ストリーム C. NetConnection D.Flash PlayerAdobe AIR または Flash Lite 3 クライアント

 

関連項目

接続の管理

 

アプリケーション URIについて

アプリケーションインスタンスの URI絶対パスまたは相対パスのいずれでも指定することができます次のシンタックスを使用します(角カッコで囲まれた項目はオプションです

 

protocol:[//host][:port]/appname/[instanceName]

次の表は、URIの各構成要素について説明しています。


構成要素

説明

protocol:

RTMP:

Adobe Media ServerReal-Time Messaging Protocol およびそのバリエーションへの接続に使用するプロトコルです。使用可能な値についてはActionScript 3.0 リファレンスガイド」の「NetConnection.connect()」のエントリを参照してください。

//host

//www.example.com

 

//localhost

ローカルコンピューターまたはリモートコンピューターのホスト名です。クライアントと同一のホストコンピューター上にあるサーバーに接続するには//localhost を使用するかまたは

//host 識別子自体を省略します。

:port

:8080

サーバー上の接続先のポート番号です。

 

RTMP とそのバリエーションでは、デフォルトのポートは 1935 ですHTTP とそのバリエーションでは、デフォルトのポートは 80 ですデフォルトのポートを通じて接続する場合は、ポート番号を指定しないでください。ポート番号は、デフォルトとして設定されていないポートに接続する場合にのみ指定します。

/appname/

/sudoku/

rootinstall/applications  フォルダーのサブディレクトリの名前です。

ams.ini  設定ファイル(rootinstall/conf/ams.ini)の中で「アプリケーション」ディレクトリ用の他の場所を指定することもできます。

instanceName

room1

クライアントの接続先となるアプリケーションのインスタンスです。例えば、チャットルームアプリケーションは、chatroom/room1chatroom/room2   などのように、多数のチャットルームを持つことができます。

インスタンス名を指定しない場合、クライアントは、_definst_ という名前のデフォルトのアプリケーションインスタンスに接続します。

 

多くのアプリケーションの開発時と同様に、クライアントとアプリケーションが同じサーバー上にある場合は、URIの構成要素の中で必須なのは、プロトコルとアプリケーション名だけです。//localhostまたは 127.0.0.1をドメイン名に使用することもできます。

 

rtmp:/vod/

rtmp://localhost/vod

rtmp://127.0.0.1/vod

これらの接続をテストするには、ブラウザーで rootinstall/samples/videoPlayer/videoplayer.html を開きます。ブラウザーで Adobe Media Administration Consolerootinstall/tools/ams_adminConsole.htm)を開きます。サンプルビデオPlayer Stream URL」ボックスに個々の URL を入力しPlay Stream」をクリックします。Adobe Media Administration Console で、View Applications Live Log を選択し、接続を表示します。

クライアントとアプリケーションが同じサーバー上にない場合はホストドメイン名または IPアドレスを次のいずれかのように入力します。

 

rtmp://www.amsserver.com/vod

rtmp://www.amsserver.com/vod/mediaplayer1

rtmp://www.amsserver.com/vod/mediaplayer2

 

HelloServer アプリケーション

注意Adobe Media Server Standard はこの例をサポートしていません。

 

HelloServer アプリケーションはrootinstall/documentation/samples/HelloServer フォルダーにありますこのシンプルな Flash アプリケーションは 2 つのボタンを表示します。それぞれのボタンを使用すると、サーバーへの接続と切断を実行できます。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

出力ウィンドウには、接続状態に関するメッセージが表示されます。

 

アプリケーションの実行

サーバーと同じコンピューター上にサンプルをインストールするのが、サンプルを実行する最も簡単な方法です。

1   サーバーのアプリケーションフォルダーにフォルダーを作成して、アプリケーションを登録します。

rootinstall/applications/HelloServer

 

2 (オプション)別のコンピューターにインストールされたサーバー上でサンプルを実行する場合は、HelloServer.as を開き、次の行を編集してサーバーの URL を追加します。

 

nc.connect("rtmp://localhost/HelloServer");

 

Flash ユーザーインターフェイスの設計

samplesフォルダー内に、既に構築済みのサンプルが含まれています。ただし、独自にアプリケーションを構築したり、機能を追加したりする方法を学ぶため、ここの手順では、このサンプルを自分で再作成する方法を示します。

1     Flash Professional で、ファイル/新規/ Flash ファイル(ActionScript 3.0)を選択しOK」をクリックします。

2   ウィンドウ/コンポーネントを選択し、コンポーネントパネルを開きます。

3   Button コンポーネントをダブルクリックし、ステージに追加します。

4   プロパティインスペクターで「プロパティ」タブをクリックします。インスタンスの動作にムービークリップを選択し、インスタンス名に connectBtn と入力します。

5 「パラメーター」タブをクリックし、次に「label」をクリックします。ボタンのラベルに Connectと入力します。

6   2 番目の Button コンポーネントをステージにドラッグします。

7   2 番目のボタンに closeBtn というインスタンス名を付け、ラベルに Close と入力します。

8    HelloServer.fla という名前を付けて FLA ファイルを保存します。

 

クライアントサイドコードの記述

1        Flash Professional で、ファイル/新規/ ActionScript ファイルを選択しOK」をクリックします。

2       ActionScript ファイルを HelloServer.as として保存します。

3   FLAファイルに戻り、ファイル/パブリッシュ設定を選択しますFlash」タブをクリックし、次に「設定」をクリックします。

4 「ドキュメントクラス」ボックスに、HelloServerと入力します。緑色のチェックマークをクリックし、クラスファイルを検索できるようにしてくださいOK」をクリックし、再度「OK」をクリックします。

5    ActionScript ファイルに、パッケージの宣言を入力します。FLA ファイルと同じディレクトリ内にこのファイルを保存した場合は、パッケージ名を使用しません。以下にその例を示します。

 

package {

}

 

ただし、FLAファイルの下のサブディレクトリにファイルを保存する場合、パッケージ名は ActionScriptファイルのディレクトリパスに対応した名前である必要があります。以下にその例を示します。

 

package samples {

}

6   パッケージの中で、スクリプトで使用するActionScript クラスを読み込みます。

 

import flash.display.MovieClip;

import flash.net.NetConnection;

import flash.events.NetStatusEvent;

import flash.events.MouseEvent;

7   import ステートメントの後に、クラス宣言を作成します。このクラスの中で、NetConnection 型の変数を定義します。

 

public class HelloServer extends MovieClip {

private var nc:NetConnection;

}

このクラスは MovieClip クラスを拡張するので、MovieClip クラスのすべてのプロパティとメソッドを継承します。

8   クラスのコンストラクターを記述し、各ボタンのイベントリスナーを登録します。

 

public function HelloServer() {

// register listeners for mouse clicks on the two buttons

connectBtn.addEventListener(MouseEvent.CLICK, connectHandler);

closeBtn.addEventListener(MouseEvent.CLICK, closeHandler);

}

 

addEventListener() を使用してConnect」ボタンで click MouseEvent が発生したときにconnectHandler() という名前のイベントハンドラーが呼び出されるようにします。同様にClose」ボタンで click MouseEvent が発生したときにcloseHandler()  が呼び出されるようにします。

9   connectHandler() 関数を記述します。この関数は、ユーザーが「Connect」ボタンをクリックするとサーバーに接続できるようにします。

 

public function connectHandler(event:MouseEvent):void {

trace("Okay, let's connect now");

nc = new NetConnection();

nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

nc.connect("rtmp://localhost/HelloServer");

}

 

connectHandler() 内に、NetConnection オブジェクトによって返される netStatus イベントをリッスンするイベントリスナーを追加します。次に、正しい URI を使用して NetConnection.connect() を呼び出し、サーバー上のアプリケーションインスタンスに接続します。この URI は、サーバーとクライアントが同一のコンピューターで実行されている状況で、 HelloServer という名前のアプリケーションインスタンスに接続します。

10 closeHandler()関数を記述します。この関数は、ユーザーが「Close」ボタンをクリックしたときの動作を定義します。

 

public function closeHandler(event:MouseEvent):void {

trace("Now we're disconnecting");

nc.close();

}

明示的に close() を呼び出して、サーバーに対する接続を閉じることが最適の方法です。

11 netStatusHandler()関数を記述します。この関数は、NetConnectionオブジェクトによって返される netStatusオブジェクトを処理します。

 

public function netStatusHandler(event:NetStatusEvent):void {

trace("connected is: " + nc.connected);

trace("event.info.level: " + event.info.level);

trace("event.info.code: " + event.info.code);

switch (event.info.code)

{

case "NetConnection.Connect.Success":

trace("Congratulations! you're connected" + "\n");

break;

case "NetConnection.Connect.Rejected":

trace("Oops! the connection was rejected" + "\n");

break;

case "NetConnection.Connect.Closed":

trace("Thanks! the connection has been closed" + "\n");

break;

}

}

 

netStatus オブジェクトには info オブジェクトが含まれておりinfo オブジェクトには接続状態を示す level code が含まれています。

 

接続メッセージの理解

このサンプルを実行し「Connect」ボタンをクリックすると、正しく接続された場合、次のようなメッセージが表示されます。

 

Okay, let's connect now

connected is: true

event.info.level: status

event.info.code: NetConnection.Connect.Success

Congratulations! you're connected

connected is: true の行はNetConnection.connected プロパティの値を示していますこの値はFlash PlayerRTMP によってサーバーに接続しているかどうかを示します。次の 2 行は、NetConnection オブジェクトによって送信された netStatus イベントを示しており、接続状態をレポートします。

 

event.info.level: status

event.info.code: NetConnection.Connect.Success

 

levelプロパティはstatus または error2つの値を取ることができますcodeプロパティは、接続状態を説明します。 netStatusHandler関数内で codeの様々な値を確認し、それに応じた処理を実行することができます。アプリケーション内では、ストリームの作成やその他の処理を行う前に、正しく接続されたかどうかを必ず確認してください。

同様にClose」ボタンをクリックすると、次のようなメッセージが表示されます。

 

Now we're disconnecting

connected is: false

event.info.level: status

event.info.code: NetConnection.Connect.Closed

Thanks! the connection has been closed

 

 

 

最終更新日 2013/9/30