ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


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

 

注意

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

 

スマートシーク

Flash Media Server 3.5.3Flash Player 10.1

 

 

 

スマートシークについて

Flash Media Server 3.5.3 Flash Player 10.1 が連携しVOD ストリームとバッファーを持つライブストリームでのスマートシークをサポートします。スマートシークは、サーバー内のデータを要求せずに、巻き戻しと再生用のバッファーを使用します。指定した数のフレームを進めるか巻き戻すことができます(標準のシークでは、バッファー済みのデータをフラッシュし、シーク時間に基づいて新しいデータを送信するようにサーバーに要求します。スマートシークにより、サーバーの負荷が減少し、シークのパフォーマンスが向上します。スマートシークを使用して次を作成します。

•   クライアント側 DVR機能新しいビデオの配信をサーバーに要求する代わりにクライアント側のバッファー内でライブストリームをシークします。

•   トリックモード。フレームのコマ送り再生、早送り、巻き戻り、スローモーション再生中の早送りなどを実行するプレーヤーを作成します。

スマートシークの例については、アドビ主催の「Stream Reconnect and Smart Seek example」を参照してください。

注意スマートシークは、ピアアシストネットワーキングアプリケーションやプログレッシブダウンロードではサポートされません。

 

 

スマートシーク ActionScript API

注意スマートシーク ActionScript API ActionScript 3.0 であり、ActionScript 2.0 ではサポートされません。

 

Flash Playerは巻き戻し用のバッファーと再生用のバッファーを保持しています。巻き戻し用のバッファーは、表示されたデータのキャッシュです。再生用のバッファーは、表示されていないデータのキャッシュです。スマートシークにより、これらのバッファー内部からデータが取得されます。

スマートシークをオンにするにはNetStream.inBufferSeek true に設定します。

バッファーを制御するには、次の API を使用します。

    NetStream.backBufferLength

 

(読み取り専用)巻戻しおよび再生のためにキャッシュされている、以前に表示されたデータの秒数。これは、巻き戻し用のバッファーの bufferLengthプロパティです。

    NetStream.backBufferTime

 

以前に表示されたデータを巻戻しおよび再生用にどれだけキャッシュするかを秒単位で指定します。デフォルト値は、デスクトップでは 30、モバイルでは 3です。

    NetStream.bufferLength

(読み取り専用 )現在バッファーにあるデータの秒数。

    NetStream.bufferTime

 

ストリームの表示を開始するまでにメッセージをどの程度の時間バッファリングしておくかを秒単位で指定します。デフォルト値は 0.1です。

バッファー内部でシークし、進めるには、次の APIを使用します。

    NetStream.seek()

再生ヘッドを、呼び出しで指定された時刻まで進めます。

        NetStream.step()

現在表示されているフレームに対して、指定された数のフレーム分、再生ヘッドを前後に進めます。

スマートシークを検出するには、次のイベントを使用します。

        NetStatusEvent.info.description  には文字列  "client-inBufferSeek"  が含まれます。

NetStream.seek() の呼び出しに成功するとディスパッチされます。

        NetStream.Step.Notify

NetStream.step()  の呼び出しに成功するとディスパッチされます。

これらの API の詳細についてはActionScript 3.0 リファレンスガイド」を参照してください。

 

スマートシーク ActionScript API の使用

スマートシークは Flash Player 10.1 以降でサポートされていますコードを実行する前にFlash Player のバージョンを確認してください。たとえば、巻き戻しおよび再生ボタンは、Flash Player 10.1 以降が実行されているクライアントだけに表示できます。次のコードは Flash Player のバージョンをテストし、10.1 以降の場合に true を返します。

 

public var fp10_1:Boolean;

public function onStart():void{

debug("Flash Player Version: " + Capabilities.version);

fp10_1 = isFP10_1();

debug("fp10.1: "+fp10_1);

}

public function isFP10_1():Boolean {

var va:Array = Capabilities.version.split(" ")[1].toString().split(",");

if(int(va[0]) > 10) { return true; }

if(int(va[0]) < 10) { return false; }

if(int(va[1]) > 1) { return true; }

if(int(va[1]) < 1) { return false; }

return true;

}

 

次のコードは、Flash Playerのバージョンが 10.1より後の場合にNetStream.inBufferSeektrueに設定してスマートシークをオンにします。

 

// Call this function when you catch NetConnection.Connect.Success

public function createNetStream():void{

 

// Write code to create a NetStream object and a Video object...

//...

// Set the forward buffer, in seconds.

ns.bufferTime = 10;

try {

if(fp10_1) {

// If Flash Player is greater than 10.1, turn on smart seeking

// and set the size of the back buffer, in seconds.

ns.inBufferSeek = true;

ns.backBufferTime = 30;

}

} catch(e:Error) {}

 

スマートシークがオンになっている場合はNetStream.seek()の呼び出しでバッファーを使用します(標準のシークではバッファーが消去され、データの要求がサーバーに送信される。次の関数はseekTextと呼ばれるテキストフィールドで指定された数値まで順方向または逆方向にシークできます。

public function seekHandler():void {

if(ns != null) {

ns.seek(Number(seekText.text));

}

}

フレームのコマ送り/コマ戻し早送り巻き戻しまたスロー再生を行うプレーヤーを作成するにはstep() および seek()関数に渡す数値を調整します。

 

クライアントサイド DVR 機能を作成するにはNetStream.backBufferTime および NetStream.bufferTime プロパティを設定しますこれらのプロパティはFlash Player がクライアントサイドバッファーに格納するデータの量を指定しますたとえば、ライブの前にユーザーによる 30 分間の巻き戻しを可能にするにはbackBufferTime 180060 x 30 分)に設定します。キャッシュはメモリに格納されます。コンテンツがネットブックやモバイルデバイスを対象としている場合は、バッファープロパティを小さい値に設定します。

 

 

スマートシークのテスト

スマートシークはNetStream.inBufferSeektrueの場合の NetStream.seek()または NetStream.step()の呼び出しです。

NetStream.seek() の呼び出しに成功した場合、NetStatusEvent info.description プロパティには、文字列"client- inBufferSeek" が含まれます。

 

NetStream.step() の呼び出しに成功した場合、NetStatusEvent info.codeプロパティには文字列"NetStream.Step.No ify"が含まれます。step が完了しないと、別の step の呼び出しが実行なしで返されることがあります。もう一度 step を呼び出す前に、前の呼び出しの "NetStream.Step.Notify" を取得してください。

次のコードはNetStream.seek() NetStream.step() の呼び出しをテストします。

 

private function netStatusHandler(event:NetStatusEvent):void {

switch (event.info.code) {

case "NetStream.Seek.Notify":

var desc:String = new String(event.info.description);

if(desc.indexOf("client-inBufferSeek") >= 0)

trace("A smart seek occured");

else

trace(“A standard seek occurred”);

break;

case “Netstream.Step.Notify”;

trace("Successful NetStream.step() call");

break;

}

}

スマートシークには次の要件があります。

    NetStream.inBufferSeek = true

inBufferSeek のデフォルト値が false であること。

    Flash Media Server 3.5.3

    Flash Player 10.1

    ActionScript 3.0

•     バッファー(backBufferLengthおよび bufferLength)の値にシーク要求を満たす十分な大きさがあること。

これらのいずれかの要件が満たされない場合は、Flash Playerは標準のシークを使用しますが、コンパイル時または実行時エラーをスローしません。

 

 

Authorizationプラグインのイベントとプロパティ

Authorizationプラグインのイベントとプロパティを使用して、スマートシークに関する情報をロギングし、クライアントがサーバーにスマートシークコマンドを送信しないようにします。

 

 

関連項目

スマートシーク

 

サーバーのロギング

次のイベントが、Adobe Media Server access.log に書き込まれます。

 

イベント

カテゴリ

説明

client-seek

stream

NetStream.seek() seekRaw コマンドをサーバーに送信する NetStream.inBufferSeek = true をクライアントが呼び出したときのシーク位置。

クライアントは、バッファー内部でのシークの場合にのみ seekRaw コマンドを送信します。クライアントは、バッファーの外部をシークする場合には「seek」イベントを送信します。

start-transmit

stream

サーバーが startTransmit コマンドを受信しました。このコマンドは、バッファー内の容量が不足しているため、より多くのデータを送信するようサーバーに要求します。

stop-transmit

stream

サーバーが stopTransmit コマンドを受信しました。このコマンドは、バッファー内に十分なデータがあることを理由に、クライアントが startTransmit イベントを送信するまではデータの送信を中断するようサーバーに要求します。

 

注意ユーザーインターフェイスでユーザーがフレームをコマ送り/コマ戻しできるとNetStream.step()が数千回呼び出されることになります。パフォーマンス上の理由により、サーバーはこれらの呼び出しをログファイルに書き込みません。これらの呼び出しによって、クライアントサイドの "NetStream.Step.Notify"  NetStatusEventがトリガーされます。

 

 

 

最終更新日 2013/9/30