ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


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

 

注意

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

 

切断時のストリームの再接続

FlashMedia Server 3.5.3、Flash Player 10.1

 

 

 

ストリームの再接続について

接続が切断された場合またはクライアントがネットワーク接続を有線から無線に切り替えた場合にシームレスな再生をサポートするアプリケーションを構築することができます。ストリームの再接続の例については、Adobe 主催の「Stream Reconnect and Smart Seek example」を参照してください。

シームレスな再生を提供するには、ActionScript 3.0 の「NetStream.attach()」メソッドを使用して、同じ NetStream オブジェクトを再接続した NetConnection オブジェクトに割り当てます。この機能は、ロードバランシングのために使用することもできます。

注意:Flash Player のバージョンが10.1 未満または Flash Media Server のバージョンが 3.5.3 未満の場合、ストリームは接続が切断したときに閉じます。

 

 

ストリーム再接続 ActionScript API

注意:ストリーム再接続 ActionScript API は ActionScript 3.0 であり、ActionScript 2.0 ではサポートされません。

次の ActionScript 3.0 API を使用すると、ストリームに再接続できます。

•    NetStream.attach(connection:NetConnection)

NetConnection オブジェクトにストリームを割り当てます。

•    NetStreamPlayTransitions.RESUME

 

RESUMEモードにすると、Flash Player 10.1以降では、以前の接続が切断された場所と同じ場所で、新しい接続からデータを要求します。Flash Playerでは 2つの接続間のストリームが整合されるので、ビデオ再生時にブロックノイズが表示されたり、シーンが飛んだりすることはありません。サーバーの問題やその他の接続の問題のせいで中断したストリームを再接続するときに、このモードを使用します。

•    NetStreamPlayTransitions.APPEND_AND_WAIT

 

APPEND_AND_WAIT  モードでは、サーバーに再生リストの構築を通知しますが、ストリーミングは行われません。接続を失って新しい接続を確立した後に再生リストを再構築するには、このモードを使用します。

•    NetConnection.Connect.Closed

ストリームに再接続するには、このイベント NetConnection.Connect.Closed を使用します。

•    NetConnection.Connect.NetworkChange

ネットワーク接続を変更したことをクライアントに通知します。ストリームを再接続するには、このイベントは使用せず、NetConnection.Connect.Closed を使用してください。

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

 

ストリーム再接続 ActionScript API の使用

ネットワークの変更により NetConnection が閉じた場合、ストリームは既存のバッファーを使用して再生を続けます。その間に、クライアントサイド ActionScript コードがサーバーに再接続し、ストリームの再生を再開します。

注意:Flash Player のバージョンが10.1 未満または Flash Media Server のバージョンが 3.5.3 未満の場合、ストリームはネットワーク接続が失われるとすぐに閉じます。

 

単一ストリームの再接続

次のワークフローでは、単一ストリームに再接続します。

1    サーバー Aに接続するには、NetConnection.connect()を呼び出します。

2   NetStream を作成します。接続がダウンしている間再生するのに十分なデータが存在するように、NetStream.bufferTime を少なくとも数秒に設定します。

3   「myStream」という名前のストリームを再生するには、NetStream.play2()     を呼び出し、NetStreamPlayTransitions.RESET を使用します。

4   「NetConnection.Connect.Closed」イベントの NetConnection を監視します。接続が切断された場合は、サーバー A に再接続します。

5   新しい接続に NetStreamを割り当てるには、NetStream.attach(connection:NetConnection)  メソッドを呼び出します。

6   ストリーム「myStream」を再生するには、NetStream.play2()   を呼び出し、NetStreamPlayTransitions.RESUME   を使用します。

Flash Player により、ストリームの再生を再開する場所がサーバーに通知されます。

7   再接続する場合、NetConnection.close() または NetStream.close() は呼び出さないでください。closeを呼び出すと、接続またはストリームが閉じてクリーンナップが行われるので、再生は直ちに停止し、再接続できなくなります。

新しい NetConnection への割り当てが完了すると、古い NetConnection で close を呼び出すことができます。

 

再生リストの再接続

次のワークフローでは、再生リストに再接続します。

1    サーバー Aに接続するには、NetConnection.connect()を呼び出します。

2     NetStreamを作成します。接続がダウンしている間再生するのに十分なデータが存在するように、NetStream.bufferTime を少なくとも数秒に設定します。

3  「myStream1」という名前のストリームを再生するには、NetStream.play2() を呼び出し、NetStreamPlayTransitions.RESET    を使用します。

4 「myStream2」という名前の2 番目のストリームを再生するには、NetStream.play2() を呼び出し、NetStreamPlayTransitions.APPEND    を使用します。

5    「NetConnection.Connect.Closed」イベントの NetConnection を監視します。接続が切断された場合は、サーバー A に再接続します。

6    新しい接続に NetStreamを割り当てるには、NetStream.attach(connection:NetConnection)  メソッドを呼び出します。

7     再生リストに「myStream1」を追加するには、NetStream.play2() を呼び出し、NetStreamPlayTransitions.APPEND_AND_WAIT     を使用します。

8   再生リストに「myStream2」を追加してストリームを再開するには、NetStream.play2() を呼び出し、NetStreamPlayTransitions.RESUME   を使用します。

