ADOBE® MEDIA SERVER 5.0.3
デベロッパーズガイド
翻訳:株式会社サムライズ |
注意
Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。
帯域幅の検出
ActionScript 3.0 でのネイティブな帯域幅検出機能
Flash Media Server 3.0以降では、サーバーからクライアントへのネイティブな帯域幅検出機能をサポートしています。帯域幅検出を開始するには、クライアントがサーバーに接続した後に、NetConnection.call("checkBandwidth", null) を呼び出します。サーバーはデータブロックをクライアントに送信し、クライアントからの戻り値を待機します。サーバーサイドコードを記述する必要はありません。
注意:この例は、rootinstall/documentation/samples/bandwidthcheck/Bandwidth.as サンプルに基づいています。
Application.xml ファイルでの帯域幅検出の有効化
❖ 帯域幅検出がApplication.xml ファイルで有効になっていることを確認します。
<BandwidthDetection enabled="true">
<MaxRate>-1</MaxRate>
<DataSize>16384</DataSize>
<MaxWait>2</MaxWait>
</BandwidthDetection>
帯域幅検出は、デフォルトでは有効になっています。帯域幅検出の有効化と無効化に加えて、サーバーがクライアントに送信するデータブロックのサイズ、データを送信するレート、データブロック間にサーバーが待機する時間を設定することができます。
Application.xmlファイルは、アプリケーションレベルまたは仮想ホストレベルで編集することができます。単一アプリケーションの設定を参照してください。
クライアントのイベントハンドラークラスの記述
❖イベントを処理し、サーバーの帯域幅検出機能を呼び出すための ActionScript 3.0クラスを作成します。このクラスでは、onBWCheck関数と onBWDone関数を実装する必要があります。
class Client {
public function onBWCheck(... rest):Number {
return 0;
}
public function onBWDone(... rest):void {
var bandwidthTotal:Number;
if (rest.length > 0){
bandwidthTotal = rest[0];
// This code runs
// when the bandwidth check is complete.
trace("bandwidth = " + bandwidthTotal + " Kbps.");
}
}
}
onBWCheck() 関数は、ネイティブな帯域幅検出で必要となります。この関数は、引数として ...rest を使用します。値が 0 であった場合でも、クライアントがデータを受信したことをサーバーに通知するため、この関数は必ず値を返します。onBWCheck() は複数回呼び出すことができます。
帯域幅の測定を終了すると、サーバーは onBWDone()関数を呼び出します。この関数は 4つの引数を使用します。1番目の引数は、測定した帯域幅です (Kbps単位 )。2番目および 3番目の引数は使用しません。4番目の引数は、ミリ秒単位の待ち時間です。
メインクラスの記述
1 ActionScript 3.0 のメインクラスを作成し、任意のパッケージとクラス名を指定します。
package {
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.events.AsyncErrorEvent;
public class Bandwidth extends Sprite
{
}
}
サンプルの Bandwidth.as ファイルのように、メインクラスとクライアントクラスは同じファイル内に作成できます。
2 メインクラスのコンストラクター内で、NetConnection オブジェクトを作成し、NetConnection.client プロパティにクライアントクラスのインスタンスを設定して、サーバーに接続します。
private var nc:NetConnection;
public function Bandwidth()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
nc.client = new Client();
nc.connect("rtmp://localhost/bandwidthcheck");
}
3 netStatus イベントハンドラー内で、正しく接続された場合に NetConnection.call() を呼び出します。このメソッドには、実行するコマンドとして checkBandwidth を指定し、応答オブジェクトに null を指定します。
public function netStatusHandler(event:NetStatusEvent):void
{
trace(event.info.code);
switch (event.info.code)
{
case "NetConnection.Connect.Success":
// Calls native bandwidth detection code on the server.
// You don't need to write any server-side code.
nc.call("checkBandwidth", null);
break;
}
}
注意:checkBandwidth() メソッドは、サーバー上の Client クラスに属します。
サンプルの実行
❖ Flash または Flash Builderからメインクラスをテストします。クライアントの帯域幅を示す Flash Builderの出力を次に示します。
[SWF] C:\samples\Bandwidth\bin\Bandwidth-debug.swf - 2,137 bytes after decompression The connection was made successfully
Bandwidth from server to client is 17287 Kpbs
この例では、Clientクラスは帯域幅の値を表示しています。実際のクライアントでは、クライアントへのストリーミングの際にクライアントの帯域幅に応じてビデオを選択するなど、何らかの処理を実行することができます。
ActionScript 2.0 でのネイティブな帯域幅検出機能
ActionScript 2.0 からネイティブな帯域幅検出機能を使用することができます。ActionScript 3.0 の場合と同様に、onBWCheck() と onBWDone() という名前の関数を定義します。クライアントがサーバーに接続すると、NetConnection.call("checkBandwidth") を呼び出します。
注意:この例では、rootinstall/documentation/samples/bandwidthcheck/BandwidthAS2.fla サンプルを使用します。
1 サーバーで、rootinstall/applications/bandwidthcheck フォルダーを作成します。
2 次のいずれかの操作を行い、ネイティブな帯域幅検出が有効になっていることを確認します。
• rootinstall/conf/_defaultRoot_/_defaultVHost_/Application.xml ファイルを開き、<BandwidthDetection enabled="true"> となっていることを確認します。
• 次のコードで Application.xml を作成し、rootinstall/applications/bandwidthcheck フォルダーにコピーします。
<Application>
<Client>
<BandwidthDetection enabled="true">
</BandwidthDetection>
</Client>
</Application>
3 新しい ActionScript 2.0 ファイルを作成するために、Flash Professional で、ファイル/新規/ ActionScript 2.0 を選択します。
4 アクションパネルを開き、フレーム 1 に次のコードを貼り付けます。
nc = new NetConnection();
nc.onStatus = function(info){
trace(info.code);
if(info.code == "NetConnection.Connect.Success"){
checkBandwidth();
}
}
nc.onBWCheck = function(dataChunk){
return 0;
}
nc.onBWDone = function(bandwidth){
trace("Bandwidth from server to client is: " + bandwidth + " Kbps");
}
function checkBandwidth(){
nc.call("checkBandwidth");
}
nc.connect("rtmp://localhost/bandwidthcheck");
5 制御/ムービープレビューを選択します。onStatus メッセージと帯域幅の測定は、出力パネルにトレースされます。
サーバーサイドスクリプトからネイティブな帯域幅検出を開始することができます。この場合、サーバーサイドコードがサーバー上のネイティブな checkBandwidth() 関数を呼び出します。
application.onConnect = function (clientObj){
this.acceptConnection(clientObj);
clientObj.checkBandwidth();
}
サーバーから帯域幅検出を開始している場合、クライアントから checkBandwidth() を呼び出さないでください。
アドビ システムズ社がVOD アプリケーションに提供している main.asc サーバーサイドスクリプトが checkBandwidth 関数を呼び出します。例を確認するには、rootinstall/samples/applications/vod/main.asc を開きます。
ネイティブな帯域幅検出を無効にして、checkBandwidth 関数を定義するサーバーサイドスクリプトを使用することができます。例えば、サーバーサイドスクリプトを使用して帯域幅検出を実行する従来のアプリケーションがある場合、ネイティブな帯域幅検出を無効にします。ネイティブな帯域幅検出は、アプリケーションレベルまたは仮想ホストレベルで無効にできます。
スクリプトベースの帯域幅検出は、ネイティブな帯域幅検出ほど信頼性は高くありません。エッジサーバーを使用している場合、ネイティブな帯域幅検出は、オリジンサーバーの負荷を減らすために最も外側のエッジサーバーで実行されます。スクリプトベースの帯域幅検出によって、エッジサーバーからクライアントに対してではなく、オリジンサーバーからクライアントに対する帯域幅が決定されます。オリジンサーバーとエッジサーバーとの間に遅延が存在すると、帯域幅の計算に影響が出る場合があります。
オリジンサーバーとエッジサーバーとの間の遅延によって、帯域幅の測定に影響が出る場合があります。
A. オリジンサーバー B. エッジサーバー C. クライアント
ネイティブな帯域幅検出をアプリケーションレベルで無効にするには:
1 テキストエディターを開いて新しいファイルを作成し、Application.xml という名前を付けて
rootinstall/applications/applicationname フォルダーに保存します。
2 次の XML をファイルにコピーします。
<Application>
<Client>
<BandwidthDetection enabled="false">
</BandwidthDetection>
</Client>
</Application>
3 ファイルを保存します。サーバーを再起動する必要はありません。
ネイティブな帯域幅検出を仮想ホストレベルで無効にするには:
1 rootinstall\conf\_defaultRoot_\_defaultVHost_\Application.xml ファイルをテキストエディターで開きます。
注意:このパスは、デフォルトの仮想ホストのパスです。Application.xml ファイルは、任意の仮想ホスト用に編集することができます。
2 BandwidthDetection タグを探し、以下のように、enabled 属性を false に設定します。
<Application>
...
<Client>
...
<BandwidthDetection enabled="false">
</BandwidthDetection>
...
</Client>
...
</Application>
3 ファイルを保存します。サーバーまたは仮想ホストを再起動します。
最終更新日 2013/9/30