ADOBE® MEDIA SERVER 5.0.3
デベロッパーズガイド
翻訳:株式会社サムライズ |
注意
Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。
ストリームの長さの検出
サーバーサイドの Stream.length() メソッドを呼び出して、オーディオストリームまたはビデオストリームの長さを秒単位で取得します。この長さは Adobe Media Server によって測定されるものであり、onMetaData によって返される長さ(これはユーザーやツールによって設定されます)とは異なります。
ストリーム名を Stream.length()メソッドに渡します。アプリケーションインスタンスからの相対 URIに仮想ストリーム名またはストリーム名を渡すことができます。
例えば、次のコードでは、アプリケーションの streams/_definst_ フォルダーに格納されているストリームの長さを取得します。
// for an FLV file
length = Stream.length("parade");
// for an MP3 file
length = Stream.length("mp3:parade.mp3");
// for an MP4 file
length = Stream.length("mp4:parade.mp4");
この例では、サーバーサイド ActionScript を使用してストリームの長さを取得しています。
注意:StreamLength サンプル、main.asc(サーバーサイド ActionScript)および StreamLength.as(ActionScript 3.0) を使用します。サンプルを実行するには、「アプリケーションのデプロイメント」を参照してください。
認証コードを書く
クライアントが、サーバーに格納されているストリームの長さを取得する必要がある場合があります。例えば、ユーザーが Flashのプレゼンテーションを再生するかどうかを判断できるように、そのプレゼンテーションのビデオの長さを表示する場合などがあります。
これを実行するには、サーバーサイドコードに Stream.length()を呼び出すメソッドを定義し、クライアントがNetConnection.call() を使用してこのメソッドを呼び出すようにします。
❖ main.ascの中で、clientオブジェクトに関数を定義し、この関数の中で Stream.length()を呼び出します。これは、onConnectハンドラー内で実行します。
application.onConnect = function( client ) {
client.getStreamLength = function( streamName ) {
trace("length is " + Stream.length( streamName ));
return Stream.length( streamName );
}
application.acceptConnection( client );
}
メインクライアントクラスの記述
メインクライアントクラスから、サーバーサイドコード内の getStreamLength() を呼び出します。応答を格納するためのResponder オブジェクトを作成する必要があります。
var responder:Responder = new Responder(onResult);
この行では、onResult()関数が結果を処理するように指定しています。以下の手順で示すように、onResult()を記述することも必要です。
1 通常通り、クライアントコード内で、パッケージの作成、クラスの読み込み、変数の定義を行います。
package {
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.NetStream;
import flash.net.Responder;
import flash.media.Video;
...
2 新しいクラス、StreamLength を作成します。
public class StreamLength extends Sprite
{
var nc:NetConnection;
var stream:NetStream;
var video:Video;
var responder:Responder;
}
...
3 StreamLength クラス用コンストラクター内で、NetConnection.connect() を呼び出してサーバーに接続します。
public function StreamLength()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect("rtmp://localhost/StreamLength");
}
4 netStatus イベントハンドラーを追加し、正しく接続された場合、接続が拒否された場合、接続が失敗した場合の処理を行います。
private function netStatusHandler(event:NetStatusEvent):void
{
trace("connected is: " + nc.connected );
trace("event.info.level: " + event.info.level);
trace("event.info.code: " + event.info.code);
switch (event.info.code)
{
case "NetConnection.Connect.Success":
trace("Congratulations! you're connected");
connectStream(nc);
break;
case "NetConnection.Connect.Rejected":
case "NetConnection.Connect.Failed":
trace ("Oops! the connection was rejected");
break;
}
}
5 接続が正しく行われた場合にストリームを再生するための関数を記述します。この関数内で Responderオブジェクトを作成します。このオブジェクトは、onResult()という名前の関数の中で応答を処理します。次に、NetConnection.call()を呼び出します。このメソッドには、サーバー上で呼び出す関数である getStreamLength、Responderオブジェクト、ストリームの名前を指定します。
// play a recorded stream on the server
private function connectStream(nc:NetConnection):void {
stream = new NetStream(nc);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
responder = new Responder(onResult);
nc.call("getStreamLength", responder, "bikes" );
}
6 onResult()関数を記述します。この関数は、サーバー上の getStreamLength()によって返されるストリームの長さを処理します。
private function onResult(result:Object):void {
trace("The stream length is " + result + " seconds");
output.text = "The stream length is " + result + " seconds";
}
クライアントのイベントハンドラークラスの記述
❖ onMetaData イベントと onPlayStatus イベントを処理するための個別のクラスを記述します。
class CustomClient {
public function onMetaData(info:Object):void {
trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + " framerate=" + info.framerate);
}
public function onPlayStatus(info:Object):void {
trace("handling playstatus here");
}
}
最終更新日 2013/9/30