Flash Player により、ストリームの再生を再開する場所がサーバーに通知されます。

 

サーバーのロードバランシング

次のワークフローでは、ロードバランシングを行うためにインテリジェントな再接続 APIを使用します。

1    別のサーバー上のNetConnection オブジェクトにストリームを割り当てるには  NetStream.attach(connection:NetConnection)     を呼び出します。

2     ストリームが新しい接続に正しく接続されたら、データが漏れ出すのを防ぐために、以前の接続で NetConnection.close()を呼び出します。

3     RESUME を使用して再開するには、NetStream.play2() を呼び出し、NetStreamPlayOptions.transition を使用します。残りの NetStreamPlayOptions プロパティを、最初に NetStream.play() または NetStream.play2() を呼び出したときと同じ値に設定して、ストリームを開始します。

 

 

ネットワークインターフェイスの変更の監視

ネットワークインターフェイスの変更を監視するために、「NetConnection.Connect.NetworkChange」イベントの NetConnectionを監視します。このイベントはネットワークの変化を検出します(例えば、無線ネットワークへの接続、無線ネットワークからの接続解除、ネットワークケーブルの接続解除など)。

 

注意:切断された NetConnectionの監視や、ストリームに再接続するためのロジックの記述するために、このイベントを使用しないでください。「NetConnection.Connect.Closed」を使用します。

 

 

モバイルデバイスの接続の監視

一部のモバイルデバイスでは、「NetConnection.Connect.Closed」メッセージを受信できません。この場合、ネットワークの問題を検出するために、タイマー内の NetStream.bufferLength プロパティと NetStreamInfo.byteCount プロパティを監視することができます。NetStream.bufferLength が NetStream.bufferTimeより小さく、NetStreamInfo.byteCount が増加していない場合は、恐らくネットワークの問題があります。

 

netStreamMonitorTimer.start();

netStreamMonitorTimer.addEventListener(TimerEvent.TIMER, timerHandler);

lastByteCount = 0;

private function timerHandler(e:TimerEvent):void{

if(netstream.bufferLength < netstream.bufferTime && netstream.info.byteCount == lastByteCount) {

// Network has issues.. reconnect to a new NetConnection

netconnection2 = new NetConnection(); ///on NetConnection.Connect.Success:

netStream.attach(netconnection2);

}

lastByteCount = netstream.info.byteCount;

}

 

RTMPS 接続または RTMPT 接続の監視

RTMPS 接続および RTMPT 接続では、NetStream.attach() を呼び出したときに、"NetConnection.Connect.Closed" イベントが遅れて到達したり、到達しないこともあります。

 

この場合、ネットワークの問題を検出するために、タイマー内の NetStream.bufferLength  プロパティと NetStreamInfo.byteCount  プロパティを監視します。NetStream.bufferLength  が  NetStream.bufferTime  より小さく、 NetStreamInfo.byteCount   が増加していない場合は、恐らくネットワークの問題があります。

 

netStreamMonitorTimer.start();

netStreamMonitorTimer.addEventListener(TimerEvent.TIMER, timerHandler);

lastByteCount = 0;

private function timerHandler(e:TimerEvent):void{

if(netstream.bufferLength < netstream.bufferTime && netstream.info.byteCount == lastByteCount) {

// Network has issues.. reconnect to a new NetConnection

netconnection2 = new NetConnection(); ///on NetConnection.Connect.Success:

netStream.attach(netconnection2);

}

lastByteCount = netstream.info.byteCount;

}

 

 

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

再接続後に発生するストリーミングを制御するために、Authorization プラグインの E_PLAY イベントを使用します。次の表は、ストリーム再接続機能のイベントとプロパティをまとめたものです。

 

プロパティ

サーバーのバージョン

E_PLAY

 

通知と許可

F_STREAM_OFFSET

3.5.3

読み取り専用

F_STREAM_TRANSITION

3.5

読み取りと書き込み

 

新しいプロパティが 1 つあります(F_STREAM_OFFSET)。F_STREAM_OFFSET プロパティは、再接続後にストリーミングを再開する場所を秒単位で示します。

 

F_STREAM_TRANSITION      プロパティは、NetStream.play2()      呼び出しでクライアントから送信されたトランジションモードを示します。ストリーム再接続の値は、“resume” および “appendAndWait” です。

 

関連項目

「Authorization プラグインの開発」

 

サーバーのロギング

次のイベントは、ストリーム再接続機能のため Adobe Media Server アクセスログに書き込まれます。

 

イベント

カテゴリ

説明

connect

session

クライアントが Adobe Media Server アプリケーションに接続しました。このイベントは、接続の切断後に再確立したときに記録されます。

play

stream

ストリームの再生が再開しました。

stop

stream

ストリームの再生が停止しました。

次のフィールドは、ストリーム再接続機能の新しいフィールドです。

 

フィールド

説明

x-trans-mode

NetStream.play2() 呼び出しでクライアントが設定したトランジションモード。ストリーム再接続では、トランジションモードは

“resume” と “appendAndWait” です。

x-soffset

NetStream の割り当て後にストリーミングを再開する場所を示すオフセット値。

 

これらのフィールドは、デフォルトでは無効になっています。authEvent.log と access.log にこれらのフィールドを表示することもできます。

 

 

 

最終更新日 2013/9/30