ADOBE® MEDIA SERVER 5.0.3
デベロッパーズガイド
翻訳:株式会社サムライズ |
注意
Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。
スマートシーク
Flash Media Server 3.5.3、Flash Player 10.1
Flash Media Server 3.5.3 と Flash Player 10.1 が連携し、VOD ストリームと、バッファーを持つライブストリームでのスマートシークをサポートします。スマートシークは、サーバー内のデータを要求せずに、巻き戻しと再生用のバッファーを使用します。指定した数のフレームを進めるか巻き戻すことができます(標準のシークでは、バッファー済みのデータをフラッシュし、シーク時間に基づいて新しいデータを送信するようにサーバーに要求します)。スマートシークにより、サーバーの負荷が減少し、シークのパフォーマンスが向上します。スマートシークを使用して次を作成します。
• クライアント側 DVR機能。新しいビデオの配信をサーバーに要求する代わりに、クライアント側のバッファー内でライブストリームをシークします。
• トリックモード。フレームのコマ送り再生、早送り、巻き戻り、スローモーション再生中の早送りなどを実行するプレーヤーを作成します。
スマートシークの例については、アドビ主催の「Stream Reconnect and Smart Seek example」を参照してください。
注意:スマートシークは、ピアアシストネットワーキングアプリケーションやプログレッシブダウンロードではサポートされません。
注意:スマートシーク 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 リファレンスガイド」を参照してください。
スマートシークは 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.inBufferSeekを trueに設定してスマートシークをオンにします。
// 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 を 1800(60 秒 x 30 分)に設定します。キャッシュはメモリに格納されます。コンテンツがネットブックやモバイルデバイスを対象としている場合は、バッファープロパティを小さい値に設定します。
スマートシークは、NetStream.inBufferSeekが trueの場合の 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プラグインのイベントとプロパティを使用して、スマートシークに関する情報をロギングし、クライアントがサーバーにスマートシークコマンドを送信しないようにします。
関連項目
「スマートシーク」
次のイベントが、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