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に設定しますライブアプリケーションには小さい値を設定します。オンデマンドアプリケーションには、大きい値 (35)を設定します。

 

 

ローカルドライブおよびネットワークドライブへの 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

ビデオがエンコードされているフレームレート。

 

関連項目

例:ライブビデオへのメタデータの追加

 

XMPメタデータの使用

Adobe Extensible MetadataPlatformXMPメタデータを埋め込んだビデオストリーミングを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 を参照してください。

 

Media Player

このチュートリアルでは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