ADOBE®   MEDIA SERVER 5.0.3

デベロッパーズガイド


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

 

注意

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

 

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

FlashMedia Server 3.5.3Flash 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()を呼び出します。

 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 により、ストリームの再生を再開する場所がサーバーに通知されます。

 再接続する場合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     を使用します。

 再生リストに「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_OFFSETF_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