ADOBE® MEDIA SERVER 5.0.3
デベロッパーズガイド
翻訳:株式会社サムライズ |
注意
Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。
メディアファイルのストリーミング
ストリームを再生するには、NetStream クラスを使用します。NetStream オブジェクトを作成し、コンストラクターに NetConnection オブジェクトを渡します。
ns:NetStream = new NetStream(nc);
NetStream.play()メソッドまたは NetStream.play2()メソッドを呼び出し、メディアファイルの URIを渡します。
ns.play("bikes");
ns.play2("bikes");
このコードでは、NetConnection.connect() を使用して接続したアプリケーション内の、「bikes.flv」という名前の記録済みストリームを再生します。
様々なファイルタイプに接頭辞とファイル拡張子が必要です。たとえば、次のコードによってファイル「bikes.f4v」が再生されます。
ns.play("mp4:bikes.f4v");
play() および play2() とそのパラメーターについて、また各メソッドを使用する状況について詳しくは、「ActionScript 3.0リファレンスガイド」の「NetStream」クラスを参照してください。
サブフォルダーに入れ子にされたストリームの再生
ストリームを再生するには、ストリームへのパスを指定する前にコーデックを指定します。FLV ストリームではコーデックの接頭辞は必要ありませんが、F4V / MP4 ファイル、MP3 ファイルおよび RAW ファイルでは必要です。
デフォルトの VOD アプリケーションを使用しているとします。デフォルトでは、VOD アプリケーションは applications/vod/media フォルダー内のストリームを探すように設定されています。「sample」という名前のストリームが applications/vod/media/final フォルダーに入れ子されているとします。次の例は、クライアントサイドの NetStream.play() メソッドを示しています。
ns.play("mp4:final/sample.f4v",0,-1) // F4V/MP4 files
ns.play("raw:final/sample",0,-1) // RAW files
ns.play("mp3:final/sample",0,-1) //MP3 files
ns.play("final/sample",0,-1). // FLV files
次の例は、サーバーサイド ActionScript Stream.play() メソッドを示しています。
myStream.play("mp4:final/sample.f4v",0,-1) // F4V/MP4 files
myStream.play("raw:final/sample",0,-1) // RAW files
myStream.play("mp3:final/sample",0,-1) // MP3 files
myStream.play("final/sample",0,-1) // FLV files
ストリーム名には、\ / : * ? "< > |の各文字は使用できません。
• 非常に低いフレームレート H.264ビデオは、バッファーが短すぎる場合、開始までに長い時間がかかる場合があります。
H.264 ビデオでは、再生を開始する前に 64 メッセージを必要とします。例えば、15 fps で、2 秒のバッファーには 30 サンプルが格納されます。この場合、サーバーと Player は、たとえ小さくても、64 画像が到着するまでに 4 秒以上待ちます。
• サーバーサイドストリームは、ファイルサイズが設定済みバッファー時間 (Application.xml 設定ファイル内のMinBufferTime タグ ) または 2 秒未満であっても再生されません。
• ストリームを再生しているときは、NetStream.bufferTimeを最低 .1に設定します。ライブアプリケーションには、小さい値を設定します。オンデマンドアプリケーションには、大きい値 (3~ 5秒 )を設定します。
ローカルドライブおよびネットワークドライブへの URIのマッピング
仮想ディレクトリを使用して、ローカルおよびネットワークドライブへの URI のマッピングを単純化します。仮想ディレクトリを使用すると、あらかじめ指定された異なる場所にメディアファイルをパブリッシュおよび格納できます。これは、メディアファイルの整理に役立ちます。Vhost.xml ファイルの VirtualDirectory/Streams タグで仮想ディレクトリを設定します。
ディレクトリマッピングは、異なる種類のリソースを分けて格納する際にも使用できます。例えば、使用しているアプリケーションでユーザーが高帯域幅のビデオと低帯域幅のビデオの両方を表示できるとします。このような状況で、高帯域幅のビデオと低帯域幅のビデオを別のフォルダーに格納する必要がある場合もあるでしょう。low で始まるすべてのストリームが C:\low_bandwidthという特定のディレクトリに格納され、high で始まるすべてのストリームがそれとは別のディレクトリに格納されるマッピングを作成できます。
<VirtualDirectory>
<Streams>low;c:\low_bandwidth</Streams>
<Streams>high;c:\high_bandwidth</Streams>
</VirtualDirectory>
低帯域幅のビデオにアクセスするクライアントは、ns.play("low/sample") を呼び出します。この呼び出しは、c:\low_bandwidth フォルダーで sample.flv ファイルを探すようサーバーに指示します。
同様に、ns.play("high/sample") に対する呼び出しは、c:\high_bandwidth フォルダーでsample.flv ファイルを探すようサーバーに指示します。
次の表に、異なる仮想ディレクトリ設定の 3 つの例(ローカルドライブおよびネットワークドライブへのマッピングを含む)と、記録済みストリームのパブリッシュ先となるディレクトリの決定方法を示します。最初の例では、指定されている URI("myStream")が、指定されている仮想ディレクトリ名("low")と一致しないので、サーバーはデフォルトのストリームディレクトリにストリームをパブリッシュします。
Vhost.xml でのマッピング
<VirtualDirectory><Streams> タグ |
NetStream 呼び出しの URI |
パブリッシュされたストリームの場所 |
low;e:\fmsstreams |
"myStream" |
c:\...\rootinstall\applications\yourApp\streams\_definst_\myStream.flv |
low;e:\fmsstreams |
"low/myStream" |
e:\fmsstreams\myStream.flv |
low;\\mynetworkDrive\share\fmsstreams |
"low/myStream" |
\\mynetworkDrive\share\fmsstreams\myStream.flv |
関連項目
この機能では、指定したビデオのサムネイルのスナップショット(音声も含む)を、表示目的で取得することができます。
Flash Playerクライアントは、Client.audioSampleAccess プロパティや Client.videoSampleAccess プロパティによって指定されたディレクトリ内のストリームのデータに対するアクセスが許可されます。「」を参照してください。
データにアクセスするには、クライアント上で、「BitmapData.draw()」および「SoundMixer.computeSpectrum()」を呼び出します。生のオーディオにアクセスする方法の詳細については、「生のサウンドデータへのアクセス」を参照してください。
多くの場合、記録済みのメディアファイルには、サーバーまたはツールによってエンコードされたメタデータが含まれます。 Flash Video Exporterユーティリティ(バージョン 1.1 以降)は、ビデオの所要時間、フレームレートなどの情報をビデオファイルに埋め込むためのツールです。他のビデオエンコーダーでは、異なるメタデータのセットが埋め込まれます。また、明示的に独自のメタデータを追加することもできます。
クライアントでストリームを再生する NetStreamオブジェクトは、ストリーム内にメタデータが見つかると、onMetaData イベントをディスパッチします。メタデータを読み取るには、このイベントを処理して、メタデータが含まれる infoオブジェクトを抽出する必要があります。例えば、ファイルが Flash Video Exporterによってエンコードされている場合、info オブジェクトには次のプロパティが含まれます。
duration |
ビデオの長さ。 |
width |
ビデオが表示される幅。 |
height |
ビデオが表示される高さ。 |
framerate |
ビデオがエンコードされているフレームレート。 |
関連項目
Adobe Extensible MetadataPlatform(XMP)メタデータを埋め込んだビデオストリーミングを、Adobe Media Server を通じて Flash Player に配信できます。Adobe Media Server では、FLV および MP4/F4V 形式で埋め込まれた XMP メタデータがサポートされています。Flash Media Server 3.5 では、MP4/F4V ファイルにつき 1 つの XMP メタデータパケットがサポートされています。
XMPメタデータは、重要なメディア情報を、メディアが作成された位置からメディアが表示される位置まで通信するシステムです。作成プロセスで XMP情報を追加することで、メディアのインタラクティブ性が向上します。また、ファイル内に埋め込まれ、Adobe Media Encoderなどのアドビシステムズ社のエンコードツールからエンコードされた speech-to- textメタデータを配信することができます。AMF0および AMF3接続がサポートされます。XMPメタデータは、ファイルに関する内部情報にするほか、またはエンドユーザー向けの情報にすることもできます。
例えば、Adobe Premiere® でトレーラーを作成して、メタデータを FLVファイルに送信することができます。ユーザーがファイルを表示する場合は、Flash Player 10を使用してメタデータを検索し、ファイル内の特定の場所にジャンプすることができます。NetStreamでコンテンツを再生すると、単一のフィールド dataがある onXMPDataメッセージがコールバックとして送信されます。dataフィールドには、メディアファイルからの XMPメッセージ全体が含まれています。
XMP の詳細については、www.adobe.com/go/learn_fms_xmp_jp を参照してください。
このチュートリアルでは、ActionScript 3.0 を使用して Video オブジェクトをステージに追加し、ビデオを表示します。ビデオの操作について詳しくは、www.adobe.com/go/learn_fms_video_jp にある「ActionScript 3.0 開発ガイド」の「ビデオの操作」の章を参照してください。
このチュートリアルでは、学習用にビデオを表示するための最も簡単な例について説明します。より堅牢なビデオPlayer を構築するには、「OpenSource Media Framework」を参照してください。
注意:この例では、rootinstall/documentation/samples フォルダーから、MediaPlayer サンプルの MediaPlayer.as を使用します。
Flash での例の実行
1 rootinstall/applications/mediaplayer フォルダーを作成します。
2 rootinstall/documentation/samples/MediaPlayer/streams フォルダーを rootinstall/applications/mediaplayerフォルダーにコピーして次のようにします。
rootinstall/applications/mediaplayer/streams/_definst_/bikes.flv
3 Flash では、rootinstall/documentation/samples/MediaPlayer フォルダーから MediaPlayer.fla ファイルを開きます。
4 制御/ムービープレビューを選択します。ビデオが音声なしで再生され、出力ウィンドウにメッセージが表示されます。
出力ウィンドウと、ムービーテストモードのビデオ
ストリームが再生されたり、接続状態が変化したりすると、それに関する出力が表示されます。NetStream.play() を呼び出すと、onMetaData の呼び出しがトリガーされ、コンソールウィンドウに次のようなメタデータが表示されます。
metadata: duration=30 width=292 height=292 framerate=30
Flash Builderでの例の実行
1 MediaPlayer を Flash Builder 内で開きます。
2 実行/デバッグを選択します。「プロジェクト」で、MediaPlayer を選択します。「アプリケーションファイル」で、MediaPlayer.as を選択します。
3 「デバッグ」をクリックします。ビデオがアプリケーションウィンドウで実行されます。出力メッセージを参照するには、Flash Builder ウィンドウをクリックします。
メインクライアントクラスの記述
1 ActionScript 3.0 クラスを作成します。NetConnection クラス、NetStream クラスおよびその他の必要なクラスを読み込みます。
package {
import flash.display.Sprite;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.NetStream;
import flash.media.Video;
...
}
2 新しいクラスの MediaPlayer を作成し、その中で必要な変数を宣言します。
public class MediaPlayer extends Sprite
{
var nc:NetConnection;
var ns:NetStream;
var video:Video;
...
}
3 コンストラクターを定義します。つまり、NetConnection オブジェクトを作成し、そのオブジェクトにイベントリスナーを追加してから、サーバーに接続します。
public function MediaPlayer()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect("rtmp://localhost/mediaplayer");
}
4 NetConnection イベントと NetStream イベントを両方処理する netStatusHandler 関数を作成します。
private function netStatusHandler(event:NetStatusEvent):void{
trace("event.info.level: " + event.info.level + "\n", "event.info.code: " + event.info.code);
switch (event.info.code){
case "NetConnection.Connect.Success":
// Call doPlaylist() or doVideo() here.
doPlaylist(nc);
break;
case "NetConnection.Connect.Failed":
// Handle this case here.
break;
case "NetConnection.Connect.Rejected":
// Handle this case here.
break;
case "NetStream.Play.Stop":
// Handle this case here.
break;
case "NetStream.Play.StreamNotFound":
// Handle this case here.
break;
case "NetStream.Publish.BadName": trace("The stream name is already used");
// Handle this case here.
break;
}
}
注意:利用可能なすべてのイベントコードのリストについては、『ActionScript 3.0 リファレンスガイド』の
「NetStatusEvent.info」を参照してください。
1 NetStream オブジェクトを作成し、netStatus イベントリスナーを登録します。
private function connectStream(nc:NetConnection):void {
ns = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
ns.client = new CustomClient();
...
client プロパティに CustomClient クラスのインスタンスを設定していることに注意してください。CustomClient は、いくつかの特別なイベントハンドラーを定義する個別のクラスです。
2 Video オブジェクトを作成し、このオブジェクトにストリームを割り当てます。
video = new Video();
video.attachNetStream(ns);
Video オブジェクトにストリームを割り当てる場合、ActionScript 2.0 では Video.attachVideo() を使用していましたが、ActionScript 3.0 では Video.attachNetStream() を呼び出します。
3 NetStream.play() を呼び出してストリームを再生し、addChild() を呼び出してステージにストリームを追加します。
...
ns.play("bikes", 0);
addChild(video);
}
NetStream.play() に渡すストリームの URI は、NetConnection.connect() に渡すアプリケーションの URI からの相対パスです。
クライアントのイベントハンドラークラスの記述
onMetaDataイベントハンドラーと onPlayStatusイベントハンドラーを含む CustomClientクラスを記述することも必要になります。NetStream.play()を呼び出す場合は、これらのイベントを処理する必要がありますが、addEventListener()メソッドを使用してこれらのイベントハンドラーを登録することはできません。
1 メインクライアントクラスの中で、NetStream.clientプロパティに新しいクラスを割り当てます。
ns.client = new CustomClient();
2 新しいクライアントクラスを作成します。
class CustomClient {
}
3 onMetaDataイベントを処理するための、onMetaData()という名前の関数を記述します。
public function onMetaData(info:Object):void {
trace("metadata: duration=" + info.duration + " width=" + info.width + " height=" + info.height + "framerate=" + info.framerate);
}
4 onPlayStatusイベントを処理するための、onPlayStatus()という名前の関数を記述します。
public function onPlayStatus(info:Object):void {
trace("handling playstatus here");
}
最終更新日 2013/9/30