Flash Media Server 4.5 デベロッパーズガイド

ADOBE FLASH MEDIA SERVER 4.5
デベロッパーズガイド
®
®
法律上の注意
法律上の注意については、http://help.adobe.com/ja_JP/legalnotices/index.html を参照してください。
最終更新日 2011/10/10
iii
目次
第 1 章:メディアのストリーミングの概要
サポートされているクライアント、エンコーダー、コーデックおよびファイル形式
構築済みの Media Player
............................................... 1
................................................................................................. 3
ライブメディアのストリーミング(HTTP)
................................................................................... 5
ライブメディアのストリーミング(RTMP)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
オンデマンドメディアのストリーミング(HTTP)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
オンデマンドメディアのストリーミング(RTMP)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
メディアのマルチキャスト(RTMFP)
Protected HTTP streaming
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
HTTP Dynamic Streaming および HTTP Live Streaming の設定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
HTTP ストリーミング設定のファイル参照
カスタム Media Player の構築
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
ストリーミングメディアの問題のトラブルシューティング
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
第 2 章:アプリケーションの開発の概要
アプリケーションのアーキテクチャ
開発環境設定
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
例:Hello World アプリケーション
アプリケーションの作成の概要
アプリケーションのテスト
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
アプリケーションのデプロイメント
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
第 3 章:ストリーミングメディアアプリケーションの開発
サーバーへの接続
接続の管理
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
メディアファイルのストリーミング
ビデオファイルの確認
エラーの処理
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
再生リストの操作
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
動的ストリーミング
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
切断時のストリームの再接続
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
ストリーミング間の高速切り替え
スマートシーク
帯域幅の検出
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
ストリームの長さの検出
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
第 4 章:ビデオの操作
ライブビデオのキャプチャ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
ライブビデオへの DVR 機能の追加
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
iv
目次
ライブストリームへのメタデータの追加
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Flash Media Live Encoder から送信されたタイムコードのキャプチャ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
RAW ファイル形式でライブビデオのパブリッシュ
サーバー間のマルチポイントパブリッシュ
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
第 5 章:ピアアシストネットワーキングアプリケーションの構築
Real-Time Media Flow Protocol (RTMFP)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
RTMFP グループ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
サーバー間のピア紹介の配信
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
第 6 章:ソーシャルアプリケーションの開発
ソーシャルアプリケーションについて
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
共有オブジェクトについて
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
リモート共有オブジェクト
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
SharedBall サンプル
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
多数のユーザーに対するメッセージのブロードキャスト
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
第 7 章:アプリケーションのセキュリティ確保
アセットに対するアクセスの許可または拒否
クライアントの認証
ユーザーの認証
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
第 8 章:プラグインの開発
Flash Media Server 4.5 のプラグインの新機能 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
バージョニング、アップグレードおよびサーバーエディション
プラグインの操作
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
一般的な開発タスク
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Access プラグインの開発
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Authorization プラグインの開発
File プラグインの開発
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
最終更新日 2011/10/10
1
第 1 章:メディアのストリーミングの概要
サポートされているクライアント、エンコーダー、コーデッ
クおよびファイル形式
ストリーミングサービスでサポートされているクライアントおよびサーバー
ストリーミングサービスは、構築済みの Flash Media Server アプリケーションです。ストリーミングサービスを使用して、
メディアを Flash および Apple クライアントにストリーミングします。ストリーミングサービスは、
rootinstall/applications/servicename にインストールされます。
次の表に、ストリーミングサービスとそれらのサービスでサポートされる最も古いサーバーのバージョン、サーバーエディ
ションおよびクライアントランタイムを示します。
ストリーミングの種類
サービス名
サーバーのバージョ
ン
サーバーエディション
クライアントランタイ
ム
RTMP 経由でのオンデマンドスト
VOD
3
All
Flash Player 6
リーミング。
AIR 1
オンデマンドメディアのストリー
ミング(RTMP)を参照してくだ
さい。
HTTP 経由でのオンデマンドスト
なし
4.5
All
リーミング。
Flash Player 10.1
AIR 2
23 ページの「オンデマンドメディ
アのストリーミング(HTTP)」を
iOS 3.0
参照してください。
QuickTime X
RTMP 経由でのライブストリーミ
ライブ
3
All
ング。
Flash Player 6
AIR 1
31 ページの「オンデマンドメディ
アのストリーミング(RTMP)」を
参照してください。
HTTP 経由でのライブストリーミ
ング。
5 ページの「ライブメディアのス
トリーミング(HTTP)」を参照し
てください。
livepkgr
4
4 — Flash Media
Enterprise Server、
Flash Media
Interactive Server
4.5 — すべて
最終更新日 2011/10/10
4 — Flash Player
10.1、AIR 2
4.5 — Flash Player
10.1、AIR 2、iOS
3.0、QuickTime X
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
2
メディアのストリーミングの概要
ストリーミングの種類
サービス名
サーバーのバージョ
ン
サーバーエディション
RTMFP 経由のマルチキャストス
マルチキャ
スト
4
Flash Media
Flash Player 10.1
Interactive Server は
AIR 2
IP マルチキャストをサ
トリーミング。
36 ページの「メディアのマルチ
クライアントランタイ
ム
ポートします。
キャスト(RTMFP)」を参照して
Flash Media
Enterprise Server は、
IP マルチキャスト、ア
ください。
プリケーションレベル
のマルチキャスト、マ
ルチキャストフュー
ジョンをサポートしま
す。マルチキャスト
フュージョンの技術
は、IP とアプリケー
ションレベルのマルチ
キャストを組み合わせ
ます。
重要:Flash Media Streaming Server では、ストリーミングサービスのサーバーサイドコードを変更できません。サーバー
の他のすべてのエディションでは、コードを変更できます。
サポートされているファイル形式とコーデック
Adobe Flash プラットフォーム
サポートされているファイル形式とコーデックの完全なリストについては、「サポートされているファイル形式とコーデッ
ク」を参照してください。
ライブ HTTP Dynamic Streaming は、H.264、VP6、MP3 および AAC コーデックをサポートしています。
オンデマンド HTTP Dynamic Streaming では、ジャストインタイム Packager で F4V/MP4 ファイルがサポートされてい
ます。このドキュメントでは、ジャストインタイム Packager の使用方法について説明します。HTTP Dynamic Streaming
の FLV ファイルをパッケージ化するには、オフラインの File Packager ツールを使用します。「File Packager reference」
を参照してください。
また、Flash プラットフォームに関する次の記事を参照してください。
Smart phone and tablet video encoding recommendations for Flash Player and AIR(アドビシステムズ社のエン
コーディングの伝道者である Maxim Levkov と、アドビシステムズ社のプロダクトマネージャーである Tom Nguyen
の記事)。
Video encoding and transcoding recommendations for HTTP Dynamic Streaming on the Flash Platform (ア
ドビ システムズ社のエンコーディングの伝道者である Maxim Levkov の記事)。
エンコーディングに関する記事の詳細な一覧については、「Adobe Developer Connection」の Video Encoding の
ページを参照してください。
Apple HTTP Live Streaming
Flash Media Server による Apple HTTP Live Streaming のサポートには、オーディオビデオコンテンツ向けの H.264 と
AAC/HE-AAC、オーディオのみのコンテンツ向けの AAC/HE-AAC が含まれています。
詳細については、「Apple HTTP Live Streaming Overview - FAQ」を参照してください。
推奨されるエンコード設定については、「Best Practices for Creating and Deploying HTTP Live Streaming Media for
the iPhone and iPad」および「Recommended Encoding Settings for HTTP Live Streaming Media」を参照してくださ
い。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
3
メディアのストリーミングの概要
サポートされているエンコーダー
次のエンコーダーを使用してライブストリームを Flash Media Server にパブリッシュします。
• Flash Media Live Encoder
• Flash Media Enterprise Server、Flash Media Interactive Server および Flash Media Development Server で実行さ
れるサーバーサイドスクリプト。サーバーサイドの ActionScript メソッド Stream.play() を呼び出すと、ストリームは
「ライブ」と見なされます。
•
カスタム構築された Flash Player または AIR アプリケーション。
•
他のエンコーディングソリューションについては、「Flash Media Server エコシステムパートナー」を参照してくださ
い。
構築済みの Media Player
Flash Media Player および AIR Media Player
Media Player
サポートされるプロトコル
Media Player の場所
Flash Media Playback
RTMP/x、HTTP
www.adobe.com/products/flashmedia
playback/
注意:Flash Media Playback で
は、セットレベルマニフェスト
ファイルはサポートされていませ
ん。
Strobe Media Playback
RTMP/x、HTTP
osmf.org/developers.html
Flash Media Server サンプルビデ
オ Player
RTMP/x、HTTP
rootinstall/samples/videoPlayer
FMS サンプルビデオ Player は、
ラッパー内の Strobe Media
Playback です。ラッパーには、サ
ンプルが含まれ、HTML 埋め込み
Player を使用するには、
Multicast Configurator を使用
コードが生成されます。
マルチキャスト再生用にこの
してマニフェストファイルを作成
します。マニフェストファイルを
ソースとして使用します。
Flash Media Server Multicast サン RTMFP
プル Player
rootinstall/tools/multicast/multicastpl
ayer
Flash FLVPlayback コンポーネン
fl.video.FLVPlayback
RTMP/x
ト
FLV playback 2.5 は DVR をサポートしま
す。
Flex コンポーネント
RTMP/x
mx.controls.VideoDisplay
spark.components.VideoPlayer
spark.components.VideoDisplay
注意:前の表は、サポートされている Media Player の完全なリストではありません。多くのサードパーティが優れた
Media Player を開発しています。サードパーティの Media Player を使用する場合は、Media Player がサポートする機能を
サードパーティに確認してください。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Playback でのメディアの再生
Flash Media Playback は、Adobe.com でホストされるコンパイルされた SWF ファイルです。Flash Media Playback は、
Open Source Media Framework(OSMF)に基づいて構築されています。Flash Media Playback はオープンソースでは
ありませんが、完全に設定可能で、サードパーティのサービスプロバイダーから動的にロードされたプラグインをサポート
します。Flash Media Playback は、Flash Player 10.1 および AIR 2 で実行され、マルチビットレートストリーミング、
Adobe HTTP Dynamic Streaming(HTTP 経由でのストリーミング)および DVR をサポートします。
注意:Flash Media Playback では、セットレベルマニフェストファイルはサポートされていません。代わりに Strobe
Media Playback を使用します。または、マルチビットレート HTTP Dynamic Streaming を Flash Media Playback で使用
するには、Manifest.xml ファイルを使用します。
Flash Media Playback の詳細については、www.adobe.com/products/flashmediaplayback を参照してください。
1 Web ブラウザーで Flash Media Playback Setup ページ(www.osmf.org/configurator/fmp/)をロードします。
2 「Video Source」に入力します。
3 ビデオで HTTP Dynamic Streaming と Flash Access のどちらを使用するか示します。
4 DVR を使用するには、「Advanced」タブをクリックし、「Stream Type」で「DVR」を選択します。
5 埋め込みコードを更新するには、「Preview」をクリックします。
6 「Play」をクリックし、コードをテストします。
7 ユーザー自身の HTML ページで Player を使用するには、埋め込みコードをコピーしてページに貼り付けます。
Strobe Media Playback でのメディアの再生
Strobe Media Playback は、Open Source Media Framework(OSMF)に基づいて構築されています。Strobe Media
Playback は、プログレッシブダウンロード、RTMP ストリーミング、HTTP Dynamic Streaming(アダプティブビット
レートマニフェストファイルを含む)、マルチキャストストリーミングおよび Adobe® Flash® Access™ でのコンテンツ保護
をサポートします。Strobe Media Playback はユーザー自身のサーバーでホストする必要があります。
osmf.org から最新の Strobe Media Playback とそのマニュアルをダウンロードします。
Flash Media Server サンプルビデオ Player でのメディアの再生
Flash Media Server と共に rootinstall/samples/videoPlayer にインストールされるサンプル Player は、Strobe Media
Playback に基づいています。サンプル Player を使用して、ユーザー自身の HTML ページで使用する HTML 埋め込みコー
ドを生成できます。
「Stream URL」ボックスにローカル
重要:サンプルビデオ Player でサンプル F4M マニフェストファイルを再生するには、
ホストアドレスを入力します。例えば、http://localhost/vod/hds_sample1_manifest.f4m のように入力します。
HTML ファイルへの Flash Media Server サンプルビデオ Player の埋め込み
1 サンプルビデオ Player を参照し、ブラウザーでその Player を開きます。このファイルは
rootinstall¥samples¥videoPlayer¥videoplayer.html にあります。
2 再生するビデオの URL を入力し、「Stream」をクリックします。サンプル Player でビデオファイルの URL が埋め込み
コードに追加されます。
例えば、VOD サービスからのオンデマンドファイルを再生するには、rootinstall/applications/vod/media フォル
ダーにそのファイルをコピーします。URL は次のようになります。
rtmp://localhost/vod/mp4:sample1_1500kbps.f4v
最終更新日 2011/10/10
4
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
5
メディアのストリーミングの概要
詳細については、33 ページの「RTMP 経由でオンデマンドメディアファイルを再生するための URL」、22 ページの
「RTMP 経由でライブストリームをパブリッシュおよび再生するための URL」、15 ページの「HTTP 経由でライブスト
リームをパブリッシュおよび再生するための URL」、30 ページの「HTTP 経由でオンデマンドストリームを再生するた
めの URL」を参照してください。
3 このセクションは「埋め込みコード」とラベル付けされたページにあります。
4 ページの下部にあるテキストフィールドからコードをコピーします。コードは、<object> タグで開始および終了します。
5 新しい HTML ページを作成します。
6 サンプルビデオ Player からのコードを HTML ファイルの <body></body> タグ間に貼り付けます。
7 HTML ページを rootinstall/webroot フォルダーに保存します。
重要:ファイル名を「index.html」にしないでください。Flash Media Server の Start 画面は、webroot フォルダー内
の index.html ファイルです。webroot フォルダーに index.html という名前のファイルを保存すると、Start 画面が上書
きされます。
埋め込みコードは、swfs/StrobeMediaPlayback.swf で StrobeMediaPlayback.swf ファイルを検索します。
StrobeMediaPlayback.swf はデフォルトでこのフォルダーにインストールされます。別の Web サーバーから HTML
ページを配信するには、同じフォルダー構造を使用します。
8 HTML ファイルをブラウザーで開きます。
Apple Media Player
Apple HTTP Live Streaming は、ライブコンテンツとオンデマンドコンテンツの両方をサポートします。
Media Player
サポートされているストリーミングの種類
iOS 3.0 以降を実行中のデバイスには、ビルトインクライ
オンデマンドおよびライブ(HTTP)
アントソフトウェアが含まれます。
Mac OS 10.6 以降では、Safari 4.0 および QuickTime X
オンデマンドおよびライブ(HTTP)
です。
Apple Media Player の詳細については、「Apple HTTP Live Streaming Overview」を参照してください。
ライブメディアのストリーミング(HTTP)
HTTP 経由でのライブストリーミングの前提条件
HTTP Dynamic Streaming(HDS)と HTTP Live Streaming(HLS)を使用して、HTTP 経由でライブストリームをク
ライアントに配信するには、Flash Media Server 上の HTTP Live Packager サービス
(rootinstall/applications/livepkgr)にストリームをパブリッシュします。livepkgr サービスはストリームを取り込み、フ
ラグメントにパッケージ化し、フラグメントをリアルタイムで Flash クライアントと iOS クライアントに配信します。
これらのチュートリアルを実行するには、次のソフトウェアを使用します。
• Flash Media Server 4.5
• Flash Media Live Encoder
注意:Windows の Flash Media Live Encoder では、AAC エンコーディングはサポートされていません。AAC のサ
ポートを追加するには、MainConcept AAC Encoder を購入してください。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
•
(Adobe HTTP Dynamic Streaming)Flash Media Server サンプルビデオ Player(Strobe Media Playback を使用)
および Adobe Flash Player 10.1
•
(Apple HTTP Live Streaming)iOS 3.0 以降のデバイスまたは Safari 4.0 や QuickTime X を含む Mac OS 10.6
詳細については、1 ページの「サポートされているクライアント、エンコーダー、コーデックおよびファイル形式」と 3 ペー
ジの「構築済みの Media Player」を参照してください。
HTTP 経由での単一のライブストリームのパブリッシュおよび再生
1 Flash Media Server 4.5 をインストールし、Apache HTTP Server のインストールを選択します。
2 Flash Media Live Encoder をインストールし、絶対時間を使用するように設定します。
a Flash Media Live Encoder を閉じます。
b Flash Media Live Encoder の rootinstall¥conf¥config.xml ファイルをテキストエディターで開きます。
Windows のデフォルトのインストール場所は C:¥Program Files¥Adobe¥Flash Media Live Encoder 3.2 です。
Mac OS のデフォルトのインストール場所は Macintosh HD:Applications:Adobe:Flash Media Live Encoder 3.2
です。
c タグ //flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable を true に設定します。
<flashmedialiveencoder_config>
<mbrconfig>
<streamsynchronization>
<!-- "true" to enable this feature, "false" to disable.-->
<enable>true</enable>
d ファイルを保存します。
3 ライブストリームを Flash Media Server にパブリッシュするには、Flash Media Live Encoder を開始して次の操作を
行います。
a Encoding Options パネルの Preset ポップアップメニューから、「High Bandwidth (800 Kbps) — H.264.」を選択
します。「Audio Format」で、「AAC」を選択します。
注意:Windows の Flash Media Live Encoder では、AAC エンコーディングはサポートされていません。AAC の
サポートを追加するには、MainConcept AAC Encoder を購入してください。
Flash Media Live Encoder エンコーディングオプションパネル
最終更新日 2011/10/10
6
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
b 「Format」の隣のレンチをクリックして、Advanced Encoder Settings を開き、次の操作を実行します。
•
「Profile」で「Main」を選択します。
•
「Level」で「3.1」を選択します。
•
「Keyframe Frequency」で「4」または applications/livepkgr/events/_definst_/liveevent/Event.xml ファイル
の <FragmentDuration> の倍数を選択します。<FragmentDuration> のデフォルト値は 4000 ミリ秒です。
注意:プロファイルおよびレベルサポートの詳細については、2 ページの「サポートされているファイル形式と
コーデック」を参照してください。
Flash Media Live Encoder の Advanced Encoder Setting
c 「FMS URL」テキストボックスに次のように入力します。
rtmp://localhost/livepkgr
注意:RTMP プロトコルを使用して、コンテンツを Flash Media Server 上の livepkgr アプリケーションにストリー
ミングします。“localhost” に IP アドレスまたはドメイン名を代用することができます。
d 「Stream」テキストボックスに次のように入力します。
livestream?adbe-live-event=liveevent
注意:applications/livepkgr/main.asc ファイルにはこの値が必要です。
e 「Save to File」の選択を解除します。
f 「Start」をクリックします。
4 (Adobe HTTP Dynamic Streaming)Flash Media Playback でメディアを再生するには、次の操作を行います。
a Flash Media Playback を Web ブラウザーで開きます。
http://www.osmf.org/configurator/fmp/
注意:Flash Media Playback では、HTTP Dynamic Streaming をサポートするために Flash Player 10.1 が必要で
す。
b 「Video Source」に次のように入力します。
http://localhost/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
要求 URL の詳細については、15 ページの「HTTP 経由でライブストリームをパブリッシュおよび再生するための
URL」を参照してください。
c 「Are you using HTTP Streaming or Flash Access 2.0?」で「Yes」を選択します。
d 「Preview」をクリックします。「Play」をクリックします。
最終更新日 2011/10/10
7
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Playback で再生されている HDS ライブストリーム
5 (Adobe HTTP Dynamic Streaming)Strobe Media Playback でメディアを再生するには、次の操作を行います。
a Web ブラウザーで Flash Media Server のサンプルビデオ Player を開きます。
rootinstall/samples/videoPlayer/videoplayer.html を参照します。
b 「STREAM URL」に、次のように入力します。
http://localhost/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
要求 URL の詳細については、15 ページの「HTTP 経由でライブストリームをパブリッシュおよび再生するための
URL」を参照してください。
c 「LIVE」を選択して「PLAY STREAM」をクリックします。
最終更新日 2011/10/10
8
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Server サンプルビデオ Player で再生されている HDS ライブストリーム
6 (Apple HTTP Live Streaming)次の URL を使用します。
http://10.0.1.11/hls-live/livepkgr/_definst_/liveevent/livestream.m3u8
最終更新日 2011/10/10
9
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
iPad の Safari で再生されている HLS ライブストリーム
この URL を使用して様々な iOS デバイス、QuickTime および Safari を処理する場合の詳細については、「iOS
Reference Library」の「HTTP Live Streaming Overview」を参照してください。
要求 URL の詳細については、15 ページの「HTTP 経由でライブストリームをパブリッシュおよび再生するための
URL」を参照してください。
注意:“localhost” または “10.0.1.11” は、Flash Media Server をホストしているコンピューターのドメイン名または IP ア
ドレスに置き換えます。Flash Media Server ホスティングプロバイダーを使用している場合は、プロバイダーからこの値が
提供されます。
関連項目
106 ページの「ストリーミングメディアの問題のトラブルシューティング」
63 ページの「HTTP Dynamic Streaming および HTTP Live Streaming の設定」
82 ページの「ディスク管理」
68 ページの「コンテンツストレージ(HDS および HLS)」
HTTP 経由でのライブマルチビットレートストリームのパブリッシュおよび再生
1 Flash Media Server 4.5 をインストールし、Apache HTTP Server のインストールを選択します。
2 Flash Media Live Encoder をインストールし、絶対時間を使用するように設定します。
a Flash Media Live Encoder を閉じます。
b Flash Media Live Encoder の rootinstall¥Conf¥config.xml ファイルをテキストエディターで開きます。
最終更新日 2011/10/10
10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
11
メディアのストリーミングの概要
c タグ //flashmedialiveencoder_config/mbrconfig/streamsynchronization/enable を true に設定します。
<flashmedialiveencoder_config>
<mbrconfig>
<streamsynchronization>
<!-- "true" to enable this feature, "false" to disable.-->
<enable>true</enable>
d ファイルを保存します。
3 rootinstall/applications/livepkgr/events/_definst_/liveevent を参照し、次の操作を行います。
• Event.xml ファイルを次のように編集します。
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>16000</SegmentDuration>
<DiskManagementDuration>3</DiskManagementDuration>
</Recording>
</Event>
• Manifest.xml ファイルを liveevent フォルダーから削除するか、名前を変更します。
4 (Adobe HTTP Dyanmic Streaming)マルチビットレートストリーミングでは、Flash Media Player と AIR Media
Player で、各ライブストリームの場所とビットレートを含む F4M マニフェストファイルを要求します。このタイプの
F4M ファイルは、セットレベルマニフェスト と呼ばれます。セットレベルマニフェストを作成するには、次の操作を行
います。
a ブラウザーで rootinstall/tools/f4mconfig/configurator/f4mconfig.html を開きます。
b f4m ファイルタイプを選択します。
c ストリーム URI には、ベース URI に対する絶対パスまたは相対パスのいずれでも指定できます。ベース URI に次の
ように入力します。
http://localhost/hds-live/livepkgr/_definst_/liveevent
d 各ストリームについて次の情報を入力し、「Add」をクリックします。
ストリーム URI
ビットレート
livestream1.f4m
150
livestream2.f4m
500
livestream3.f4m
700
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Set-level F4M/M3U8 File Generator のセットレベル F4M ファイル
e ファイルをプレビューするには、「View Manifest」をクリックします。マニフェストファイルは次のようになりま
す。
<manifest xmlns="http://ns.adobe.com/f4m/2.0">
<baseURL>http://localhost/hds-live/livepkgr/_definst_/liveevent/</baseURL>
<media href="livestream1.f4m" bitrate="150"/>
<media href="livestream2.f4m" bitrate="500"/>
<media href="livestream3.f4m" bitrate="700"/>
</manifest>
f 「Save Manifest」をクリックして、ファイルを liveevent.f4m という名前で rootinstall/webroot に保存します。
Media Player で、Web サーバーからこのファイルを要求します。このチュートリアルでは、このファイルを
rootinstall/webroot に保存しますが、Web サーバー上のどの場所からでもこのファイルを配信できます。このファ
イルは、Flash Media Server に存在する必要はありません。このファイルには名前を付けることもできます。
5
(Apple HTTP Live Streaming)iOS デバイスで、各ストリームの場所、ビットレートおよびコーデック(オプショ
ン)を含む M3U8 バリアント再生リストファイルを要求します。M3U8 ファイルを作成するには、次の操作を行いま
す。
a Set-level F4M/M3U8 File Generator ツールが開いていない場合は、
rootinstall/tools/f4mconfig/configurator/f4mconfig.html をダブルクリックしてブラウザーで開きます。
b 「m3u8」を選択します。
c 各ストリームのストリーム URI とビットレートを入力します。ストリーム URI には、絶対パスまたは相対パスのい
ずれでも指定できます。相対パスの場合は、m3u8 ファイルに対する相対パスになります。
注意:M3U8 ファイルを生成している場合は、ベース URI を使用できません。
このチュートリアルでは、次のストリーム URI 設定を使用します。
最終更新日 2011/10/10
12
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
13
メディアのストリーミングの概要
ストリーム URI
ビットレート
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8
150
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8
500
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8
700
Set-level F4M/M3U8 File Generator のセットレベル M3U8 ファイル
d m3u8 ファイルの場合は、各ストリームにオプションでコーデックを追加できます。
1 つのストリームがオーディオのみの場合は、オーディオコーデックを指定します。マニフェスト内のその他のスト
リームにはオーディオとビデオのコーデックを指定します。15 ページの「オーディオのみのストリームのパブリッ
シュ(HLS)」を参照してください。
e ファイルを表示するには、「View Manifest」をクリックします。m3u8 ファイルは次のようになります。
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8
f ファイルを liveevent.m3u8 という名前でフォルダー rootinstall/webroot に保存します。
Media Player で、Web サーバーからこのファイルを要求します。このチュートリアルでは、このファイルを
rootinstall/webroot に保存しますが、Web サーバー上のどの場所からでもこのファイルを配信できます。このファ
イルは、Flash Media Server に存在する必要はありません。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
6 ライブストリームを Flash Media Server にパブリッシュするには、Flash Media Live Encoder を開始して次の操作を
行います。
a Encoding Options パネルの Preset ポップアップメニューから、「Multi Bitrate - 3 Streams (1500 Kbps) - H.264」
を選択します。「Audio Format AAC」を選択します。
注意:Windows の Flash Media Live Encoder では、AAC エンコーディングはサポートされていません。AAC の
サポートを追加するには、MainConcept AAC Encoder を購入してください。
b 「Format」の隣のレンチをクリックして、Advanced Encoder Settings を開きます。「Keyframe frequency」で「4
seconds」を選択します。
注意:この値は、applications/livepkgr/events/_definst_/liveevent/Event.xml ファイルの <FragmentDuration> の
値と一致します。<FragmentDuration> の値はミリ秒単位です。
c 「Bit Rate」で「150」、「500」および「700」を選択します。
d 「FMS URL」テキストボックスに次のように入力します。
rtmp://localhost/livepkgr
注意:このアプリケーションは Flash Media Server と共にインストールされ、main.asc ファイルおよびライブ
HTTP Dynamic Streaming 用の設定ファイルを含みます。
e 「Stream」テキストボックスに次のように入力します。
livestream%i?adbe-live-event=liveevent
注意:applications/livepkgr/main.asc ファイルにはこの値が必要です。Flash Media Live Encoder では変数 %i を
使用して、複数のストリーム名(livestream1、livestream2、livestream3 など)を作成します。別のエンコーダー
を使用するには、livestream1?adbe-live-event=liveevent、livestream2?adbe-live-event=liveevent などの独自
の一意のストリーム名を指定します。
f 「Save to File」の選択を解除します。
g 「Start」をクリックします。
7 (Adobe HTTP Dynamic Streaming)Flash Media Playback では、セットレベルマニフェストファイルはサポートさ
れていません。メディアを再生するには、Strobe Media Playback を使用します。Strobe Media Playback は、Flash
Media Server と共にインストールされるサンプルビデオ Player で使用されます。
a videoPlayer ディレクトリを rootinstall/samples/videoPlayer から rootinstall/webroot にコピーします。
b Web ブラウザーで次のサンプル Player を参照します。
http://localhost/videoPlayer/videoplayer.html
c 「Video Source」に次のように入力します。
http://localhost/liveevent.f4m
8 (Apple HTTP Live Streaming)iOS で、Safari に次の URL を入力します。
http://localhost/liveevent.m3u8
この URL を使用して様々な iOS デバイス、QuickTime および Safari を処理する場合の詳細については、「iOS
Reference Library」の「HTTP Live Streaming Overview」を参照してください。
注意:localhost は、Flash Media Server をホストしているコンピューターのドメイン名または IP アドレスに置き換えるこ
とができます。Flash Media Server ホスティングプロバイダーを使用している場合は、プロバイダーからこの値が提供され
ます。
関連項目
45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」
最終更新日 2011/10/10
14
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
55 ページの「Protected HTTP Live Streaming(PHLS)の設定」
75 ページの「マルチビットレートストリーミング用のセットレベル F4M/M3U8 ファイルの設定」
オーディオのみのストリームのパブリッシュ(HLS)
セルラーネットワーク経由でストリームを配信するには、ストリームの 1 つがオーディオのみである必要があります。詳細
については、「HTTP Live Streaming Overview」を参照してください。
オーディオのみのストリームをパブリッシュするには、Flash Media Encoder Stream フィールドに次を入力します。
livestream%i?adbe-live-event=liveevent&adbe-audio-stream-name=livestream1_audio_only&adbe-audiostream-src=livestream1
エンコーダーが、各ストリームに個別のクエリ文字列を指定する場合は、次に示すように、変数 %i の代わりに個別のスト
リーム名を使用します。
livestream1?adbe-live-event=liveevent&adbe-audio-stream-name=livestream1_audio_only
livestream2?adbe-live-event=liveevent&adbe-audio-stream-name=livestream2_audio_only
注意:値はイタリックで使用することも独自の値で置換することもできます。ただし、デフォルトのライブイベント名は
「liveevent」です。
パラメーター
説明
adbe-audio-stream-name
オーディオのみのストリームの名前。
adbe-audio-stream-src
オーディオのみのストリームに対してオーディオを抽出するストリームの名前。こ
のパラメーターを指定しない場合は、adbe-audio-stream-name パラメーターが指
定されたストリームが使用されます。
オーディオのみのストリームの使用時にセットレベルのバリアント再生リストを生成するには、オーディオのみのストリー
ムのオーディオコーデックを指定します。オーディオとビデオを含むストリームのオーディオとビデオのコーデックを指定
します。Set-level F4M/M3U8 File Generator の使用方法の詳細については、10 ページの「HTTP 経由でのライブマルチ
ビットレートストリームのパブリッシュおよび再生」を参照してください。
HTTP 経由でライブストリームをパブリッシュおよび再生するための URL
重要:HDS 要求 URL の形式が Flash Media Server 4.5 で変更されました。Apache httpd.conf ファイルは、4.0 形式の要
求を 4.5 形式にリダイレクトします。パス /live/events/livepkgr/events は、パス /hds-live/livepkgr にリダイレクトされま
す。
次の URL を使用して、HTTP 経由でのストリーミング用に単一のライブストリームを Flash Media Server にパブリッシュ
します。
rtmp://fms-ip-or-dns/livepkgr/livestream?adbe-live-event=liveevent
次の URL を使用して、アダプティブビットレートストリーミング用に複数のライブストリームを Flash Media Server にパ
ブリッシュします。
rtmp://fms-ip-or-dns/livepkgr/livestream%i?adbe-live-event=liveevent
注意:RTMP 経由でストリームをパブリッシュしてください。クライアントでは HTTP 経由でストリームが再生されます。
次の URL を使用して、ライブストリームを HTTP 経由で再生します。
最終更新日 2011/10/10
15
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Client
単一ストリームまた
はアダプティブビッ
トレート
要求 URL
Adobe HDS
単一ストリーム
http://<fms-dns-or-ip>/hdslive/livepkgr/<instname>/<eventname>/<streamname>.f4m
Apple HLS
単一ストリーム
http://<fms-dns-or-ip>/hlslive/livepkgr/<instname>/<eventname>/<streamname>.m3u8
Adobe HDS
アダプティブビット
レート
Media Player は、次に示すセットレベルマニフェストファイルを要求します。
http://<webserver-dns-or-ip>/<set-level-manifest>.f4m
セットレベルマニフェストファイルには、各ライブストリームの URL が次の
形式で含まれます。
http://<fms-dns-or-ip>/hdslive/livepkgr/<instname>/<eventname>/<streamname>.f4m
Apple HLS
アダプティブビット
レート
Media Player は、次に示すセットレベルのバリアント再生リストファイルを
要求します。
http://<webserver-dns-or-ip>/<set-level-variant-playlist>.m3u8
セットレベルのバリアント再生リストファイルには、各ライブストリームの
URL が次の形式で含まれます。
http://<fms-dns-or-ip>/hlslive/livepkgr/<instname>/<eventname>/<streamname>.m3u8
重要: HTTP 経由でストリーミングメディアを再生するには、Media Player でマニフェストファイル(F4M または
M3U8)を要求します。サーバーでリアルタイムでマニフェストファイルが生成されます。ファイルはディスクには書き込
まれないので、サーバーでこのファイルを表示することはできません。
パス /hds-live は、Apache httpd.conf ファイルの <Location> ディレクティブであり、Adobe HTTP Dynamic Streaming
(HDS)のコンテンツをパッケージ化するようにサーバーに伝えます。
パス /hls-live は、Apache httpd.conf ファイルの <Location> ディレクティブであり、Apple HTTP Live Streaming
(HLS)のコンテンツをパッケージ化するようにサーバーに伝えます。
アダプティブストリーミングでは、クライアントでセットレベルマニフェストを要求します。HDS の場合、このファイル
は .f4m ファイルになります。HLS の場合、このファイルは .m3u8 ファイルになります。セットレベルマニフェストは、ど
の Web サーバーにも置くことができます。単一セットのライブストリームに対し、複数のセットレベルマニフェストファ
イルを作成できます。
セットレベルマニフェストには、各ライブストリームの F4M マニフェストファイル(HDS)と M3U8 バリアント再生リ
スト(HLS)へのパスが含まれています。HTTP のストリームをパッケージ化するようにサーバーに伝えるため、パスは、
/hds-live または /hls-live で始まる必要があります。
注意:セットレベルマニフェストを要求する URL に /hds-live または /hls-live を含めないでください。
<Location> ディレクティブ設定およびコンテンツの場所は Apache httpd.conf ファイルで設定できます。詳細については、
「コンテンツストレージ(HDS および HLS)」を参照してください。
Flash Media Server 4.0 と Flash Media Server 4.5 での HTTP ライブ URL の
相違点
HTTP 経由でライブストリームを再生するデフォルトの URL が Flash Media Server 4.5 で変更されました。Flash Media
Server 4.0 では、ライブストリームを再生する URL は http://<servername>/live/events/livepkgr/events/<eventname>
でした。Flash Media Server 4.5 Apache httpd.conf ファイルは、301 リダイレクトを使用して、4.0 URL を使用する要求
を 4.5 URL にリダイレクトします。
最終更新日 2011/10/10
16
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
詳細については、66 ページの「Flash Media Server 4.0 と Flash Media Server 4.5 での HTTP Dynamic Streaming の相
違点」を参照してください。
DVR の設定 (HDS)
サーバーでの DVR の設定
1 ブラウザーで、次に示す Set-level F4M/M3U8 File Generator を開きます。
rootinstall/tools/f4mconfig/configurator/f4mconfig.html
2 Stream URI と Bitrate の値を入力するのに加え、DVR Window Duration の値を入力します。この値は、ライブポイ
ントの前に、可視コンテンツの量を分単位で設定します。
次のガイドラインを使用して、次の Window Duration を設定します。
• Window Duration を 0 より大きい値に設定します。
Window Duration を 0 に設定すると、ユーザー操作性を低下させる可能性があります。
• -1 の値は、ライブポイントの後ろの利用可能な記録済みコンテンツが無制限であることを示しています。
3 Event.xml ファイルで、DiskManagementDuration エレメントを設定して、サーバーがキャッシュするコンテンツ量を指
定します。デフォルトで、サーバーは 3 時間分のコンテンツをキャッシュします。次の式を使用して、
DiskManagementDuration の値に関連させて Window Duration の値を決定します。
HDSWindowDuration <= (DiskManagementDuration - SegmentDuration)
ディスク管理の詳細については、82 ページの「ディスク管理」を参照してください。
DVR ストリームのパブリッシュ
Flash Media Live Encoder から DVR ストリームをパブリッシュするために、「Record」をクリックしたり「DVR Auto
Record」をチェックしたりしないでください。ライブストリームをパブリッシュするときにのみストリームをパブリッシュ
してください。
DVR ストリームの再生
Strobe Media Playback は、デフォルトで DVR ストリームをサポートします。
注意:Flash Media Playback では、セットレベルマニフェストファイルはサポートされていません。Flash Media
Playback を使用するには、Manifest.xml ファイルを設定します。96 ページの「Manifest.xml」を参照してください。
スライディングウィンドウの設定(HLS)
サーバーでのスライディングウィンドウの設定
スライディングウィンドウは、Apple HTTP Live Streaming のストリームのシーク可能な部分です。クライアントは、ス
ライディングウィンドウの長さを越えてシークすることはできません。HTTP Live Streaming クライアントは、スライ
ディングウィンドウを使用してシークバーを設定します。
次のレベルでスライディングウィンドウを設定します。
最終更新日 2011/10/10
17
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
18
メディアのストリーミングの概要
レベル
設定ファイル
Server
rootinstall/Apache2.2/conf/httpd.conf
Application
rootinstall/applications/livepkgr/Application.xml
livepkgr アプリケーションは HTTP ストリーミング用のデフォルトアプリケーションです。
このアプリケーションは、複製して名前を変更できます。
イベント
rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml
liveevent フォルダーはデフォルトのライブイベントです。1 つのアプリケーション内に複
数のライブイベントを作成できます。
次のパラメーターを使用します。
パラメーター
設定ファイル
説明
HLSSlidingWindowLength
httpd.conf
スライディングウィンドウでのシークに使用
できる TS ファイルの数。
SlidingWindowLength
Application.xml と Event.xml
スライディングウィンドウでのシークに使用
できる TS ファイルの数。
HLSMediaFileDuration
httpd.conf
ミリ秒単位の TS ファイルの長さ。
MediaFileDuration
Application.xml と Event.xml
ミリ秒単位の TS ファイルの長さ。
スライディングウィンドウ内の時間は次のとおりです。
HLSSlidingWindowLength * HLSMediaFileDuration
SlidingWindowLength * MediaFileDuration
デフォルトでは、HLSSlidingWindowLength は 6 秒に、HLSMediaFileDuration は 8000 ミリ秒に設定されます。そのため、デ
フォルトでは、48 秒幅のウィンドウ内ですべての HLS ライブイベントをシークできます。
スライディングウィンドウは、ライブストリームの現在の位置に対応します。例えば、スライディングウィンドウが 15 分
のデータを保持するように設定されていて、イベントが時間 0 で開始する場合、ライブストリームが 30 のとき、最後のシー
ク可能位置は 15 になります。
ライブイベント全体をシーク可能にするには、SlidingWindowLength または HLSSlidingWindowLength を 0 に設定します。
ただし、これによってパフォーマンスに影響が出る場合があります。
スライディングウィンドウはディスクにキャッシュされるコンテンツの継続時間より小さくなるように設定します。
Event.xml ファイルでは、DiskManagementDuration エレメントはサーバーがキャッシュするコンテンツ量を指定します。
デフォルトで、サーバーは 3 時間分のコンテンツをキャッシュします。HLS スライディングウィンドウのサイズは次のよう
にする必要があります。
HLSSlidingWindow <= (DiskManagementDuration - SegmentDuration)
ディスク管理の詳細については、82 ページの「ディスク管理」を参照してください。
イベントレベルでのスライディングウィンドウの設定
次の Event.xml ファイルは、単一の HLS ライブイベントに対し、1 時間のスライディングウィンドウを作成します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>400000</SegmentDuration>
<DiskManagementDuration>3</DiskManagementDuration>
</Recording>
<HLS>
<MediaFileDuration>8000</MediaFileDuration>
<SlidingWindowLength>450</SlidingWindowLength>
</HLS>
</Event>
アプリケーションレベルでのスライディングウィンドウの設定
次の Application.xml ファイルは、livepkgr アプリケーション内のすべての HLS ライブイベントに対し、1 時間のスライ
ディングウィンドウを作成します。
<Application>
<StreamManager>
<Live>
<AssumeAbsoluteTime>true</AssumeAbsoluteTime>
</Live>
</StreamManager>
<HLS>
<MediaFileDuration>8000</MediaFileDuration>
<SlidingWindowLength>450</SlidingWindowLength>
</HLS>
</Application>
livepkgr アプリケーションを再ロードします。
サーバーレベルでのスライディングウィンドウの設定
次の Apache 設定は、HLSSlidingWindowLength を 450 に設定します。この設定は、サーバー上のすべての HLS ライブイベ
ントに対し、1 時間のスライディングウィンドウを作成します。
...
<IfModule hlshttp_module>
<Location /hls-live>
HLSHttpStreamingEnabled true
HttpStreamingLiveEventPath "../applications"
HttpStreamingContentPath "../applications"
HLSMediaFileDuration 8000
HLSSlidingWindowLength 450
HLSFmsDirPath ".."
HLSM3U8MaxAge 2
HLSTSSegmentMaxAge -1
Options -Indexes FollowSymLinks
</Location>
Apache HTTP Server を再起動します。
スライディングウィンドウによるストリームのパブリッシュ
スライディングウィンドウを使用してストリームをパブリッシュするようにエンコーダーを設定する必要はありません。
スライディングウィンドウによるストリームの再生
HTTP Live Streaming をサポートするデバイスは、デフォルトでスライディングウィンドウ機能をサポートします。
最終更新日 2011/10/10
19
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
livepkgr サービスの複製
サーバーは livepkgr サービスのインスタンスを無制限の数サポートしています。
❖ rootinstall/applications/livepkgr フォルダーを applications フォルダー内で複製し、livepkgr2 などの新しい名前を付
けます。この場合、新しい livepkgr サービスは rootinstall/applications/livepkgr2 に格納されます。
livepkgr サービスのインスタンスの数は、必要に応じていくつでも作成することができます。
livepkgr サービスでのサーバーサイドコードの変更
注意:Flash Media Streaming Server のサーバーサイドコードを記述することはできません。
❖ rootinstall/applications/livepkgr/main.far ファイルを削除し、
rootinstall/samples/applications/livepkgr/main.asc ファイルに置き換えます。
ライブメディアのストリーミング(RTMP)
チュートリアル:ライブメディアのストリーミング(RTMP)
このチュートリアルを実行するには、次のソフトウェアをインストールしてください。
• Flash Media Live Encoder
Flash Media Live Encoder は、ライブオーディオやビデオをキャプチャしてエンコードし、Flash Media Server にスト
リーミングします。Flash Media Live Encoder は無償であるため、最新バージョンをダウンロードすることをお勧めし
ます。
• Flash Media Server
ライブメディアのストリーミングは、無償のデベロッパー版を含め Flash Media Server のどのエディションでも実行で
きます。サーバーのインストールの詳細については、「サーバーのインストール」を参照してください。
• Flash Player
このチュートリアルでは、Flash Player 10 が必要なビデオ Player を使用します。
詳細については、1 ページの「サポートされているクライアント、エンコーダー、コーデックおよびファイル形式」と 3 ペー
ジの「構築済みの Media Player」を参照してください。
Flash Media Server へのライブストリームのパブリッシュ
1 コンピューターにカメラを接続します。
2 Flash Media Live Encoder を開き、Encoding Options パネルで次の操作を行います。
a Preset メニューで、「High Bandwidth (300 Kbps) - H.264」を選択します。
Preset メニューからマルチビットレートでない単一ストリームのオプションのいずれかを選択できます。パネルの左
側にある情報は、プリセットを選択したときに入力されます。
b 「Stream to Flash Media Server」を選択します。
c 「FMS URL」に、rtmp://localhost/live と入力します。
Flash Media Live Encoder および Flash Media Server が同じコンピューター上にある場合は、テストに localhost
を使用します。本番環境では、Flash Media Server をホストするコンピューターのドメイン名または IP アドレス
(rtmp://fms.mycompany.com/live など)を入力します。
最終更新日 2011/10/10
20
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Server ホスティングプロバイダーを使用している場合は、プロバイダーからサーバーのドメイン名また
は IP アドレスが提供されます。
ライブサービスを複製したり、名前を変更したりしない限り、FMS URL には live という名前を使用する必要があり
ます。ライブサービスは、rootinstall/applications/live にインストールされている Flash Media Server の構築済み
アプリケーションです。詳細については、22 ページの「ライブサービスの複製」を参照してください。
d 「Stream」に、livestream と入力します。
e ハードドライブにストリームの記録を保存するには、「Browse」をクリックし、場所を選択します。H.264 プリセッ
トを選択した場合は、.f4v ファイル名拡張子を使用します。VP6 プリセットを選択した場合は、.flv ファイル名拡張
子を使用します。
サーバーではファイルは記録されません。ファイルを記録しているのは、Flash Media Live Encoder です。ライブ
イベントが終了したときにファイルをオンデマンドで配信するには、ファイルをサーバーにコピーします。詳細につ
いては、31 ページの「オンデマンドメディアのストリーミング(RTMP)」を参照してください。
Flash Media Live Encoder により記録された F4V ファイルをサーバーからストリーミングせずに再生するには、
F4V Flattener ツール を使用してファイルをフラット化します。FLV ファイルはフラット化しなくても再生できま
す。
f 「Start」をクリックし、サーバーに接続してストリーミングを開始します。
Flash Media Server サンプル Player を使用したライブストリームの再生
1 ブラウザーでサンプルビデオ Player を開くには、rootInstall/samples/videoPlayer/videoplayer.html ファイルをダブ
ルクリックします。
注意:rootinstall を Flash Media Server のインストールディレクトリに置き換えます。
2 サンプルビデオ Player で、次のいずれかを行います。
•
ビデオの一覧で、「livestream」をクリックします。
• rtmp://localhost/live/livestream を入力し、「LIVE」チェックボックスをチェックして、「PLAY STREAM」をク
リックします。
Media Player が Flash Media Server と同じコンピューター上にない場合は、localhost を、Flash Media Server を
ホストしているコンピューターのドメイン名または IP アドレスに置き換えます。
この URL を使用して、Flash Media Playback および Strobe Media Playback などの互換性のあるビデオ Player か
らこのストリームを再生します。サンプルビデオ Player および他のビデオ Player の詳細については、3 ページの「構
築済みの Media Player」を参照してください。
Flash Media Playback を使用したライブストリームの再生
1 Web ブラウザーで Flash Media Playback Setup ページ(www.osmf.org/configurator/fmp/)をロードします。
2 「Video Source」に次のように入力します。
rtmp://localhost/live/livestream
localhost は、サーバーのドメイン名または IP アドレスに置き換えることができます。
3 埋め込みコードを更新するには、「Preview」をクリックします。
4 「Play」をクリックし、コードをテストします。
5 ユーザー自身の HTML ページで Player を使用するには、埋め込みコードをコピーしてページに貼り付けます。Flash
Media Playback は、アドビ システムズ社でホストされるコンパイルされた SWF ファイルです。
最終更新日 2011/10/10
21
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
関連項目
106 ページの「ストリーミングメディアの問題のトラブルシューティング」
RTMP 経由でライブストリームをパブリッシュおよび再生するための URL
次の値を使用して、RTMP 経由でのストリーミング用に単一のライブストリームを Flash Media Server にパブリッシュし
ます。
FMS URL:rtmp://fms-ip-or-dns/live
ストリーム:streamname
次の URL を使用して、ライブストリームを再生します。
rtmp://fms-ip-or-dns/live/streamname
ライブサービスの複製
ライブサービスのインスタンスの数は、必要に応じていくつでも作成することができます。
1 rootinstall/applications フォルダーに例えば rootinstall/applications/live2 などのフォルダーを作成します。
2 main.far、Application.xml、allowedHTMLdomains.txt および allowedSWFdomains.txt ファイルを
rootinstall/applications/live フォルダーから live2 フォルダーにコピーします。
3 rootinstall/conf にある fms.ini ファイルを開き、新しいサービスのコンテンツパスを設定するためパラメーターを設定
します。例えば、次のようにします。
LIVE2_DIR = C:\Program Files\Adobe\Flash Media Server 4.5\applications\live2
4 rootinstall/applications/live2 フォルダーの Application.xml ファイルを開き、仮想ディレクトリを次のように編集し
ます。
<Streams>/;${LIVE2_DIR}</Streams>
5 サーバーを再起動します。
6 これでクライアントは、次の URL から、新しいパブリッシュポイントに接続できるようになります。
rtmp://fms-ip-or-dns/live2
ライブサービスでのサーバーサイドコードの変更
注意:Flash Media Streaming Server ではライブサービスのサーバーサイドコードを変更することはできません。
❖ rootinstall/applications/live/main.far ファイルを削除し、rootinstall/samples/applications/live/main.asc ファイル
に置き換えます。
ライブサービスの無効化
❖ ライブサービスのフォルダーを、アプリケーションフォルダーから他の場所に移動します。
最終更新日 2011/10/10
22
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
オンデマンドメディアのストリーミング(HTTP)
オンデマンドメディアをストリーミングするための前提条件(HTTP)
これらのチュートリアルを実行するには、次のソフトウェアを使用します。
• Flash Media Server 4.5
•
(Adobe HTTP Dynamic Streaming)Flash Media Server sample video player(Strobe Media Playback を使用 ) お
よび Adobe Flash Player 10.1
•
(Apple HTTP Live Streaming)iOS 3.0 以降のデバイスまたは Safari 4.0 や QuickTime X を含む Mac OS 10.6
詳細については、1 ページの「サポートされているクライアント、エンコーダー、コーデックおよびファイル形式」と 3 ペー
ジの「構築済みの Media Player」を参照してください。
HTTP 経由での単一のオンデマンドメディアファイルの再生
1 Flash Media Server 4.5 をインストールし、Apache HTTP Server のインストールを選択します。
2 F4V/MP4 ファイルを次の場所にコピーします。
rootinstall/webroot/vod
注意:rootinstall を Flash Media Server インストールフォルダーに置き換えます。
このチュートリアルは、Flash Media Server と共に rootinstall/webroot/vod フォルダーにインストールされるファイ
ル sample2_1000kbps.f4v を使用します。
3 (Adobe HTTP Dynamic Streaming)Flash Media Playback でメディアを再生するには、次の操作を行います。
a Flash Media Playback を Web ブラウザーで開きます。
http://www.osmf.org/configurator/fmp/
注意:Flash Media Playback では、HTTP Dynamic Streaming をサポートするために Flash Player 10.1 が必要で
す。コンピューターにインストールされている Flash Player のバージョンを確認するには、「Adobe Flash Player」
を参照してください。
b 「Video Source」に次のように入力します。
http://localhost/hds-vod/sample2_1000kbps.f4v.f4m
最終更新日 2011/10/10
23
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Playback の HDS オンデマンドストリーミング
メディアファイルは /webroot/vod ディレクトリにありますが、URL 要求は /hds-vod です。パス /hds-vod は、
Apache httpd.conf ファイル内の <Location> ディレクティブです。要求 URL が /hds-vod で始まる場合、サーバー
は /webroot/vod フォルダー内のメディアを探し、HTTP Dynamic Streaming 用にパッケージ化します。要求 URL
構文の詳細については、30 ページの「HTTP 経由でオンデマンドストリームを再生するための URL」を参照してく
ださい。
c 「Are you using HTTP Streaming or Flash Access 2.0?」で「Yes」を選択します。
d 「Poster frame file location」テキストボックスからテキストを消去します。
e 埋め込みコードを更新するには、「Preview」をクリックします。
f 「Play」ボタンをクリックし、コードをテストします。
g ユーザー自身の HTML ページで Player を使用するには、埋め込みコードをコピーし、ページの本文に貼り付けま
す。Flash Media Playback は、アドビ システムズ社でホストされるコンパイルされた SWF ファイルです。詳細につ
いては、「Flash Media Playback」を参照してください。
4 (Adobe HTTP Dynamic Streaming)Strobe Media Playback でメディアを再生するには、次の操作を行います。
a Web ブラウザーで Flash Media Server のサンプルビデオ Player を開きます。
rootinstall/samples/videoPlayer/videoplayer.html をダブルクリックします。
b 「STREAM URL」に、次のように入力します。
http://localhost/hds-vod/sample2_1000kbps.f4v.f4m
c 「VOD」を選択して「PLAY STREAM」をクリックします。
d ユーザー自身の HTML ページで Player を使用するには、埋め込みコードをコピーし、ページの本文に貼り付けま
す。
最終更新日 2011/10/10
24
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Server サンプルビデオ Player での HDS オンデマンドストリーミング
5 (Apple HTTP Live Streaming)iOS で、Safari アドレスバーに次の URL を入力します。
http://10.0.1.11/hls-vod/sample2_1000kbps.f4v.m3u8
最終更新日 2011/10/10
25
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
iPad の Safari での HLS オンデマンドストリーミング
Mac OS 10.6 の Safari でテストするには、次の HTML コードを使用します。
<video src="http://10.0.1.11/hls-vod/sample2_1000kbps.f4v.m3u8" controls="controls"></video>
注意:“localhost” と “10.0.1.11” は、Flash Media Server をホストしているコンピューターのドメイン名または IP アドレ
スに置き換えることができます。Flash Media Server ホスティングプロバイダーを使用している場合は、プロバイダーから
この値が提供されます。
関連項目
106 ページの「ストリーミングメディアの問題のトラブルシューティング」
2 ページの「サポートされているファイル形式とコーデック」
68 ページの「コンテンツストレージ(HDS および HLS)」
63 ページの「HTTP Dynamic Streaming および HTTP Live Streaming の設定」
HTTP 経由でのオンデマンドマルチビットレートメディアファイルの再生
1 Flash Media Server 4.5 をインストールし、Apache HTTP Server のインストールを選択します。
2 次のいずれかの操作を行います。
• 3 つの異なるビットレートで F4V/MP4 ファイルをエンコードします。
• Flash Media Server と共に rootinstall/webroot/vod フォルダーにインストールされるマルチビットレートサンプ
ルファイルを使用します。
最終更新日 2011/10/10
26
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
27
メディアのストリーミングの概要
このチュートリアルでは、webroot/vod フォルダーにインストールされた次のファイルを使用します。
rootinstall/webroot/vod/sample1_150kbps.f4v
rootinstall/webroot/vod/sample1_700kbps.f4v
rootinstall/webroot/vod/sample1_1500kbps.f4v
3 (Adobe HTTP Dyanmic Streaming)マルチビットレートのコンテンツをストリーミングするために、Flash Media
Player と AIR Media Player は、セットレベルマニフェストファイルを要求します。これは、各ストリームの場所とビッ
トレートを含む .f4m ファイルです。セットレベル F4M ファイルを作成するには、次の操作を行います。
a ブラウザーで rootinstall/Flash Media Server/tools/f4mconfig/configurator/f4mconfig.html を開きます。
b f4m ファイルタイプを選択します。
Set-level F4M/M3U8 File Generator
c ストリーム URI には、ベース URI に対する絶対パスまたは相対パスのいずれでも指定できます。ベース URI に
次のように入力します。
http://localhost/hds-vod/
d 各ストリームについて次の情報を入力し、「Add」をクリックします。
ストリーム URI
ビットレート
sample1_150kbps.f4v.f4m
150
sample1_700kbps.f4v.f4m
700
sample1_1500kbps.f4v.f4m
1500
e ファイルを表示するには、「View Manifest」をクリックします。マニフェストファイルは次のようになります。
<manifest xmlns="http://ns.adobe.com/f4m/2.0">
<media href="http://localhost/hds-vod/sample1_150kbps.f4v.f4m" bitrate="150"/>
<media href="http://localhost/hds-vod/sample1_700kbps.f4v.f4m" bitrate="700"/>
<media href="http://localhost/hds-vod/sample1_1500kbps.f4v.f4m" bitrate="1500"/>
</manifest>
f 「Save Manifest」をクリックして、ファイルを sample1.f4m という名前で rootinstall/webroot に保存します。
Media Player で、Web サーバーからこのファイルを要求します。このチュートリアルでは、このファイルを
rootinstall/webroot に保存しますが、Web サーバー上のどの場所からでもこのファイルを配信できます。この
ファイルは、Flash Media Server に存在する必要はありません。このファイルには名前を付けることができます。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
28
メディアのストリーミングの概要
4
(Apple HTTP Live Streaming)マルチビットレートストリーミングでは、iOS デバイスで、各ストリームの場所、
ビットレートおよびコーデック(オプション)を含むセットレベル M3U8 バリアント再生リストファイルを要求します。
セットレベル M3U8 ファイルを作成するには、次の操作を行います。
a File Generator ツールが開いていない場合は、rootinstall/Flash Media
Server/tools/f4mconfig/configurator/f4mconfig.html をダブルクリックしてブラウザーで開きます。
b m3u8 ファイルタイプを選択します。
c 各ストリームのストリーム URI、ビットレート、プログラム ID および解像度とコーデック(オプション)を入力し
ます。ストリーム URI には、絶対パスまたは相対パスのいずれでも指定できます。相対パスの場合は、m3u8 ファイ
ルに対する相対パスになります。プログラム ID は、各ストリームで同一である必要があります。
注意:サポートされているコーデックの詳細については、「Apple HTTP Live Streaming Overview」を参照してく
ださい。
このチュートリアルでは、次のストリーム URI 設定を使用します。
ストリーム URI
ビットレート
http://10.0.1.11/hls-vod/sample1_150kbps.f4v
150
http://10.0.1.11/hls-vod/sample1_700kbps.f4v
700
http://10.0.1.11/hls-vod/sample1_1500kbps.f4v
1500
Set-level F4M/M3U8 File Generator のセットレベル M3U8 ファイル
d ファイルを表示するには、「View Manifest」をクリックします。m3u8 ファイルは次のようになります。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000
http://10.0.1.11/hls-vod/sample1_150kbps.f4v.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
http://10.0.1.11/hls-vod/sample1_700kbps.f4v.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000
http://10.0.1.11/hls-vod/sample1_1500kbps.f4v.m3u8
e 「Save Manifest」をクリックし、ファイルを sample1.m3u8 という名前でフォルダー rootinstall/webroot に保存
します。
Media Player で、Web サーバーからこのファイルを要求します。このチュートリアルでは、このファイルを
rootinstall/webroot に保存しますが、Web サーバー上のどの場所からでもこのファイルを配信できます。このファ
イルは、Flash Media Server に存在する必要はありません。
5 (Adobe HTTP Dynamic Streaming)Flash Media Playback では、セットレベルマニフェストファイルはサポートさ
れていません。メディアを再生するには、Strobe Media Playback を使用します。Strobe Media Playback は、Flash
Media Server と共にインストールされるサンプルビデオ Player で使用されます。
a rootinstall/samples/videoPlayer/videoplayer.html をダブルクリックしてブラウザーで開きます。
b 「Video Source」に次のように入力します。
http://localhost/sample1.f4m
Flash Media Server サンプルビデオ Player での HDS アダプティブビットレートオンデマンドストリーミング
6 (Apple HTTP Live Streaming)iOS で、Safari アドレスバーに次の URL を入力します。
http://10.0.1.11/sample1.m3u8
最終更新日 2011/10/10
29
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
iPad の Safari での HLS アダプティブビットレートオンデマンドストリーミング
Mac OS 10.6 の Safari でテストするには、次の HTML コードを使用します。
<video src="http://10.0.1.11/sample1.m3u8" controls="controls"></video>
詳細については、「iOS Reference Library」の「HTTP Live Streaming Overview」を参照してください。
関連項目
45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」
55 ページの「Protected HTTP Live Streaming(PHLS)の設定」
75 ページの「マルチビットレートストリーミング用のセットレベル F4M/M3U8 ファイルの設定」
HTTP 経由でオンデマンドストリームを再生するための URL
次の URL を使用して、オンデマンドストリームを HTTP 経由で再生します。
要求 URL
VOD
単一ストリームまた
はアダプティブビッ
トレート
VOD
単一ストリーム
http://<fms-dns-or-ip>/hdsvod/<streamname>.<fileextension>.f4m
Apple HTTP Live VOD
Streaming
単一ストリーム
http://<fms-dns-or-ip>/hlsvod/<streamname>.<fileextension>.m3u8
Client
Adobe HTTP
Dynamic
Streaming
ライブま
たは
最終更新日 2011/10/10
30
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Client
ライブま
たは
VOD
Adobe HTTP
Dynamic
Streaming
VOD
単一ストリームまた
はアダプティブビッ
トレート
要求 URL
アダプティブビット
レート
Media Player は、次に示すセットレベルマニフェストファイ
ルを要求します。
http://<webserver-dns-or-ip>/<set-level-manifest>.f4m
セットレベルマニフェストの URL は個々のストリームをポイ
ントし、次の URL を使用します。
http://<fms-dns-or-ip>/hdsvod/<streamname>.<fileextension>.f4m
Apple HTTP Live VOD
Streaming
アダプティブビット
レート
Media Player は、次に示すセットレベルのバリアント再生リ
ストファイルを要求します。
http://<webserver-dns-or-ip>/<set-level-variantplaylist>.m3u8
セットレベルのバリアント再生リストの URL は個々のスト
リームをポイントし、次の URL を使用します。
http://<fms-dns-or-ip>/hlsvod/<streamname>.<fileextension>.m3u8
パス /hds-vod は、Apache httpd.conf ファイル内の <Location> ディレクティブです。ディレクティブは、
rootinstall/webroot/vod フォルダー内のコンテンツを検索するようにサーバーに伝えます。また、HTTP 経由で Flash お
よび AIR に配信する(HTTP Dynamic Streaming または HDS と呼ばれます)コンテンツをパッケージ化するようにサー
バーに伝えます。
パス /hls-vod は、Apache httpd.conf ファイル内の <Location> ディレクティブです。ディレクティブは、
rootinstall/webroot/vod フォルダー内のコンテンツを検索するようにサーバーに伝えます。また、Apple HTTP Live
Streaming への配信用コンテンツをパッケージ化するようにサーバーに伝えます。
注意:Apple HTTP Live Streaming は、ライブストリーミングとオンデマンドストリーミングをサポートします。
アダプティブビットレートストリーミングでは、クライアントでセットレベルマニフェストを要求します。HDS の場合、
このファイルは .f4m ファイルになります。HLS の場合、このファイルは .m3u8 ファイルになります。セットレベルマニ
フェストファイルには、メディアファイルの物理的な場所へのパスが含まれています。メディアファイルへのパスは、サー
バーにそれらのファイルを HTTP 用にパッケージ化するように伝えるために、/hds-vod または /hls-vod で始まる必要があ
ります。
詳細情報
68 ページの「コンテンツストレージ(HDS および HLS)」
オンデマンドメディアのストリーミング(RTMP)
チュートリアル:オンデマンドメディアのストリーミング(RTMP)
前提条件
このチュートリアルを実行するには、次のソフトウェアをインストールしてください。
• Flash Media Server
オンデマンドメディアのストリーミングは、無償のデベロッパー版を含め Flash Media Server のどのエディションでも
実行できます。サーバーのインストールの詳細については、「サーバーのインストール」を参照してください。
最終更新日 2011/10/10
31
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
• Flash Player
このチュートリアルでは、Flash Player 10 が必要なビデオ Player を使用します。
ブラウザーにインストールされている Flash Player のバージョンを確認するには、
http://www.adobe.com/jp/software/flash/about/ を参照してください。
Flash Media Server へのオンデマンドファイルのコピー
Flash Media Server で VOD(ビデオオンデマンド)サービスを使用して記録済みメディアをクライアントにストリーミン
グします。記録済みメディアファイルをサーバーにコピーするだけで、クライアントでストリーミングすることができます。
VOD サービスは、次の 2 つのフォルダーから Media Player へファイルをストリーミングします。
rootinstall/applications/vod/media
rootinstall/webroot/vod
これらのフォルダーのサブフォルダーを作成して、メディファイルを保存することもできます。このチュートリアルでは、
サブフォルダーを作成し、ストリーミングするファイルをそのサブフォルダーにコピーします。
1 次のフォルダーを参照します。
rootinstall/applications/vod/media
注意:rootinstall を Flash Media Server インストールフォルダーに置き換えます。例えば、Windows のデフォルトの
インストールフォルダーは C:¥Program Files¥Adobe¥Flash Media Server 4.5 です。
2 次のように、「media」フォルダー内に「tests」フォルダーを作成します。
rootinstall/applications/vod/media/tests
3 F4V/MP4 または FLV ファイルを /tests フォルダーにコピーします。
このチュートリアルでは、次のファイルを使用します。
rootinstall/applications/vod/media/tests/polymorphics.f4v
ビデオファイルがない場合は、www.archive.org/details/movies にある「Moving Images Archive」からダウンロー
ドできます。サーバーに含まれているサンプルファイルを使用することもできます。学習目的で、サンプルファイルを
rootinstall/applications/vod/media から rootinstall/applications/vod/media/tests にコピーします。
サポートされているファイル形式とコーデックの詳細については、「サポートされているサウンドファイル形式」を参照
してください。
Flash Media Server サンプル Player を使用したオンデマンドファイルの再生
1 サンプルビデオ Player をブラウザーで開くには、rootinstall/samples/videoPlayer/videoplayer.html ファイルをダブ
ルクリックします。
2 ビデオのアドレスを「STREAM URL」テキストボックスに入力し、「VOD」をチェックして、「PLAY STREAM」を
クリックします。このチュートリアルでは、次のファイルを再生します。
rtmp://localhost/vod/mp4:tests/polymorphics.f4v
Flash Media Server ホスティングプロバイダーを使用している場合は、localhost を指定されたドメイン名または IP ア
ドレスに置き換えます。
重要: メディアファイルを vod/media フォルダーにコピーしている場合でも、ファイルを再生するときにパスで
/media を指定する必要はありません。サーバーはデフォルトで vod/media フォルダー内のメディアファイルを探すよ
うに設定されています。パスで /media を指定すると、サーバーは /vod/media/media フォルダー内を探します。
F4V/MP4 ファイルへのパスは接頭辞 mp4: で始めます。F4V、MP4、MOV などのファイルでも、そのファイルのファ
イル名拡張子を使用します。
最終更新日 2011/10/10
32
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Playback を使用したオンデマンドストリームの再生
1 Web ブラウザーで Flash Media Playback Setup ページ(www.osmf.org/configurator/fmp/)をロードします。
2 「Video Source」に次のように入力します。
rtmp://localhost/vod/mp4:tests/polymorphics.f4v
localhost は、サーバーのドメイン名または IP アドレスに置き換えることができます。
3 埋め込みコードを更新するには、「Preview」をクリックします。
4 「Play」ボタンをクリックし、コードをテストします。
5 ユーザー自身の HTML ページで Player を使用するには、埋め込みコードをコピーし、ページの本文に貼り付けます。
Flash Media Playback は、アドビ システムズ社でホストされるコンパイルされた SWF ファイルです。詳細については、
4 ページの「Flash Media Playback でのメディアの再生」を参照してください。
関連項目
2 ページの「サポートされているファイル形式とコーデック」
106 ページの「ストリーミングメディアの問題のトラブルシューティング」
RTMP 経由でオンデマンドメディアファイルを再生するための URL
チュートリアルを一度完了したら、サーバーからファイルを要求する URL の作成方法についてさらに詳しく学習します。
様々なファイルとパスを使用して、チュートリアルをもう一度実行します。
Flash Media Server からファイルを要求するシンタックスは次のとおりです。
protocol://server-domain-or-IP/fms-app-name/[fms-app-instance-name/][codec-prefix:]file-path[filenameextension]
エレメント
必須
説明
protocol
あり
メディア配信のプロトコル。Flash Media Server でサポートするプ
ロトコルの詳細については、技術概要にある RTMP、RTMFP および
HTTP を参照してください。
server-domain-or-IP
あり
Flash Media Server をホストしているコンピューターのドメイン名
または IP アドレス。クライアントが Flash Media Server と同じコン
ピューター上にある場合は、テスト目的で localhost を使用できま
す。
fms-app-name
あり
クライアントが接続する Flash Media Server アプリケーション。
Flash Media Server アプリケーションが保存されるデフォルトのフォ
ルダーは、rootinstall/applications です。このチュートリアルで
は、アプリケーション rootinstall/applications/vod を使用します。
fms-app-instancename
なし
アプリケーションでは、インスタンスの数に制限はありません。例え
ば、クライアントを rtmp://localhost/vod/instance1、
rtmp://localhost/vod/instance2 などに接続できます。
codec-prefix
F4V/MP4 ファイ
F4V/MP4 および MP3 ファイル形式では、要求 URL でコーデックの
ルおよび MP3
接頭辞が必要です。F4V/MP4 ファイルの場合は、接頭辞 mp4: を使
ファイルでは必須
です。
用します。MP3 ファイルの場合は、接頭辞 mp3: を使用します。FLV
ファイルには、コーデックの接頭辞は必要ありません。
最終更新日 2011/10/10
33
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
エレメント
必須
説明
file-path
あり
メディアファイルの保存先として設定されたフォルダーからメディア
ファイルへのパス。VOD アプリケーションの場合は、次のフォル
ダーにメディアファイルが保存されるように設定されています。
rootinstall/applications/vod/media
rootinstall/webroot/vod
このチュートリアルでは、要求 URL は
rtmp://localhost/vod/mp4:tests/polymorphics.f4v です。filepath は、tests/polymorphics です。
ファイル polymorphics.f4v が、/vod/media/tests フォルダーでは
なく /vod/media フォルダーにある場合、完全な要求 URL は
rtmp://localhost/vod/mp4:polymorphics.f4v になります。filepath は polymorphics です。
メディアファイルを rootinstall/conf/fms.ini ファイルに保存するよ
うにフォルダーを設定します。
filename-extension
F4V/MP4 ファイ
ルおよび MP3
再生するファイルのファイルのファイル名拡張子を使用します。例え
ば、ファイルが F4V ファイルの場合は、.f4v を使用します。ファイル
ファイルでは必須
です。
が MOV ファイルの場合は、.mov を使用します。
RTMP 経由でのオンデマンドメディアファイルのストリーミングには、次のアドレスを使用します。
ファイル形式
アドレス
F4V
rtmp://server-domain-or-IP/vod/mp4:filename
rtmp://server-domain-or-IP/vod/mp4:filename.f4v
rtmp://server-domain-or-IP/vod/mp4:subfolder/fileName.f4v
FLV
rtmp://server-domain-or-IP/vod/filename
rtmp://server-domain-or-IP/vod/filename.flv
Flash Media Server と共にインストールされた Apache Web サーバーから HTTP 経由でファイルをプログレッシブダウン
ロードするには、標準の HTTP アドレスを使用します。次のファイルは rootinstall/webroot/vod フォルダーにあります。
http://server-domain-or-IP/vod/filename.xxx
注意:ローカルホストを HTTP 経由で使用するには、ポート番号 8134 を追加します。例えば、
http://localhost:8134/vod/video.f4v となります。サーバーは、ポート 8134 を HTTP に内部で使用します。
メディアファイルの場所の設定
rootinstall/conf/fms.ini ファイル内の 2 つのパラメーターによって、VOD アプリケーションがメディアファイルを探す
フォルダーの場所を識別します。
VOD_COMMON_DIR = C:\Program Files\Adobe\Flash Media Server 4.5\webroot\vod
VOD_DIR = C:\Program Files\Adobe\Flash Media Server 4.5\applications\vod\media
クライアントが VOD アプリケーションに接続してファイルを再生すると、サーバーはこれらの 2 つのフォルダーでファイ
ルを探します。
VOD_DIR パラメーターで指定されたフォルダー内のファイルは、RTMP 経由でのみストリーミングできます。
最終更新日 2011/10/10
34
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
VOD_COMMON_DIR パラメーターで指定されたフォルダー内のファイルは、RTMP 経由でストリーミングし、HTTP 経
由でプログレッシブダウンロードできます。RTMP 経由でのサーバーへの NetConnection が成功しているかどうかを確認
するコードをクライアントで記述します。クライアントが正常に接続していない場合は、HTTP 経由でファイルを要求する
コードを記述します。サーバーは HTTP に自動的にフォールバックしません。
重要: メディアを vod/media フォルダーにコピーしている場合でも、ファイルを再生するときにパスで /media を指定しな
いでください。サーバーはデフォルトで vod/media フォルダー内のメディアを探すように設定されています。パスで
/media を指定すると、サーバーは /vod/media/media フォルダー内を探します。
メディアファイルの保存場所の変更
1 rootInstall/conf/fms.ini ファイルをテキストエディターで開きます。
2 VOD_DIR パラメーターと VOD_COMMON_DIR パラメーターを編集します。
3 Flash Media Server を再起動します。
新しいメディアの保存場所の追加
1 rootInstall/conf/fms.ini ファイルをテキストエディターで開きます。
2 新しいパラメーターを追加し、目的の場所に指定します。例えば、次のようにします。
VOD_DIR_2 = C:\hrvideos
3 rootinstall/applications/vod/Application.xml ファイルをテキストエディターで開きます。
fms.ini ファイルのパラメーターは、Application.xml 設定ファイルで使用されます。
<Application>
<StreamManager>
<VirtualDirectory>
<Streams>/;${VOD_COMMON_DIR}</Streams>
<Streams>/;${VOD_DIR}</Streams>
</VirtualDirectory>
</StreamManager>
4 <Streams> タグを新しいパラメーターと共に追加します。例えば、次のようにします。
<Streams>/hr;${VOD_DIR_2}</Streams>
このフォルダーに保存されたストリームを再生するには、次のアドレスを使用します。
rtmp://localhost/vod/hr/mp4:somefilename.f4v
<Streams> タグは、メディアパスが /hr で始まる場合に VOD_DIR_2 パラメーターで指定された場所でメディアを探すよ
うにサーバーに伝えます。
5 Flash Media Server を再起動します。
VOD サービスの複製
サーバーは VOD サービスのインスタンスを無制限の数サポートしています。
1 rootinstall/applications/vod フォルダーをアプリケーションフォルダー内で複製し、vod2 などの新しい名前を付けま
す。この場合、新しい VOD サービスは rootinstall/applications/vod2 に格納されます。
VOD サービスのインスタンスの数は、必要に応じていくつでも作成することができます。
2 これでクライアントは、rtmp://flashmediaserver/vod2 の URL から、VOD サービスに接続できるようになります。
3 (rootinstall/conf に格納されている)fms.ini ファイルを開き、次の操作を行います。
•
パラメーターを追加し、新しいサービスのコンテンツパスを設定します。例えば、VOD2_DIR = C:¥Program
Files¥Adobe¥Flash Media Server 4.5¥applications¥vod2¥media のようにします。
最終更新日 2011/10/10
35
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
• Apache をインストールしていて、HTTP 経由でメディアファイルを利用したい場合は、新しい
VOD2_COMMON_DIR パラメーター VOD2_COMMON_DIR = C:¥Program Files¥Adobe¥Flash Media Server
4.5¥webroot¥vod2 を追加します。
4 rootinstall/applications/vod2 フォルダーの Application.xml ファイルを開き、次の操作を行います。
•
仮想ディレクトリを次のように編集します。<Streams>/;${VOD2_DIR}</Streams>
•
仮想ディレクトリを次のように編集します。<Streams>/;${VOD2_COMMON_DIR}</Streams>
5 記録済みメディアファイルを次の場所に置きます。
• RTMP 経由でのみストリーミングされるファイルを C:¥Program Files¥Adobe¥Flash Media Server
4.5¥applications¥vod¥media フォルダーに置きます。
• RTMP または HTTP 経由でストリーミングされるファイルを C:¥Program Files¥Adobe¥Flash Media Server
4.5¥webroot¥vod2 に置きます。
注意:URL には、media フォルダーを指定する必要はありません。media フォルダーは、fms.ini ファイル内に設定し
たパスに指定されています。
VOD サービスでのサーバーサイドコードの変更
注意:Flash Media Streaming Server ではライブサービスのサーバーサイドコードを変更することはできません。
❖ rootinstall/applications/vod/main.far ファイルを削除し、rootinstall/samples/applications/vod/main.asc ファイ
ルに置き換えます。
VOD サービスの無効化
❖ VOD サービスフォルダーを rootinstall/applications フォルダーから移動します。
メディアのマルチキャスト(RTMFP)
マルチキャストサービスについて
Flash Media Server 4.0、Flash Player 10.1
重要:マルチキャストサービス(rootinstall/applications/multicast)は、Flash Media Streaming Server で動作しませ
ん。
マルチキャストサービスは、Adobe Flash Media Server マルチキャストソリューションの一部です。マルチキャストソ
リューションは、ライブ、企業、マルチキャストイベント向けのエンドツーエンドソリューションです。マルチキャストソ
リューションは、IP マルチキャスト、P2P マルチキャスト、およびこの両方の組み合わせ ( フュージョンマルチキャスト )
を経由して、単一のライブストリームを Flash Player クライアントに配信します。
マルチキャストソリューションは、次のコンポーネントで構成されます。
•
マルチキャストコンフィグツール (rootinstall/tools/multicast/configurator)
マルチキャストイベントを記述して構成する情報を収集します。Flash Media Live Encoder にコピーアンドペーストす
るライブストリーム名を生成します。必要なマルチキャストイベント設定がストリーム名のクエリ文字列内のパラメー
ターとして埋め込まれます。manifest.f4m ファイルを生成します。同じフォルダーに Multicast Player としてコピーさ
れます。
• Flash Media Live Encoder
最終更新日 2011/10/10
36
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ライブビデオを Flash Media Server 上のマルチキャストサービスにキャプチャー、エンコード、およびパブリッシュし
ます。
•
マルチキャストサービス (rootinstall/applications/multicast)
ライブストリームをマルチキャストストリームとしてターゲット RTMFP グループに再パブリッシュする、サーバーサ
イドの Flash Media Server アプリケーション。
• Multicast Player (rootinstall/tools/multicast/multicastplayer)
マルチキャストサービスに接続し、グループに参加し、ライブストリームを再生する、クライアントサイドの Flash
Player アプリケーション。
マルチキャストイベントの設定
マルチキャストイベントを設定するには、次の手順を行います。
1 ブラウザーで rootinstall/tools/multicast/configurator/configurator.html を開きます。
マルチキャストコンフィグツール
2 次のマルチキャスト形式のいずれかを選択します。
•
フュージョン (IP および P2P マルチキャストを同時に一体として )
• IP マルチキャスト
•
ピアツーピア
•
ピア検出によるピアツーピア
注意:ツールには、各形式の説明が含まれています。
3 フュージョンとピアツーピアの場合は、サーバー名 ( または IP アドレス ) とマルチキャストアプリケーションのフルパス
を入力します ( 例えば、rtmfp://fms.example.com/multicast)。サーバーが 1935 以外のポートを使用するように設定
されている場合は、そのポート ( 例えば、rtmfp://fms.example.com:1940/multicast) を指定します。
最終更新日 2011/10/10
37
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
注意:IP マルチキャストイベントには、接続 URI は不要です。IP マルチキャストイベントは URI rtmfp: を使用します。
これで NetConnection オブジェクトは「接続なし」モードになります。
4 ライブストリームの名前 ( 例えば、CorpAllHandsQ2_2010、livestream) を入力します。
5 パブリッシュパスワードを入力します。
パスワードにより、マルチキャストサーバーのみがマルチキャストストリームを確実にグループにパブリッシュできるよ
うになります。他のピアはパブリッシュパスワードを持たないため、ストリームのパブリッシュは行えず、ストリームの
再生のみを行えます。
6 グループの名前を入力します。グループ名を一意にするには、「Make Unique」を選択します。
同時に発生するストリーミングイベントに一意のグループ名を指定します。
7
IP マルチキャストとフュージョンの場合には、ライブイベント向けに使用する IP マルチキャストアドレスとポートを入
力します。これは、ライブストリームがブロードキャストされる先のアドレスとポートです。
注意:IT 部門から IP マルチキャストアドレスを入手します。IT 部門はマルチキャストルーターとマルチキャストアド
レスを設定します。マルチキャストアドレスは、ネットワーク上のグループのすべてのメンバーにデータを配信します。
8 (オプション)Flash Media Server をホストしているサーバーに複数のネットワークインターフェイスカード(NIC)が
ある場合は、
「Interface Address」テキストボックスに 1 つの NIC の IP アドレスを入力します。Flash Media Server で
は、この IP アドレスを使用して、パブリッシュするときに使用する適切なインターフェイスを決定します。
9 (オプション)source-specific multicast を使用するには、「Source-specific Multicast Address」テキストボックスに
IP アドレスとポートを入力します。198 ページの「ソース特定 IP マルチキャスト」を参照してください。
10「Generate」をクリックします。マルチキャストコンフィグツールは次を生成します。
•
ライブストリームの名前。ストリームをパブリッシュするには、「コピー」をクリックして、この値を Flash Media
Live Encoder Stream フィールドに貼り付けます。
•
クライアント Multicast Player で使用する F4M ファイル。F4M ファイルを表示するには、「View Manifest File.」
をクリックします。
このチュートリアルでは、次の設定を使用します。
最終更新日 2011/10/10
38
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ピアツーピアマルチキャスティング用に設定されたマルチキャストコンフィグツール
11 Multicast サンプル Player を使用するには、次の操作を行います。
a 「Save Manifest File」をクリックします。
b manifest.f4m ファイルを multicastplayer.html ファイルおよび multicastplayer.swf ファイルと同じ場所に保存し
ます。デフォルトでは、この場所は、rootinstall/tools/multicast/multicastplayer です。
12 Strobe Media Playback を使用するには、Configurator を開いたままにします。Strobe Media Playback を設定した後
に、Configurator に戻り、manifest.f4m ファイルを Strobe Media Playback と同じフォルダーに保存します。
Flash Media Live Encoder からのストリームのパブリッシュ
1 Flash Media Live Encoder 3.1 以降を開始し、次の操作を行います。
2 「プリセット」メニューから、単一ストリームのプリセットを選択します。マルチキャストソリューションは、マルチ
ビットレートストリーミングをサポートしていません。
3 FMS URL については、マルチキャストサービスの URL を入力します。Flash Media Server が動作しているのと同じコ
ンピューターでテストしている場合は、rtmp://localhost/multicast と入力します。
注意:Flash Media Live Encoder は、RTMFP プロトコルを介してではなく、RTMP プロトコルを介して Flash Media
Server に接続します。
4 「マルチキャストコンフィグツール」からコピーしたパブリッシュ元ストリーム名を Stream フィールドに貼り付けます。
最終更新日 2011/10/10
39
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
マルチキャストアプリケーションにストリーミングするように設定された Flash Media Live Encoder
5 「開始」をクリックして、マルチキャストサービスに接続し、ストリーミングを開始します。
6 Flash Media Server Administration Console を開始し、「View Applications」> Clients の順にクリックします。
RTMP クライアントは、FMLE からサーバーへの接続です。RTMFP クライアントは、ライブストリームをターゲット
RTMFP グループに再パブリッシュするためにマルチキャストサービスによって確立されたサーバーサイドのピアです。
最終更新日 2011/10/10
40
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Administration Console でのマルチキャストアプリケーションへの接続
マルチキャストストリームの再生
Multicast サンプル Player でのストリームの再生
1 ブラウザーで rootinstall/tools/multicast/multicastplayer/multicastplayer.html を開きます。
2 ローカルファイルシステムから Flash Player を実行するには、画面を右クリックして、「Global Settings」を選択し、次
のいずれかを実行します。
• Flash Player ヘルプページで、左上のリストから「Global Security」パネルを選択します。「Edit locations」>
「Add location」> 「Browse for folder」の順にクリックします。multicastplayer.swf ファイル
(rootinstall/tools/multicast/multicastplayer)を含むフォルダーを選択します。
• Flash Player 設定マネージャーで、「Advanced」を選択し、「Trusted Location Settings」をクリックします。
「Add」をクリックし、multicastplayer.swf ファイル(rootinstall/tools/multicast/multicastplayer)を含むフォ
ルダーを参照します。「Confirm」をクリックします。
3 ブラウザーで multicastplayer.html ファイルを再ロードします。Adobe Flash Player 設定マネージャーに、ピアアシス
トネットワークダイアログが表示されます。ピアツーピア接続を許可するには、「許可」をクリックします。
Multicast Player は、Flash Media Live Encoder がパブリッシュしているストリームを再生します。
最終更新日 2011/10/10
41
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Multicast サンプル Player
4 Flash Media Administration Console を開いて、新しいクライアント接続を表示します。
最終更新日 2011/10/10
42
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Administration Console での 3 つのマルチキャスト接続
Flash Media Server サンプルビデオ Player でのストリームの再生
1 ブラウザーでサンプルビデオ Player を開くには、rootinstall/samples/videoPlayer/videoplayer.html をダブルクリッ
クします。
Flash Media Server サンプルビデオ Player は、OSMF Strobe Media Player 1.6 上に構築されます。
2 マルチキャストコンフィグツールを使用して、manifest.f4m ファイルを rootinstall/tools/multicast/configurator
フォルダーから rootinstall/samples/videoPlayer フォルダーに コピーします。Multicast サンプル Player と Flash
Media Server サンプル Player の両方が同じマニフェストファイルを使用する必要があります。
3 サンプルビデオ Player の「Stream URL」テキストボックスに、manifest.f4m と入力します。「Play」をクリックしま
す。
最終更新日 2011/10/10
43
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Server サンプルビデオ Player で再生されているマルチキャストストリーム
4 Flash Media Administration Console を開いて、新しいクライアント接続を表示します。現在は、Flash Media Live
Encoder(RTMP)から、グループへのマルチキャストアプリケーションのパブリッシング(RTMFP)から、
Multicast サンプル Player(RMTFP)から、Flash Media Server サンプルビデオプ Player(RTMFP)から各 1 つず
つ、合計 4 つの接続があります。
最終更新日 2011/10/10
44
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Administration Console での 4 つのマルチキャスト接続
関連項目
189 ページの「ピアアシストネットワーキングアプリケーションの構築」
106 ページの「ストリーミングメディアの問題のトラブルシューティング」
Protected HTTP streaming
Protected HTTP Dynamic Streaming(PHDS)の設定
Flash Media Server 4.5、Flash Player 11、AIR 3
Flash Media Server 4.5 を使用して、DRM License Server を使用せずに、ライブおよびオンデマンドの保護されたコンテ
ンツを、HTTP 経由で Flash Player と AIR に配信します。Flash Media Server は、コンテンツをパッケージ化すると、ラ
イセンスを生成し、そのライセンスをコンテンツストリームのメタデータに埋め込みます。この機能は、Protected HTTP
Dynamic Streaming(PHDS)と呼ばれます。コンテンツを暗号化する以外に、PHDS は HTTP Dynamic Streaming の
SWF 検証もサポートしています。
最終更新日 2011/10/10
45
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
オンデマンド PHDS とライブ PHDS の F4F パッケージ化プロセスは、ライセンスを生成してそれを DRM メタデータに埋
め込み、メディアと共に配信します。Flash Player 11 と AIR 3 のクライアントは、コンテンツストリームからライセンスを
取得することができるため、クライアントと License Server 間の通信はなくなります。
Flash Media Server インストーラーは、資格情報、証明書およびポリシーファイルを rootinstall/phds ディレクトリに生
成します。また、インストーラーは、common-key.bin ファイルを /phds ディレクトリに作成します。このファイルのコ
ンテンツを変更するか新しい共通キーファイルを作成することができます。コンテンツの暗号化キー(共通キー)を作成す
るには、スクランブルツールを使用します。「スクランブルツール」を参照してください。
ポリシーファイル
次のポリシーファイルを使用して、オンデマンド PHDS とライブ PHDS のライセンスを生成します。
ポリシー名
説明
phds_24hr_policy.pol
24 時間限定のポリシー
anonymous; not use license chaining; 24 hours limited license caching; and binding to
the Shared Domain is permitted.
これはデフォルトのポリシーです。ユーザーはコンテンツがパッケージ化されてから 24
時間以内に再生を開始できます。ユーザーは最後までコンテンツを見続けることができ
ます(コンテンツは一時停止できます)。
24 時間のウィンドウは、DMR メタデータが生成されると開始されます。
phds_policy.pol
無制限ポリシー
anonymous; not use license chaining; unlimited license caching; and binding to the
Shared Domain is permitted
このポリシーでは、いつでも再生が可能です。
無制限ポリシーは通常の使用には適していません。無制限ポリシーは、ネットワークに問題が発生した場合の一時的な回避
策として提供されます。メディアが Flash Media Server と Flash Player 間のネットワークデバイス上にキャッシュされた場
合、クライアントは、予期されたメディアをサーバーから受信する代わりに、ネットワークから期限切れのポリシーデータ
を受信する場合があります。24 時間ポリシーで生成されたメディアが 24 時間を超えてキャッシュされた場合、Player では
再生が許可されません。ネットワーク設定が修正されるまでの一時的なソリューションとして無制限 PHDS ポリシーに切り
替えると、キャッシュが消去されます。このソリューションにより、メディアを配信しない代わりに、より低い保護レベル
でメディアを配信することができます。無制限ポリシーに切り替えた後に、キャッシュを消去して、無制限ライセンスがク
ライアントに伝播されるのを許可します。
ライブ Protected HTTP Dynamic Streaming
ライブストリーミングの PHDDS を次のレベルで設定します。
•
アプリケーション — rootinstall/applications/livepkgr/Application.xml
•
イベント — rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml
ライブ PHDS のアプリケーションレベルとイベントレベルの設定
Application.xml と Event.xml の両方のファイルには、ライブ PHDS 設定を保持する ContentProtection コンテナーがあり
ます。Application.xml の場合、コンテナーは //Application/HDS/Recording/ContentProtection 下にあります。Event.xml
の場合、コンテナーは //Event/Recording/ContentProtection 下にあります。
最終更新日 2011/10/10
46
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
47
メディアのストリーミングの概要
エレメント
デフォルト値
説明
Recording/ContentProtection
Application.xml の場合は
コンテンツ保護設定用のコンテナーエレメント。
"allow"
Application.xml では、enabled 属性を "true" に設定す
Event.xml の場合は "false"
るとコンテンツ保護が有効になり、"false" に設定すると
コンテンツ保護が無効になり、"allow" に設定すると、
Event.xml ファイル内の設定が Application.xml ファイ
ルの ContentProtection セクションよりも優先されま
す。
enabled="allow" の場合、サーバーは、
Application.xml ファイルの ContentProtection セク
ション内のいずれの設定も使用しません。Event.xml で
ContentProtection セクションが指定されていない場合、
Event.xml でデフォルト値は "false" となるため、コンテ
ンツ保護は無効になります。
Event.xml では、enabled 属性を "true" または "false" に
設定します。
Recording/ContentProtection
/ProtectionScheme
なし
指定できる値は phds と FlashAccessV2 です。PHDS の
Recording/ContentProtection
/PHDS
なし
PHDS 暗号化設定用のコンテナー。
Recording/ContentProtection
/PHDS/CommonKeyFile
なし
最終的なコンテンツ暗号化キーを生成するために(コン
テンツ ID と共に)使用される基本キーを含む common-
場合は phds を使用します。
key.bin ファイルへの相対パス。
このファイルは、rootinstall/phds/common-key.bin
へのインストール中に生成されます。
Application.xml ファイルで CommonKeyFile を定義す
ると、サーバーは rootinstall/phds 内でファイルを検
索します。
Event.xml ファイルで CommonKeyFile を定義すると、
サーバーはイベントフォルダーに対して相対的なファイ
ルを検索します。
Recording/ContentProtection
/PHDS/PlaybackExpiration
保護ポリシー。このポリシーにより、コンテンツ再生の
継続時間が決定されます。指定できる値は 24Hours と
24Hours
Unlimited です。
Recording/ContentProtection
/PHDS/VideoEncryptionLevel
2
Recording/ContentProtection
/PHDS/UpdateInterval
1
コンテンツの暗号化のレベル(0- 低、1- 中、2- 高)。設
定を低くすると「部分的な暗号化」となります。この場
合、サンプルのサブセット(ビデオのキーフレームなど)
が暗号化されます。これにより、復号化するフレームの
数が少なくなるため、クライアントでの再生のパフォー
マンスが向上します。
サーバーが drm メタデータを生成する頻度(時間単位)。
ライブ PHDS のアプリケーションレベルでの設定
Application.xml ファイルで PHDS を有効化して設定する例を次に示します。これらの設定は、このアプリケーション用に
設定されたすべてのライブイベントに適用されます。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<Application>
<StreamManager>
<Live>
<AssumeAbsoluteTime>true</AssumeAbsoluteTime>
</Live>
</StreamManager>
<HDS>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>360000</SegmentDuration>
<ContentProtection enabled="true">
<ProtectionScheme>PHDS</ProtectionScheme>
<PHDS>
<CommonKeyFile>common-key.bin</CommonKeyFile>
</PHDS>
</ContentProtection>
</Recording>
</HDS>
</Application>
Application.xml ファイルで CommonKeyFile を設定すると、サーバーは rootinstall/phds ディレクトリ内でファイルを検
索します。
ライブ PHDS のイベントレベルでの設定
PHDS を許可し、各ライブイベントの Event.xml ファイル内の設定を検索するようにサーバーに伝える Application.xml
ファイルの例を次に示します。
<Application>
<StreamManager>
<Live>
<AssumeAbsoluteTime>true</AssumeAbsoluteTime>
</Live>
</StreamManager>
<HDS>
<Recording>
<ContentProtection enabled="allow">
<ProtectionScheme>phds</ProtectionScheme>
</ContentProtection>
</Recording>
</HDS>
</Application>
次の Event.xml ファイルは、単一のライブイベントの PHDS を設定します。
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>360000</SegmentDuration>
<ContentProtection enabled="true">
<ProtectionScheme>PHDS</ProtectionScheme>
<PHDS>
<CommonKeyFile>common-key.bin</CommonKeyFile>
<VideoEncryptionLevel>2</VideoEncryptionLevel>
</PHDS>
</ContentProtection>
</Recording>
</Event>
最終更新日 2011/10/10
48
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
49
メディアのストリーミングの概要
この場合は、common-key.bin ファイルを rootinstall/phds ディレクトリから
rootinstall/applications/livepkgr/events/_definst_/liveevent ディレクトリにコピーします。
オンデマンド Protected HTTP Dynamic Streaming
オンデマンドストリーミングの PHDS を次のレベルで設定します。
サーバー — rootinstall/Apache2.2/conf/httpd.conf
ストリーム — jit.conf ファイルを作成し、コンテンツと同じディレクトリにコピーします。
ストリームレベルで PHDS を設定するには、httpd.conf ファイル内で EncryptionScope を content に設定し、jit.conf ファ
イル内の設定が httpd.conf ファイル内の設定よりも優先されるようにします。
オンデマンド PHDS のサーバーレベルの設定
Apache httpd.conf ファイルの jithttp_module に対して次のディレクティブを設定します。
ディレクティブ
デフォルト値
説明
EncryptionScope
なし
指定できる値は content と server です。
値が content の場合、jit.conf ファイル
の PHDS 設定は httpd.conf の設定より
も優先されます。file.
値が server の場合、サーバーは
httpd.conf ファイルの設定を使用しま
す。
PHDSCommonKeyFile
phds/common-key.bin
このファイルはインストール中に作成
されます。
この場所でコンテンツを保護するため
に使用される共通キー。
PHDSPlaybackExpiration
24Hours
コンテンツの再生が可能な時間。指定
できる値は 24Hours と Unlimited です。
PHDSVideoEncryptionLevel
2
コンテンツの暗号化のレベル(0- 低、
1- 中、2- 高)。設定を低くすると部分
的な暗号化となります。サンプルのサ
ブセット(ビデオのキーフレームなど)
が暗号化されます。部分的な暗号化に
よって復号化するフレームの数が少な
くなるため、クライアントでの再生の
パフォーマンスが向上します。
ProtectionScheme
なし
保護のタイプを決定する文字列。
PHDS の場合は phds を使用します。
オンデマンド PHDS のストリームレベルの設定
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
50
メディアのストリーミングの概要
エレメント
デフォルト値
説明
//manifest/hds:content-protection
enabled
なし
Flash Access または PHDS での保護用
にコンテンツを有効にするには、
enabled 属性を "true" に設定します。
//manifest/hds:contentprotection/hds:protection-scheme
なし
保護のタイプ。PHDS の場合は phds を
//manifest/hds:contentprotection/hds:phds/hds:commonkey-file
phds/common-key.bin
使用します。
サーバーのインストール中に生成され
た共通キーファイルへのパス。ファイ
ルには、16 バイト/ 128 ビットのラン
ダムキーが含まれます。パスは、
jit.conf ファイルへの絶対パスまたは相
対パスにすることができます。
//manifest/hds:contentprotection/hds:phds/hds:videoencryption-level
コンテンツの暗号化のレベル(0- 低、
2
1- 中、2- 高)。
設定を低くすると部分的な暗号化とな
ります。サンプルのサブセット(ビデ
オのキーフレームなど)が暗号化され
ます。
部分的な暗号化によって復号化するフ
レームの数が少なくなるため、クライ
アントでの再生のパフォーマンスが向
上します。
//manifest/hds:contentprotection/hds:phds/hds:playbackexpiration
保護ポリシー。このポリシーにより、
コンテンツ再生の継続時間が決定され
ます。指定できる値は 24Hours と
24Hours
Unlimited です。
オンデマンド PHDS のサーバーレベルでの設定
オンデマンド PHDS を設定する最も簡単な方法は、Apache httpd.conf ファイルで 2 行を非コメント化する方法です。
<IfModule jithttp_module>
<Location /hds-vod>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/vod"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
# Uncomment the following directives to enable encryption
# for this location.
EncryptionScope server
ProtectionScheme phds
</Location>
</IfModule>
Media Payer が /webroot/vod フォルダーからコンテンツを要求する場合には、そのコンテンツが保護されます。例えば、
サンプルビデオ Player から次の URL を要求します。
http://localhost:8134/hds-vod/sample1_1500kbps.f4v.f4m
コンテンツが保護されているかどうか確認するには、同じ URL を Web ブラウザーのアドレスバーに入力します。XML 応
答には、次のような <drmAdditionalMetadata> エレメントが含まれています。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<?xml version="1.0" encoding="UTF-8" ?>
- <manifest xmlns="http://ns.adobe.com/f4m/1.0">
<id>sample1_1500kbps.f4v</id>
<streamType>recorded</streamType>
<duration>114.61450000000001</duration>
<bootstrapInfo profile="named" id="bootstrap3628">AAABq2Fic3QAAAAAAAA</bootstrapInfo>
<drmAdditionalHeader drmContentId="sample1_1500kbps.f4v"
id="drmMetadata9839">AgARfEFkZGl0aW9uYWxIZWFkZXIDAAp</drmAdditionalHeader>
- <media streamId="sample1_1500kbps.f4v" url="sample1_1500kbps.f4v" bootstrapInfoId="bootstrap3628"
drmAdditionalHeaderId="drmMetadata9839">
<metadata>AgAKb25NZXRhRGF0</metadata>
</media>
</manifest>
注意:<bootstrapInfo>、<drmAdditionalHeader> および <metadata> 情報は、読みやすくなるように要約されています。
次の例では、新しい Location ディレクティブを追加します。/phds を含む要求により、保護されたコンテンツが配信されま
す。デフォルトの /hds-vod Location ディレクティブを使用する場合は、/hds-vod を使用する要求により、保護されてい
ないコンテンツが配信されます。この設定は、PHDSPlaybackExpiration、PHDSVideoEncryptionLevel または
PHDSCommonKeyFile を定義せず、それらのデフォルト値に依存します。
LoadModule jithttp_module modules/mod_jithttp.so
<IfModule jithttp_module>
<Location /phds>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/vod"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
EncryptionScope server
ProtectionScheme phds
</Location>
オンデマンド PHDS のストリームレベルでの設定
次の httpd.conf ファイルでは、EncryptionScope が content に設定されています。この設定は、httpd.conf の設定よりも
jit.conf ファイルの設定が優先されることをサーバーに伝えます。この設定を使用して、個々のメディアセットに対して
PHDS を設定します。
LoadModule jithttp_module modules/mod_jithttp.so
<IfModule jithttp_module>
<Location /jit_phds>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/jit_phds"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
EncryptionScope content
</Location>
付随する jit.conf ファイルを次に示します。このファイルはオンデマンドメディアファイルと同じディレクトリ
(/webroot/jit_phds)内にあります。
最終更新日 2011/10/10
51
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0">
<frame-rate>29.97</frame-rate>
<frames-per-keyframe-interval>60</frames-per-keyframe-interval>
<content-protection enabled="true">
<protection-scheme>phds</protection-scheme>
<phds>
<common-key-file>C:\Program Files\Adobe\Flash Media Server 4.5\phds\common-key.bin</commonkey-file>
<video-encryption-level>0</video-encryption-level>
<playback-expiration>unlimited</playback-expiration>
</phds>
</content-protection>
</manifest>
Protected HTTP Dynamic Streaming の SWF 検証
SWF 検証は、不正な SWF ファイルがコンテンツにアクセスすることを防ぎます。SWF 検証を使用するには、Protected
HTTP Dynamic Streaming を有効にする必要があります。
SWF Hasher ツール(rootinstall/tools/swfhasher)を使用して、有効な SWF ファイルのリストを作成します。これらの
ファイルは埋め込まれたライセンスで指定され、DRM メタデータ内部のクライアントに送信されます。SWF 検証は、
Flash Player および AIR 内部の Flash Access によってクライアント上で実施されます。
ワークフロー
1 PHDS を有効にします。
2 swfhasher ツールを使用して、許可された SWF ファイルのホワイトリストを生成します。ホワイトリストファイルには
任意の名前を付けることができます。拡張子は .whitelist になります。54 ページの「swfhasher ツールの使用」を参照
してください。
3 ホワイトリストをサーバーにコピーします。
4 SWF 検証を有効にして、ホワイトリストの場所を次のように示します。
•
(ライブ)— Application.xml または Event.xml
•
(オンデマンド)— jit.conf
5 Flash Media Server 上の livepkgr アプリケーションにストリームをパブリッシュします。
6 OSMF Media Player からのストリームを要求します。要求 URL のシンタックスが SWF 検証で変更されることはあり
ません。
記録が開始されると、サーバーはホワイトリストからの SWF ハッシュを .drmmeta ファイルに埋め込みます。Flash
Player は、DRM 認証の間に SWF ハッシュの検証を試みます。
7 (ライブ)サーバーは次の順序でホワイトリストを検索します。
a アプリケーションフォルダー(ライブ HTTP ストリーミングのデフォルトのアプリケーションは、
rootinstall/applications/livepkgr です)。
b Application.xml の /SWFVerification/WhitelistFolder エレメント内のパス
c Event.xml の /SWFVerification/WhitelistFolder エレメント内のパス
8 (オンデマンド)サーバーは、オンデマンドコンテンツと同じフォルダーにある jit.conf ファイルでホワイトリストを検
索します。
ハッシュが一致しない場合、Flash Player は実行時エラー(3310)をスローし、OSMF Media Player はフラグメントの要
求を停止します。
最終更新日 2011/10/10
52
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
53
メディアのストリーミングの概要
ライブ PHDS の SWF 検証設定
ライブ PHDS 用に SWF 検証を有効にするには、アプリケーションレベル(Application.xml)またはイベントレベル
(Event.xml)で PHDS を有効にします。Apache httpd.conf ファイルで、EncryptionScope を content に設定します。45
ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」を参照してください。
ライブ HDS の SWF 検証をアプリケーションレベル(Application.xml)またはイベントレベル(Event.xml)で設定しま
す。
Application.xml では、SWFVerification は //Application/HDS/Recording/ContentProtection/PHDS/SWFVerification にありま
す。Event.xml では、SWFVerification は //Event/Recording/ContentProtection/PHDS/SWFVerification にあります。
要素
/SWFVerification
説明
デフォルト値
SWF 検証設定用のコンテナー SWF 検証を有
"false"
効にするには、enabled 属性を "true" に設定
します。
/SWFVerification/
WhiteListFolder
ホワイトリストを含むフォルダーへのパス。
フォルダーには複数のホワイトリストファイ
ルを含めることができます。
パスは絶対パスまたは相対パスにすることが
できます。Application.xml ファイルの相対
ライブイベントのアプリケーションフォル
ダー。HTTP ストリーミングのデフォルトの
アプリケーションは、
rootinstall/applications/livepkgr です。
パスは、アプリケーションフォルダーに対す
る相対パスです。Event.xml ファイルの相対
パスは、イベントフォルダーに対する相対パ
スです。セキュリティ上の理由から、下位相
対パスはサポートされていません。
この設定はオプションです。値が指定されな
い場合、サーバーはライブイベントのアプリ
ケーションフォルダーを検索します。
Apache httpd.conf ファイルで以下を設定し、マニフェスト、ブートストラップ、drmmeta、フラグメントの各応答に対
するキャッシュ制御を設定します。
• HttpStreamingBootstrapMaxAge
• HttpStreamingFragMaxAge
• HttpStreamingF4MMaxAge
各設定の詳細情報については、87 ページの「ライブおよびオンデマンド HTTP ストリーミングのサーバーレベル
(httpd.conf)での設定」を参照して下さい。
オンデマンド PHDS の SWF 検証設定
SWF 検証は PHDS 下に設定されます。SWF 検証を有効にするには、PHDS を有効にします。オンデマンド PHDS は、
サーバーレベル(httpd.conf)またはストリームレベル(jit.conf)で有効にできます。ストリームレベルで SWF 検証を有
効にするには、サーバーレベルで EncryptionScope を content に設定します。45 ページの「Protected HTTP Dynamic
Streaming(PHDS)の設定」を参照してください。
オンデマンド PHDS の SWF 検証を、サーバーレベル(httpd.conf)またはストリームレベル(jit.conf)で設定します。
次のエレメントを使用して、jit.conf ファイルで SWF 検証を有効にして設定します。jit.conf ファイルをオンデマンドメ
ディアと同じディレクトリにコピーします。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
54
メディアのストリーミングの概要
要素
説明
デフォルト値
//manifest/hds:contentprotection/hds:phds/hds:swfverification
SWF 検証設定用のコンテナー SWF 検
"false"
//manifest/hds:contentprotection/hds:phds/hds:swfverification/hds:white-list-folder
ホワイトリストを含むフォルダーへの
パス。フォルダーには複数のホワイト
リストファイルを含めることができま
す。
証を有効にするには、enabled 属性を
"true" に設定します。
メディアを含むフォルダー。
パスは絶対パスまたは相対パスにする
ことができます。相対パスは、jit.conf
ファイルが含まれたフォルダーに対し
て相対的です。セキュリティ上の理由
から、下位相対パスはサポートされて
いません。
この設定はオプションです。値が指定
されない場合、サーバーは jit.conf
ファイルを含むフォルダーを検索しま
す。
swfhasher ツールの使用
swfhasher ツールを使用して、SWF ファイルから Base64 ハッシュを作成します。ハッシュは .whitelist ファイルに出力さ
れます。Flash Media Server では、.whitelist ファイルは SWF 検証に使用されます。
swfhasher ツールは次のディレクトリにあります。
rootinstall/tools/swfhasher/dist
次のコマンドラインシンタックスを使用して、swfhasher ツールを実行します。
swfhasher --in <file|dir> [--outdir <output dir>] [--out <output file>] [--version]
次の表に、swfhasher ツールのコマンドラインオプションと引数を示します。
オプション
デフォルト値
説明
--in <file|dir>
なし
ハッシュする SWF ファイルを含むファイルまたはディレク
トリを指定します。複数のファイルまたはディレクトリを指
定するには、複数の --in オプションを使用します。
ツールは、拡張子 .whitelist のファイルを出力します。
--out <output file>
なし
.whitelist ファイルの名前を指定します。--out が指定されな
い場合、ハッシュ対象の .swf ファイルごとに .whitelist ファ
イルが個別に作成されます。
この設定はオプションです。
--outdir <outputdir>
なし
出力ディレクトリを作成し、.whitelist ファイルをそのディ
レクトリに保存します。
--outdir が指定されない場合、.whitelist ファイルは、ツール
の実行元のディレクトリに作成されます。--outdir が絶対パ
スでない場合は、ツールの実行元のディレクトリに対する相
対パスとなります。
この設定はオプションです。
--version
なし
SWF 検証のバージョン番号を .whitelist ファイルに出力しま
す。
この設定はオプションです。
次の表に、swfhasher ツールの実行例を示します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
55
メディアのストリーミングの概要
例
結果
現在のディレクトリに foo.swf.whitelist およ
swfhasher --in foo.swf --in bar.swf
び bar.swf.whitelist を作成します。
現在のディレクトリに foo.swf.whitelist およ
swfhasher --in foo.swf --in mydir
び bar.swf.whitelist を作成します。
この例では、bar.swf. が含まれているディレクトリは
mydir です。
swfhasher --in foo.swf --in bar.swf --outdir outputdir
outputdir/foo.swf.whitelist および
outputdir/bar.swf.whitelist を作成します。
swfhasher --in foo.swf --in mydir --out outputfile
foo.swf および mydir/bar.swf のハッシュを
含む outputfile.whitelist を作成します。
この例では、bar.swf. が含まれているディレクトリは
mydir です。
swfhasher --in foo.swf --in mydir -out outputfile -outdir
outputdir
この例では、bar.swf. が含まれているディレクトリは
mydir です。
swfhasher --version
foo.swf および mydir/bar.swf のハッシュを
含む outputdir/outputfile.whitelist を作成
します。
"version 1.0" を表示します。
個々のハッシュのホワイトリスト形式を次に示します。
# foo.swf
PGfcEwgUKWScivIRucIwG5jT
--out オプション使用時の、複数のハッシュのホワイトリスト形式を次に示します。
# foo.swf
PGfcEwgUKWScivIRucIwG5jT
# bar.swf
TcsQWLLi7h7WNjHqcLzzl0J15Srvdzkz2inCTKQLOHw=
# mydir/bar.swf
TcsQWLLi7h7WNjHqcLzzl0J15Srvdzkz2inCTKQLOHw=
Protected HTTP Live Streaming(PHLS)の設定
Flash Media Server 4.5
Flash Media Server 4.5 を使用して、Apple HTTP Live Streaming をサポートするデバイスに、保護されたコンテンツを
HTTP 経由で配信します。Protected HTTP Live Streaming(PHLS)と呼ばれるこの機能は、AES-128 による有線の暗
号化をリアルタイムで提供します。
Flash Media Server インストーラーは、必要な証明書と、rootinstall/phls ディレクトリへのキーを生成します。新しい
キーを作成するには、スクランブルツールを使用します。「スクランブルツール」を参照してください。
ライブ Protected HTTP Live Streaming の設定
ライブストリーミングの PHLS を次のレベルで設定します。
•
サーバー — rootinstall/Apache2.2/conf/httpd.conf
•
アプリケーション — rootinstall/applications/livepkgr/Application.xml
•
イベント — rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml
ライブ PHLS のサーバーレベルの設定ディレクティブ
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
56
メディアのストリーミングの概要
次の表に、Apache httpd.conf ファイルの hlshttp_module のディレクティブを示します。
ディレクティブ
デフォルト値
説明
HLSEncryptionScope
オフ
暗号化スコープを定義します。指定できる値は次のとお
りです。
server — Apache 暗号化設定がすべてのコンテンツに適
用されます。サーバーは、Event.xml と
Application.xml(ライブ)、および jit.conf(オンデマン
ド)のコンテンツ固有の暗号化設定を無視します。
content — Apache 暗号化設定は無視されます。サー
バーは、Event.xml や Application.xml(ライブ)、また
は jit.conf(オンデマンド)からの暗号化設定を使用しま
す。
Off — サーバー全体で暗号化がオフになります。
HLSEncryptCipherKeyFile
なし
コンテンツの暗号化に使用されるデフォルトの暗号化
キーのパス。
HLSEncryptKeyURI
なし
クライアントが暗号化キーを取得するために使用する
URI。
ライブ PHLS のアプリケーションレベルとイベントレベルの設定
Application.xml と Event.xml の両方のファイルには、ライブ PHDS 設定を保持する HLS コンテナーがあります。
Application.xml の場合、コンテナーは //Application/HDS/HLS 下にあります。Event.xml の場合、コンテナーは
//Event/HLS 下にあります。
エレメント
デフォルト値
説明
/HLS
なし
コンテンツ保護設定用のコンテナー。
/HLS/Encryption
なし
enabled 属性を "allow" に設定し、Event.xml ファイル
の PHLS 設定が Application.xml ファイルの設定よりも
優先されるようにします。
enabled 属性を "true" に設定し、Application.xml ファ
イルで PHLS を設定します。これらの設定は、アプリ
ケーション内のすべてのライブイベントに適用されます。
Application.xml ファイルの enabled 属性のデフォルト
値は "allow" です。Event.xml ファイルのデフォルト値
は "false" です。
/HLS/KeyFile
なし
/HLS/KeyURI
なし
コンテンツの暗号化に使用されるデフォルトの暗号化
キーのパス。
クライアントが暗号化キーを取得するために使用する
URI。60 ページの「クライアントへの暗号化キーの配信」
を参照してください。
ライブ PHLS のサーバーレベルでの設定
1 rootinstall/Apache2.2/conf/httpd.conf ファイルを開いて hlshttp_module を探します。
<IfModule hlshttp_module>
...
<Location /hls-live>
...
2 以下を非コメント化します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
# Uncomment the following directives to enable encryption
# for this location:
HLSEncryptionScope server
HLSEncryptionCipherKeyFile "../phls/liveeventkey.bin"
HLSEncryptKeyURI "https://<ServerName>/hls-key/liveeventkey.bin"
<ServerName> パラメーターを Flash Media Server の完全修飾ドメイン名に置き換えます。
3 60 ページの「クライアントへの暗号化キーの配信」の手順に従い、SSL を使用して、または SSL を使用せずに、キーを
配信するようにサーバーを設定します。これらの手順では、HLSEncryptKeyURI ディレクティブで /hls-key パスを設定し
ます。
4 Flash Media Live Encoder を開き、次の設定でストリームをパブリッシュします。
•
形式 — H.264
•
キーフレーム頻度 — 4 秒
• FMS URL — rtmp://<server-name>/livepkgr
•
ストリーム — encryption?adbe-live-event=encryption
5 iOS デバイスから次の URL を要求します。
http://<servername>/hls-live/livepkgr/_definst_/encryption/encryption.m3u8
6 ストリームが暗号化されていることを確認するには、ストリーム上で Apple Media Stream Validator Tool を実行しま
す。「Technical Note TN2224」を参照してください。
ライブ PHLS のアプリケーションレベルでの設定
1 rootinstall/Apache2.2/conf/httpd.conf ファイルを開いて hlshttp_module を探します。
<IfModule hlshttp_module>
...
<Location /hls-live>
...
2 HLSEncryptionScope ディレクティブを非コメント化し、content に設定します。
# Uncomment the following directives to enable encryption
# for this location:
HLSEncryptionScope content
#
HLSEncryptionCipherKeyFile "../phls/liveeventkey.bin"
#
HLSEncryptKeyURI "https://<ServerName>/hls-key/liveeventkey.bin"
<ServerName> パラメーターを Flash Media Server の IP アドレスまたは DNS に置き換えます。
3 rootinstall/applications/livepkgr フォルダーの Application.xml ファイルを編集して次の内容を追加します。
<Application>
<HDS>
<HLS>
<Encryption enabled="true">
<KeyFile>C:\Program Files\Adobe\Flash Media Server 4.5\phls\liveeventkey.bin</KeyFile>
<KeyURI>http://<server-ip>/hls-key/liveeventkey.bin</KeyURI>
</Encryption>
</HLS>
</HDS>
</Application>
4 60 ページの「クライアントへの暗号化キーの配信」の手順に従い、SSL を使用して、または SSL を使用せずに、キーを
配信するようにサーバーを設定します。これらの手順では、KeyURI ディレクティブで /hls-key パスを設定します。
5 Flash Media Live Encoder を開き、次の設定でストリームをパブリッシュします。
•
形式 — H.264
最終更新日 2011/10/10
57
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
•
キーフレーム頻度 — 4 秒
• FMS URL — rtmp://<server-name>/livepkgr
•
ストリーム — encryption?adbe-live-event=encryption
6 iOS デバイスから次の URL を要求します。
http://<servername>/hls-live/livepkgr/_definst_/encryption/encryption.m3u8
7 ストリームが暗号化されていることを確認するには、ストリーム上で Apple Media Stream Validator Tool を実行しま
す。「Technical Note TN2224」を参照してください。
ライブ PHLS のイベントレベルでの設定
1 rootinstall/Apache2.2/conf/httpd.conf ファイルを開いて hlshttp_module を探します。
<IfModule hlshttp_module>
...
<Location /hls-live>
...
2 HLSEncryptionScope ディレクティブを非コメント化し、content に設定します。
# Uncomment the following directives to enable encryption
# for this location:
HLSEncryptionScope content
#
HLSEncryptionCipherKeyFile "../phls/liveeventkey.bin"
#
HLSEncryptKeyURI "https://<ServerName>/hls-key/liveeventkey.bin"
<ServerName> パラメーターを Flash Media Server の IP アドレスまたは DNS に置き換えます。
3 rootinstall/applications/livepkgr/_definst_/encryption フォルダーの Event.xml ファイルを編集して次の内容を追加
します。
<Event>
<HLS>
<Encryption enabled="true">
<KeyFile>C:\Program Files\Adobe\Flash Media Server 4.5\phls\liveeventkey.bin</KeyFile>
<KeyURI>http://<server-ip>/hls-key/liveeventkey.bin</KeyURI>
</Encryption>
</HLS>
</Event>
4 60 ページの「クライアントへの暗号化キーの配信」の手順に従い、SSL を使用して、または SSL を使用せずに、キーを
配信するようにサーバーを設定します。これらの手順では、KeyURI ディレクティブで /hls-key パスを設定します。
5 Flash Media Live Encoder を開き、次の設定でストリームをパブリッシュします。
•
形式 — H.264
•
キーフレーム頻度 — 4 秒
• FMS URL — rtmp://<server-name>/livepkgr
•
ストリーム — encryption?adbe-live-event=encryption
6 iOS デバイスから次の URL を要求します。
http://<ServerName>/hls-live/livepkgr/_definst_/encryption/encryption.m3u8
7 ストリームが暗号化されていることを確認するには、ストリーム上で Apple Media Stream Validator Tool を実行しま
す。「Technical Note TN2224」を参照してください。
オンデマンド Protected HTTP Live Streaming の設定
オンデマンドストリーミングの PHLS を次のレベルで設定します。
最終更新日 2011/10/10
58
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
59
メディアのストリーミングの概要
サーバー — rootinstall/Apache2.2/conf/httpd.conf
ストリーム — jit.conf ファイルを作成し、コンテンツと同じディレクトリにコピーします。
オンデマンド PHLS のサーバーレベルの設定
Apache httpd.conf ファイルの hlshttp_module に対して次のディレクティブを設定します。
ディレクティブ
デフォルト値
説明
HLSEncryptionScope
オフ
暗号化スコープを定義します。指定できる値は次のとお
りです。
server — Apache 暗号化設定がすべてのコンテンツに適
用されます。サーバーは、Event.xml と
Application.xml(ライブ)、および jit.conf(オンデマン
ド)のコンテンツ固有の暗号化設定を無視します。
content — Apache 暗号化設定は無視されます。サー
バーは、Event.xml や Application.xml(ライブ)、また
は jit.conf(オンデマンド)からの暗号化設定を使用しま
す。Off — サーバー全体で暗号化がオフになります。
HLSEncryptCipherKeyFile
なし
HLSEncryptKeyURI
なし
コンテンツの暗号化に使用されるデフォルトの暗号化
キーのパス。
クライアントが暗号化キーを取得するために使用する
URI。60 ページの「クライアントへの暗号化キーの配信」
を参照してください。
オンデマンド PHLS のストリームレベルの設定
jit.conf ファイルの次のエレメントをオンデマンドメディアと同じディレクトリに設定します。
エレメント
デフォルト値
説明
//manifest/hds:encryption
なし
設定の親エレメント。このエレメント
には、enabled 属性があります。Flash
Access または PHDS での保護用にコン
テンツを有効にするには、enabled 属
性を "true" に設定します。この値は、
デフォルトでは "false" に設定されてい
ます。
//manifest/hds:keyfile
なし
コンテンツの暗号化に使用されるデ
フォルトの暗号化キーのパス。
//manifest/hds:keyuri
なし
クライアントが暗号化キーを取得する
ために使用する URI。60 ページの「ク
ライアントへの暗号化キーの配信」を
参照してください。
オンデマンド PHLS のサーバーレベルでの設定
サーバーレベルで PHLS を設定するには、httpd.conf ファイルで HLSEncryptionScope を server に設定します。この設定は、
この Location ディレクティブへのすべての要求に対して httpd.conf ファイルの設定を使用するようにサーバーに伝えます。
1 rootinstall/Apache2.2/conf/httpd.conf ファイルを開いて hlshttp_module を探します。
<IfModule hlshttp_module>
...
<Location /hls-vod>
...
2 以下を非コメント化します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
# Uncomment the following directives to enable encryption
# for this location:
HLSEncryptionScope server
HLSEncryptionCipherKeyFile "../phls/vodkey.bin"
HLSEncryptKeyURI "https://<ServerName>/hls-key/vodkey.bin"
<ServerName> パラメーターを Flash Media Server の IP アドレスまたは DNS に置き換えます。
3 60 ページの「クライアントへの暗号化キーの配信」の手順に従い、SSL を使用して、または SSL を使用せずに、キーを
配信するようにサーバーを設定します。これらの手順では、HLSEncryptKeyURI ディレクティブで /hls-key パスを設定し
ます。
4 iOS デバイスから次の URL を要求します。
http://<ServerName>/hls-vod/sample2_1000kbps.f4v.m3u8
5 ストリームが暗号化されていることを確認するには、ストリーム上で Apple Media Stream Validator Tool を実行しま
す。「Technical Note TN2224」を参照してください。
オンデマンド PHLS のストリームレベルでの設定
個々のメディアセットを設定するには、httpd.conf ファイルで、HLSEncryptionScope を content に設定します。この設定
は、httpd.conf の設定よりも jit.conf ファイルの設定が優先されることをサーバーに伝えます。
1 ストリームレベルでライブ PHLS を設定するには、rootinstall/Apache2.2/conf/httpd.conf ファイルを開いて
hlshttp_module を探します。
<IfModule hlshttp_module>
...
<Location /hls-vod>
...
2 HLSEncryptionScope を非コメント化し、content に設定します。
# Uncomment the following directives to enable encryption
# for this location:
HLSEncryptionScope content
#
HLSEncryptCipherKeyFile
#
HLSEncryptKeyURI
3 jit.conf 設定ファイルを作成し、オンデマンドメディアファイルと同じディレクトリにコピーします。
<hds:hls>
<hds:encryption enabled="true">
<hds:keyfile>../phls/content.key</hds:keyfile>
<hds:keyuri>https://<server-name>/hls-key/content.key</hds:keyuri>
</hds:encryption>
</hds:hls>
4 60 ページの「クライアントへの暗号化キーの配信」の手順に従い、SSL を使用して、または SSL を使用せずに、キーを
配信するようにサーバーを設定します。これらの手順では、/hds:keyuri エレメントで /hls-key パスを設定します。
5 vodkey.bin ファイルを rootinstall/phls から rootinstall/webroot/keys にコピーします。
6 iOS デバイスから次の URL を要求します。
http://<servername>/hls-vod/sample2_1000kbps.f4v.m3u8
7 ストリームが暗号化されていることを確認するには、ストリーム上で Apple Media Stream Validator Tool を実行しま
す。「Technical Note TN2224」を参照してください。
クライアントへの暗号化キーの配信
次の PHLS 設定は、クライアントが暗号化キー取得のために使用するパスを指定します。
• HLSEncryptKeyURI
最終更新日 2011/10/10
60
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
61
メディアのストリーミングの概要
• //manifest/hds:hls/hds:encryption/hds:keyuri
• //Application/HDS/HLS/Encryption/KeyURI
• //Event/HLS/Encryption/KeyURI
オンデマンド PHLS とライブ PHLS では、どちらも Apache HLS モジュールを使用して暗号化キーをクライアントに配信
します。このモジュールは、要求を配信する前にキーをスクランブル解除します。
キーファイルが安全に配信されることを保証するために、クライアント認証を SSL を介して有効にできます。参照設定ファ
イルと Apple CA バンドルは、次の場所にインストールされます。
rootinstall/Apache2.2/conf/httd-hls-secure.conf
rootinstall/phls/certs/ca
httpd-hls-secure.conf ファイルは、暗号化キーホスティングを有効にした location /hls-key に対してクライアント認証を
有効化し、デフォルトの SSL ポートで仮想ホストを設定する方法を実証します。ただし、これは単なる参照設定です。本番
環境システムでの認証を保証するために、デプロイメントの設定をカスタマイズします。
SSL クライアント認証を使用したキーファイルの配信
1 Apache httpd.conf ファイルで、次の行を非コメント化します。
"#LoadModule ssl_module"
"#Include conf/httpd-hls-secure.conf"
2 デプロイメントに基づいて、rootinstall/Apache2.2/conf/httpd-hls-secure.conf ファイルで SSL プロパティをカスタ
マイズします。このカスタマイズには、公認の CA から SSL 証明書を取得する作業も含まれています。
重要:サーバーに対して生成された SSL 証明書には、テスト環境であっても、完全修飾ドメイン名(FQDN)である
CN が必要になります。これがないと、iOS クライアントがクライアント証明書を提示しない可能性があり、それによっ
てクライアント認証が失敗します。クライアント認証が失敗すると、キーファイルは配信されず、iOS クライアントがク
ラッシュします。これは既知の Apple バグです。
3
Apache を再起動します。
SSL を使用しないキーファイルの配信
1 Apache httpd.conf ファイルの <IfModule hlshttp_module> 行の下に次の内容を追加します。
<Location /hls-key>
HLSEncryptHostCipherKey true
HLSFmsDirPath ".."
HLSEncryptKeyRepository "../phls"
</Location>
Location パスには任意の値を指定できます。HLSEncryptKeyRepository ディレクティブをキーの場所にポイントします。
デフォルトでは、キーは rootinstall/phls フォルダーにあります。
2 Apache を再起動します。
Apache httpd.conf ファイルで次のパラメーターを使用してキーホスティングを設定します。
パラメーター
説明
デフォルト値
HLSEncryptHostCipherKey
この場所からの暗号化キーホスティングを
false
有効(true)または無効(false)にします。
HLSEncryptKeyRepository
キーファイルを含むフォルダーのパス。
最終更新日 2011/10/10
なし
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ライブ PHDS と PHLS の連携使用
ライブ PHLS および PHDS を使用した配信で、1 セットのストリームを Flash Media Server にパブリッシュするには、特
別な設定が必要になります。
PHDS が有効な場合、サーバーはストリームを取り込んで暗号化された F4F データにパッケージ化します。ただし、PHLS
は、暗号化されないデータをそのソースとして必要とします。暗号化された F4F データを取得して、それを PHLS 用に再び
暗号化することはできません。
保護されたコンテンツを Flash Player/AIR および iOS デバイスに配信するには、2 つの異なるアプリケーションを(1 つは
HDS 用、もう 1 つは HLS 用)にパブリッシュするようにエンコーダーを設定します。
1 livepkgr アプリケーションの 2 つのコピーを作成します。2 つのコピーにそれぞれ「livepkgr_hds」と「livepkgr_hls」
という名前を付けます。
2 httpd.conf ファイルを次のように設定します。
a PHDS の場合は、次の Location ディレクティブを使用します。
<Location /hds-live>
HttpStreamingEnabled true
HttpStreamingLiveEventPath "../applications/livepkgr_hds"
HttpStreamingContentPath "../applications/livepkgr_hds"
HttpStreamingURLSandboxLevel "App"
HttpStreamingF4MMaxAge 2
HttpStreamingBootstrapMaxAge 2
HttpStreamingFragMaxAge -1
Options -Indexes FollowSymLinks
</Location>
b PHLS の場合は、次の Location ディレクティブを使用します。
<Location /hls-live>
HttpStreamingEnabled true
HttpStreamingLiveEventPath "../applications/livepkgr_hls"
HttpStreamingContentPath "../applications/livepkgr_hls"
HttpStreamingURLSandboxLevel "App"
HttpStreamingF4MMaxAge 2
HttpStreamingBootstrapMaxAge 2
HttpStreamingFragMaxAge -1
Options -Indexes FollowSymLinks
</Location>
c Apache を再起動します。
3 Flash Media Live Encoder から livepkgr_hds および livepkgr_hls アプリケーションにストリームをパブリッシュしま
す。livestream%i?adbe-live-event=liveevent というストリーム名を使用します。
4 要求 URL は次のようになります。
•
(PHDS)http://<serveruri>/hds-live/_definst_/<liveevent>.f4m
•
(PHLS)http://<serveruri>/hls-live/_definst_/<liveevent>.m3u8
ディレクティブ HttpStreamingURLSandboxLevel が "App" に設定されているため、要求 URL はアプリケーション名を使
用しません。
最終更新日 2011/10/10
62
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
HTTP Dynamic Streaming および HTTP Live Streaming
の設定
HTTP Dynamic Streaming および HTTP Live Streaming の概要
HTTP を介したメディアのストリーミング
HTTP 経由でコンテンツを配信することを通常「プログレッシブダウンロード」といいます。コンテンツは、サーバーから
クライアントに、ファイルの最初から最後まで連続して転送する必要があります。クライアントが前方の場所をシークする
には、その場所およびそれより前のすべてのデータがダウンロードされている必要があります。
RTMP 経由でコンテンツを配信することを「ストリーミング」といいます。クライアントはサーバー (Flash Media Server
など ) に対するソケット接続を作成し、それを通してコンテンツが連続したストリームで送信されます。クライアントは、
転送が済んだデータの量に関係なく、コンテンツ内の任意の点をすぐにシークできます。
Adobe HTTP Dynamic Streaming はこれらの方法を組み合わせて、Flash プラットフォームで HTTP ストリーミングを
実現します。HTTP Dynamic Streaming は、Flash Player クライアントがファイル全体をダウンロードせずにすぐアクセ
スできるフラグメントに、メディアファイルをパッケージ化します。Adobe HTTP Dynamic Streaming に含まれる複数の
コンポーネントが連携して、メディアをパッケージ化し、HTTP 経由で Flash Player および AIR にストリーミングします。
HTTP Dynamic Streaming は、マルチビットレートストリーミング、DVR、および Adobe® Flash® Access™ 保護をサポー
トします。
Flash Media Server 4.5 では、Adobe HTTP Dynamic Streaming で Apple HTTP Live Streaming のサポートが追加さ
れています。同じ HTTP Dynamic Streaming ワークフローを使用してライブコンテンツおよびオンデマンドコンテンツを
パッケージ化し、Apple HTTP Live Streaming をサポートするすべてのデバイスにストリーミングします。Apple HTTP
Live Streaming には、ライブメディアおよびオンデマンドメディアが含まれます。
注意:Flash Media Server は、HTTP Live Streaming 用の Timed Metadata の追加をサポートしていません。
HTTP Dynamic Streaming のコンポーネント
Adobe HTTP Streaming ソリューションには次のコンポーネントが含まれます。
Live Packager Live Packager は、rootinstall/applications/livepkgr にインストールされる Flash Media Server アプリ
ケーションです。サーバーが RTMP 経由でライブストリームを取り込み、Live Packager がそれをリアルタイムで F4F ファ
イルと MPEG-2 TS ファイルに変換します。
F4F HTTP Module ファイルを Flash Player および AIR に配信する Apache HTTP Server モジュール。F4F Module
(HTTP Origin Module とも呼ばれる)は、ライブコンテンツを配信します。また、File Packager ツールを使用してオフ
ラインでパッケージ化されたオンデマンドのコンテンツも配信します。
F4F HTTP Module は、Flash Media Server 4 以降と共に rootinstall/Apache2.2/modules/mod_f4fhttp.so にインス
トールされます。このモジュールは、adobe.com からスタンドアロンの Apache モジュールとして入手することもできま
す。
HLS HTTP Module ファイルを iOS デバイスと Mac OS に配信する Apache HTTP Server モジュール。
HTTP HLS Module は、Flash Media Server 4.5 以降と共に rootinstall/Apache2.2/modules/mod_hlshttp.so にインス
トールされます。これは、スタンドアロンの Apache モジュールとしては使用できません。
JIT HTTP Module オンデマンドファイルをジャストインタイムでパッケージ化し、それらを Flash Player および AIR に
配信する Apache HTTP Server モジュール。「ジャストインタイム」とは、クライアントでメディアファルを要求すると、
リアルタイムでメディアファイルがパッケージ化されることを意味します。
JIT HTTP Module は、Flash Media Server 4.5 以降と共に rootinstall/Apache2.2/modules/mod_jithttp.so にインス
トールされます。これは、スタンドアロンの Apache モジュールとしては使用できません。
最終更新日 2011/10/10
63
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
File Packager オンデマンドメディアを F4F フラグメントに変換するコマンドラインのオフラインツール。File Packager
は、rootinstall/tools/f4fpackager フォルダーにあり、adobe.com から入手できます。
OSMF Media Player Flash Player および AIR への HTTP Dynamic Streaming をサポートする、Open Source Media
Framework(OSMF)に基づいて構築された複数の Media Player があります。3 ページの「構築済みの Media Player」
を参照してください。
F4F ファイル形式の仕様 F4F ファイル形式では、メディアコンテンツをセグメントとフラグメントに分割する方法が説明
されています。Live Packager、File Packager および JIT HTTP モジュールは、この仕様に基づいたコンテンツを出力しま
す。各フラグメントには、キャッシュ管理と高速シークを提供する固有のブートストラップ情報があります。詳細について
は、「F4F ファイル形式の仕様」を参照してください。
F4M ファイル形式の仕様 Flash Media Manifest ファイル形式には、HTTP Origin Module が提供できるファイルのパッ
ケージについての情報が含まれます。マニフェスト情報には、複数のビットレートでエンコードされたファイルのコーデッ
ク、解像度および可用性が含まれます。また、マニフェスト情報には DRM データも含まれます。Media Player は F4M
ファイルを使用して、1 つのメディアを再生します。詳細については、「F4M ファイル形式の仕様」を参照してください。
Flash Access Flash Access は保護されたメディアを Flash Player に配信します。Flash Access で HTTP Dynamic
Streaming を使用するには、File Packager と Flash Media Server を使用してコンテンツのパッケージ化と暗号化の両方を
行います。詳細については、「Protecting content with Flash Access」を参照してください。
Flash Media Server 4.5 では、Flash Access Server を使用せずに Flash Access レベルを保護するサポートが追加されてい
ます。45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」および 55 ページの「Protected HTTP
Live Streaming(PHLS)の設定」を参照してください。
HTTP 経由でのライブメディアのストリーミングのワークフロー
ライブ HTTP ストリーミングのワークフローを体験するための最も良い方法は、チュートリアルを完了することです。5
ページの「ライブメディアのストリーミング(HTTP)」を参照してください。
Adobe HTTP Dynamic Streaming および Apple HTTP Live Streaming のすべての使用法でのワークフローを次ぎに示
します。
1 デフォルトのライブイベントを使用するか、ライブイベントを作成します。
デフォルトのライブイベントは rootinstall/applications/livepkgr/events/_definst_/liveevent です。各ライブイベン
トには、1 セットのコンテンツの設定内容が含まれます。詳細については、66 ページの「ライブイベントの作成および
設定」を参照してください。
2 (オプション)マルチビットレートストリーミングを設定するには、Set-level F4M/M3U8 File Generator ツールを使用
してセットレベルマニフェストファイルを生成します。セットレベルマニフェストファイルには、各ストリームに関する
情報が含まれています。10 ページの「HTTP 経由でのライブマルチビットレートストリームのパブリッシュおよび再
生」を参照してください。
3 (オプション)Adobe HTTP Dynamic Streaming 用に DVR を設定するには、セットレベルマニフェストファイルを作
成します。
Apple HTTP Live Streaming 用にスライディングウィンドウを設定するには、httpd.conf、Application.xml または
Event.xml ファイルを設定します。
17 ページの「DVR の設定 (HDS)」および 17 ページの「スライディングウィンドウの設定(HLS)」を参照してくださ
い。
4 (オプション — Adobe HTTP Dynamic Streaming)保護された HDS のコンテンツを暗号化する方法については、45
ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」を参照してください。
Flash Access 用にコンテンツを暗号化するには、Event.xml ファイルを編集します。84 ページの「Flash Access 保護用
のコンテンツの暗号化」を参照してください。
最終更新日 2011/10/10
64
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
5 (オプション — Apple HTTP Live Streaming)Apple HTTP Live Streaming のコンテンツを暗号化する方法について
は、「Apple HLS 用のコンテンツの保護」を参照してください。
6 crossdomain.xml ファイルを作成し、rootinstall¥webroot フォルダーにコピーします。
crossdomain.xml ファイルを使用することで、他のドメインでホストされている Flash Player クライアントがこのドメ
インのデータにアクセスできます。詳細については、
『ActionScript 3.0 デベロッパーズガイド』の「Web サイトのコン
トロール(ポリシーファイル)」を参照してください。
7 ストリームをサーバーにパブリッシュします。
8 (Adobe HTTP Dynamic Streaming)Strobe Media Playback を使用してメディアを再生します。Strobe Media
Playback は、Flash Media Server と共にインストールされます。
9 (Apple HTTP Live Streaming)コンテンツを iOS または MacOS で再生します。
サポートされているデバイスについては、「Apple HTTP Live Streaming documentation」を参照してください。
HTTP 経由でのオンデマンドメディアのストリーミングのワークフロー
オンデマンド HTTP ストリーミングのワークフローを体験するための最も良い方法は、チュートリアルを完了することで
す。23 ページの「オンデマンドメディアのストリーミング(HTTP)」を参照してください。
Adobe HTTP Dynamic Streaming および Apple HTTP Live Streaming の使用法のワークフローを次に示します。
1 メディアファイルをエンコードし、それらを Flash Media Server 上の rootinstall/webroot/vod ディレクトリにコピー
します。
この場所を設定するには、「Configure the location of content (HDS and HLS)」を参照してください。
2 (オプション)マルチビットレートストリーミングを設定するには、Set-level F4M/M3U8 File Generator ツールを使用
してセットレベルマニフェストファイルを生成します。26 ページの「HTTP 経由でのオンデマンドマルチビットレート
メディアファイルの再生」を参照してください。
3 (オプション — Adobe HTTP Dynamic Streaming)保護された HDS のコンテンツを(Flash Access を使用せずに)
暗号化する方法については、45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」を参照してくだ
さい。
Flash Access 用にコンテンツを暗号化するには、jit.conf ファイルを編集します。84 ページの「Flash Access 保護用の
コンテンツの暗号化」を参照してください。
4 (オプション — Apple HTTP Live Streaming)Apple HTTP Live Streaming のコンテンツを暗号化するには、jit.conf
ファイルまたは Apache httpd.conf ファイルを設定します。
「Apple HLS 用のコンテンツの保護」を参照してください。
5 crossdomain.xml ファイルを作成し、rootinstall¥webroot フォルダーにコピーします。
crossdomain.xml ファイルを使用することで、他のドメインでホストされている Flash Player クライアントがこのドメ
インのデータにアクセスできます。詳細については、
『ActionScript 3.0 デベロッパーズガイド』の「Web サイトのコン
トロール(ポリシーファイル)」を参照してください。
6 (Adobe HTTP Dynamic Streaming)Strobe Media Playback を使用してメディアを再生します。Strobe Media
Playback は、Flash Media Server と共にインストールされます。
7 (Apple HTTP Live Streaming)コンテンツを iOS デバイスまたは MacOS で再生します。
サポートされているデバイスについては、「Apple HTTP Live Streaming documentation」を参照してください。
最終更新日 2011/10/10
65
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Flash Media Server 4.0 と Flash Media Server 4.5 での HTTP Dynamic
Streaming の相違点
Flash Media Server 4.0 と Flash Media Server 4.5 での HTTP Dynamic Streaming(HDS)の相違点は次のとおりです。
•
ライブストリーミング用の簡素化された要求 URL。
16 ページの「Flash Media Server 4.0 と Flash Media Server 4.5 での HTTP ライブ URL の相違点」を参照してくださ
い。
•
ジャストインタイムのオンデマンドパッケージ化のサポート。
Media Player が HDS を使用して rootinstall/webroot/vod フォルダーからオンデマンドメディアファイルを要求する
と、Apache はストリームをリアルタイムにパッケージ化します。Flash Media Server 4.0 と同様に、HTTP ストリーミ
ング用に Media File を事前にパッケージ化する必要はありません。23 ページの「オンデマンドメディアのストリーミン
グ(HTTP)」を参照してください。
• jit.conf ファイルを使用して、ストリームレベルでオンデマンドストリーミングを設定。jit.conf ファイルをメディアと
同じフォルダーにコピーします。97 ページの「オンデマンド HTTP ストリーミングの設定」を参照してください。
•
セットレベル F4M および M3U8 ファイルを使用して、アダプティブビットレートストリーミング用のストリームセッ
トを設定。
セットレベルファイルは、メディアのビットレートを記述します。ライブおよびジャストインタイム Packager は、スト
リームレベルの F4M および M3U8 ファイルを生成して、個々のメディアを記述します。セットレベルファイルは、ど
の Web サーバーにも置くことができます。10 ページの「HTTP 経由でのライブマルチビットレートストリームのパブ
リッシュおよび再生」および 26 ページの「HTTP 経由でのオンデマンドマルチビットレートメディアファイルの再生」
を参照してください。
ライブイベントの作成および設定
livepkgr アプリケーションを使用すると、HTTP 経由でライブストリーミングイベントの数に制限なく(ディベート、ス
ポーツイベント、タウンホールミーティングなど)を配信できます。各ライブストリーミングイベントには、マルチビット
レートストリーミング、DVR およびコンテンツ保護のための独自の設定が必要です。
ライブイベントは、livepkgr アプリケーション内の設定レベルです。Flash Media Server アプリケーションと同様に、ライ
ブイベントはサーバー上のフォルダーです。フォルダーには、Manifest.xml および Event.xml の 2 つの設定ファイルが含
まれています。これらの設定ファイルを使用して一連のストリームを設定します。
また、Flash Media Server アプリケーションと同様に、ライブイベントのフォルダー名はライブイベントの名前になりま
「livepkgr」
す。HTTP ストリーミング用にライブコンテンツをパッケージ化する Flash Media Server アプリケーションは、
と呼ばれます。livepkgr アプリケーションには、「liveevent」という名前のライブイベントが含まれます。
rootinstall/applications/livepkgr/events/_definst_/liveevent
注意:「applications」フォルダーの場所を設定できます。また、「streams」フォルダーに対する仮想ディレクトリのマッ
ピングも設定できます。ただし、「events」フォルダーに対する仮想ディレクトリのマッピングは設定できません。
ライブイベント内のストリームは、フラグメントとしてパッケージ化されてディスクに書き込まれます。ライブイベント
(ストリームのコンテンツとメタデータ)は、ユーザーが削除するまで存在しています。Media Player は、ソースストリー
ムがパブリッシュを停止した後でコンテンツにアクセスできます。
ライブイベントの作成
最終更新日 2011/10/10
66
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ライブストリーミングイベントごとに、ライブイベントのフォルダーを作成します。
1 livepkgr アプリケーションフォルダー内に次の「events」フォルダー構造を作成します。
rootinstall/applications/livepkgr/events/applicationinstancename/liveeventname
「liveevent2」という名前の新しいライブイベントを次に示します。
rootinstall/applications/livepkgr/events/_definst_/liveevent2
次の場所に livepkgr アプリケーションの別のインスタンスのライブイベントを作成することもできます。
rootinstall/applications/livepkgr/events/anotherappinstance/liveevent
2 Events.xml ファイルをデフォルトの liveevent フォルダーから新しいフォルダーにコピーします。
rootinstall/applications/livepkgr/events/_definst_/liveevent2/Events.xml
3 Manifest.xml ファイルをデフォルトの liveevent フォルダーから新しいフォルダーにコピーします。
rootinstall/applications/livepkgr/events/_definst_/liveevent2/Manifest.xml
4 Events.xml ファイルをテキストエディターで開き、次のようにイベント名を変更します。
<Event>
<EventID>liveevent2</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>400000</SegmentDuration>
<DiskManagementDuration>3</DiskManagementDuration>
<Recording>
</Event>
ライブイベントの設定
Event.xml file で設定可能な機能の詳細については、93 ページの「ライブ HTTP ストリーミングのイベントレベル
(Event.xml)での設定」を参照してください。
ライブイベントにストリームを割り当てるためのサーバーサイドコードの記述
重要:HTTP Dynamic Streaming 用にサーバーサイドコードを記述する必要はありません。livepkgr アプリケーションに
は、ライブイベントにストリームを割り当てるサーバーサイド ActionScript ファイルがあります。コードを確認するには、
rootinstall/applications/livepkgr/main.asc をテキストエディターで開いてください。このセクションを参照して、コード
を理解してください。
Live Packager プロセスでは、接頭辞が f4f: のストリームを処理します。Flash Media Live Encoder は f4f: 接頭辞をサポー
トしていないので、サーバーサイドスクリプトまたは Flash Media Server Authorization プラグインでストリーム名に接頭
辞を追加します。
1 つのアプリケーションに複数のライブイベントを含めることができます。そのため、アプリケーションにパブリッシュさ
れるストリームは、デフォルトではライブイベントと関連付けられません。ライブストリームとライブイベントを関連付け
るには、サーバーサイドスクリプトまたは Flash Media Server Authorization プラグインの(両方ではなく)どちらか一方
を使用します。1 つのライブストリームは 1 つのライブイベントのみと関連付けることができます。
ストリームの関連付けはパブリッシュイベントの間に行います。ストリームがパブリッシュされて関連付けられると、サー
バーはストリームのストリーム記録ファイル(.stream)を次のイベントディレクトリに作成します。
applications/appname/events/appinstancename/liveeventname/livestream.stream
ストリーム記録ファイルには、パッケージ化されたストリームファイルの場所についての情報が含まれます。HTTP Origin
Module は、この情報を使用して .f4m マニフェストファイルを生成します。詳細については、103 ページの「ライブ
HTTP Dynamic Streaming のアプリケーションフローについて」を参照してください。
最終更新日 2011/10/10
67
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
サーバーサイド ActionScript の使用
このコード例を参照するには、rootinstall/applications/livepkgr/main.asc をテキストエディターで開きます。
❖ サーバーサイド ActionScript のコードでは、application.onPublish イベントを使用して次の操作を行います。
• Stream.liveEvent プロパティを使用して、サーバーが記録を始める前にライブストリームとライブイベントを関連付け
ます。
• f4f: 接頭辞をストリーム名に追加します。これにより、ストレージをパッケージ化するようサーバーに伝えます。
• Stream.record() を呼び出してストリームを記録します。
Authorization プラグインの使用
これらのタスクを Authorization プラグインで実行するには、プラグインコードを記述する必要があります。
❖ Authorization プラグインのコードでは、E_PUBLISH イベントを使用して次の操作を行います。
• F_STREAM_TYPE フィールドを "f4f" に設定します。
• F_STREAM_LIVE_EVENT フィールドを "liveeventname" に設定します。この例では "liveevent" を使用します。
• F_STREAM_PUBLISH_TYPE フィールドを、"record" を意味する 0 に設定します。
E_PUBLISH イベントを処理するサンプルの C++ コードを次に示します。
case IFmsAuthEvent::E_PUBLISH:
{
// The name of the FMS app to which the live stream is published.
char* pLiveApp = "livepkgr";
// The stream type used for HTTP Dynamic Streaming.
char* pStreamType = "f4f";
// The name of the live event defined in the livepkgr app.
char* pLiveEvent = "liveevent";
// The Auth Plug-in affects all apps on the server.
// We only want to process streams published to the livehttp app.
char* pAppName = getStringField(m_pAev, IFmsAuthEvent::F_APP_NAME);
if (pAppName && !strncmp(pAppName, pLiveApp, strlen(pLiveApp)))
{
// Set the stream type.
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_TYPE, pStreamType);
// Set the publish type to record.
//0 record, 1 append, -1 live
setI32Field(m_pAev, IFmsAuthEvent::F_STREAM_PUBLISH_TYPE, 0);
// Associate the stream with a live event.
setStringField(m_pAev, IFmsAuthEvent::F_STREAM_LIVE_EVENT, pLiveEvent);
}
}
コンテンツストレージ(HDS および HLS)
要求 URL の開始の設定
Media Player がサーバーからコンテンツを要求するときに、サーバーに要求 URL を渡します。サーバー名(およびオプ
ションのポート番号)に続く要求 URL のセクションは、Apache httpd.conf ファイルの Location ディレクティブパスで定
義されています。例えば、HDS オンデマンドストリーミングの Location ディレクティブは次のとおりです。
最終更新日 2011/10/10
68
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<IfModule jithttp_module>
<Location /hds-vod>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/vod"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
</Location>
</IfModule>
Apache がパス /hds-vod を持つ要求を受け取ると、jithttp_module(ジャストインタイム)を使用して要求を処理します。
jithttp_module は、Location ディレクティブ内にネストされたディレクティブの値を使用します。
複数のテナントまたは複数のアプリケーション用の HTTP ストリーミングを設定するには、異なるパスを持つ Location
ディレクティブを追加します。次の表は、要求 URL の構文をリストし、Location ディレクティブパスは太字で示されていま
す。
ストリーミングの種類
要求 URL の構文
Adobe HDS ライブ
http://<fms-dns-or-ip>/hdslive/livepkgr/<appinstname>/<eventname>/<streamname>.f4m
Apple HLS ライブ
http://<fms-dns-or-ip>/hlslive/livepkgr/<appinstname>/<eventname>/<streamname>.m3u8
ジャストインタイムでパッケー
ジ化される Adobe HDS オンデ
http://<fms-dns-or-ip>/hds-vod/<streamname>.<fileextension>.f4m
マンド
Apple HLS オンデマンド
http://<fms-dns-or-ip>/hls-vod/<streamname>.<fileextension>.m3u8
Location ディレクティブの追加
注意:このタスクでは HDS オンデマンドを使用しますが、この手順はすべての種類の HTTP ストリーミングに適用されま
す。
1 rootinstall/Apache2.2/conf/httpd.conf をテキストエディターで開きます。
2 編集、コピーおよび貼り付けを行うストリーミングの種類の Location ディレクティブを配置します。
3 例えば、HDS オンデマンドストリーミング用の Location を作成するには、/hds-vod セクションをコピーして、それを
既存のセクションの下に貼り付けます。
<IfModule jithttp_module>
<Location /hds-vod>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/vod"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
# Uncomment the following directives to enable encryption
# for this location.
#
EncryptionScope server
#
ProtectionScheme phds
</Location>
</IfModule>
4 コピーしたセクションで、Location パスを /flash-vod に変更します。HttpStreamingContentPath ディレクティブを編集
して、ディスク上のオンデマンドメディアの場所を変更することもできます。
最終更新日 2011/10/10
69
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<IfModule jithttp_module>
<Location /flash-vod>
HttpStreamingJITPEnabled true
HttpStreamingContentPath "../webroot/vod2"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
# Uncomment the following directives to enable encryption
# for this location.
#
EncryptionScope server
#
ProtectionScheme phds
</Location>
</IfModule>
注意:ライブストリーミング用のコンテンツの場所を変更するには、71 ページの「ライブ HDS および HLS コンテンツ
の場所の設定」を参照してください。
5 rootinstall/webroot/vod2 フォルダーを作成して、sample1_1500kbps.f4v ファイルを /webroot/vod フォルダーから
にコピーします。
6 Apache HTTP Server を再起動します。サービス名は FMSHttpd です。
7 rootinstall/samples/videoPlayer/videoplayer.html をダブルクリックして、Flash Media Server サンプルビデオ
Player を開きます。
8 「Stream URL」テキストボックスに次のように入力します。
http://localhost/flash-vod/sample1_1500kbps.f4v.f4m
/webroot/vod2 フォルダーから任意のファイルを再生することができます。
オンデマンド HDS および HLS コンテンツの場所の設定
ディスク上のオンデマンドコンテンツの場所を設定するには、Apache httpd.conf ファイルを編集します。次のディレク
ティブを使用します。
ディレクティブ
説明
HttpStreamingContentPath
ストリームのルートの場所。この値は、Apache ルートフォルダーへの絶対パスまたは
相対パスにすることができます。
オンデマンド HDS とオンデマンド HLS のデフォルトの場所は、"../webroot/vod" です。
1 rootinstall/Apache2.2/conf/httpd.conf を開きます。
2 メディアがオンデマンドストリーミング用に格納されるサーバー上の場所を変更するには、HttpStreamingContentPath
ディレクティブを編集します。例えば、次のように場所を c:¥hds_vod_content に変更します。
最終更新日 2011/10/10
70
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<IfModule jithttp_module>
<Location /hds-vod>
HttpStreamingJITPEnabled true
#
HttpStreamingContentPath "../webroot/vod"
HttpStreamingContentPath "C:\hds_vod_content"
JitFmsDirPath ".."
Options -Indexes FollowSymLinks
# Uncomment the following directives to enable encryption
# for this location.
#
EncryptionScope server
#
ProtectionScheme phds
</Location>
</IfModule>
<Location /hls-vod>
HLSHttpStreamingEnabled true
HLSMediaFileDuration 8000
#
HttpStreamingContentPath "../webroot/vod"
HttpStreamingContentPath "C:\hds_vod_content"
HLSFmsDirPath ".."
# Uncomment the following directives to enable encryption
# for this location.
#
HLSEncryptionScope server
#
HLSEncryptCipherKeyFile "../phls/vodkey.bin"
#
HLSEncryptKeyURI
"https://<ServerName>/hls-key/vodkey.bin"
Options -Indexes FollowSymLinks</Location>
3 Apache HTTP Server を再起動します。サービス名は FMSHttpd です。
4 サンプルファイルを /webroot/vod から c:¥hds_vod_content にコピーします。このタスクは、
sample1_1500kbps.f4v を使用します。
5 (HDS)ブラウザーで rootinstall/samples/videoPlayer/videoplayer.html を開き、「Stream URL」テキストボックス
に次のように入力します。
http://localhost/hds-vod/sample1_1500kbps.f4v.f4m
6 (HLS)iOS を実行しているデバイス上で、Safari を開いて、次のように入力します。
http://localhost/hls-vod/sample1_1500kbps.f4v.m3u8
要求 URL は Apache 設定の変更前と同じですが、コンテンツはディスク上の別の場所にあります。Apache が /hds-vod で
開始する要求を受け取ると、HttpStreamingContentPath の値に基づいて、残りのパスを解決します。
Apache 設定が有効になっているか確認するには、c:¥hds_vod_content フォルダーにないサンプルファイルのストリーミ
ングを試します。例えば、http://localhost/hds-vod/sample1_1000kbps.f4v.f4m のストリーミングを試します。サンプル
ビデオ Player に、
「We are unable to connect to the content you’ve requested. We apologize for the inconvenience.
(要
求したコンテンツに接続できません。ご不便をおかけして申し訳ありません。」というエラーが表示されます。
ライブ HDS および HLS コンテンツの場所の設定
ディスク上にライブ HDS および HLS コンテンツの場所を設定するには、Apache httpd.conf ファイルを編集します。次の
ディレクティブを使用します。
最終更新日 2011/10/10
71
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ディレクティブ
説明
HttpStreamingContentPath
ディスク上のストリームのルートの場所(デフォルトで、livepkgr/streams)デフォ
ルトで、場所は "../applications" です。この場所は、livepkgr アプリケーションのサブ
フォルダーである必要があります。
この値は、Apache ルートフォルダーへの絶対パスまたは相対パスにすることができま
す。
HttpStreamingLiveEventPat
h
ディスク上のライブイベントのルートの場所(デフォルトで、livepkgr/events)デ
フォルト値は "../applications" です。この場所は、livepkgr アプリケーションのサブ
フォルダーである必要があります。
この値は、Apache ルートフォルダーへの絶対パスまたは相対パスにすることができま
す。
HLS の場合、この値は HttpStreamingURLSandboxLevel ディレクティブの値に依存し
ます。
HttpStreamingURLSandboxL HttpStreamingLiveEventPath が設定されるスコープを定義します。指定できる値は、
evel
"App"、"Inst" および "Server" です。デフォルト値は "Server" です。
HttpStreamingLiveEventPath が特定のアプリケーションに対して設定されている場合
は、この値を "App" に設定します。この場合、クライアント要求 URL は次のようにア
プリケーション名を省略できます。
HttpStreamingLiveEventPath "..application/livepkgr"
HttpStreamingURLSandboxLevel "App"
要求 URL は次のとおりです。
http://<fms-dns-or-ip>/hls-live/<app-instance>/<event-name>/<streamname>.m3u8
HttpStreamingLiveEventPath がアプリケーションインスタンスに設定されている場合
は、"Inst" という値を使用します。この場合、クライアント要求 URL は、次のように、
アプリケーション名とアプリケーションインスタンスを省略できます。
HttpStreamingLiveEventPath "..application/livepkgr/events/_definst_"
HttpStreamingURLSandboxLevel "Inst"
要求 URL は次のとおりです。
http://<fms-dns-or-ip>/hls-live/<event-name>/<stream-name>.m3u8
ディスク上のライブコンテンツの場所の設定
1 rootInstall/conf/fms.ini をテキストエディターで開きます。パラメーターの VHOST.APPSDIR を設定して、次のいずれ
かに設定します。
•
(Windows)C:/applications
•
(Linux)/opt/applications
2 サーバーを再起動します。
3 ステップ 1 の場所にフォルダーを作成して、livepkgr アプリケーションをその場所にコピーします。
4 rootinstall/Apache2.2/conf/httpd.conf をテキストエディターで開きます。
5 HDS ライブコンテンツの場所を変更するには、太字のディレクティブを編集します。
最終更新日 2011/10/10
72
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<Location /hds-live>
HttpStreamingEnabled true
#
HttpStreamingLiveEventPath "../applications"
#
HttpStreamingContentPath "../applications"
HttpStreamingLiveEventPath "C:\applications"HttpStreamingContentPath "C:\applications"
HttpStreamingF4MMaxAge 2
HttpStreamingBootstrapMaxAge 2
HttpStreamingFragMaxAge -1
Options -Indexes FollowSymLinks
</Location>
</IfModule>
注意:Linux では、"/opt/applications" を使用します。
6 HLS ライブコンテンツの場所を変更するには、太字のディレクティブを編集します。
<IfModule hlshttp_module>
<Location /hls-live>
HLSHttpStreamingEnabled true
#
HttpStreamingLiveEventPath "../applications"
#
HttpStreamingContentPath "../applications"
HttpStreamingLiveEventPath "C:\applications"HttpStreamingContentPath "C:\applications"
HLSMediaFileDuration 8000
HLSSlidingWindowLength 6
HLSFmsDirPath ".."
HLSM3U8MaxAge 2
HLSTSSegmentMaxAge -1
# Uncomment the following directives to enable encryption
# for this location.
#
HLSEncryptionScope server
#
HLSEncryptCipherKeyFile "../phls/liveeventkey.bin"
#
HLSEncryptKeyURI
"https://<ServerName>/hls-key/liveeventkey.bin"
Options -Indexes FollowSymLinks
</Location>
7 Apache HTTP Server を再起動します。サービス名は FMSHttpd です。
8 Flash Media Live Encoder を開き、次の設定でストリームをパブリッシュします。
•
ビデオコーデック —H.264
•
オーディオコーデック —AAC
•
キーフレーム頻度 — 4 秒
• FMS URL — rtmp://localhost/livepkgr
•
ストリーム - livestream?adbe-live-event=liveevent
9 (HDS)ブラウザーで rootinstall/samples/videoPlayer/videoplayer.html を開き、「Stream URL」テキストボックス
に次のように入力します。
http://localhost/hds-live/livepkgr/_definst_/liveevent/livestream.f4m
10(HLS)iOS を実行しているデバイスで、Safari を開いて次のように入力します。
http://localhost/hls-live/livepkgr/_definst_/liveevent/livestream.m3u8
注意:Mac OS の Safari 4.0 でコンテンツを再生するには、<video> タグを使用する HTML ドキュメントを作成します。
要求 URL のスコープの設定
1 rootinstall/Apache2.2/conf/httpd.conf をテキストエディターで開きます。
最終更新日 2011/10/10
73
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
2 要求 URL のスコープ (URL サンドボックスレベルとも呼ばれる)を変更するには、太字のディレクティブを次のように
編集します。
<Location /hds-live>
HttpStreamingEnabled true
#
HttpStreamingLiveEventPath "../applications"
#
HttpStreamingContentPath "../applications"
HttpStreamingLiveEventPath "c:\applications\livepkgr"
HttpStreamingContentPath "c:\applications"
HttpStreamingURLSandboxLevel "App"
HttpStreamingF4MMaxAge 2
HttpStreamingBootstrapMaxAge 2
HttpStreamingFragMaxAge -1
Options -Indexes FollowSymLinks
</Location></IfModule>
HLS 用の要求 URL のスコープを変更するには、太字のディレクティブを次のように編集します。
<IfModule hlshttp_module>
<Location /hls-live>
HLSHttpStreamingEnabled true
#
HttpStreamingLiveEventPath "../applications"
#
HttpStreamingContentPath "../applications"
HttpStreamingLiveEventPath "C:\applications\livepkgr"
HttpStreamingContentPath "C:\applications"
HttpStreamingURLSandboxLevel "App"
HLSMediaFileDuration 8000
HLSSlidingWindowLength 6
HLSFmsDirPath ".."
HLSM3U8MaxAge 2
HLSTSSegmentMaxAge -1
# Uncomment the following directives to enable encryption
# for this location.
#
HLSEncryptionScope server
#
HLSEncryptCipherKeyFile "../phls/liveeventkey.bin"
#
HLSEncryptKeyURI
"https://<ServerName>/hls-key/liveeventkey.bin"
Options -Indexes FollowSymLinks
</Location>
3 Apache HTTP Server を再起動します。サービス名は FMSHttpd です。
4 Flash Media Live Encoder を開き、次の設定でストリームをパブリッシュします。
•
ビデオコーデック —H.264
•
オーディオコーデック —AAC
•
キーフレーム頻度 — 4 秒
• FMS URL — rtmp://localhost/livepkgr
•
ストリーム - livestream?adbe-live-event=liveevent
5 (HDS)rootinstall/samples/videoPlayer/videoplayer.html をダブルクリックして、Flash Media Server サンプルビ
デオ Player を開きます。Stream URL に次のように入力して、「play」をクリックします。
http://<host>/hds-live/_definst_/liveevent/livestream.f4m
6 iOS を実行しているデバイスで、Safari を開いて、次のように入力します。
http://<host>/hls-live/_definst_/liveevent/livestream.m3u8
URL サンドボックスレベルがデフォルトの “Server” ではなく、“App” に設定されているため、URL にはアプリケー
ション名(livepkgr)が含まれません。
最終更新日 2011/10/10
74
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
マルチビットレートストリーミング用のセットレベル F4M/M3U8 ファイルの設
定
Flash Media Server 4.5
マルチビットレートストリームに関する設定情報は、セットレベル F4M と M3U8 ファイル、およびストリームレベル
F4M と M3U8 ファイルの複数のレベルに分けられています。HDS の場合、ファイルは F4M マニフェストファイルです。
HLS の場合、ファイルは M3U8 バリアント再生リストです(マニュアルによっては、両方を参照するため、一般的な用語
「マニフェスト」を使用する場合があります )。
セットレベル F4M と M3U8 ファイル ストリームレベルのマニフェストファイルへの URL とマルチビットレートセット
の各ストリームのビットレート情報が含まれます。HDS の場合、セットレベル F4M ファイルには、DVR ローリングウィ
ンドウに関する情報も含むことができます。HLS の場合、セットレベル M3U8 ファイルには、コーデック情報も含むこと
ができます。
Flash Media Server 4.5 には、Set-level F4M/M3U8 File Generator ツールが含まれています。このツールは、
rootinstall/tools/f4mconfig/configurator/f4mconfig.htm にインストールされます。このツールを使用してセットレベ
ルファイルを生成します。セットレベルファイルを Web サーバーにコピーします。Media Player は、マルチビットレート
コンテンツの再生にセットレベルファイルを要求します。
Set-level F4M/M3U8 File Generator
セットレベル F4M ファイルは次のとおりです。
<manifest xmlns="http://ns.adobe.com/f4m/2.0">
<baseURL>http://localhost/hds-live/livepkgr/_definst_/liveevent/</baseURL>
<media href="livestream1.f4m" bitrate="150"/>
<media href="livestream2.f4m" bitrate="500"/>
<media href="livestream3.f4m" bitrate="700"/>
</manifest>
セットレベル M3U8 ファイルは次のとおりです。
最終更新日 2011/10/10
75
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=150000
http://10.0.1.11/hls-live/livepkgr/_definst_/liveevent/livestream1.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=500000
http://10.0.1.11/hls-live/livepkgr/_definst_/liveevent/livestream2.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
http://10.0.1.11/hls-live/livepkgr/_definst_/liveevent/livestream3.m3u8
ストリームレベル F4M および M3U8 ファイル ブートストラップ情報と DRM メタデータが含まれます。Live Packager
および HTTP モジュールは、Media Player がコンテンツを要求すると、リアルタイムにストリームレベルの F4M と
M3U8 ファイルを生成します。
セットレベルファイルをサポートする Flash/AIR Media Player セットレベルの F4M ファイルを再生するには、OSMF
1.6 以降を使用する Media Player を使用します。rootinstall/samples/videoPlayer にインストールされる Strobe Media
Playback は、セットレベル F4M ファイルをサポートします。
セットレベルファイルをサポートする Apple Media Player セットレベル M3U8 ファイルを再生するには、Apple
「Apple HTTP Live Streaming documentation」を参照し
HTTP Live Streaming をサポートするデバイスを使用します。
てください。
F4M 仕様 F4M ファイル形式の詳細については、「F4M ファイル形式の仕様」を参照してください。
M3U8 仕様 M3U8 ファイル形式の詳細については、「HTTP Live Streaming Internet-Draft」を参照してください。
セットレベルファイルを使用するチュートリアル 次のチュートリアルは、マルチビットレートストリーミング用のセットレ
ベルファイルを使用します。
• 10 ページの「HTTP 経由でのライブマルチビットレートストリームのパブリッシュおよび再生」
• 26 ページの「HTTP 経由でのオンデマンドマルチビットレートメディアファイルの再生」
• 15 ページの「オーディオのみのストリームのパブリッシュ(HLS)」
• 17 ページの「DVR の設定 (HDS)」
サーバーでの絶対時間の設定
注意:livepkgr アプリケーションはデフォルトで絶対時間を使用するように設定されています。このセクションでは、
HTTP ストリーミングについて理解し、livepkgr アプリケーションを複製します。
livepkgr 取り込みアプリケーションはデフォルトで絶対時間を使用するように設定されています。設定を確認するには、
rootinstall/applications/livepkgr/Application.xml をテキストエディターで開いてください。
ライブのマルチビットレートストリームをパブリッシュするには、絶対時間を使用してストリームをパブリッシュするよう
にライブエンコーダーを設定します。5 ページの「ライブメディアのストリーミング(HTTP)」を参照してください。
1 Application.xml ファイルをアプリケーションフォルダーにコピーします。
例えば、「livepkgr2」というアプリケーションにストリームをパブリッシュする場合は、Application.xml ファイルを
conf¥_defaultRoot_¥_defaultVHost_ フォルダーから applications/livepkgr2 フォルダーにコピーします。
2 Application.xml ファイルをテキストエディターで開きます。
3 タグ //Application/StreamManager/Live/AssumeAbsoluteTime を true に設定します。
<Application>
...
<StreamManager>
...
<Live>
...
<AssumeAbsoluteTime>true</AssumeAbsoluteTime>
最終更新日 2011/10/10
76
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
77
メディアのストリーミングの概要
4 ファイルを保存します。
5 サーバーを再起動します。「サーバーの起動と停止」を参照してください。
重要:アプリケーションにパブリッシュされるすべてのストリームが絶対時間を使用している場合にのみ、
<AssumeAbsoluteTime> を true に設定します。この値を true に設定し、アプリケーションが絶対時間を使用しないストリー
ムを取り込んだ場合、ストリームが停止されて再パブリッシュされると、時間が前に戻ったことを示す警告がサーバーログ
に記録される場合があります。
F4F および TS フラグメントの継続時間の設定
サーバーは取り込んだ(ライブ)ストリームをフラグメントに記録します。クライアントでオンデマンドファイルを要求す
ると、それらのファイルをサーバーがフラグメントに記録します。
Adobe HDS フラグメントは F4F ファイルです。Apple HLS フラグメントは TS ファイルです。
フレームまたは時間に基づいて、コンテンツのフラグメントのサイズを指定します。フレームベースの設定は、時間ベース
の設定よりも優先されます。
ソースメディアに一定のフレームレートでエンコードされたビデオが含まれる場合は、フレームベースの設定を使用します。
ビデオのキーフレーム間隔にフラグメントのサイズを一致させる場合は、フレームベースの設定を使用します。オーディオ
またはデータだけが含まれていてビデオは含まれないメディアの場合は、時間ベースの設定を使用します。
サーバーのフラグメント継続時間は、エンコーダーのキーフレーム間隔の倍数である必要があります。
KeyframeIntervalsPerFragment の値は倍数を定義します。
ライブ HDS および HLS のフラグメントサイズの設定
ライブ HDS のサーバーレベルの設定
Apache httpd.conf 内の次のディレクティブを設定して、サーバー上のすべてのライブ HDS イベントのフラグメントサイ
ズを設定します。
ディレクティブ
説明
デフォルト値
HttpStreamingFragmentDuratio
n
デフォルトのフラグメント継続時間(ミリ秒単位)。これは時間ベース
の設定です。フレームベースの値を選択することで上書きできます。
4000
HttpStreamingFrameRate
フレームベースのフラグメント継続時間の設定の場合、これはソースコ
ンテンツのフレームレートです。
なし
HttpStreamingFramesPerKeyfra
meInterval
フレームベースのフラグメント継続時間の設定の場合、これは各キーフ
レーム間隔のフレーム(ピクチャのグループ)の数です。
なし
HttpStreamingKeyframeInterval
sPerFragment
フレームベースのフラグメント継続時間の設定の場合、これは 1 フラグ
1
メントあたりのキーフレーム間隔(GOP)の数です。
ライブ HLS のサーバーレベルの設定
Apache httpd.conf 内の次のディレクティブを設定して、サーバー上のすべてのライブ HLS イベントの時間ベースのフラ
グメントサイズを設定します。
ディレクティブ
HLSMediaFileDuration
説明
デフォルト値
TS ファイルの継続時間(ミリ秒単位)。メディアのキーフレー
8000
ム間隔の倍数となる値を使用します。
ライブ HDS のアプリケーションレベルとイベントレベルの設定
アプリケーションレベルでフラグメントサイズを設定するには、Live Packager アプリケーション(デフォルトでは
livepkgr)のディレクトリ内の Application.xml ファイルを使用します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
78
メディアのストリーミングの概要
イベントレベルでフラグメントサイズを設定するには、ライブイベントディレクトリ(デフォルトでは
applications/livepkgr/events/_definst_/liveevent)内の Event.xml ファイルを使用します。
<Recording> コンテナー内のエレメントを使用して、サーバーがディスクにファイルを書き込む方法を設定します。
Application.xml ファイルの場合、エレメントは //Application/HDS にあります。Event.xml ファイルの場合、エレメント
は //Event にあります。
要素
説明
デフォルト値
/Recording
ディスクへのファイルの書き込み方法を設定するセクショ
ン。
なし
/Recording/FragmentDuration
各フラグメントの長さ(ミリ秒単位)。各セグメントは 1 つ
4000
以上のフラグメントを含むことができます。
時間ベースの設定。
/Recording/FramePrecision
フラグメント実行テーブルの丸め精度(フレーム単位)。フ
レーム単位は指定されているフレームレートから得られます
(1/ レート)。
1
フレームベースの設定。
/Recording/FrameRate
元のコンテンツのフレームレート(フレーム数 / 秒(fps)単 なし
位)。値は浮動小数点数です。NTSC の場合は値 29.97 を使用
します。
フレームベースの設定
/Recording/FramesPerKeyframe 各キーフレーム間のフレーム数。例えば、30 fps のビデオで
Interval
キーフレームが 2 秒ごとの場合は、1 キーフレーム間隔に 60
なし
フレームが含まれます。
フレームベースの設定。
/Recording/KeyframeIntervalsP
erFragment
1 フラグメントのキーフレーム間隔の数。デフォルト値は 1
1
で、フラグメントのサイズがキーフレーム間隔と同じである
ことを意味します。
フレームベースの設定。
/Recording/SegmentDuration
各セグメントの長さ(ミリ秒単位)。各 .f4f ファイルは 1 つの 400000
セグメントを含みます。
時間ベースの設定。フレームベースの設定は、時間ベースの
設定よりも優先されます。
ライブ HLS のアプリケーションレベルとイベントレベルの設定
アプリケーションレベルでフラグメントサイズを設定するには、Live Packager アプリケーション(デフォルトでは
livepkgr)のディレクトリ内の Application.xml ファイルを使用します。
イベントレベルでフラグメントサイズを設定するには、ライブイベントディレクトリ(デフォルトでは
applications/livepkgr/events/_definst_/liveevent)内の Event.xml ファイルを使用します。
<Recording> および <HLS> コンテナー内のエレメントを使用して、サーバーがディスクにファイルを書き込む方法を設定し
ます。Application.xml ファイルの場合、エレメントは //Application/HDS にあります。Event.xml ファイルの場合、エレ
メントは //Event/ にあります。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
79
メディアのストリーミングの概要
要素
説明
デフォルト値
/Recording/FrameRate
元のコンテンツのフレームレート(フレーム数 / 秒(fps)単 なし
位)。値は浮動小数点数です。NTSC の場合は値 29.97 を使用
します。
フレームベースの設定。
/Recording/FramesPerKeyframe 各キーフレーム間のフレーム数。例えば、30 fps のビデオで
Interval
キーフレームが 2 秒ごとの場合は、1 キーフレーム間隔に 60
なし
フレームが含まれます。
フレームベースの設定。
/HLS/KeyframeIntervalPerMedia メディアファイル(TS)あたりのキーフレーム間隔の数。デ
File
フォルト値は 1 で、フラグメントのサイズがキーフレーム間
1
隔と同じであることを意味します。
フレームベースの設定。
/HLS/MediaFileDuration
各メディアファイル(TS)の長さ(ミリ秒単位)。
8000
時間ベースの設定。フレームベースの設定は、時間ベースの
設定よりも優先されます。
フレームに基づいたライブ HDS および HLS のフラグメントサイズの指定
HDS には、KeyframeIntervalsPerFragment、FrameRate、FramesPerKeyframeInterval、FramePrecision の各エレメントを使用
します。
HLS には、FrameRate、FramesPerKeyframeInterval、KeyframeIntervalPerMediaFile の各エレメントを使用します。
<Event>
<EventID>liveevent</EventID>
<Recording>
<FrameRate>29.97</FrameRate>
<FramesPerKeyframeInterval>120</FramesPerKeyframeInterval>
<KeyframeIntervalsPerFragment>1</KeyframeIntervalsPerFragment>
<FramePrecision>1</FramePrecision>
</Recording>
<HLS>
<KeyframeIntervalPerMediaFile>3</KeyFrameIntervalPerMediaFile>
</HLS>
</Event>
サーバーは、次の式に従って HLS メディアファイルの継続時間を計算します。
MediaFileDurationInSeconds = FramesPerKeyframeInterval * KeyframeIntervalPerMediaFile / FrameRate
時間に基づいたライブ HDS および HLS のフラグメントサイズの指定
HDS には、FragmentDuration、SegmentDuration の各エレメントを使用します。
HLS には、MediaFileDuration エレメントを使用します。
FragmentDuration および MediaFileDuration エレメントを使用します。
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>400000</SegmentDuration>
</Recording>
<HLS>
<MediaFileDuration>8000<MediaFileDuration>
</HLS>
</Event>
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
80
メディアのストリーミングの概要
オンデマンド HDS および HLS のフラグメントサイズの設定
オンデマンド HDS のサーバーレベルの設定
Apache httpd.conf 内の次のディレクティブを設定して、サーバー上のすべてのオンデマンド HDS のフラグメントサイズ
を設定します。
ディレクティブ
説明
デフォルト値
HttpStreamingFragmentDuratio
n
デフォルトのフラグメント継続時間(ミリ秒単位)。
4000
HttpStreamingFrameRate
ソースコンテンツのフレームレート。
これは、時間ベースの設定です。フレームベースの設定は、時間ベース
の設定よりも優先されます。
なし
フレームベースの設定。
HttpStreamingFramesPerKeyfra
meInterval
各キーフレーム間隔のフレーム(ピクチャのグループ)の数。
HttpStreamingKeyframeInterval
sPerFragment
1 フラグメントのキーフレーム間隔(GOP)の数。
なし
フレームベースの設定。
1
フレームベースの設定。
オンデマンド HLS のサーバーレベルの設定
Apache httpd.conf 内の次のディレクティブを設定して、サーバー上のすべてのオンデマンド HLS のフラグメントサイズ
を設定します。
ディレクティブ
HLSMediaFileDuration
説明
デフォルト値
TS ファイルの継続時間(ミリ秒単位)。メディアのキーフレー
8000
ム間隔の倍数となる値を使用します。
オンデマンド HDS のストリームレベルの設定
一連のオンデマンドメディアファイル(または単一のファイル)を設定するには、jit.conf ファイルをメディアファイルと
同じディレクトリにコピーします。ディレクトリ内のすべてのメディアファイルは同じ jit.conf ファイルを使用します。
jit.conf ファイルを次のエレメントと共に使用し、ストリームレベルで HDS のフラグメントサイズを設定します。
要素
説明
デフォルト値
//manifest/hds:fragment-duration
コンテンツのセットのフラグメント継続時間(秒単
位)。値には小数を指定できます(例えば、2002 ミ
なし
リ秒を指定するには、値 2.002 を使用します)。
時間ベースの設定。フレームベースの設定は、時間
ベースの設定よりも優先されます。
//manifest/hds:frame-rate
コンテンツセットのフレームレート。単位はフレー
なし
ム / 秒で、小数(NTSC の場合は 29.97)で指定でき
ます。
フレームベースの設定。
//manifest/hds:frames-per-keyframe-interval
キーフレーム間隔あたりのフレーム(GOP)の数。
なし
単位はフレームで、整数値にする必要があります。
フレームベースの設定。
//manifest/hds:keyframe-intervals-perfragment
1 フラグメントのキーフレーム間隔の数。単位はフラ 1
グメントあたりのキーフレーム間隔で、整数値にする
必要があります。
フレームベースの設定。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
81
メディアのストリーミングの概要
オンデマンド HLS のストリームレベルの設定
一連のオンデマンドメディアファイル(または単一のファイル)を設定するには、jit.conf ファイルをメディアファイルと
同じディレクトリにコピーします。ディレクトリ内のすべてのメディアファイルは同じ jit.conf ファイルを使用します。
jit.conf ファイルを次のエレメントと共に使用し、ストリームレベルで HLS のフラグメントサイズを設定します。
要素
説明
デフォルト値
//manifest/hds:frame-rate
コンテンツセットのフレームレート。単位はフレーム
/ 秒で、小数(NTSC の場合は 29.97)で指定できま
なし
す。
フレームベースの設定。
//manifest/hds:frames-per-keyframe-interval
キーフレーム間隔あたりのフレーム(GOP)の数。
なし
単位はフレームで、整数値にする必要があります。
フレームベースの設定。
//manifest/hds:hls
Apple HTTP Live Streaming 設定のコンテナー。
なし
//manifest/hds:hls/hds:keyframe-intervalsper-media-file
TS ファイル継続時間あたりのキーフレーム間隔の数。 なし
値は整数にする必要があります。
フレームベースの設定。
//manifest/hds:hls/hds:media-file-duration
このファイルに関連付けられたコンテンツのセットの
なし
TS ファイル継続時間(ミリ秒単位)。フラグメント継
続時間の倍数である値を使用します。
時間ベースの設定。フレームベースの設定は、時間
ベースの設定よりも優先されます。
フレームに基づいたオンデマンド HDS および HLS のフラグメントサイズの指定
HDS には、hds:frame-rate、hds:frames-per-keyframe-interval、hds:keyframe-intervals-per-fragment の各エレメントを使用し
ます。
HLS には、hds:frame-rate、hds:frames-per-keyframe-interval、hds:keyframe-intervals-per-media-file の各エレメントを使用し
ます。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:hds="http://ns.adobe.com/hds-package/1.0">
<hds:frame-rate>29.97</hds:frame-rate>
<hds:frames-per-keyframe-interval>60</hds:frames-per-keyframe-interval>
<hds:keyframe-intervals-per-fragment>2</hds:keyframe-intervals-per-fragment>
<hds:hls>
<hds:keyframe-intervals-per-media-file>2</hds:keyframe-intervals-per-media-file>
</hds:hls>
</manifest>
時間に基づいたオンデマンド HDS および HLS のフラグメントサイズの指定
HDS には、hds:fragment-duration エレメントを使用します。
HLS には、hds:media-file-duration エレメントを使用します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:hds="http://ns.adobe.com/hds-package/1.0">
<hds:fragment-duration>8000</hds:fragment-duration>
<hds:hls>
<hds:media-file-duration>8000</hds:media-file-duration>
</hds:hls>
</manifest>
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
IO バッファーのサイズの設定
Flash Media Server 4.5
IO バッファーは、Apache f4f モジュールの読み取りと書き込みのパフォーマンスを向上します。IO バッファーは、ディス
クファイルをメモリ内のバッファーにロードします。システムコールを作成するのではなく、メモリ内のバッファーに対す
る読み取りと書き込みを行います。
注意:この機能は、HTTP Dynamic Streaming と HTTP Live Streaming の両方に影響を与えます。
バッファーがいっぱいになったとき、または読み取り / 書き込みヘッドがバッファーの境界を超えて移動する必要がある場
合、サーバーはバッファーの内容をディスクファイルにコミットし、新しい内容をディスクファイルからバッファーにプリ
ロードします。
IO バッファーのデフォルト値は 4096 バイトです。値を増減するには、Event.xml ファイルを編集します。4096 バイトの
倍数を使用します。
1 Event.xml ファイルをテキストエディターで開きます。
ライブ HTTP ストリーミングの場合、Event.xml ファイルはライブイベントのフォルダーにあります。例えば、
rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml です。
2 IOBufferSize を、基になるオペレーティングシステムのクラスタサイズの倍数の値に設定します。IOBufferSize は、IO
バッファーのサイズ(バイト単位)です。
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<IOBufferSize>4096</IOBufferSize>
</Recording>
</Event>
3 ファイルを保存します。
ディスク管理
Flash Media Server 4.5
Application.xml ファイルまたは Event.xml ファイルに DiskManagementDuration 設定パラメーターを設定し、ディスク上
の最新のライブコンテンツ量を指定します。アプリケーションレベルで設定された制限はイベントレベルで上書きできませ
ん。Application.xml ファイルに制限が設定された場合、Event.xml ファイルにはその制限時間と同じ時間またはそれより
短い時間を設定できます。
すべてのライブ HTTP ストリーミングは、ディスク管理を使用して、ディスクがいっぱいにならないようにします。ディス
ク管理により、年中無休のライブストリーミングイベントを作成できます。また、DVR を使用している場合は、DVR 設定
に関連付けてディスク管理を設定します。17 ページの「DVR の設定 (HDS)」を参照してください。
デフォルトでは、ディスク管理は 3 時間ライブストリームを継続します。サーバーはコンテンツを常にチェックし、コンテ
ンツの継続時間が DiskManagmentDuration の値を上回ると、制限を超えたセグメントの .f4f ファイルおよび .f4x ファイルを
削除します。
SegmentDuration または DiskManagmentDuration に値がある場合(デフォルトでは両方とも値がある)、サーバーが記録を
開始するためには、次の式が true である必要があります。
FragmentDuration < SegmentDuration < DiskManagementDuration
最終更新日 2011/10/10
82
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
また、SegmentDuration の値は、0 より大きくなる必要があります(値 0 で 1 セグメントが作成されます)。SegmentDuration
の値は、セグメントを削除する速度を指定します。SegmentDuration の値が小さければ小さいほど速くセグメントが削除さ
れます。
サーバーは、使用可能な全コンテンツの合計継続時間を維持します。セグメントが作成されると、サーバーはディスク管理
ウィンドウにあるフラグメントがセグメントにないかどうかを確認します。フラグメントがある場合、サーバーはブートス
トラップエントリからそのセグメントを削除してから、ディスクからそのセグメントを削除します。
注意:この動作は、FragmentDuration が SegmentDuration より大きくなることを許可していた Flash Media Server 4.0 から
の変更点になります。
エレメント
デフォルト 説明
値
DiskManagementDuration
3
サーバー上のコンテンツの最大継続時間(時間単位)。デフォル
ト値は 3 です。小数値を使用して分単位を指定します。
Application.xml ファイルの DiskManagementDuration の値は、Event.xml ファイルの値で上書きできません。値が
Application.xml で設定されていない場合は、Event.xml で値を設定できます。
Application.xml ファイルで、ディスク管理の継続時間を 4 時間に設定する方法を以下に示します。この値は、このアプリ
ケーションで実行されているすべてのライブイベントに影響を与えます。
<Application>
...
<HDS>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>16000</SegmentDuration>
<DiskManagementDuration>4</DiskManagementDuration>
</Recording>
</HDS>
</Application>
Event.xml ファイルで、ディスク管理の継続期間を 1 時間に設定する方法を以下に示します。この値は、「liveevent」と呼
ばれるイベントのサーバー上のコンテンツの継続期間を制限します。
<Event>
<EventID>liveevent</EventID>
<Recording>
...
<DiskManagementDuration>1</DiskManagementDuration>
</Recording>
</Events>
詳細については、91 ページの「ライブ HTTP ストリーミングの設定」を参照してください。
コンテンツキャッシュの設定(HDS)
ライブおよびオンデマンドの HTTP Dynamic Streaming のパフォーマンスを向上するために、オリジンサーバーで
Apache コンテンツキャッシュを有効にします。キャッシュが有効になると、サーバーは、HDS 用にパッケージ化したコン
テンツをキャッシュします。サーバーは要求を受信すると、コンテンツを配信する前にキャッシュを確認します。コンテン
ツキャッシュは、デフォルトでは無効になっています。
1 htcacheclean ツールを実行します。
ディスクキャッシュが使用するストレージ容量を制限するには、コンテンツキャッシュが有効なときに Apache
htcacheclean ツールを実行します。このツールは手動で、またはデーモンとして実行できます。htcacheclean ツールは
rootinstall/Apache2.2/bin/ にあります。ツールの実行方法の詳細については、「Apache documentation」を参照し
てください。
最終更新日 2011/10/10
83
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
2 Apache httpd.conf ファイルで、キャッシュ設定セクションを非コメント化します。
# Uncomment this to enable caching
LoadModule cache_module modules/mod_cache.so
<IfModule mod_cache.c>
LoadModule disk_cache_module modules/mod_disk_cache.so
IfModule mod_disk_cache.c>
CacheEnable disk /hds-vod
CacheEnable disk /hls-vod
CacheRoot cacheroot
CacheMaxFileSize 10000000
CacheLock On
</IfModule>
</IfModule>
CacheRoot ディレクティブで指定されたディレクトリが存在していることを確認します。デフォルトの cacheroot ディレ
クトリは rootinstall/Apache2.2/cacheroot にあります。
3 Apache を再起動します。
コンテンツキャッシュの詳細については、「Apache documentation」を参照してください。
Flash Access 保護用のコンテンツの暗号化
重要:コンテンツの暗号化とフラグメント化の両方に HTTP Dynamic Streaming Packager を使用してください。コンテ
ンツの暗号化に Flash Access パッケージ化ツールを使用しないでください。HTTP Dynamic Streaming Packager は、既
に暗号化されているコンテンツをフラグメント化できません。
HTTP Dynamic Streaming でライブまたはオンデマンドのコンテンツを配信し、そのコンテンツを Flash Access で保護す
るには、Flash Access Server for Protected Streaming を使用します。このサーバーは、HTTP Dynamic Streaming での
使用に最適化された Flash Access ライセンスサーバーの実装です。
「Adobe Flash Access Protecting Content」を参照し
てください。
注意:Flash Access SDK および Flash Access ライセンスサーバー参照実装も、HTTP Dynamic Streaming に対するライ
センスを発行できます。
Flash Access Server for Protected Streaming をデプロイした後に、コンテンツをリアルタイムでパッケージ化および暗号
化するように Flash Media Server を設定します。
ライブコンテンツを暗号化するための Flash Media Server の設定
ライブコンテンツの暗号化は、Flash Access を使用して、アプリケーションレベルおよびイベントレベルで設定することが
できます。
Flash Access をアプリケーションレベルで設定するには、次の場所にある Application.xml ファイルを使用します。
rootinstall/applications/livepkgr/Application.xml
Application.xml ファイルでは、FlashAccessV2 コンテナーエレメントは次の場所にあります。
//Application/HDS/Recording/ContentProtection/FlashAccessV2
Flash Access をイベントレベルで設定するには、次の場所にある Event.xml ファイルを使用します。
rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml
Event.xml ファイルでは、FlashAccessV2 コンテナーエレメントは次の場所にあります。
//Event/Recording/ContentProtection/FlashAccessV2
1 rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml をテキストエディターで開きます。
2 ストリームを暗号化するために必要な XML タグを追加します。Event.xml ファイルのサンプルを次に示します。
最終更新日 2011/10/10
84
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
85
メディアのストリーミングの概要
<Event>
<EventID>liveevent</EventID>
<Recording>
<FragmentDuration>4000</FragmentDuration>
<SegmentDuration>10000</SegmentDuration>
<ContentProtection enabled="true">
<ProtectionScheme>FlashAccessV2</ProtectionScheme>
<FlashAccessV2>
<ContentID>foo</ContentID>
<CommonKeyFile>common-key.bin</CommonKeyFile>
<LicenseServerURL>http://dill.corp.adobe.com:8090</LicenseServerURL>
<TransportCertFile>production_transport.der</TransportCertFile>
<LicenseServerCertFile>license_server.der</LicenseServerCertFile>
<PackagerCredentialFile>production_packager.pfx</PackagerCredentialFile>
<PackagerCredentialPassword>hbXX5omIhzI=</PackagerCredentialPassword>
<PolicyFile>policy01.pol</PolicyFile>
</FlashAccessV2>
</ContentProtection>
</Recording>
</Event>
注意:Live Packager で使用する証明書は、ライセンスサーバーと一致している必要があります。
要素
説明
デフォルト値
FlashAccessV2
コンテンツを保護するために Flash Access
なし
で使用される設定のコンテナー。
FlashAccessV2/CommonKeyFile
コンテンツ暗号化キーの生成に使用する共
通キーファイルへのパス。パスは、設定
ファイルへの絶対パスまたは相対パスにす
る必要があります。
なし
コンテンツ暗号化キーを生成するためにコ
ンテンツ ID で使用される基本キー。これは、
16 バイト/ 128 ビットのバイナリキーを含
むバイナリファイルです。
アダプティブビットレートストリーミング
の場合、コンテンツのセット全体で同じ共
通キーとコンテンツ ID を使用します。同じ
キーと ID を使用すると、単一のライセンス
でコンテンツのセットを復号化できます。
FlashAccessV2/ContentID
コンテンツ暗号化キーを生成するために共
通キーで使用されるコンテンツ ID。
なし
FlashAccessV2/LicenseServerCertFile
コンテンツの保護に使用される DER でエン
なし
コードされたライセンスサーバー証明書
ファイル。
FlashAccessV2/LicenseServerURL
FlashAccessV2/PackagerCredentialFile
このコンテンツのライセンス取得を処理す
るライセンスサーバーの URL。
なし
Packager の保護資格情報を含む PFX ファ
なし
イル。
FlashAccessV2/PackagerCredentialPas
sword
Packager の資格情報を保護するために使用 なし
FlashAccessV2/PolicyFile
このコンテンツのポリシーが格納されてい
るファイル。現在、このツールでパッケー
ジ化されるコンテンツに適用できるポリ
シーは 1 つだけです。
なし
FlashAccessV2/TransportCertFile
DER でエンコードされたトランスポート証
なし
されるパスワード文字列。
明書ファイル。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
86
メディアのストリーミングの概要
Live Packager が HTTP Dynamic Streaming に必要なフラグメント化および保護されたファイルを出力します。各フラグ
メントは、CDN キャッシュとブラウザーキャッシュの両方で永続的に保護されます。
オンデマンドコンテンツを暗号化するための Flash Media Server の設定
1 jit.conf という名前のファイルを作成し、オンデマンドメディアファイルと同じフォルダーにコピーします。jit.conf
ファイルの設定が、フォルダー内のすべてのファイルに適用されます。
2 ストリームを暗号化するために必要な XML タグを追加します。jit.conf ファイルのサンプルを次に示します。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:hds="http://ns.adobe.com/hds-package/1.0">
<hds:frame-rate>29.97</hds:frame-rate>
<hds:frames-per-keyframe-interval>60</hds:frames-per-keyframe-interval>
<hds:content-protection enabled="true">
<hds:protection-scheme>FlashAccessV2</hds:protection-scheme>
<hds:FlashAccessV2>
<hds:content-id>myfile.manifest</hds:content-id>
<hds:common-key-file>common.bin</hds:common-key-file>
<hds:license-server-url>http://mylicenseserver.myhost.com</hds:license-server-url>
<hds:transport-cert-file>transport.der</hds:transport-cert-file>
<hds:license-server-cert-file>server.der</hds:license-server-cert-file>
<hds:packager-credential-file>packager.pfx</hds:packager-credential-file>
<hds:packager-credential-password>??????</hds:packager-credential-password>
<hds:policy-file>policy.pol</hds:policy-file>
</hds:FlashAccessV2>
</hds:content-protection>
</manifest>
要素
説明
デフォルト値
//manifest/hds:content-protection/hds:flash- 共通キーファイルへのパス。ファイルには、16 バイ
access/hds:common-key-file
ト/ 128 ビットのランダムキーが含まれます。
なし
パスは、jit.conf ファイルへの絶対パスまたは相対パ
スにする必要があります。
なし
//manifest/hds:content-protection/hds:flash- コンテンツの保護に使用されるコンテンツ ID。指定
access/hds:content-id
しない場合、salt がファイル名になります。指定され
た場合、salt はディレクリ内のすべてのコンテンツで
共有されます。
//manifest/hds:content-protection/hds:flash- ライセンスサーバーの URL。
access/hds:license-server-url
なし
//manifest/hds:content-protection/hds:flash- トランスポート証明書ファイルへのパス。ファイルは
access/hds:transport-cert-file
DER 形式です。
なし
パスは、jit.conf ファイルへの絶対パスまたは相対パ
スにする必要があります。
//manifest/hds:content-protection/hds:flash- トランスポート証明書ファイルへのパス。ファイルは
access/hds:license-server-cert-file
DER 形式です。
パスは、jit.conf ファイルへの絶対パスまたは相対パ
スにする必要があります。
最終更新日 2011/10/10
なし
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
87
メディアのストリーミングの概要
要素
説明
デフォルト値
//manifest/hds:content-protection/hds:flash- Packager の資格情報に関する証明書ファイルへのパ
access/hds:packager-credential-file
ス。ファイルは PFX 形式です。
なし
パスは、jit.conf ファイルへの絶対パスまたは相対パ
スにする必要があります。
//manifest/hds:content-protection/hds:flash- Packager の資格情報のパスワード。
access/hds:packager-credential-password
なし
//manifest/hds:content-protection/hds:flash- ポリシーファイルへのパス。ファイルは FAXS ポリ
access/hds:policy-file
シー形式です。
なし
パスは、jit.conf ファイルへの絶対パスまたは相対パ
スにする必要があります。
ライブストリームのパブリッシュ
❖ サポートされているエンコーダーから livepkgr サービスへライブストリームまたはマルチビットレートストリームをパ
ブリッシュします。Flash Access には、特別な設定は不要です。
暗号化されたストリームの再生
❖ OSMF Media Player は次を実行します。
a ファイルフラグメントを要求し、シームレスにそれを再生します。
b Flash Access Server for Protected Streaming からコンテンツのライセンスを取得します。コンテンツのライセンス
には、有効なクライアントでコンテンツを再生するために必要なキーが含まれます。
c コンテンツをリアルタイムで復号化します。
HTTP ストリーミング設定のファイル参照
ライブおよびオンデマンド HTTP ストリーミングのサーバーレベル
(httpd.conf)での設定
Flash Media Server と共にインストールされる Apache HTTP Server は、デフォルトで(Flash Player および AIR への)
Adobe HTTP Dynamic Streaming と(iOS および Mac OS への)Apple HTTP Live Streaming 用に設定されています。
Flash Media Server Apache のインストールには、HTTP ストリーミングを処理するための 3 つのカスタム モジュールが含
まれています。
次の表は、各モジュールが処理するストリーミングの種類と httpd.conf ファイル内のモジュールの設定場所を示していま
す。
ストリーミングの種類
モジュール
httpd.conf ファイル内の
Location ディレクティブ
ライブ Adobe HTTP Dynamic Streaming
f4fhttp_module
<Location /hds-live>
リアルタイムでパッケージ化されるオンデマンド Adobe
jithttp_module
<Location /hds-vod>
f4fhttp_module
<Location /vod>
ライブ Apple HTTP Live Streaming
hlshttp_module
<Location /hls-live>
オンデマンド Apple HTTP Live Streaming
hlshttp_module
<Location /hls-vod>
HTTP Dynamic Streaming
File Packager ツールによってオフラインでパッケージ化さ
れるオンデマンド Adobe HTTP Dynamic Streaming
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
注意:Apple HTTP Live Streaming は、その名称にもかかわらず、ライブコンテンツとオンデマンドコンテンツをサポー
トします。
これらのモジュールの設定により、Player がサーバーから要求する URL の形式、コンテンツの場所、コンテンツのフラグ
メンテーション設定およびその他の設定が決定されます。Apache httpd.conf ファイルで、サーバーレベルでの設定を行い
ます。
rootinstall/Apache2.2/conf/httpd.conf
デフォルトの設定を参照する場合は、httpd.conf ファイルを開きます。
すべての HTTP ストリーミングモジュール用のディレクティブ
次のディレクティブを使用して、すべての HTTP ストリーミングモジュール(jithttp_module、f4fhttp_module および
hlshttp_module)を設定します。
ディレクティブ
必須
説明
HttpStreamingContentPath
あり
コンテンツパスの物理的な場所。ライブストリーミングの場合は、
livepkgr/streams の場所
この値は、Apache ルートフォルダーへの絶対パスまたは相対パ
スにすることができます。68 ページの「コンテンツストレージ
(HDS および HLS)」を参照してください。
HttpStreamingLiveEventPath
あり
ライブイベントディレクトリの場所(デフォルトでは、
livepkgr/events)デフォルト値は "../applications" です。
ライブスト
リーミング この値は、Apache ルートフォルダーへの絶対パスまたは相対パ
の場合のみ。 スにすることができます。68 ページの「コンテンツストレージ
(HDS および HLS)」を参照してください。
HTTP ストリーミングファイルの操作は、File プラグインを介し
てルーティングされます。オプションで、コンテンツの管理に
File プラグインを使用できます。詳細については、262 ページの
「File プラグインを使用した HTTP ライブストリーミングコンテン
ツの管理」を参照してください。
HttpStreamingURLSandboxLevel
なし
ライブスト
リーミング
の場合のみ
HttpStreamingLiveEventPath が設定されるスコープを定義しま
す。指定できる値は、"App"、"Inst" および "Server" です。デフォ
ルト値は "Server" です。
この値は、Apache ルートフォルダーへの絶対パスまたは相対パ
スにすることができます。68 ページの「コンテンツストレージ
(HDS および HLS)」を参照してください。
Location
あり
サーバー名(およびオプションのポート番号)の後の要求 URL の
セクション。このパスは、要求を処理するために使用するモ
ジュールを Apache に伝えます。
この値は、Apache ルートフォルダーへの絶対パスまたは相対パ
スにすることができます。68 ページの「コンテンツストレージ
(HDS および HLS)」を参照してください。
Adobe HTTP Dynamic Streaming 用のディレクティブ
次のディレクティブを使用して、Adobe HTTP Dynamic Streaming モジュール(オンデマンド用の jithttp_module とラ
イブ用の f4fhttp_module)を設定します。
最終更新日 2011/10/10
88
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
89
メディアのストリーミングの概要
パラメーター
モジュール
必須
EncryptionScope
jithttp_module、
f4fhttp_module
なし
説明
Protected HTTP Dynamic Streaming
(PHDS)が設定されるスコープ。有効な値は
次のとおりです。
server — サーバーは httpd.conf ファイルの
設定を使用します。
content — サーバーは、Event.xml ファイル
や Application.xml ファイル(ライブ)、ま
たは jit.conf ファイル(オンデマンド)の設
定を使用します。
「Protected HTTP Dynamic Streaming
(PHDS)」を参照してください。
HttpStreamingBootstrapMaxAge
f4fhttp_module
なし
ブートストラップファイルの有効時間(秒単
位)。デフォルト値は 2 です。
53 ページの「ライブ PHDS の SWF 検証設
定」を参照してください。
HttpStreamingEnabled
f4fhttp_module
あり
パッケージ化を有効にします。指定できる値
は、true と false です。
HttpStreamingFragMaxAge
f4fhttp_module
なし
フラグメントファイルの有効時間(秒単位)。
デフォルト値は無制限を意味する -1 です。
53 ページの「ライブ PHDS の SWF 検証設
定」を参照してください。
HttpStreamingFragmentDuration
jithttp_module
なし
F4F ファイルの長さ(ミリ秒)。デフォルト
「F4M および TS の継続時間
値は 4000 です。
の設定」を参照してください。
HttpStreamingFrameRate
jithttp_module
なし
フレームベースのフラグメント継続時間の設
定の場合、これはソースコンテンツのフレー
ムレートです。jit.conf ファイルが指定され
た場合、この値より優先されます。「F4M お
よび TS の継続時間の設定」を参照してくだ
さい。
HttpStreamingFramesPerKeyframeIn
terval
jithttp_module
なし
フレームベースのフラグメント継続時間の設
定の場合、これは各キーフレーム間隔のフ
レーム(ピクチャのグループ)の数です。
jit.conf ファイルが指定された場合、この値
より優先されます。「F4M および TS の継続
時間の設定」を参照してください。
HttpStreamingF4MMaxAge
f4fhttp_module
なし
F4M ファイルの有効時間(秒単位)。デフォ
ルト値は 2 です。
53 ページの「ライブ PHDS の SWF 検証設
定」を参照してください。
jithttp_module
あり
HttpStreamingKeyframeIntervalsPerF jithttp_module
ragment
なし
HttpStreamingJITPEnabled
ジャストインタイムのパッケージ化が有効
(true)か無効(false)のどちらであるかを
示します。
フレームベースのフラグメント継続時間の設
定の場合、これは 1 フラグメントあたりの
キーフレーム間隔(GOP)の数です。デフォ
ルト値は 1 です。
jit.conf ファイルが指定された場合、この値
より優先されます。「F4M および TS の継続
時間の設定」を参照してください。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
90
メディアのストリーミングの概要
パラメーター
モジュール
必須
HttpStreamingMaxFragmentDuratio
n
jithttp_module、
f4fhttp_module
なし
これはフラグメントの許容される最大サイズ
(ミリ秒)です。このディレクティブは、
ユーザーの上書きによってネットワーク渋滞
の原因になりうる大きなフラグメントが作成
されるのを防ぐ値に設定します。
HttpStreamingMinFragmentDuration jithttp_module、
なし
これはフラグメントの許容される最大サイズ
(ミリ秒)です。このディレクティブは、
ユーザーの上書きによって多数の小さなフラ
グメントが生成されるのを防ぐ値に設定しま
す。メディアが非常に多くのフラグメントに
パッケージ化される場合、クライアントは非
常に多くの要求を行う必要があります。
f4fhttp_module
説明
JitFmsDirPath
jithttp_module
あり
Flash Media Server インストールの場所。
PHDSSWFVerification
jithttp_module、
f4fhttp_module
なし
PHDS の SWF 検証を有効(true)または無
効(false)にします。
EncryptionScope が content に設定されてい
る場合は、この値を jit.conf ファイルで設定
できます。52 ページの「Protected HTTP
Dynamic Streaming の SWF 検証」を参照
してください。
PHDSSWFWhiteListFolder
jithttp_module、
f4fhttp_module
なし
オンデマンド SWF 検証のホワイトリストを
含むフォルダーへのパス。フォルダーには複
数のホワイトリストファイルを含めることが
できます。
デフォルト値は(メディアと jit.conf ファイ
ルの両方を含む)コンテンツフォルダーで
す。
EncryptionScope が content に設定されてい
る場合は、この値を jit.conf ファイルで設定
できます。52 ページの「Protected HTTP
Dynamic Streaming の SWF 検証」を参照
してください。
ProtectionScheme
jithttp_module、
f4fhttp_module
なし
コンテンツに適用する保護のタイプ。指定で
きる値は phds と FlashAccessV2 です。45
ページの「Protected HTTP Dynamic
Streaming(PHDS)の設定」および 84
ページの「Flash Access 保護用のコンテンツ
の暗号化」を参照してください。
Apple HTTP Live Streaming 用のディレクティブ
次のディレクティブを使用して、ライブおよびオンデマンドのストリーミング用の Apple HTTP Live Streaming モジュー
ル(hlshttp_module)を設定します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ディレクティブ
必須
説明
HLSEncryptCipherKeyFile
なし
PHLS 用のコンテンツの暗号化に使用されるデフォルトの暗号化
キーのパス。
HLSEncryptionScope
なし
Protected HTTP Live Streaming (PHLS)が設定されるスコープ。
有効な値は次のとおりです。
server — サーバーは httpd.conf ファイルの設定を使用します。
content — サーバーは、Event.xml ファイルや Application.xml
ファイル(ライブ)、または jit.conf ファイル(オンデマンド)の設
定を使用します。
「Protected HTTP Live Streaming (PHLS)」を参照してください。
HLSEncryptKeyURI
なし
クライアントが PHLS 用の暗号化キーを取得するために使用する
URI。
HLSFmsDirPath
あり
Flash Media Server インストールの場所。デフォルト値は ".." です。
HLSHttpStreamingEnabled
あり
HLS が有効(true)か無効(false)のどちらであるかを示します。
デフォルト値は false です。
HLSMediaFileDuration
なし
TS ファイルが提供される時間(ミリ秒)。この数値は、Flash
Media Live Encoder で指定されたフラグメント継続時間の倍数で
なければなりません。デフォルト値は 8000 です。「F4M および TS
の継続時間の設定」を参照してください。
なし
HLSM3U8MaxAge
M3U8 応答の cache-control ヘッダーで設定する最大時間(秒単
位)を指定します。HLS ライブのデフォルト値は 2 です。HLS オン
デマンドのデフォルト値は 86400(1 日)です。値が -1 の場合、
cache-control ヘッダーは設定されません。
HLSSlidingWindowLength
なし
スライディングウィンドウ内でシーク可能な再生リスト内の TS ファ
イルの数。ウィンドウ内の時間は HLSSlidingWindowLength *
HLSMediaFileDuration の値です。HTTP Live Streaming クライア
ントは、スライディングウィンドウを使用してシークバーを設定し
ます。デフォルト値は 6 です。
「スライディングウィンドウの設定(HLS)」を参照してください。
HLSTSSegmentMaxAge
なし
TS セグメント応答の cache-control ヘッダーで設定する最大時間
(秒単位)を指定します。HLS ライブのデフォルト値は、cache-
control ヘッダーが設定されない -1 です。HLS オンデマンドのデ
フォルト値は 86400(1 日)です。
ライブ HTTP ストリーミングの設定
ライブ HTTP Dynamic Streaming およびライブ HTTP Live Streaming を次のレベルで設定できます。
レベル
設定ファイル
Server
rootinstall/Apache2.2/conf/httpd.conf
Application
rootinstall/applications/livepkgr/Application.xml
イベント
rootinstall/applications/livepkgr/events/_definst_/liveevent/Event.xml
ライブ HTTP ストリーミングのアプリケーションレベルでの設定 (Application.xml)
アプリケーション内のすべてのライブイベント用に HTTP ストリーミングを設定するには、Application.xml ファイルを
使用します。Application.xml ファイルの設定は、単一アプリケーションの httpd.conf ファイルの設定より優先されます。
最終更新日 2011/10/10
91
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
アプリケーションフォルダーに Application.xml ファイルを置きます。例えば、
rootinstall/applications/livepkgr/Application.xml のようにします。
注意:vhost レベルでの Application.xml ファイルの HTTP ストリーミングの設定はサポートされていません。
HTTP ストリーミング用の使用可能な設定エレメントをすべて備えた Application.xml ファイルを次に示します。
<Application>
<StreamManager>
<Live>
<AssumeAbsoluteTime></AssumeAbsoluteTime>
</Live>
</StreamManager>
<HDS>
<HLS>
<KeyframeIntervalPerMediaFile></KeyframeIntervalPerMediaFile>
<MediaFileDuration></MediaFileDuration>
<SlidingWindowLength></SlidingWindowLength>
<Encryption enabled="true">
<KeyFile></KeyFile>
<KeyURI></KeyURI>
</Encryption>
</HLS>
<Recording>
<FragmentDuration></FragmentDuration>
<SegmentDuration></SegmentDuration>
<FrameRate></FrameRate>
<FramesPerKeyframeInterval></FramesPerKeyframeInterval>
<KeyframeIntervalsPerFragment></KeyframeIntervalPerFragment>
<FramePrecision></FramePrecision>
<DiskManagementDuration></DiskManagementDuration>
<ContentProtection enabled="true">
<ProtectionScheme></ProtectionScheme>
<PHDS>
<CommonKeyFile></CommonKeyFile>
<VideoEncryptionLevel></VideoEncryptionLevel>
<UpdateInterval></UpdateInterval>
<SWFVerification enabled="true">
<WhiteListFolder></WhiteListFolder>
<UpdateInterval></UpdateInterval>
</SWFVerfication>
</PHDS>
<FlashAccessV2>
<ContentID></ContentID>
<CommonKeyFile></CommonKeyFile>
<LicenseServerURL></LicenseServerURL>
<TransportCertFile></TransportCertFile>
<LicenseServerCertFile></LicenseServerCertFile>
<PackagerCredentialFile></PackagerCredentialFile>
<PackagerCredentialPassword></PackagerCredentialPassword>
<PolicyFile></PolicyFile>
</FlashAccessV2>
</ContentProtection>
</Recording>
</HDS>
</Application>
各エレメントの詳細については、93 ページの「Application.xml と Event.xml」を参照してください。
最終更新日 2011/10/10
92
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
ライブ HTTP ストリーミングのイベントレベル(Event.xml)での設定
単一のイベントを設定するには、Event.xml ファイルを使用します。Event.xml ファイルをライブイベントのフォルダーに
コピーします。デフォルトのライブイベントは rootinstall/applications/livepkgr/events/_definst_/liveevent です。
Event.xml ファイルは、単一のライブイベントの Application.xml ファイルおよび Apache httpd.conf ファイルより優先さ
れます。すべてのライブイベントのフォルダーには、1 つの Event.xml ファイルが必要です。
注意:Event.xml の設定が Application.xml の設定よりも優先されないいくつかの例外があります。これらの例外は、設定
パラメーターと共に注記されます。
HTTP ストリーミング用の使用可能な設定エレメントをすべて備えた Event.xml ファイルを次に示します。
<Event>
<EventID></EventID>
<HLS>
<KeyframeIntervalPerMediaFile></KeyframeIntervalPerMediaFile>
<MediaFileDuration></MediaFileDuration>
<SlidingWindowLength></SlidingWindowLength>
<Encryption enabled="true">
<KeyFile></KeyFile>
<KeyURI></KeyURI>
</Encryption>
</HLS>
<Recording>
<FragmentDuration></FragmentDuration>
<SegmentDuration></SegmentDuration>
<FrameRate></FrameRate>
<FramesPerKeyframeInterval></FramesPerKeyframeInterval>
<KeyframeIntervalsPerFragment></KeyframeIntervalPerFragment>
<FramePrecision></FramePrecision>
<DiskManagementDuration></DiskManagementDuration>
<ContentProtection enabled="true">
<ProtectionScheme></ProtectionScheme>
<PHDS>
<CommonKeyFile></CommonKeyFile>
<VideoEncryptionLevel></VideoEncryptionLevel>
<PlaybackExpiration></PlaybackExpiration>
<UpdateInterval></UpdateInterval>
<SWFVerification enabled="true">
<WhiteListFolder></WhiteListFolder>
<UpdateInterval></UpdateInterval>
</SWFVerfication>
</PHDS>
<FlashAccessV2>
<ContentID></ContentID>
<CommonKeyFile></CommonKeyFile>
<LicenseServerURL></LicenseServerURL>
<TransportCertFile></TransportCertFile>
<LicenseServerCertFile></LicenseServerCertFile>
<PackagerCredentialFile></PackagerCredentialFile>
<PackagerCredentialPassword></PackagerCredentialPassword>
<PolicyFile></PolicyFile>
</FlashAccessV2>
</ContentProtection>
</Recording>
</Event>
Application.xml と Event.xml
ルートエレメント
最終更新日 2011/10/10
93
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
94
メディアのストリーミングの概要
要素
説明
デフォルト値
//Application
Application.xml 設定ファイルのルートエレメント。
N/A
// イベント
Event.xml 設定ファイルのルートエレメント。
N/A
//Event/EventID
ライブイベントの名前。この名前は、イベントフォルダーの
名前およびサーバーサイド ActionScript の Stream.liveEvent
liveevent
プロパティの値と同じです。
HTTP Live Streaming の設定
<HLS> コンテナー内のエレメントを使用して、HTTP Live Streaming を設定します。Application.xml ファイルの場合、
エレメントは //Application/HDS/HLS にあります。Event.xml ファイルの場合、エレメントは //Event/HLS にあります。
要素
説明
デフォルト値
/HLS/KeyframeIntervalPerMediaFile
フレームベースのファイルの継続時間を設定します。
なし
77 ページの「F4F および TS フラグメントの継続時間の
設定」を参照してください。
/HLS/MediaFileDuration
TS ファイルが提供される時間(ミリ秒)。この数値は、 なし
FragmentDuration の倍数でなければなりません。
77 ページの「F4F および TS フラグメントの継続時間の
設定」を参照してください。
/HLS/SlidingWindowLength
Apple HTTP Live Streaming のストリームのシーク可 6
能な部分。ウィンドウ内の時間は
HLSSlidingWindowLength * HLSMediaFileDuration の
値です。HTTP Live Streaming クライアントは、スラ
イディングウィンドウを使用してシークバーを設定しま
す。
スライディングウィンドウは、ライブストリームの現在
の位置に対応します。
17 ページの「スライディングウィンドウの設定
(HLS)」を参照してください。
/HLS/Encryption
enabled 属性を "allow" に設定し、Event.xml ファイル なし
の PHLS 設定が Application.xml ファイルの設定よりも
優先されるようにします。
enabled 属性を "true" に設定し、Application.xml
ファイルで PHLS を設定します。これらの設定は、アプ
リケーション内のすべてのライブイベントに適用されま
す。
55 ページの「Protected HTTP Live Streaming
(PHLS)の設定」を参照してください。
/HLS/Encryption/KeyFile
コンテンツの暗号化に使用されるデフォルトの暗号化
キーのパス。
なし
55 ページの「Protected HTTP Live Streaming
(PHLS)の設定」を参照してください。
/HLS/Encryption/KeyURI
クライアントが復号化キーを取得するために使用する
URI。
55 ページの「Protected HTTP Live Streaming
(PHLS)の設定」を参照してください。
記録の設定
最終更新日 2011/10/10
なし
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
95
メディアのストリーミングの概要
<Recording> コンテナー内のエレメントを使用して、サーバーがディスクにファイルを書き込む方法を設定します。
Application.xml ファイルの場合、エレメントは //Application/HDS/Recording にあります。Event.xml ファイルの場合、エ
レメントは //Event/Recording にあります。
要素
説明
デフォルト値
/Recording
ディスクへのファイルの書き込み方法を設定するセクショ
ン。
なし
/Recording/DiskManagementD
uration
ディスクでのライブコンテンツの最大継続時間(時間単位)。 3
小数値を使用して分単位を指定します。この値が
Application.xml で設定されている場合、Event.xml でこの
値を上書きすることはできません。
82 ページの「ディスク管理」を参照してください。
/Recording/FragmentDuration
各フラグメントの長さ(ミリ秒単位)。各セグメントは 1 つ
4000
以上のフラグメントを含むことができます。77 ページの
「F4F および TS フラグメントの継続時間の設定」を参照して
ください。
/Recording/FramePrecision
フラグメント実行テーブルの丸め精度(フレーム単位)。フ
1
レーム単位は指定されているフレームレートから得られます
(1/ レート)。77 ページの「F4F および TS フラグメントの継
続時間の設定」を参照してください。
/Recording/FrameRate
元のコンテンツのフレームレート(フレーム数 / 秒(fps)単 なし
位)。値は浮動小数点数です。NTSC の場合は値 29.97 を使用
します。77 ページの「F4F および TS フラグメントの継続時
間の設定」を参照してください。
/Recording/FramesPerKeyframe 各キーフレーム間のフレーム数。例えば、30 fps のビデオで
Interval
キーフレームが 2 秒ごとの場合は、1 キーフレーム間隔に 60
なし
フレームが含まれます。77 ページの「F4F および TS フラグ
メントの継続時間の設定」を参照してください。
/Recording/IOBufferSize
記録用の IO バッファーのサイズ(バイト単位)。IO バッ
4096
ファーは、ディスクファイルをメモリ内のバッファーにロー
ドします。システムコールを作成するのではなく、メモリ内
のバッファーに対する読み取りと書き込みを行います。82
ページの「IO バッファーのサイズの設定」を参照してくださ
い。
/Recording/KeyframeIntervalsP
erFragment
1 フラグメントのキーフレーム間隔の数。デフォルト値は 1
1
で、フラグメントのサイズがキーフレーム間隔と同じである
ことを意味します。77 ページの「F4F および TS フラグメン
トの継続時間の設定」を参照してください。
/Recording/SegmentDuration
各セグメントの長さ(ミリ秒単位)。各 .f4f ファイルは 1 つの 400000
セグメントを含みます。
77 ページの「F4F および TS フラグメントの継続時間の設定」
を参照してください。
コンテンツ保護の設定
ContentProtection および ProtectionScheme エレメントを使用して、Protected HTTP Dynamic Streaming または Flash
Access でのコンテンツ保護を有効にします。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
96
メディアのストリーミングの概要
要素
説明
デフォルト値
/ContentProtection
Protected HTTP Dynamic Streaming または Flash Access なし
での保護用にコンテンツを有効にするかどうかを指定しま
す。コンテンツ保護を有効にするには、enabled 属性を true
に設定します。
/ContentProtection/ProtectionS 保護のタイプ。指定できる値は phds と FlashAccessV2 です。 なし
cheme
Protected HTTP Dynamic Streaming(PHDS)の設定
PHDS コンテナー内のエレメントを使用して、Protected HTTP Dynamic Streaming を設定します。Application.xml
ファイルの場合、エレメントは //Application/HDS/Recording/ContentProtection/PHDS にあります。Event.xml ファイルの
場合、エレメントは //Event/Recording/ContentProtection/PHDS にあります。
PHDS コンテナー内のエレメントの詳細については、45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設
定」を参照してください。
Flash Access の設定
FlashAccessV2 コンテナー内のエレメントを使用して、Flash Access でのコンテンツ保護を設定します。Application.xml
ファイルの場合、エレメントは //Application/HDS/Recording/ContentProtection/FlashAccessV2 にあります。Event.xml ファ
イルの場合、エレメントは //Event/Recording/ContentProtection/FlashAccessV2 にあります。
FlashAccessV2 コンテナー内のエレメントの詳細については、84 ページの「Flash Access 保護用のコンテンツの暗号化」を
参照してください。
Manifest.xml
Flash Media Server 4.5 では、Manifest.xml ファイルの後継となるセットレベルマニフェストファイルを導入しています。
ただし、Flash Media Server 4.5 では Manifest.xml ファイルもサポートされており、場合によってはこのファイルを使用す
る機会があります。
例えば、Flash Media Playback では、セットレベルマニフェストファイルはサポートされていません。DVR またはマルチ
ビットレートストリーミング用に Flash Media Playback を使用するには、Manifest.xml ファイルを設定します。
デフォルトの Manifest.xml ファイルに <dvrInfo> エレメントを追加した内容を次に示します。
<manifest xmlns="http://ns.adobe.com/f4m/1.0">
<dvrInfo beginOffset="0"></dvrInfo>
<media streamId="livestream1" bitrate="100">
</media>
<media streamId="livestream2" bitrate="200">
</media>
<media streamId="livestream3" bitrate="350">
</media>
</manifest>
要素
属性
説明
beginOffset
記録されたストリームの開始からのオフ
セット(秒単位)。クライアントはこの位置
からストリームの表示を開始できます。デ
フォルト値は 0 です。
dvrInfo
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
97
メディアのストリーミングの概要
要素
属性
説明
endOffset
記録されたストリームの現在の継続時間よ
り前のオフセット(秒単位)。クライアント
は、この位置より前のストリームを表示で
きません。デフォルト値は 0 です。
負の値は 0 として扱われます。endOffset と
beginOffset のどちらも設定されていない
と、開始時間はコンテンツの開始になりま
す。
1 つのストリームを表します。
media
streamID
パブリッシュしているストリームの名前。
bitrate
ストリームがエンコードされたビットレー
ト。
注意:Manifest.xml ファイルは F4M v1.0 のみをサポートしています。
オンデマンド HTTP ストリーミングの設定
オンデマンド HTTP Dynamic Streaming および HTTP Live Streaming を次のレベルで設定できます。
レベル
設定ファイル
Server
rootinstall/Apache2.2/conf/httpd.conf
Stream
jit.conf
オンデマンド HTTP ストリーミングのストリームレベル(jit.conf)での設定
ストリームレベルの設定ライブを jit.conf ファイルに設定します。jit.conf ファイルを作成し、オンデマンドストリームと同
じディレクトリにコピーします。ディレクトリには 1 つの jit.conf ファイルのみを含めることができます。ファイル内の設
定はディレクトリ内のすべてのコンテンツに適用されます。
使用可能なすべての設定が行われた jit.conf ファイルを次に示します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0" xmlns:hds="http://ns.adobe.com/hds-package/1.0">
<hds:frame-rate></hds:frame-rate>
<hds:frames-per-keyframe-interval></hds:frames-per-keyframe-interval>
<hds:fragment-duration></hds:fragment-duration>
<hds:keyframe-intervals-per-fragment><hds:keyframe-intervals-per-fragment>
<hds:hls>
<hds:keyframe-intervals-per-media-file></hds:keyframe-intervals-per-media-file>
<hds:media-file-duration></hds:media-file-duration>
<hds:encryption enabled="true">
<hds:keyfile></hds:keyfile>
<hds:keyuri></hds:keyuri>
</hds:encryption>
</hds:hls>
<hds:content-protection enabled="true">
<hds:protection-scheme>phds</hds:protection-scheme>
<hds:phds>
<hds:common-key-file></hds:common-key-file>
<hds:video-encryption-level></hds:video-encryption-level>
<hds:playback-expiration></hds:playback-expiration>
</hds:phds>
<hds:FlashAccessV2>
<hds:content-id></hds:content-id>
<hds:common-key-file></hds:common-key-file>
<hds:license-server-url></hds:license-server-url>
<hds:transport-cert-file></hds:transport-cert-file>
<hds:license-server-cert-file></hds:license-server-cert-file>
<hds:packager-credential-file></hds:packager-credential-file>
<hds:packager-credential-password></hds:packager-credential-password>
<hds:policy-file></hds:policy-file>
</hds:FlashAccessV2>
</hds:content-protection>
</manifest>
ディスクへの記録に関する設定
この表のエレメントの詳細については、77 ページの「F4F および TS フラグメントの継続時間の設定」を参照してくださ
い。
最終更新日 2011/10/10
98
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
99
メディアのストリーミングの概要
要素
説明
デフォルト値
//manifest/hds:fragment-duration
このエレメントを使用して、フラグメント継続時間を
時間で設定します。
なし
コンテンツのセットのフラグメント継続時間(秒単
位)。値には小数を指定できます(例えば、2002 ミ
リ秒を指定するには、値 2.002 を使用します)。
この値が指定されてない場合、値は httpd.conf 内の
モジュール設定から取得されます。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
//manifest/hds:frame-rate
このエレメントを使用して、フラグメント継続時間を
フレームレートで設定します。
なし
コンテンツのセットのフラグメント継続時間を決定す
るフレームレート。単位はフレーム / 秒で、小数
(NTSC の場合は 29.97)で指定できます。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
//manifest/hds:frames-per-keyframe-interval
このエレメントを使用して、フラグメント継続時間を
フレームレートで設定します。
なし
キーフレーム間隔あたりのフレーム(GOP)の数。
単位はフレームで、整数値にする必要があります。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
//manifest/hds:keyframe-intervals-perfragment
このエレメントを使用して、フラグメント継続時間を
フレームレートで設定します。
1
1 フラグメントのキーフレーム間隔の数。単位はフラ
グメントあたりのキーフレーム間隔で、整数値にする
必要があります。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
//manifest/hds:hls
Apple HTTP Live Streaming 設定のコンテナー。
N/A
//manifest/hds:hls/hds:keyframe-intervalsper-media-file
このエレメントを使用して、フレームベースのファイ
ル継続時間を設定します。
なし
TS ファイル継続時間あたりのキーフレーム間隔の数。
値は整数にする必要があります。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
//manifest/hds:hls/hds:media-file-duration
このエレメントを使用して、時間ベースのファイル継
続時間を設定します。
なし
このファイルに関連付けられたコンテンツのセットの
TS ファイル継続時間(ミリ秒単位)。フラグメント継
続時間の倍数である値を使用します。
77 ページの「F4F および TS フラグメントの継続時間
の設定」を参照してください。
コンテンツ保護の設定
ContentProtection および ProtectionScheme エレメントを使用して、Protected HTTP Dynamic Streaming または Flash
Access でのコンテンツ保護を有効にします。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
100
メディアのストリーミングの概要
要素
説明
デフォルト値
//manifest/hds:contentprotection
Protected HTTP Dynamic Streaming または Flash Access なし
での保護用にコンテンツを有効にするかどうかを指定しま
す。コンテンツ保護を有効にするには、enabled 属性を
"true" に設定します。
//manifest/hds:contentprotection/hds:protectionscheme
保護のタイプ。指定できる値は phds と FlashAccessV2 です。 なし
Protected HTTP Dynamic Streaming(PHDS)の設定
<hds:phds> コンテナー内のエレメントを使用して、PHLS でのコンテンツ保護を設定します。
詳細については、45 ページの「Protected HTTP Dynamic Streaming(PHDS)の設定」を参照してください。
Protected HTTP Live Streaming(PHLS)の設定
<hds:hls> コンテナー内のエレメントを使用して、PHLS でのコンテンツ保護を設定します。
詳細については、55 ページの「Protected HTTP Live Streaming(PHLS)の設定」を参照してください。
Flash Access の設定
<hds:FlashAccessV2> コンテナー内のエレメントを使用して、Flash Access でのコンテンツ保護を設定します。
詳細については、84 ページの「Flash Access 保護用のコンテンツの暗号化」を参照してください。
カスタム Media Player の構築
ライブサービスと VOD サービスの Media Player の構築
アドビ システムズ社は、Media Player をより簡単に構築できるようにするために、Open Source Media Framework
(OSMF)を開発しました。OSMF は、Flash プラットフォームに基づいて堅牢で多彩な機能のビデオ Player およびアプリ
ケーションを構築するためのオープンソフトウェアフレームワークです。OSMF ライブラリでの Media Player の構築に関
する詳細については、
「Building streaming video players in Flash with the Adobe Open Source Media Framework」を
参照してください。
また、ActionScript を使用して、スクラッチパッドから Media Player を新規に構築することもできます。詳しくは、以下
のトピックを参照してください。
• 120 ページの「ストリーミングメディアアプリケーションの開発」
• 103 ページの「HTTP Dynamic Streaming Media Player の構築」
ストリーミングサービスへの接続
すべての Flash Media Server アプリケーションと同様に、ストリーミングサービスには、次の形式の
NetConnection.connect() URI が必要です。
rtmp://fms-ip-or-dna/serviceName/[formatType:][instanceName/]fileOrStreamName
hostName Flash Media Server のドメイン名です。
serviceName live または vod のいずれかです。
instanceName クライアントの接続先がデフォルトのインスタンスの場合には、インスタンス名を省略するか、または
_definst_ を使用することができます。クライアントの接続先が、room1 など、独自に作成したインスタンスの場合は、そ
の名前を使用します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
formatType mp3 ファイルの場合は mp3:、MP4/F4V ファイルの場合は mp4:、FLV ファイルの場合は不要です。
fileOrStreamName ファイル名(my_video.mp4 など)またはパス(subdir/subdir2/my_video.mp4 など)。例えば
rtmp://www.examplemediaserver.com/vod/mp4:ClassicFilms/AnOldMovie.mp4。MPEG-4 ベースのファイルでは、サーバー上
のファイルにファイル名拡張子(mp4、.f4v など)が使用されている場合は、これを指定します。ストリームがライブで、
パブリッシャがファイル名拡張子を指定している場合は、これを指定します。
サポートされていない ActionScript API
VOD サービスやライブサービスのクライアントは、リモート共有オブジェクト(SharedObject.getRemote())を除いて、す
べての ActionScript API を利用することができます。
ストリーミングサービス用にサーバーサイドコードを編集することはできません。ただし、各サービスにはサーバーから情
報にアクセスできるカスタム API があります。クライアントサイドコードから NetConnection.call() メソッドを呼び出し、
呼び出す API の名前を渡します。
関連項目
102 ページの「ストリーミングサービス API」
特定のドメインからの接続の許可
デフォルトでは、ライブサービスや VOD サービスには、すべてのドメインのクライアントが接続することができます。ク
ライアントが接続可能なドメインは制限することができます。
❖ rootinstall/applications/live フォルダーまたは rootinstall/applications/vod フォルダーに移動し、次のいずれかの操
作を行います。
• SWF クライアントのドメインを追加するには、allowedSWFdomains.txt ファイルを編集します。
• HTML クライアントのドメインを追加するには、allowedHTMLdomains.txt ファイルを編集します。
これらの TXT ファイルには、ドメインの追加に関する詳細な情報が記載されています。
生のオーディオとビデオデータへのアクセス
注意:この機能は、Access プラグインを使用した場合にのみ Flash Media Streaming Server でサポートされます。
Flash Media Server 3 と Flash Player 9.0.115.0 から、ストリームの生のオーディオとビデオのデータにアクセスできます。
このデータを使用して、アプリケーション内でスナップショットを作成します。データにアクセスするには、ActionScript
3.0 の BitmapData.draw() メソッドと SoundMixer.computeSpectrum() メソッドを呼び出します。詳細については、『Adobe
Flash Platform 用 ActionScript 3.0 リファレンスガイド』を参照してください。
Flash Media Server では、デフォルトでストリームにアクセスできないようになっています。ストリームへのアクセスを許
可するには、次の操作を行います。
1 main.far ファイルを rootinstall/applications/live または rootinstall/applications/vod から
rootinstall/samples/applications/live または rootinstall/samples/applications/vod に移動します。
FAR ファイルを編集することはできないので、main.far を main.asc に置き換える必要があります。
2 main.asc ファイルを rootinstall/samples/applications/live または rootinstall/samples/applications/vod から
rootinstall/applications/live または rootinstall/applications/vod にコピーします。
3 main.asc ファイルをテキストエディターで開きます。
4 次のコードを非コメント化して、すべてのクライアントがすべてのストリームにアクセスできるようにします。
//p_client.audioSampleAccess = "/";
//p_client.videoSampleAccess = "/";
最終更新日 2011/10/10
101
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
5 main.asc ファイルを保存します。
ストリーミングサービス API
getStreamLength()
getStreamLength(streamObj)
ストリームの長さを秒単位で返します。クライアントサイドスクリプトからこのメソッドを呼び出し、返された値を受け取
るために応答オブジェクトを指定します。
使用できるバージョン
Flash Media Server 3、VOD ストリーミングサービス
パラメーター
streamObj Stream オブジェクト。
戻り値
数値。
例
次のクライアントサイドコードは、sample_video ストリームの長さを取得し、値を returnObj に返します。
nc.call("getStreamLength", returnObj, "sample_video");
getPageUrl()
getPageUrl()
クライアントの SWF ファイルが埋め込まれている Web ページの URL を返します。SWF ファイルが Web ページに埋め
込まれていない場合、値は SWF ファイルの格納場所です。次のコードは 2 つの例を示しています。
// trace.swf file is embedded in trace.html.
getPageUrl returns: http://www.example.com/trace.html
// trace.swf is not embedded in an HTML file.
getPageUrl returns: http://www.example.com/trace.swf
値は HTTP アドレスにする必要があります。セキュリティ上の理由から、ローカルファイルアドレス(例えば、
file:///C:/Flash Media Server applications/example.html)は表示されません。
使用できるバージョン
Flash Media Server 3、VOD ストリーミングサービス、ライブストリーミングサービス
例
次の例では、サーバー上で getPageUrl() メソッドを呼び出します。
nc.call("getPageUrl", returnObj);
getReferrer()
getReferrer()
この接続の作成元の SWF ファイルまたはサーバーの URL を返します。
使用できるバージョン
Flash Media Server 3、VOD ストリーミングサービス、ライブストリーミングサービス
最終更新日 2011/10/10
102
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
例
次のコードは、サーバー上で getReferrer() メソッドを呼び出します。
myNetConnection.call("getReferrer", returnObj);
HTTP Dynamic Streaming Media Player の構築
Open Source Media Framework(OSMF)の使用
HTTP Dynamic Streaming Media Player を構築する必要はありません。Strobe Media Playback と Flash Media
Playback はデフォルトで HDS をサポートします。
カスタムの Player を構築する場合は、OSMF を使用することを強くお勧めします。OSMF は高品質のビデオを配信するた
めに設計されている堅牢なフレームワークです。OSMF Sample Player for HTTP Dynamic Streaming を参照実装として
使用します。この OSMF Sample Player では ActionScript 3.0 NetStream.appendBytes() API を使用してバイトを Flash
Player および AIR に配信します。
ライブ HTTP Dynamic Streaming のアプリケーションフローについて
ストリームを再生するには、Media Player で .f4m ファイルを要求します。Player には、ユーザーがメディアのシーク、一
時停止および再生を行うときに追加のファイルを要求するロジックが含まれます。Flash Media Server Live Packager
(livepkgr アプリケーション)では、サーバーでライブストリームを取り込むときやクライアントでオンデマンドメディア
ファイルを要求するときに、これらのファイルが作成されます。
HTTP Origin Module は、要求されると .f4m ファイルを生成します。ファイルはディスク上に物理的には存在しませ
ん。ただし、ライブストリームがパブリッシュを停止しているときでも、ファイルを要求できます。
Adobe HDS を使用してメディアをストリーミングするには、Flash Media Player で Flash Media マニフェストファイル
(.f4m)を要求します。
マニフェストファイルには、メディアアセットに関する情報または複数ストリームイベントでの各ストリームに関する情報
が含まれます。この情報には、メディアの場所、DRM 追加ヘッダーデータ、メディアブートストラップ情報、アダプティ
ブストリーミングビットレートなどを含めることができます。
ストリームがパッケージ化されてディスクに書き込まれるときに、Apache HTTP モジュールでは F4M ファイルおよび
M3U8 ファイルが作成されます。これらのファイルを作成するには、HTTP モジュールは、Event.xml ファイルのメタ
データ(ある場合)、マルチレベルのマニフェストファイルおよび .f4f、.f4x、.meta、.bootstrap、.drmmeta の各ファイル
のデータを使用します。
重要:ファイルを元の場所から移動しないでください。
ファイルを生成するために、HTTP モジュールは次の手順を実行します。
1 要求 URL と HttpStreamingLiveEventPath ディレクティブを組み合わせて、ライブイベントを探します。
2 イベントに関するメタデータを Event.xml ファイルとマルチレベルマニフェストファイルから取得します。
3 イベントディレクトリでストリーム記録ファイル(.stream)を検索します。
4 各 .stream ファイルから対応するコンテンツへのパスを取得します。各 .stream ファイルがマニフェストファイル内の
<media> エレメントになります。
5 .meta ファイルからメタデータを取得します。
6 ブートストラップ情報および DRM 追加ヘッダーデータへのリンクを作成します(コンテンツが保護されている場合)。
7 生成されたマニフェストドキュメント(.f4m または .m3u8)を返します。
詳細については、adobe.com の「F4M ファイル形式の仕様」を参照してください。
最終更新日 2011/10/10
103
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
M3U8 ファイルの詳細については、「HTTP Live Streaming Internet-Draft」を参照してください。
Live Packager は、rootinstall¥applications¥livepkgr¥streams¥_definst_ フォルダーに、各ストリームの名前
livestream1、livestream2 および livestream3 のフォルダーを作成します。Live Packager は、各フォルダーに次のファイ
ルを作成します。
• livestream#.bootstrap
• livestream#.control
• livestream#.meta
• livestream#Seg#.f4f
• livestream#Seg#.f4x
これらは、HTTP Dynamic Streaming Media Player で一時停止、早送り、巻き戻しなどを処理するために要求するファ
イルです。次の表は、各ファイルタイプを示しています。
ファイル
説明
livestream#Seg#.f4f
セグメント。Live Packager は 1 つ以上の F4F ファイルを出力します。各ファイルには、ソー
スファイルのセグメントが格納されています。各セグメントには、フラグメント化された(お
よびオプションで保護された)コンテンツが含まれます。
livestream#Seg#.f4x
各 .f4f ファイルのフラグメントオフセットが一覧表示されているインデックスファイル。Live
Packager は 1 つ以上の F4X ファイルを出力します。HTTP Origin Module はこのファイルを使
用してフラグメントを配信します。
livestream#.meta
ストリームのメタデータ(ビットレート、画面サイズなど)が格納されています。
livestream#.bootstrap
ストリームのブートストラップ情報が格納されています。
livestream#.control
Live Packager がストリームの状態を管理するために使用する 内部メタデータが格納されてい
ます。
livestream#.drmmeta
ストリームが Flash Access 用に暗号化されている場合、追加ヘッダー情報が格納されていま
す。
Apache が HTTP Dynamic Streaming 用に設定されているときのこれらのファイルの URL 要求形式を次に示します。
リクエストタイプ
URL の形式
フラグメント
http://<host>/<location-tag-alias>/streams/<appname>/streams/<app-instance>/<stream name>Seg<segment #>Frag<fragment #>
メモ:F4F ファイルを直接要求することはできません。フラグメントを要求
します。
ブートストラップ(.bootstrap)
http://<host>/<location-tag-alias>/streams/<appname>/streams/<app-instance>/<stream name>.bootstrap
HTTP Dynamic Streaming 用に Apache を設定する方法の詳細については、「HTTP Dynamic Streaming に対する
Apache 設定」を参照してください。
サンプル .f4m マニフェストファイル
Player はマニフェストファイルを使用してコンテンツのフラグメントを要求します。次の例では、「myStream」と
「myStream1」の 2 つのストリームがライブイベントと関連付けられています。<media> エレメントは、接頭辞
「/live/streams」でコンテンツの場所への絶対 URL パスを提供します。
最終更新日 2011/10/10
104
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
.bootstrap および .drmmeta が .f4f ファイルと同じ場所にある場合、<bootstrap> エレメントと <drmAdditionalHeader> エ
レメントがマニフェストファイルに追加されます。.drmmeta ファイルは複数のストリームで共有できるので、サンプルの
マニフェストファイルに含まれる <drmAdditionalHeader> エレメントは 1 つだけです。myStream と myStream1 は両方と
も、drmAdditionalHeaderId 属性を通して同じ .drmmeta ファイルを参照します。
metadata エレメントには、Base64 エンコーディングの 1 つのメディアに対するメタデータが含まれます。メタデータは、
ActionScript の NetStream.onMetaData() イベントでディスパッチされるものと同じ情報です。
<?xml version="1.0" encoding="UTF-8" ?>
<manifest xmlns="http://ns.adobe.com/f4m/1.0">
<id>live_mbr_event</id>
<streamType>live</streamType>
<duration>0</duration>
<bootstrapInfo
profile="named"
url="/live/streams/myStream.bootstrap"
id="bootstrap2267" />
<drmAdditionalHeader
url="/live/streams/myStream.drmmeta"
drmContentId="live_mbr_event"
id="drmMetadata9996" />
<media>
url="/live/streams/myStream"
bitrate="408"
bootstrapInfoId="bootstrap2267"
drmAdditionalHeaderId="drmMetadata9996">
<metadata>AgAKb25NZXRhRGF0YQgAAAAAAAhkdXJhdGlvbgBARo9cKPXCjwAFd2lkdGgAQJQAAAAAAAAABmhlaWdodABAho
AAAAAAAAAMdmlkZW9jb2RlY2lkAgAEYXZjMQAMYXVkaW9jb2RlY2lkAgAEbXA0YQAKYXZjcHJvZmlsZQBAWQAA
AAAAAAAIYXZjbGV2ZWwAQEAAAAAAAAAABmFhY2FvdAAAAAAAAAAAAAAOdmlkZW9mcmFtZXJhdGUAQD34U+JVay
gAD2F1ZGlvc2FtcGxlcmF0ZQBA53AAAAAAAAANYXVkaW9jaGFubmVscwBAAAAAAAAAAAAJdHJhY2tpbmZvCgAA
AAIDAAZsZW5ndGgAQTSinwAAAAAACXRpbWVzY2FsZQBA3UwAAAAAAAAIbGFuZ3VhZ2UCAANlbmcAAAkDAAZsZW
5ndGgAQUCGAAAAAAAACXRpbWVzY2FsZQBA53AAAAAAAAAIbGFuZ3VhZ2UCAANlbmcAAAkAAAk=
</metadata>
</media>
<bootstrapInfo
profile="named"
url="/live/streams/myStream1.bootstrap"
id="bootstrap7975" />
<media>
url="/live/streams/myStream1"
bitrate="1108"
bootstrapInfoId="bootstrap7975"
drmAdditionalHeaderId="drmMetadata9996">
<metadata>AgAKb25NZXRhRGF0YQgAAAAAAAhkdXJhdGlvbgBARo9cKPXCjwAFd2lkdGgAQJQAAAAAAAAABmhlaWdodABAho
AAAAAAAAAMdmlkZW9jb2RlY2lkAgAEYXZjMQAMYXVkaW9jb2RlY2lkAgAEbXA0YQAKYXZjcHJvZmlsZQBAWQAA
AAAAAAAIYXZjbGV2ZWwAQEAAAAAAAAAABmFhY2FvdAAAAAAAAAAAAAAOdmlkZW9mcmFtZXJhdGUAQD34U+JVay
gAD2F1ZGlvc2FtcGxlcmF0ZQBA53AAAAAAAAANYXVkaW9jaGFubmVscwBAAAAAAAAAAAAJdHJhY2tpbmZvCgAA
AAIDAAZsZW5ndGgAQTSinwAAAAAACXRpbWVzY2FsZQBA3UwAAAAAAAAIbGFuZ3VhZ2UCAANlbmcAAAkDAAZsZW
5ndGgAQUCGAAAAAAAACXRpbWVzY2FsZQBA53AAAAAAAAAIbGFuZ3VhZ2UCAANlbmcAAAkAAAk=
</metadata>
</media>
</manifest>
ストリーム記録ファイル
ストリーム記録ファイル(.stream)は、ストリームの物理的な場所を含む XML ドキュメントです。サーバーは、着信スト
リームがライブイベントと関連付けられるとストリーム記録ファイルを作成します。サーバーはエンコードされた名前で次
の場所にファイルを作成します。
applications/appname/events/appinstancename/eventname/MTg1ODAyNjgwNg=.stream
最終更新日 2011/10/10
105
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
HTTP Origin Module はストリーム記録ファイルを読み取って、ストリームのコンテンツを探します。.stream ファイルの
形式を次に示します。
<?xml version="1.0" encoding="UTF-8"?>
<stream xmlns="http://www.adobe.com/liveevent/1.0">
<type>
f4f
</type>
<name>
livestream
</name>
<path>
C:\Program Files\Adobe\Flash Media Server 4.5\applications\myapp\streams\_definst_\livestream
</path>
</stream>
ストリーミングメディアの問題のトラブルシューティング
ライブストリーミング(HTTP)のトラブルシューティング
1 サービスウィンドウ(Windows)またはサービスウィンドウ(Linux)を使用して、Flash Media Server(FMS)、
Flash Media Administration Server および FMSHttpd サービスが実行されていることを確認します。
2 要求 URL が正しいことを確認します。15 ページの「HTTP 経由でライブストリームをパブリッシュおよび再生するた
めの URL」を参照してください。
3 クライアントが接続しようとしているポートをサーバーがリッスンしていることを確認します。
rootinstall/logs/edge.xx.log ファイルには、サーバーがリッスンしているポートが示されます。
デフォルトで、Flash Media Server は、ポート 80 でリッスンし、HTTP 要求を ポート 8134 で Apache HTTP Server
にプロキシします。プロキシトラフィックにより、HTTP ストリーミングで問題が発生する可能性があります。Flash
Media Server がポート 80 でリッスンしている場合、要求 URL でポート 8134 を使用します。例えば、
http://fms.example.com:8134/hds-live/livepkgr/_definst_/liveevent/livestream.f4m。
または、Apache HTTP Server がポート 80 でリッスンするように設定し、Flash Media Server がポート 80 でリッスン
しないように設定します。「HTTP Streaming 用のポートの設定」を参照してください。
4 別の Web サーバーでホストされている Flash Media Player が、Flash Media Server の Web サーバーからコンテンツ
にアクセスできるようにするには、crossdomain.xml ファイルを rootinstall/webroot ディレクトリにコピーします。
crossdomain.xml ファイルにより、複数のドメイン間でデータを処理するための Web クライアントの権限が与えられ
ます。詳細については、「クロスドメインポリシーファイルの仕様」を参照してください。
5 Flash Media Live Encoder で、「Encoding Options」タブを選択し、Panel options メニューから Output を選択し、
以下を確認します。
• FMS URL の値が rtmp://fms-dns-or-ip/livepkgr になっている。Flash Media Server と同じサーバーでテストして
いる場合は、fms-dns-or-ip に値 localhost を使用できます。
•
•
単一ストリームで、Stream の値が livestream?adbe-live-event=liveevent になっている。
アダプティブビットレートストリーミングで、Stream の値が livestream%i?adbe-live-event=liveevent になって
いる。
Flash Media Live Encoder では、この値を使用して、一意のストリーム名を作成します。別のエンコーダーを使用
するには、livestream1?adbe-live-event=liveevent、livestream2?adbe-live-event=liveevent などの独自の一意
のストリーム名を指定します。
•
ログを調べ、エラーが発生していないかどうかを確認します。Flash Media Server ログは rootinstall/logs フォル
ダーにあります。master.xx.log ファイルと core.xx.log ファイルには、スタートアップエラーが示されます。
最終更新日 2011/10/10
106
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
Apache ログは rootinstall/Apache2.2/logs フォルダーにあります。
6 Administration Console を使用して、エンコーダーとクライアントが livepkgr アプリケーションに接続されているこ
とを確認します。
「Administration Console への接続」を参照してください。
ライブストリーミング(RTMP)のトラブルシューティング
1 サービスウィンドウ(Windows)またはサービスウィンドウ(Linux)を使用して、Flash Media Server(FMS)サー
ビスと Flash Media Administration Server サービスが実行されていることを確認します。
Apache HTTP サーバーを使用している場合は、FMSHttpd サービスが実行されていることを確認します。
2 Administration Console を使用して、エンコーダーとクライアントがライブアプリケーションに接続されていることを
確認します。
「Administration Console への接続」を参照してください。
3 クライアントが接続しようとしているポートをサーバーがリッスンしていることを確認します。
rootinstall/logs/edge.xx.log ファイルには、サーバーがリッスンしているポートが示されます。デフォルトでは、サー
バーはポート 1935 と 80 をリッスンします。サーバーがポート 1935 をリッスンしていない場合は、rootinstall/fms.ini
ファイルを開き、ADAPTOR.HOSTPORT = :1935,80 と設定してサーバーを再起動します。
access.00.log ファイルの s-uri フィールドと cs-uri-stem フィールドには、クライアントが接続しようとしたポートが示さ
れます。ポート番号を URL で指定した場合を除き、RTMP クライアントと RTMFP クライアントはポート 1935 を通じ
てサーバーに接続し、ポート 80 に戻ります。
詳細については、「ポートの要件」を参照してください。
4 Flash Media Live Encoder で、「Encoding Options」タブを選択し、Panel options メニューから Output を選択し、
以下を確認します。
• FMS URL の値が rtmp://fms-dns-or-ip/live になっている。Flash Media Server と同じサーバーでテストしている
場合は、fms-dns-or-ip に値 localhost を使用できます。
•
単一ストリームで、Stream の値が livestream になっている。
•
アダプティブビットレートストリーミングで、Stream の値が livestream%i になっている。
5 要求 URL が正しいことを確認します。22 ページの「RTMP 経由でライブストリームをパブリッシュおよび再生するた
めの URL」を参照してください。
6 ライブサービスでは、DVR 記録がサポートされません。
Flash Media Server ツール から入手した DVRCast アプリケーションを使用します。詳細については、Flash Media
Server Developer Center の記事「Using DVRCast with Flash Media Live Encoder」を参照してください。
7 ログを調べ、エラーが発生していないかどうかを確認します。Flash Media Server ログは rootinstall/logs フォルダー
にあります。master.xx.log ファイルと core.xx.log ファイルには、スタートアップエラーが示されます。
Apache ログは rootinstall/Apache2.2/logs フォルダーにあります。
オンデマンドストリーミング(HTTP)のトラブルシューティング
注意:HTTP 経由でビデオを再生するときは、クライアントは VOD アプリケーションに接続しません。代わりに、
Apache がクライアントにビデオを配信します。
1 サービスウィンドウ(Windows)またはサービスウィンドウ(Linux)を使用して、Flash Media Server(FMS)サー
ビスと FMSHttpd サービスが実行されていることを確認します。
2 クライアントが接続しようとしているポートをサーバーがリッスンしていることを確認します。
rootinstall/logs/edge.xx.log ファイルには、サーバーがリッスンしているポートが示されます。
最終更新日 2011/10/10
107
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
デフォルトでは、Flash Media Server は ポート 80 で行われた要求をポート 8134 で Apache HTTP Server にプロキシ
します。プロキシ HTTP ストリーミングトラフィックにより、問題が発生する可能性があります。
Flash Media Server がポート 80 でリッスンしている場合、要求 URL でポート 8134 を使用します。例えば、
http://fms.example.com:8134/hds-vod/sample1_1500.f4v.f4m。
または、Apache HTTP Server がポート 80 でリッスンするように設定し、Flash Media Server がポート 80 でリッスン
しないように設定します。「HTTP Streaming 用のポートの設定」を参照してください。
3 要求 URL が正しいことを確認します。30 ページの「HTTP 経由でオンデマンドストリームを再生するための URL」を
参照してください。
4 デフォルトでは、Apache は、rootinstall/webroot/vod フォルダーからオンデマンドメディアをストリーミングしま
す。この場所を変更するには、68 ページの「コンテンツストレージ(HDS および HLS)」を参照してください。
5 ログを調べ、エラーが発生していないかどうかを確認します。Apache ログは rootinstall/Apache2.2/logs フォルダーに
あります。
オンデマンドストリーミング(RTMP)のトラブルシューティング
1 サービスウィンドウ(Windows)またはサービスウィンドウ(Linux)を使用して、Flash Media Server(FMS)サー
ビスと Flash Media Administration Server サービスが実行されていることを確認します。
Apache HTTP Server を使用している場合は、FMSHttpd サービスが実行されていることを確認します。
2 Administration Console を使用して、VOD アプリケーションにクライアントが接続されていることを確認します。
「Administration Console への接続」を参照してください。
3 クライアントが接続しようとしているポートをサーバーがリッスンしていることを確認します。
rootinstall/logs/edge.xx.log ファイルには、サーバーがリッスンしているポートが示されます。デフォルトでは、サー
バーはポート 1935 と 80 をリッスンします。サーバーがポート 1935 をリッスンしていない場合は、rootinstall/fms.ini
ファイルを開き、ADAPTOR.HOSTPORT = :1935,80 と設定してサーバーを再起動します。
access.00.log ファイルの s-uri フィールドと cs-uri-stem フィールドには、クライアントが接続しようとしたポートが示さ
れます。ポート番号を URL で指定した場合を除き、RTMP クライアントと RTMFP クライアントはポート 1935 を通じ
てサーバーに接続し、ポート 80 に戻ります。
詳細については、「ポートの要件」を参照してください。
4 Administration Console(rootinstall/tools/fms_adminConsole.htm)を開いて View Applications を選択し、クラ
イアントが VOD アプリケーションに接続していることを確認します。パスワードをリセットする方法については、
「ユーザーのパスワードの変更」を参照してください。
5 要求 URL が正しいことを確認します。33 ページの「RTMP 経由でオンデマンドメディアファイルを再生するための
URL」を参照してください。
6 /media フォルダーはファイルを再生するストリーム URL に含めないでください。mp4:mymediafile.f4v などのファイ
ル名を指定する場合、サーバーは /applications/vod/media/mymediafile.f4v 内を探すように設定されます。
7 rootinstall/applications/vod ディレクトリがインストールされていることを確認します。いずれかのファイルがない場
合は、サーバーをアンインストールし、再インストールしてください。
8 ログの確認 . Flash Media Server ログは rootinstall/logs フォルダーにあります。master.xx.log ファイルと core.xx.log
ファイルには、スタートアップエラーが示されます。
マルチキャストストリーミング(RTMFP)のトラブルシューティング
1 サービスウィンドウ(Windows)またはサービスウィンドウ(Linux)を使用して、Flash Media Server(FMS)サー
ビスと Flash Media Administration Server サービスが実行されていることを確認します。
Apache HTTP Server を使用している場合は、FMSHttpd サービスが実行されていることを確認します。
最終更新日 2011/10/10
108
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
メディアのストリーミングの概要
2 Administration Console を使用して、マルチキャストアプリケーションにエンコーダーとクライアントが接続されてい
ることを確認します。
「Administration Console への接続」を参照してください。
3 チュートリアル 36 ページの「メディアのマルチキャスト(RTMFP)」の手順に従ってください。
4 正しいポートが開かれていることを確認します。rootinstall/logs/edge.xx.log ファイルには、サーバーがリッスンして
いるポートが示されます。
UDP 1935 と 19350-65535 を開きます。サーバーが NAT の内側にある場合は、
Adaptor/RTMFP/Core/HostPortList エレメントの rootinstall/conf/_defaultRoot_/Adaptor.xml ファイルのパブ
リック(NAT の外側)アドレスを指定します。「ポートの設定」を参照してください。
5 ログの確認 . Flash Media Server ログは rootinstall/logs フォルダーにあります。master.xx.log ファイルと core.xx.log
ファイルには、スタートアップエラーが示されます。
サポートへの問い合わせ
• Flash Media Server フォーラム(forums.adobe.com/community/flash/flash_media_server)に質問を投稿してくだ
さい。Flash Media Server エンジニアリングおよびサポートチームの多くのメンバーが、このフォーラムで質問に回答
します。
• www.adobe.com/jp/support でアドビサポートに連絡します。
最終更新日 2011/10/10
109
110
第 2 章:アプリケーションの開発の概要
アプリケーションのアーキテクチャ
クライアントアプリケーションは ActionScript™ で記述され、SWF ファイルにコンパイルされます。サーバーアプリケー
ションはサーバーサイド ActionScript で記述されます。これは ActionScript 1.0 に似ていますが、クライアントではなく
サーバー上で実行されます。メディアアプリケーションには通常、記録済み、またはライブのオーディオやビデオが含まれ
ており、サーバーからクライアントに、クライアントからサーバーに、またはサーバーからサーバーにストリーミングされ
ます。
典型的な Flash Media Server アプリケーションには、以下の構成要素があります。
Client クライアントには、ビデオの開始、停止、一時停止のためのコントロールなどのユーザーインターフェイスが表示
されます。クライアントは Flash Player、Adobe AIR または Flash Lite 3 で実行できます。クライアントは Adobe Flash
Professional、Adobe Flash Builder または Flex SDK を使用して開発できます。構築済みのクライアントも使用できます。
アドビ システムズ社では、Strobe Media Playback などの Open Source Media Framework (OSMF) ベースの Player の
使用をお勧めします。
クライアントサイド ActionScript クライアントには ActionScript コードを組み込むことができ、これによってユーザー
インタラクションを処理したり、サーバーに接続したりすることができます。Flash Media Server 3 以降は、ActionScript
3.0、ActionScript 2.0 および ActionScript 1.0 をサポートしています。
ビデオまたはオーディオファイル 多くのメディアアプリケーションは、記録済みのオーディオやビデオをサーバーからクラ
イアントにストリーミングしたり、クライアント間でストリーミングしたりします。Flash Media Server は、Flash Video
(FLV)、MPEG-3(MP3)、MPEG-4(MP4 および F4V)、RAW など、様々なストリーム形式の再生をサポートしてい
ます。
カメラまたはマイク Adobe Flash Media Live Encoder を使用すると、ライブビデオやオーディオをサーバーにストリーミ
ングすることができます。また、ライブオーディオやビデオをキャプチャする独自のクライアントを作成することもできま
す。どちらの場合も、ビデオやオーディオをキャプチャするには、カメラとマイクが必要です。
サーバーサイド ActionScript ほとんどのアプリケーションでは、.asc の拡張子を持つファイルに記述された、サーバーサ
イド ActionScript コードが使用されます。このファイルは「ActionScript コミュニケーションファイル」と呼ばれます。
このファイルの名前は、main.asc または myApplication.asc です。サーバーサイドコードを使用して、アプリケーション
へのアクセスの制御、ユーザーの接続時および切断時の処理の定義、再生リストの作成、外部データソースへの接続などを
行うことができます。
Flash Media Server は、live、vod、livepkgr、multicast の 4 つのサーバーサイドアプリケーション(ストリーミングサー
ビスとも呼ばれる)を使用してインストールされます。各サービスは異なるタイプのストリーミングを提供します。
関連項目
113 ページの「アプリケーションの作成の概要」
1 ページの「メディアのストリーミングの概要」
開発環境設定
アプリケーションの開発とテストは、無償のデベロッパー版を含め、どのエディションのサーバーでも行うことができます。
クライアントサイドコードの記述には、Flash Professional、Flash Builder または Flex SDK を使用します。サーバーサイ
ドコードの記述には、任意のテキストエディターのほか、Flash Professional や Flash Builder などの IDE も使用できます。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
クライアントサイドコードとサーバーサイドコードは、Flash Media Server を実行している同じコンピューターでも、リ
モートコンピューターでも記述できます。アプリケーションをテストするには、サーバーサイドコードを Flash Media
Server にコピーします。
Flash Media Server エコシステムパートナーに加入している場合は、開発環境を設定してパートナーのリソースを使用する
方法について、パートナーから情報を得ることができます。
開発環境設定 :
1 Flash Media Server インストーラーを実行してサーバーをインストールします。
2 サーバーが正常にインストールされていることを確認します。
3 次のいずれかの操作を行います。
• www.adobe.com/go/flash_jp から Flash Professional をインストールします。
• http://www.adobe.com/jp/products/flash-builder.html から Flash Builder をインストールします。
• opensource.adobe.com から Flex SDK をインストールします。
4 ライブビデオをキャプチャしてエンコードするには、以下の作業を行います。
a カメラとマイクをコンピューターに接続します。
b Adobe Flash Media Live Encoder を www.adobe.com/jp/products/flashmediaserver/flashmediaencoder/ から
ダウンロードしてインストールします。
注意: Flash Media Live Encoder は、オーディオやビデオをキャプチャしてエンコードし、Flash Media Server に
送信します。オーディオやビデオをキャプチャしてエンコードするカスタムアプリケーションを構築することもでき
ます。
例:Hello World アプリケーション
概要
注意:Flash Media Streaming Server に対してはサーバーサイドコードを記述できないので、以下の節の内容はそのエディ
ションのサーバーには該当しません。
このサンプルでは、クライアントからサーバーおよびサーバーからクライアントへのシンプルな通信を示します。ユーザー
がボタンをクリックすると、クライアントはサーバーに接続します。クライアントは、文字列を返すサーバーサイドの関数
を呼び出します。サーバーが応答すると、クライアントはサーバーから送信された文字列を表示します。
サンプルファイルは、rootinstall¥documentation¥samples¥HelloWorld フォルダーにあります。
ユーザーインターフェイスを定義します
1 Flash を起動し、新規作成/ Flash ファイル(ActionScript 3.0)を選択します。
2 「ドキュメントクラス」フィールドに、HelloWorld と入力します。定義が欠けているのに関する ActionScript クラス
の警告メッセージが表示された場合、「OK」をクリックします。次のセクションでは、クラスファイルを追加します。
3 ウインドウ/コンポーネントを選択します。「User Interface」をクリックし、Button ダブルクリックして stage 追加し
ます。「プロパティ」タブで、インスタンス名として connectBtn と入力します。
4 ボタンの上に Label コンポーネントを追加し、インスタンス名として textLbl と入力します。
最終更新日 2011/10/10
111
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
5 HelloWorld.fla という名前を付けてこのファイルを保存します。
クライアントファイルは、任意の場所に保存できます。
クライアントサイドスクリプトの記述
このスクリプトは、ボタンの 2 つのアクション(サーバーへの接続とサーバーからの切断)を提供します。このスクリプト
は、接続時に文字列(「World」)を使用してサーバーを呼び出し、応答をトリガーします。この応答によって返された文字
列(「Hello, World!」)が表示されます。
1 ファイル/新規/ ActionScript ファイルを選択します。「Target」テキストボックスに HelloWorld.fla と表示されてい
ることを確認します。
2 パッケージを宣言して、必要な Flash クラスを読み込みます。
package {
import
import
import
import
import
public
}
}
flash.display.MovieClip;
flash.net.Responder;
flash.net.NetConnection;
flash.events.NetStatusEvent;
flash.events.MouseEvent;
class HelloWorld extends MovieClip {
3 HelloWorld クラスの宣言内で、接続およびサーバー応答の変数を宣言します。
private var nc:NetConnection;
private var myResponder:Responder = new Responder(onReply);
4 クラスのコンストラクターを定義します。ラベルとボタンの表示値を設定し、ボタンにイベントリスナーを追加します。
public function HelloWorld() {
textLbl.text = "";
connectBtn.label = "Connect";
connectBtn.addEventListener(MouseEvent.CLICK, connectHandler);
}
5 イベントリスナーのアクションを定義します。このアクションは、その時点のボタンのラベルによって異なります。
public function connectHandler(event:MouseEvent):void {
if (connectBtn.label == "Connect") {
trace("Connecting...");
nc = new NetConnection();
// Connect to the server.
nc.connect("rtmp://localhost/HelloWorld");
// Call the server's client function serverHelloMsg, in HelloWorld.asc.
nc.call("serverHelloMsg", myResponder, "World");
connectBtn.label = "Disconnect";
} else {
trace("Disconnecting...");
// Close the connection.
nc.close();
connectBtn.label = "Connect";
textLbl.text = "";
}
}
6 応答関数を定義します。この関数により、ラベルの表示値を設定します。
private function onReply(result:Object):void {
trace("onReply received value: " + result);
textLbl.text = String(result);
}
最終更新日 2011/10/10
112
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
7 ファイルを HelloWorld.fla ファイルと同じフォルダーに、HelloWorld.as という名前で保存します。
サーバーサイドスクリプトの記述
1 ファイル/新規/ ActionScript コミュニケーションファイルを選択します。
2 サーバーサイド関数と接続ロジックを定義します。
application.onConnect = function( client ) {
client.serverHelloMsg = function( helloStr ) {
return "Hello, " + helloStr + "!";
}
application.acceptConnection( client );
}
3 rootinstall/applications/HelloWorld フォルダー内に、HelloWorld.asc という名前を付けてこのファイルを保存しま
す。ファイルを保存するときに、HelloWorld フォルダーを作成します。
アプリケーションのコンパイルと実行
1 サーバーの実行状態の確認 .
2 HelloWorld.fla ファイルのタブを選択します。
3 制御/ムービープレビューを選択します。
4 「戻る」ボタンをクリックします。
「Hello, World!」と表示され、ボタンのラベルが「Disconnect」に変わります。
5 「戻る」ボタンをクリックします。
Flash 出力ウィンドウに、trace() ステートメントの出力が表示されます。
アプリケーションの作成の概要
クライアントサイドコード
クライアントでは ActionScript で記述されたコードが含まれており、サーバーへの接続、イベント処理など、さまざまな
処理を実行することができます。Flash Professional で作業する場合は、ActionScript 3.0 または 2.0 を使用できます。
Flash Builder および Flex SDK では ActionScript 3.0 を使用します。
ActionScript の習得およびビデオの操作の詳細については、次のリソースを参照してください。
•
単にメディアをストリーミングするには、構築済み Media Player を使用できます。詳細については、100 ページの「カ
スタム Media Player の構築」を参照してください。
•
ソーシャルメディアアプリケーションを構築するには、114 ページの「サーバーサイドコード」を参照してください。
• www.adobe.com/jp/devnet/flash にある Flash ヘルプリソースセンター
• www.adobe.com/jp/devnet/flex にある Flex ヘルプリソースセンター
関連項目
119 ページの「Web サーバーへのクライアントサイドファイルのコピー」
最終更新日 2011/10/10
113
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
サーバーサイドコード
通常、次のいずれかの処理を行うアプリケーションには、サーバーサイド ActionScript で記述されたサーバーサイドコー
ドが必要です。
クライアントの認証 ユーザー名とパスワードによってまたはアプリケーションサーバーやデータベースに格納された証明書
によって認証を行います。
接続ロジックの実装 クライアントの接続時または切断時に、アクションを実行します。
クライアントの更新 クライアント側のリモートメソッドを呼び出すか、接続されたすべてのクライアントに影響する共有オ
ブジェクトを更新します。
ストリーム処理 サーバーとの間でやり取りされるストリームの再生、記録、管理を可能にします。
リモートサーバーへの接続 Web サービスを呼び出すか、アプリケーションサーバーやデータベースへのネットワークソ
ケットを作成します。
サーバーサイドコードは、main.asc または yourApplicationName.asc という名前のファイルに置きます。ここで、
yourApplicationName は rootinstall/applications フォルダー内のフォルダーです。例えば、skatingClips という名前
のアプリケーションを作成するには、rootinstall/applications/skatingClips フォルダーを作成します。サーバーサイド
コードは、skatingClips フォルダー内の main.asc という名前のファイルまたは skatingClips.asc という名前のファイル
に格納されます。
サーバーサイドコードは、アプリケーションディレクトリの最上位か、またはそのディレクトリ内の scripts サブディレク
トリに格納します。例えば、次のいずれかの場所を使用することができます。
rootinstall/applications/appName
rootinstall/applications/appName/scripts
デフォルトでは、アプリケーションフォルダーはインストールのルートフォルダー(Windows では C:¥Program
Files¥Adobe¥Flash Media Server 4¥applications)内にあります。アプリケーションフォルダーの場所を設定するには、
fms.ini または Vhost.xml 設定ファイルを編集します。fms.ini ファイルでは、VHOST.APPSDIR = C:¥Program
Files¥Adobe¥Flash Media Server 4¥applications パラメーターを編集します。Vhost.xml ファイルでは、AppsDir エレメントを
編集します。
関連項目
118 ページの「サーバーサイドスクリプトファイルのサーバーへのコピー」
Client オブジェクトと Application オブジェクト
サーバーサイドスクリプトは Client オブジェクトと Application オブジェクトの、2 つの特別なオブジェクトに対するアク
セス権を持っています。クライアントが Flash Media Server 上のアプリケーションに接続すると、サーバーは、クライアン
トを表すための、サーバーサイドの Client クラスのインスタンスを作成します。1 つのアプリケーションには、数千ものク
ライアントが接続することができます。サーバーサイドコード内では、個々のクライアントとメッセージを送受信するため
に、Client オブジェクトを使用できます。
また、各アプリケーションには 1 個の Application オブジェクトが含まれます。このオブジェクトは、サーバーサイドの
Application クラスのインスタンスです。Application オブジェクトは、アプリケーションインスタンスを表します。この
オブジェクトは、クライアントの受諾、切断、アプリケーションのシャットダウンなどに使用することができます。
最終更新日 2011/10/10
114
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
ダブルバイト言語のアプリケーションの記述
ダブルバイトテキスト(アジア言語の文字セットなど)を使用するアプリケーションの開発でサーバーサイド ActionScript
を使用する場合は、UTF-8 でエンコードされている main.asc ファイル内にサーバーサイドコードを置く必要があります。
Flash や Adobe Dreamweaver® のスクリプトウィンドウのような、ファイルを UTF-8 標準にエンコードする JavaScript
エディターを使用します。Date.toLocaleString() のようなビルトイン JavaScript メソッドを使用して、文字列をロケールに変
換し、そのシステムに適したエンコード処理を行います。
一部のシンプルなテキストエディターでは、ファイルを UTF-8 標準にエンコードできない場合があります。しかし、一部
のエディターでは「名前を付けて保存」オプションを使用して、ファイルを UTF-8 標準にエンコードできます。
Dreamweaver での UTF-8 エンコード設定
1 ドキュメントのエンコード設定を確認するには、修正/ページプロパティを選択し、次に「エンコーディング」を選択し
ます。「UTF-8(Unicode)」を選択します。
2 インライン入力設定を変更するには、編集/環境設定(Windows)または Dreamweaver /環境設定(Mac OS)を選
択して、「一般」をクリックします。「ダブルバイトのインライン入力可」を選択して、ダブルバイトテキストを入力でき
るようにします。
メソッド名でのダブルバイト文字の使用
❖ メソッド名の割り当てには、ドット演算子ではなく、オブジェクトアレイ演算子を使用します。
// This is the CORRECT way to create double-byte method names
obj["Any_hi_byte_name"] = function(){}
// This is the INCORRECT way to create double-byte method names.
obj.Any_hi_byte_name = function() {}
アプリケーションのテスト
クライアントサイドスクリプトのテストとデバッグ
クライアントサイドスクリプトをテストする場合、trace() ステートメントを使用して、各処理ポイントを監視する方法が役
立ちます。出力内容は、Flash 出力ウィンドウに表示されます。これは 111 ページの「例:Hello World アプリケーショ
ン」の例です。
クライアントサイドスクリプトをデバッグするには、Flash のデバッグメニューを使用して、ブレークポイントの設定、関
数内でのステップ実行などの操作を行います。ウインドウ/パネルをデバッグを選択することによって、スクリプトの状態
を調べることができます。
サーバーサイドスクリプトのテストとデバッグ
サーバーサイドスクリプトをテストするには、trace() ステートメントを使用して、各処理ポイントを監視します。trace() ス
テートメントの出力を、Administration Console の Live Log で確認します。
Administration Console を開くには、スタート/すべてのプログラム/ Adobe / Flash Media Server 3.5 / Flash
Media Administration Console を選択します。
最終更新日 2011/10/10
115
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
クライアントがサーバーのアプリケーションに接続すると、アプリケーションが読み込まれ、Administration Console に
表示されます。Administration Console から直接アプリケーションを読み込むには、利用可能なアプリケーションの
「New Instance」リストで、アプリケーション名を選択します。また、アプリケーションを停止したり、再読み込みするこ
ともできますが、これらの動作を実行すると、すべてのクライアントは切断されます。
注意:.asc ファイルを編集して保存しても、アプリケーションが再起動されるまで変更は有効になりません。
Administration Console を使用してアプリケーションを再起動してから、アプリケーションに再接続します。
それぞれのアプリケーションインスタンスのライブログ、クライアント、共有オブジェクト(存在する場合)、使用中のスト
リーム、パフォーマンス統計を参照することができます。
実行中のアプリケーションのパフォーマンスを Administration Console でチェックしている状態
サーバーサイドスクリプトの出力内容の参照
main.asc ファイル内の trace() ステートメントの出力は、次のログファイルに送られます。
rootinstall/logs/_defaultVHost_/yourApplicationName/yourInstanceName/application.xx.log
yourInstanceName のデフォルトは _definst_ です。xx はインスタンス番号で、最新のログファイルは 00、1 つ前のイン
スタンスは 01 で、以下同様に続きます。ログファイルは、任意のテキストエディターで参照することができます。
アプリケーションが実行中の場合は、Administration Console で Live Log を参照することができます。開いた
Administration Console で、View Applications をクリックし、次に Live Log をクリックします。
Administration Console を使用したデバッグ
ストリームの再生や共有オブジェクトのデータの検査を行うには、アプリケーションが Administration Console へ特別な
デバッグ接続を行う必要があります。
デバッグセッションが利用可能であるかどうかおよびその数は、Application.xml 設定ファイルの AllowDebugDefault およ
び MaxPendingDebugConnections エレメントで設定されます。デフォルトでは、デバッグは許可されません。
Application.xml ファイルのデバッグ設定を無効にするには、アプリケーションのサーバーサイドコードに次のコードを追
加します。
application.allowDebug = true;
最終更新日 2011/10/10
116
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
注意:アプリケーションをデプロイする前に、allowDebug を false に設定します。
デバッグセッションを開始するには:
1 Administration Console を開きます。
2 「View Applications」を選択します。
3 デバッグするアプリケーションをリストから選択するか、「New Instance」を選択し、アプリケーションの新しいインス
タンスを作成します。
4 再生中のストリームのリストを表示するには(存在する場合)、「Streams」ボタンを押します。
5 いずれかのストリームをクリックします。
6 「Play Stream」ボタンを押します。
7 ポップアップウィンドウが表示され、ストリームが再生されます。
8 アプリケーションの共有オブジェクトを参照するには(存在する場合)、「Shared Objects」ボタンを押します。
9 共有オブジェクトを選択します。
10 デバッグセッションを終了するには、「Close Debug」ボタンを押します。
アプリケーションのデプロイメント
アプリケーションのサーバーへの登録
アプリケーションに接続するには、アプリケーションが存在することをサーバーが認識している必要があります。このプロ
セスを「アプリケーションのサーバーへの登録」と呼びます。アプリケーションをサーバーに登録するには、そのアプリ
ケーション用のフォルダーをアプリケーションフォルダーに作成します。例えば、myApplication というアプリケーション
を登録するには、次のフォルダーを作成します。
rootinstall/applications/myApplication
このアプリケーションに接続するクライアントサイドコードは、次のようになります。
myNetConnection.connect("rtmp://fms.examples.com/myApplication");
アプリケーションのインスタンスを作成するには、サブフォルダーを作成します。例えば、次のフォルダーにより、room1
という myApplication のインスタンスが作成されます。
rootinstall/applications/myApplication/room1
このアプリケーションインスタンスに接続するクライアントサイドコードは、次のようになります。
myNetConnection.connect("rtmp://fms.examples.com/myApplication/room1");
すべてのアプリケーションは、アプリケーションフォルダー内にフォルダーを持つ必要があります。通常は、アプリケー
ションフォルダーにはサーバーサイドスクリプトとメディアアセットが含まれていますが、このフォルダーは空の場合もあ
ります。このフォルダーには、アプリケーション固有の Application.xml ファイルが含まれていることもあります。
デフォルトでは、アプリケーションフォルダーはインストールのルートフォルダー(Windows では C:¥Program
Files¥Adobe¥Flash Media Server 4¥applications)内にあります。アプリケーションフォルダーの場所を設定するには、
fms.ini または Vhost.xml 設定ファイルを編集します。fms.ini ファイルでは、VHOST.APPSDIR = C:¥Program
Files¥Adobe¥Flash Media Server 4¥applications パラメーターを編集します。Vhost.xml ファイルでは、AppsDir エレメントを
編集します。
最終更新日 2011/10/10
117
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
サーバーサイドスクリプトファイルのサーバーへのコピー
アプリケーションのサーバーサイドスクリプトファイルを、サーバー上で登録したフォルダーにコピーします。例えば、
"videoPlayer" というアプリケーションの場合、main.asc ファイルを rootinstall/applications/videoPlayer にコピーしま
す。サーバーサイドスクリプトは、「scripts」サブフォルダーに置くこともできます。例えば、次のいずれかの場所を使用
することができます。
rootinstall/applications/appName
rootinstall/applications/appName/scripts
注意:実行中のアプリケーションを置き換えるには、新しいファイルをコピーしてから、Administration Console を使用
してアプリケーションを再起動します。
サーバーサイドファイルのパッケージ化
Flash Media Server には、コマンドラインのアーカイブコンパイラーユーティリティ(far.exe)が含まれています。この
ユーティリティを使用すると、サーバーサイドスクリプトを FAR ファイル(ZIP ファイルに似たアーカイブファイル)に
パッケージ化することができるため、デプロイメントが容易になります。また、このアーカイブコンパイラーユーティリ
ティを使用して、サーバーサイドのスクリプトファイルをバイトコード(拡張子は .ase)にコンパイルできるため、アプリ
ケーションインスタンスの読み込みに要する時間を短縮することができます。
大規模なアプリケーションには、異なる場所に格納されている複数のサーバーサイドのスクリプトファイルを含めることが
できます。いくつかのファイルはアプリケーションディレクトリに置かれ、他のファイルはサーバーの設定ファイルに定義
されているスクリプトライブラリのパスに置かれます。メディアアプリケーションのデプロイメントを簡素化するためには、
サーバーサイドの JS、ASC、ASE の各ファイルを Flash Media Server アーカイブファイル(FAR ファイル)にパッケージ
化します。
FAR ファイルは、メインのスクリプトファイル(main.js、main.asc、main.ase、applicationName.js、
applicationName.asc、applicationName.ase のいずれか)と、そのメインのスクリプトで参照されるその他のスクリプ
トファイルを含むパッケージです。
アーカイブコンパイラーユーティリティを実行してスクリプトパッケージを作成するためのシンタックスは、次のとおりで
す。
c:\> far -package -archive <archive> -files <file1> [<file2> ... <fileN>]
次の表は、far -package で使用できるコマンドラインオプションの説明です。
オプション
説明
-archive archive
アーカイブファイルのファイル名を指定します。アーカイブファイルの拡張子は .far です。
-files file1 [ file2 ... fileN ]
アーカイブファイルに入れるファイルのリストを指定します。少なくとも 1 つのファイルを指定する
必要があります。
注意:メインのスクリプトがサブディレクトリ内のスクリプトを参照している場合は、アーカイブファイル内の階層を維持
する必要があります。この階層を維持するには、メインのスクリプトが置かれている同じディレクトリで FAR ユーティリ
ティを実行することをお勧めします。
メディアファイルのサーバーへのコピー
ビデオおよびオーディオファイルは、アプリケーションフォルダーの streams/_definst_ フォルダーにコピーします。
rootinstall/applications/someapplication/streams/_definst_/
アプリケーションがアプリケーションのインスタンスに接続する場合
(nc.connect("rtmp://fms.example.com/someApplication/someInstance") など)は、ストリームを次のフォルダーに格納します。
最終更新日 2011/10/10
118
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションの開発の概要
rootinstall/applications/someapplication/streams/someinstance/
サーバーを設定して他の場所に格納されているメディアファイルを探す方法は複数あります。例えば、サーバーと共にイン
ストールされる VOD ストリーミングサービスは、rootinstall/applications/vod/media フォルダー内のメディアファイル
を探すように設定されています。
関連項目
31 ページの「オンデマンドメディアのストリーミング(RTMP)」
Web サーバーへのクライアントサイドファイルのコピー
SWF ファイルと HTML ファイルは任意の Web サーバーにデプロイできます。SWF ファイルには、Flash Media Server
上でアプリケーションに接続する NetConnection.connect() 呼び出しが含まれます。HTML ファイルは SWF ファイルのコ
ンテナです。詳しくは、www.adobe.com/jp/support/flash で提供されている Flash のドキュメントを参照してください。
AIR アプリケーションのデプロイメントの詳細については、www.adobe.com/jp/support/air で提供されている Adobe
AIR のドキュメントを参照してください。
デフォルトでは、Flash Media Server 3.5 以降は Apache HTTP Server と共にインストールされます。Web サーバーをイ
ンストールして有効にすると、Flash Media Server がインストールされているコンピューターと同じコンピューターから
SWF ファイルと HTML ファイルをデプロイすることができます。また、JPG、GIF およびその他多数のファイルタイプを
デプロイすることもできます。Apache がデフォルトで配信するファイルの種類の完全なリストについては、
rootinstall/Apache2.2/conf/httpd.conf ファイルを参照してください。
デフォルトでは、Apache は次のエイリアスで設定されます。
エイリアス
パス
/
rootinstall/webroot
/cgi-bin/
rootinstall/Apache2.2/cgi-bin
HTTP 経由でファイルを配信するには、ファイルを rootinstall/webroot フォルダーまたは適切なサブフォルダーに格納し
ます。CGI プログラムを配信するには、ファイルを rootinstall/Apache2.2/cgi-bin フォルダーに格納します。
これらのフォルダーにサブフォルダーを追加することもできます。サブフォルダーに、fmshttpd.conf ファイルからの
icons、error、SWFs、vod または cgi-bin という名前を使用することはできません。また、サブフォルダー名には予約語
open、send、idle、fcs、fms を使用することはできません。
デフォルトでは、Apache は rootinstall/webroot フォルダーからのすべての HTTP コンテンツを配信するように設定され
ます。アプリケーション固有のディレクトリからのファイルを配信できるようにサーバーを設定するには、httpd.conf
Apache 設定ファイルを編集します。
最終更新日 2011/10/10
119
120
第 3 章:ストリーミングメディアアプリケーショ
ンの開発
Adobe® Flash® Media Server では、Flash Player と AIR にライブビデオや記録済みビデオをストリーミングしたり、Flash
Player と AIR からストリーミングしたりすることができます。記録済みビデオは、オンデマンドまたは VOD(ビデオオン
デマンド)と呼ばれます。
ライブアプリケーションは、ライブメディアをキャプチャ、エンコードおよびストリーミングします。ライブビデオは一般
に、企業の会議、教育、スポーツイベント、コンサートなどのイベントに使用されます。
サーバーへの接続
NetConnection クラスについて
クライアントでオーディオやビデオを再生またはパブリッシュする前に、まずサーバーに接続する必要があります。接続要
求は、サーバー上のアプリケーションインスタンスによって承諾または拒否されます。サーバーは、情報メッセージをクラ
イアントに返します。アプリケーションによって接続要求が受諾されると、クライアントとサーバーの両方で、この接続を
利用することができるようになります。
NetConnection クラスは、クライアントをサーバー上のアプリケーションインスタンスに接続します。接続するには、
NetConnection クラスのインスタンスを作成し、connect() メソッドを呼び出します。アプリケーションインスタンスの
URI を connect() メソッドに渡します。
var nc:NetConnection = new NetConnection();
nc.connect("rtmp://localhost/HelloServer");
サーバーは、接続に成功したかどうかをクライアントに通知する NetStatusEvent を返します 。
NetConnection オブジェクトはパイプに例えることができます。このパイプによって、クライアントからサーバーに、ま
たはサーバーからクライアントに、オーディオ、ビデオ、データがストリーミングされます。NetConnection オブジェク
トを作成すると、このオブジェクトに 1 つまたは複数のストリームを割り当てることができます。ストリームは、ネット
ワーク接続上でのオーディオ、ビデオ、データのフローを処理します。
1 つのストリームによって、複数の種類のコンテンツ(オーディオ、ビデオ、データ)を伝送することができます。ただし、
1 つのストリームのフローは 1 方向(サーバーからクライアント、またはクライアントからサーバーのいずれか)のみです。
クライアントとサーバーの間で、多数のストリームが 1 つの NetConnection オブジェクトを使用可能
A. Flash Media Server B. データの単一ストリーム C. NetConnection D. Flash Player、Adobe AIR または Flash Lite 3 クライアント
関連項目
125 ページの「接続の管理」
アプリケーション URI について
アプリケーションインスタンスの URI は、絶対パスまたは相対パスのいずれでも指定することができます。次のシンタック
スを使用します(角カッコで囲まれた項目はオプションです)。
protocol:[//host][:port]/appname/[instanceName]
次の表は、URI の各構成要素について説明しています。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
構成要素
例
protocol:
RTMP:
説明
Flash Media Server、Real-Time Messaging Protocol およびそのバリエーションへの接続に
使用するプロトコルです。使用可能な値については、「ActionScript 3.0 リファレンスガイド」
の「NetConnection.connect()」のエントリを参照してください。
//host
//www.example.com
//localhost
:port
:8080
ローカルコンピューターまたはリモートコンピューターのホスト名です。クライアントと同一
のホストコンピューター上にあるサーバーに接続するには、//localhost を使用するか、または
//host 識別子自体を省略します。
サーバー上の接続先のポート番号です。
RTMP とそのバリエーションでは、デフォルトのポートは 1935 です。HTTP とそのバリエー
ションでは、デフォルトのポートは 80 です。デフォルトのポートを通じて接続する場合は、
ポート番号を指定しないでください。ポート番号は、デフォルトとして設定されていないポー
トに接続する場合にのみ指定します。
/appname/
/sudoku/
rootinstall/applications フォルダーのサブディレクトリの名前です。
fms.ini 設定ファイル(rootinstall/conf/fms.ini)の中で、「アプリケーション」ディレクト
リ用の他の場所を指定することもできます。
instanceName
room1
クライアントの接続先となるアプリケーションのインスタンスです。例えば、チャットルーム
アプリケーションは、chatroom/room1、chatroom/room2 などのように、多数のチャット
ルームを持つことができます。
インスタンス名を指定しない場合、クライアントは、_definst_ という名前のデフォルトのア
プリケーションインスタンスに接続します。
多くのアプリケーションの開発時と同様に、クライアントとアプリケーションが同じサーバー上にある場合は、URI の構成
要素の中で必須なのは、プロトコルとアプリケーション名だけです。//localhost または 127.0.0.1 をドメイン名に使用する
こともできます。
rtmp:/vod/
rtmp://localhost/vod
rtmp://127.0.0.1/vod
これらの接続をテストするには、ブラウザーで rootinstall/samples/videoPlayer/videoplayer.html を開きます。ブラウ
ザーで Flash Media Administration Console(rootinstall/tools/fms_adminConsole.htm)を開きます。サンプルビデ
オ Player で、「Stream URL」ボックスに個々の URL を入力し、「Play Stream」をクリックします。Flash Media
Administration Console で、View Applications / Live Log を選択し、接続を表示します。
クライアントとアプリケーションが同じサーバー上にない場合は、ホストドメイン名または IP アドレスを次のいずれかのよ
うに入力します。
rtmp://www.fmsserver.com/vod
rtmp://www.fmsserver.com/vod/mediaplayer1
rtmp://www.fmsserver.com/vod/mediaplayer2
例:Hello Server アプリケーション
注意:Flash Media Streaming Server はこの例をサポートしていません。
HelloServer アプリケーションは、rootinstall/documentation/samples/HelloServer フォルダーにあります。このシンプ
ルな Flash アプリケーションは 2 つのボタンを表示します。それぞれのボタンを使用すると、サーバーへの接続と切断を実
行できます。
最終更新日 2011/10/10
121
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
出力ウィンドウには、接続状態に関するメッセージが表示されます。
アプリケーションの実行
サーバーと同じコンピューター上にサンプルをインストールするのが、サンプルを実行する最も簡単な方法です。
1 サーバーのアプリケーションフォルダーにフォルダーを作成して、アプリケーションを登録します。
rootinstall/applications/HelloServer
2 (オプション)別のコンピューターにインストールされたサーバー上でサンプルを実行する場合は、HelloServer.as を開
き、次の行を編集してサーバーの URL を追加します。
nc.connect("rtmp://localhost/HelloServer");
Flash ユーザーインターフェイスの設計
samples フォルダー内に、既に構築済みのサンプルが含まれています。ただし、独自にアプリケーションを構築したり、機
能を追加したりする方法を学ぶため、ここの手順では、このサンプルを自分で再作成する方法を示します。
1
Flash Professional で、ファイル/新規/ Flash ファイル(ActionScript 3.0)を選択し、「OK」をクリックします。
2 ウィンドウ/コンポーネントを選択し、コンポーネントパネルを開きます。
3 Button コンポーネントをダブルクリックし、ステージに追加します。
4 プロパティインスペクターで、「プロパティ」タブをクリックします。インスタンスの動作にムービークリップを選択し、
インスタンス名に connectBtn と入力します。
5 「パラメーター」タブをクリックし、次に「label」をクリックします。ボタンのラベルに Connect と入力します。
6 2 番目の Button コンポーネントをステージにドラッグします。
7 2 番目のボタンに closeBtn というインスタンス名を付け、ラベルに Close と入力します。
8 HelloServer.fla という名前を付けて FLA ファイルを保存します。
クライアントサイドコードの記述
1
Flash Professional で、ファイル/新規/ ActionScript ファイルを選択し、「OK」をクリックします。
2 ActionScript ファイルを HelloServer.as として保存します。
3 FLA ファイルに戻り、ファイル/パブリッシュ設定を選択します。「Flash」タブをクリックし、次に「設定」をクリッ
クします。
最終更新日 2011/10/10
122
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
4 「ドキュメントクラス」ボックスに、HelloServer と入力します。緑色のチェックマークをクリックし、クラスファイル
を検索できるようにしてください。「OK」をクリックし、再度「OK」をクリックします。
5 ActionScript ファイルに、パッケージの宣言を入力します。FLA ファイルと同じディレクトリ内にこのファイルを保存
した場合は、パッケージ名を使用しません。以下にその例を示します。
package {
}
ただし、FLA ファイルの下のサブディレクトリにファイルを保存する場合、パッケージ名は ActionScript ファイルの
ディレクトリパスに対応した名前である必要があります。以下にその例を示します。
package samples {
}
6 パッケージの中で、スクリプトで使用する ActionScript クラスを読み込みます。
import
import
import
import
flash.display.MovieClip;
flash.net.NetConnection;
flash.events.NetStatusEvent;
flash.events.MouseEvent;
7 import ステートメントの後に、クラス宣言を作成します。このクラスの中で、NetConnection 型の変数を定義します。
public class HelloServer extends MovieClip {
private var nc:NetConnection;
}
このクラスは MovieClip クラスを拡張するので、MovieClip クラスのすべてのプロパティとメソッドを継承します。
8 クラスのコンストラクターを記述し、各ボタンのイベントリスナーを登録します。
public function HelloServer() {
// register listeners for mouse clicks on the two buttons
connectBtn.addEventListener(MouseEvent.CLICK, connectHandler);
closeBtn.addEventListener(MouseEvent.CLICK, closeHandler);
}
addEventListener() を使用して、「Connect」ボタンで click MouseEvent が発生したときに、connectHandler() という名
前のイベントハンドラーが呼び出されるようにします。同様に、「Close」ボタンで click MouseEvent が発生したとき
に、closeHandler() が呼び出されるようにします。
9 connectHandler() 関数を記述します。この関数は、ユーザーが「Connect」ボタンをクリックするとサーバーに接続でき
るようにします。
public function connectHandler(event:MouseEvent):void {
trace("Okay, let's connect now");
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect("rtmp://localhost/HelloServer");
}
connectHandler() 内に、NetConnection オブジェクトによって返される netStatus イベントをリッスンするイベントリス
ナーを追加します。次に、正しい URI を使用して NetConnection.connect() を呼び出し、サーバー上のアプリケーション
インスタンスに接続します。この URI は、サーバーとクライアントが同一のコンピューターで実行されている状況で、
HelloServer という名前のアプリケーションインスタンスに接続します。
10 closeHandler() 関数を記述します。この関数は、ユーザーが「Close」ボタンをクリックしたときの動作を定義します。
public function closeHandler(event:MouseEvent):void {
trace("Now we're disconnecting");
nc.close();
}
明示的に close() を呼び出して、サーバーに対する接続を閉じることが最適の方法です。
最終更新日 2011/10/10
123
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
11 netStatusHandler() 関数を記述します。この関数は、NetConnection オブジェクトによって返される netStatus オブジェ
クトを処理します。
public 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" + "\n");
break;
case "NetConnection.Connect.Rejected":
trace ("Oops! the connection was rejected" + "\n");
break;
case "NetConnection.Connect.Closed":
trace("Thanks! the connection has been closed" + "\n");
break;
}
}
netStatus オブジェクトには info オブジェクトが含まれており、info オブジェクトには接続状態を示す level と code が含まれ
ています。
接続メッセージの理解
このサンプルを実行し「Connect」ボタンをクリックすると、正しく接続された場合、次のようなメッセージが表示されま
す。
Okay, let's connect now
connected is: true
event.info.level: status
event.info.code: NetConnection.Connect.Success
Congratulations! you're connected
connected is: true の行は、NetConnection.connected プロパティの値を示しています。この値は、Flash Player が、RTMP に
よってサーバーに接続しているかどうかを示します。次の 2 行は、NetConnection オブジェクトによって送信された
netStatus イベントを示しており、接続状態をレポートします。
event.info.level: status
event.info.code: NetConnection.Connect.Success
level プロパティは、status または error の 2 つの値を取ることができます。code プロパティは、接続状態を説明します。
netStatusHandler 関数内で code の様々な値を確認し、それに応じた処理を実行することができます。アプリケーション内で
は、ストリームの作成やその他の処理を行う前に、正しく接続されたかどうかを必ず確認してください。
同様に、「Close」ボタンをクリックすると、次のようなメッセージが表示されます。
Now we're disconnecting
connected is: false
event.info.level: status
event.info.code: NetConnection.Connect.Closed
Thanks! the connection has been closed
最終更新日 2011/10/10
124
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
125
ストリーミングメディアアプリケーションの開発
接続の管理
接続ステータスコード
クライアントとサーバー間で接続が確立しても、様々な理由で切断されることがあります。例えば、ネットワークに障害が
発生したり、サーバーが停止したりすることがあります。サーバーまたはクライアントによって接続が閉じられることもあ
ります。接続状態に何らかの変更が発生すると、netStatus イベントが発生します。このイベントには、どのような変更かを
示す code と level の 2 つのプロパティが含まれます。次の表は、code と level の組み合わせの一例です。
code プロパティ
レベル
意味
NetConnection.Connect.Success
status
接続が正常に確立されました。
netStatus イベントで返される code と level のすべての値の完全なリストについては、
『ActionScript 3.0 リファレンスガイ
ド』の「NetStatus.info」を参照してください。
このイベントが返されると、event.info.code と event.info.level を使用して、接続のコードとレベルにアクセスすることができ
ます。また、NetConnection.connected プロパティを参照することによって、現在でも接続が存在しているかどうかを確認す
ることができます(このプロパティは true または false のいずれかの値をとります)。接続を確立できない場合、または接続
が利用できなくなった場合、アプリケーションクライアントで何らかの対処を行う必要があります。
サーバーサイドコードでの接続の管理
アプリケーションは、接続を試みるクライアントを管理する main.asc または applicationName.asc ファイルでサーバーサ
イドコードを持つことができます。
サーバーサイドコードは、サーバー側で個々のクライアントを表す Client オブジェクトと、アプリケーションインスタンス
の管理に使用する application オブジェクトにアクセスします。サーバーのコードでは、サーバーサイド ActionScript と
サーバーサイド情報オブジェクトを使用します(『サーバーサイド ActionScript リファレンスガイド』を参照してくださ
い)。
アプリケーションは、サーバーサイドコードの中で、クライアントからの接続を受諾または拒否したり、アプリケーション
をシャットダウンしたり、接続を管理するためのその他のタスクを実行したりすることができます。クライアントが接続す
るときに、アプリケーションは application.onConnect イベントを受け取ります。同様に、クライアントが切断するときに、
アプリケーションは application.onDisconnect イベントを受け取ります。
サーバーで接続を管理する場合、サーバーサイド ActionScript の中の application.onConnect() と application.onDisconnect()
が処理の開始点となります。
関連項目
114 ページの「サーバーサイドコード」
例:接続の管理
この例では、アプリケーションクライアントとサーバーサイドコードの両方で接続を管理する方法を示します。
認証コードを書く
クライアントコードの中では、特定の接続コードを確認し、それらを処理する必要があります。ライブストリームの作成や、
記録済みストリームの再生は、クライアントが NetConnection.Connect.Success を受け取ってからのみ行います。
注意:SimpleConnectManage サンプルの SimpleConnectManage.as ファイルを参照してください。
1 NetConnection オブジェクトを作成し、connect() メソッドを呼び出して、サーバーに接続します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
2 netStatus イベントハンドラーを記述します。この中で、特定の接続コードを確認し、それぞれの場合の処理を実行しま
す。
public 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");
// create live streams
// play recorded streams
break;
case "NetConnection.Connect.Rejected":
trace ("Oops! the connection was rejected");
// try to connect again
break;
case "NetConnection.Connect.Failed":
trace("The server may be down or unreachable");
// display a message for the user
break;
case "NetConnection.Connect.Closed":
trace("The connection was closed successfully - goodbye");
// display a reconnect button
break;
}
}
コードの実行
注意:ここの手順は、Flash ユーザーインターフェイスを使用しないすべての ActionScript 3.0 の例に該当します。これら
の ActionScript 3.0 の例は、参考用として提供されています。
1 クライアントサイドコードを参照して、クライアントがどのアプリケーションに接続するのかを確認します。
nc.connect("rtmp://localhost/HelloServer");
2 applications ディレクトリ内にアプリケーションインスタンスのディレクトリを作成して、サーバーにアプリケーショ
ンを登録します。以下にその例を示します。
rootinstall/applications/HelloServer
3 (オプション)または、サーバーに登録されているアプリケーションを使用する場合は、connect() の呼び出しで使用され
る URI を変更します。
nc.connect("rtmp://localhost/MyApplication");
4 Flash Builder で、SimpleConnectManage という名前の ActionScript プロジェクトを作成します (「ファイル」> 「新
規」> 「ActionScript プロジェクト」の順に選択し、ウィザードに従います )。
5 プロジェクトに SimpleConnectManage サンプルファイルを追加します。
6 実行/デバッグを選択します。デバッグウィンドウで、「プロジェクト」に SimpleConnectManage と入力し、「アプリ
ケーションファイル」に SimpleConnectManage.as と入力します。「デバッグ」をクリックします。
7 開かれている空のアプリケーションウィンドウを閉じ、Flash Builder に戻ります。コンソールウィンドウ内のメッセー
ジを確認します。
接続が成功した場合、次のような出力が表示されます。
最終更新日 2011/10/10
126
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
connected is: true
event.info.level: status
event.info.code: NetConnection.Connect.Success
Congratulations! you're connected
[SWF] C:\samples\SimpleConnectManage\bin\SimpleConnectManage-debug.swf - 2,377 bytes after decompression
サーバーのバージョン番号の取得
サーバーのバージョン番号を取得するには、ActionScript 3.0 NetStatusEvent を使用します。サーバーのバージョン番号
は、event.info.data.version プロパティにあります。次のコードは、VOD サービスを接続し、サーバーのバージョン番号を
出力します。
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.events.AsyncErrorEvent;
var nc:NetConnection = new NetConnection();
nc.client = this;
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
function netStatusHandler(event:NetStatusEvent):void{
trace("Flash Media Server version: " + event.info.data.version);
trace(event.info.code);
}
function asyncErrorHandler(event:AsyncErrorEvent):void{
trace(event);
}
// The vod applicatin expects this function to check bandwidth.
function onBWDone(...data):Number{
return 0;
}
nc.connect("rtmp://localhost/vod");
HelloServer アプリケーションの例の netStatusHandler() 関数の内部に次のコード行を追加することもできます。
trace("Flash Media Server version: " + event.info.data.version);
メディアファイルのストリーミング
メディアファイルの再生
ストリームを再生するには、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");
最終更新日 2011/10/10
127
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
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 で始まるすべてのストリームがそれとは別のディレ
クトリに格納されるマッピングを作成できます。
最終更新日 2011/10/10
128
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
129
ストリーミングメディアアプリケーションの開発
<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 でのマッピング
NetStream 呼び出し
の URI
パブリッシュされたストリームの場所
low;e:¥fmsstreams
"myStream"
c:¥...¥rootinstall¥applications¥yourApp¥streams¥_definst_¥myStr
eam.flv
low;e:¥fmsstreams
"low/myStream"
e:¥fmsstreams¥myStream.flv
low;¥¥mynetworkDrive¥share¥fmsstrea
ms
"low/myStream"
¥¥mynetworkDrive¥share¥fmsstreams¥myStream.flv
<VirtualDirectory><Streams> タグ
関連項目
1 ページの「メディアのストリーミングの概要」
ビデオのスナップショットのキャプチャ
この機能では、指定したビデオのサムネイルのスナップショット(音声も含む)を、表示目的で取得することができます。
Flash Player クライアントは、Client.audioSampleAccess プロパティや Client.videoSampleAccess プロパティによって指定さ
れたディレクトリ内のストリームのデータに対するアクセスが許可されます。「」を参照してください。
データにアクセスするには、クライアント上で、「BitmapData.draw()」および「SoundMixer.computeSpectrum()」を呼び出
します。生のオーディオにアクセスする方法の詳細については、「生のサウンドデータへのアクセス」を参照してください。
ストリーム内のメタデータの処理
多くの場合、記録済みのメディアファイルには、サーバーまたはツールによってエンコードされたメタデータが含まれます。
Flash Video Exporter ユーティリティ(バージョン 1.1 以降)は、ビデオの所要時間、フレームレートなどの情報をビデオ
ファイルに埋め込むためのツールです。他のビデオエンコーダーでは、異なるメタデータのセットが埋め込まれます。また、
明示的に独自のメタデータを追加することもできます。
クライアントでストリームを再生する NetStream オブジェクトは、ストリーム内にメタデータが見つかると、onMetaData
イベントをディスパッチします。メタデータを読み取るには、このイベントを処理して、メタデータが含まれる info オブ
ジェクトを抽出する必要があります。例えば、ファイルが Flash Video Exporter によってエンコードされている場合、info
オブジェクトには次のプロパティが含まれます。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
duration
ビデオの長さ。
width
ビデオが表示される幅。
height
ビデオが表示される高さ。
framerate
ビデオがエンコードされているフレームレート。
関連項目
178 ページの「例:ライブビデオへのメタデータの追加」
XMP メタデータの使用
Adobe Extensible Metadata Platform(XMP)メタデータを埋め込んだビデオストリーミングを、Flash Media Server を
通じて Flash Player に配信できます。Flash Media Server では、FLV および MP4/F4V 形式で埋め込まれた XMP メタデー
タがサポートされています。Flash Media Server 3.5 では、MP4/F4V ファイルにつき 1 つの XMP メタデータパケットが
サポートされています。
XMP メタデータは、重要なメディア情報を、メディアが作成された位置からメディアが表示される位置まで通信するシス
テムです。作成プロセスで XMP 情報を追加することで、メディアのインタラクティブ性が向上します。また、ファイル内
に埋め込まれ、Adobe Media Encoder などのアドビ システムズ社のエンコードツールからエンコードされた speech-totext メタデータを配信することができます。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 を
構築するには、「Open Source 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 制御/ムービープレビューを選択します。ビデオが音声なしで再生され、出力ウィンドウにメッセージが表示されます。
最終更新日 2011/10/10
130
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
出力ウィンドウと、ムービーテストモードのビデオ
ストリームが再生されたり、接続状態が変化したりすると、それに関する出力が表示されます。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
import
import
import
import
...
}
flash.display.Sprite;
flash.net.NetConnection;
flash.events.NetStatusEvent;
flash.net.NetStream;
flash.media.Video;
2 新しいクラスの MediaPlayer を作成し、その中で必要な変数を宣言します。
最終更新日 2011/10/10
131
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
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);
最終更新日 2011/10/10
132
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
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");
}
ビデオファイルの確認
サードパーティのツールで作成または変更されたビデオファイルの確認
サードパーティのツールを使用して、FLV および F4V ファイルの作成と変更を行うことができますが、ツールによっては、
FLV および F4V 標準に準拠しないファイルが作成されます。一般的な問題として、無効なタイムスタンプ、無効な
onMetaData メッセージ、無効なメッセージヘッダーおよびオーディオとビデオの破損などが挙げられます。FLV および
F4V ファイルをサーバーにデプロイする前に、FLVCheck ツールを使用して FLV ファイルを分析できます。また、この
ツールでは、ファイルの時間が正しく反映されるようにメタデータの追加または更新を行うことができます。このツールは、
メタデータが読み取り可能であることを確認し、正しい時間を指定して、ファイルがサーバーでシークできることを確認し
ます。このツールは Unicode ファイル名をサポートしています。
注意:FLVCheck ツールは、ファイルのコンテンツの破損を修正しません。このツールは Duration および Can Seek To
End メタデータフィールドをスキャンして、メタデータを修正します。その後、ツールは、サーバーのメタデータをファイ
ル内のデータにマージします。
最終更新日 2011/10/10
133
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
他のビデオファイルの確認
Flash Media Server は、MPEG-4 ベースのコンテナ形式に格納されている H.264 でエンコードされたビデオと HE-AAC
でエンコードされたオーディオの再生と記録をサポートしています。MPEG-4 標準のサブセットがサポートされます。すべ
ての MP4 ファイルと Adobe F4V ファイルは、サポートされるサブセットに含まれています。
MPEG-4 ベースのコンテナ形式については、FLVCheck ツールを使用してサーバーがファイルを再生できることを確認し
ます。
注意:FLVCheck ツールは、破損している H.264 でエンコードされたファイルの修正や MP4/F4V ファイルに対する修正
を行いません。
FLVCheck ツールを使用したビデオファイルの確認
FLVCheck ツールはコマンドラインプログラムで、実行可能ファイルの名前は flvcheck です。
1 オペレーティングシステムのコマンドプロンプトを開き、rootinstall/tools ディレクトリに移動します。
2 FLVCheck ツールを実行するには、次のようなシンタックスを使用します。
flvcheck [-option] <file ...>
例えば、2 つのファイルを確認するには、次のようなシンタックスを使用します。
flvcheck -f abc.flv ../test/123.flv
次の表では、利用できるコマンドラインのオプションを示しています。
オプション
説明
-f [ --file ] file ...
確認対象のビデオファイル(複数可)へのパスを指定します。相対パスを使用できます(円マー
ク(¥)は使用せず、スラッシュ(/)を使用してください)。
-v [--verbose]
詳細フラグを設定します。
-V [ --version ]
バージョン情報を出力します。
-n [ --nobanner ]
ヘッダーをオフにします。
-h [ --help ]
オプションの説明と使用例を示します。
-d [ --duration ]
FLVCheck がレポートするエラーの誤差を秒単位で指定します(デフォルトは 2 秒です)。
メタデータの検証時に、metadata_duration と actual_duration の絶対差を計算し、このコマン
ドで指定されている誤差と比較します。この誤差を超えている場合、サーバーはメタデータの時
間が正しくないことを示す警告をログに記録します。この誤差を超えていない場合は、何もログ
に記録されません。
正確な時間を取得するには、-d 0 を指定します。
-q [ --quiet ]
テキスト出力ではなく、ステータスコードのみを返すように指定します。--help オプションは、
このオプションより優先されます。
-w [ --warnings]
警告を表示します。
-W [--warnings_as_errors]
警告をエラーとして処理します。
-s [ --fixvideostall ]
ビデオの再生時の停滞を修正します(FLV のみ)。
-u [ --usage ]
コマンドラインパラメーターの例や情報を表示します。
-m [ --fixmeta ]
(FLV ファイルのみ)メタデータタグが破損した場合、メタデータを修正した、元の FLV ファイ
ルの新しいコピーを、元のファイルと同じディレクトリに作成します(ファイルにエラーが含ま
れていない場合は、バックアップファイルは作成されません)
。Duration および Can Seek To
End メタデータフィールドのみが修正されます。
最終更新日 2011/10/10
134
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
135
ストリーミングメディアアプリケーションの開発
3 FLVCheck ツールは、FLV ファイルにエラーが検出されなかった場合はステータスコード 0 を返します。1 つ以上のエ
ラーがある場合は、検出された無効なファイルの総数を示す正の数値を返します。コード -1 が返される場合、無効なコ
マンドラインパラメーターが指定されています。
エラーと警告は、ログファイル(stdout)に記録されます。
4 (FLV ファイルのみ)メタデータエラーが原因で FLV ファイルからエラーが返された場合は、このツールを使用して問
題の修正を試みることができます。次の方法を試してください。
a -m オプションを使用して、ファイル内のメタデータを修正します。
flvcheck -m <file> [-quiet] [-help]
b -d オプションを使用して、エラーの duration フィールドの誤差を変更します。メタデータの duration フィールドに
は、数秒の誤差がある可能性があります。例えば、flvcheck -f abc.flv -d 5 では、メタデータの時間の許容誤差はプラス
マイナス 5 秒となります。
他の種類のエラーを、FLVCheck ツールを使用して修正することはできません。MP4/F4V ファイルは、
FLVCheck ツールを使用して修正できません。
FLVCheck エラー
検出されたエラーは、Date(日付)、Time(時刻)、ErrorNumber(エラー番号)、ErrorMessage(エラーメッセージ)、
FileName(ファイル名)という形式で stdout ファイルに記録されます。考えられるエラー番号、エラーの種類およびエ
ラーメッセージを以下に示します。
エラー番号
エラーの種類
-2
一般
エラーメッセージ
Invalid file system path specified.(無効なファイルシステムのパスが指定されまし
た。)
-3
一般
File not found.(ファイルが見つかりません。)
-4
一般
Cannot open file.(ファイルを開けません。)
-5
一般
File read error.(ファイルの読み取りエラーです。)
Flash Media Server でファイルを読み取れません。一部またはすべてのファイルのエン
コーディングに、サポートされているコーデックとの互換性がないことを示しています。
-6
一般
Cannot create corrected file.(修正されたファイルを作成できません。)
-m オプションセットを使用してツールを実行したが、メタデータが修正されたファイル
を作成できない場合に、このエラーが発生します。
-7
FLV
Invalid FLV signature.(無効な FLV の署名です。)
-8
FLV
Invalid FLV data offset.(無効な FLV データオフセットです。)
-9
FLV
Invalid FLV message footer.(無効な FLV メッセージフッターです。)
-10
FLV
Unrecognized message type.(認識できないメッセージタイプです。)
-11
FLV
Found backward timestamp.(過去のタイムスタンプが検出されました。)
-12
FLV
Unparsable data message.(解析できないデータメッセージです。)
-13
MP4
File does not contain a movie box.(ファイルにムービーボックスが含まれていませ
ん。)
このエラーは MP4 ファイルが空の場合に発生します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
136
ストリーミングメディアアプリケーションの開発
エラー番号
エラーの種類
エラーメッセージ
-14
MP4
File does not contain any valid tracks.(ファイルに有効なトラックが含まれていませ
ん。)
このエラーは、MP4 ファイルにサポートされていないコーデックでエンコードされた
オーディオまたはビデオが含まれている場合に発生する可能性があります。
-15
MP4
Too many tracks.(トラックが多すぎます。)Maximum allowed is 64.(最大許容値は
64 です。)
-16
MP4
Only one sample type allowed per track.(トラックごとに許可されるサンプルタイプ
は 1 つだけです。)
-17
MP4
Box is too large.(ボックスが大きすぎます。)
-18
MP4
Truncated box.(ボックスが切り詰められました。)報告されたボックスの長さがファ
イルの残りの長さよりも長くなっています。ファイルが切り詰められたか、報告された
ボックスの長さが無効である可能性があります。
-19
MP4
Duplicate box.(ボックスが重複しています。)
-20
MP4
Invalid box version.(無効なボックスのバージョンです。)
-21
MP4
Invalid movie time scale.(無効なムービーのタイムスケールです。)
-22
MP4
Invalid number of data entries in box.(ボックス内のデータエントリの数が無効で
す。)
-23
MP4
Invalid sample size.(無効なサンプルサイズです。)
-24
MP4
Invalid chapter time.(無効な章時間です。)
-25
MP4
Too many tag boxes. Max is 64.(タグボックスが多すぎます。最大数は 64 です。)
-26
一般
File appears to be FLV with wrong extension.(ファイルは誤った拡張子を持つ FLV
のようです。)
-27
MP4
Unsupported DRM scheme.(サポートされない DRM スキームです。)
-28
MP4
Error reading MP4 tables.(MP4 テーブルの読み取り中にエラーが発生しました。)
-29
MP4
File contains unexpected movie fragments.(ファイルに予期しないムービーの断片
が含まれています。)
-30
MP4
File contains out-of-order movie fragments.(ファイルに壊れたムービーの断片が含
まれています。)
-32
RAW
Index or Contexts file missing or corrupted.(インデックスまたはコンテキストファ
イルが見つからないか、破損しています。)
-33
RAW
Index File Version %x Not Supported. FMS Requires Version %x.(インデックスファ
)
イルバージョン %x はサポートされていません。FMS にはバージョン %x が必要です。
-34
RAW
Failed read in segment file %s. File missing or corrupted.(セグメントファイル %s
で読み取りに失敗しました。ファイルが見つからないか、破損しています。)
-35
RAW
Truncated message in segment file %s.(セグメントファイル %s でメッセージが切り
捨てられています。)
-36
RAW
Unrecognized message type in segment file %s.(セグメントファイル %s に認識さ
れないメッセージタイプがあります。)
-37
RAW
Invalid message footer in segment file %s.(セグメントファイル %s に無効なメッ
セージフッターがあります。)
-38
RAW
Segment file %s does not match index file.(セグメントファイル %s がインデックス
ファイルに一致しません。)
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
137
ストリーミングメディアアプリケーションの開発
FLVCheck の警告
一般的に、警告は情報提供を目的としたものであり、致命的なエラーではありません。Flash Media Server は警告の原因と
なったエラーを無視し、ビデオまたはオーディオファイルのロードおよび再生を続行しますが、再生に関する問題が発生す
る可能性があります。警告は、Date(日付)、Time(時刻)、Warning Number(警告番号)、Warning Message(警告
メッセージ)、File Name(ファイル名)という形式で stdout ファイルに記録されます。
警告番号
警告の種類
メッセージ
-100
一般
Metadata duration is missing or is incorrect.(メタデータの時間が見つからないか、ま
たは正しくありません。)
-101
FLV
canSeekToEnd is false.(canSeekToEnd が false になっています。)
-102
MP4
Unrecognized box.(認識できないボックスです。)
-103
MP4
Found incomplete track.(不完全なトラックが検出されました。)
-104
MP4
Found duplicate video track. Ignoring...(重複するデータトラックが検出されました。
無視します ...)
-105
MP4
Found duplicate audio track. Ignoring...(重複するデータトラックが検出されました。
無視します ...)
-106
MP4
Found duplicate data track. Ignoring...(重複するデータトラックが検出されました。
無視します ...)
-107
MP4
Track has unsupported sample type.(トラックにサポートされていないサンプルタイ
プが含まれています。)
Flash Media Server はサポートされていないコーデックでエンコードされたトラックを
無視します(再生しません)。
-108
MP4
Invalid video codec.(無効なビデオコーデックです。)
この警告は、トラックに無効なビデオコーデックが含まれていることを示します。Flash
Media Server はこのトラックを再生できません。
-109
MP4
Invalid audio codec.(無効なオーディオコーデックです。)
この警告は、トラックに無効なオーディオコーデックが含まれていることを示します。
Flash Media Server はこのトラックを再生できません。
-110
FLV
Video may appear stalled due to lack of audio data.(オーディオデータがないのでビ
デオが停滞しているように見えることがあります。)
-111
MP4
File has unsupported metadata format.(ファイルにサポートされないメタデータの形
式が含まれています。)
-112
MP4
Box has extraneous bytes at end.(ボックスの最後に余分なバイトが含まれています。)
-113
FLV
Video messages found but video flag not set.(ビデオメッセージが見つかりました
が、ビデオフラグが設定されていません。)
-114
FLV
Audio messages found but audio flag not set.(オーディオメッセージが見つかりまし
たが、オーディオフラグが設定されていません。)
-115
FLV
Video flag set but no video messages found.(ビデオフラグが設定されていますが、
ビデオメッセージが見つかりません。)
-116
FLV
Audio flag set but no audio messages found.(オーディオフラグが設定されています
が、オーディオメッセージが見つかりません。)
-117
MP4
File is truncated. Will only be partially playable.(ファイルが切り詰められています。
部分的にしか再生できません。)
-118
MP4
Track contains unsupported edit list.(トラックには、サポートされていない編集リス
トが含まれています。)
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
138
ストリーミングメディアアプリケーションの開発
警告番号
警告の種類
メッセージ
-119
FLV および RAW
Missing FLV metadata.(FLV メタデータが見つかりません。)
-120
MP4
Bad NellyMoser Frequency. Sample(s) skipped.(正しくない NellyMoser 周波数で
す。サンプルはスキップされます。)
-121
MP4
Invalid Track Extends Box.(無効なトラック拡張ボックスです。)
-122
MP4
Track contains unsupported sample flags.(トラックには、サポートされていないサ
ンプルフラグが含まれています。)
-126
Found backward timestamp in segment file %s.(セグメントファイル %s で過去のタ
RAW
イムスタンプが検出されました。)
エラーの処理
エラーの処理について
ビデオアプリケーションの構築では、接続やストリームの管理方法を理解することが重要です。ネットワーク環境では、次
のような理由によって、接続が失敗する可能性があります。
•
クライアントとサーバーとの間のどこかで障害が発生している。
•
クライアントが接続しようとした URI が正しくない。
•
サーバー上にアプリケーションインスタンスが存在しない。
•
サーバーに障害が発生しているか、またはビジー状態である。
•
クライアントの最大数、または帯域幅の最大閾値を超えている。
接続が正常に確立されると、NetStream オブジェクトを作成して、ビデオをストリーム再生することができます。ただし、
ストリームに問題が発生する可能性があります。現在のフレームレートを監視したり、バッファーが空である旨のメッセー
ジがないかどうか確認したり、ビデオのダウンサンプリングを行ったり、障害点を検出したり、ストリームが見つからない
場合の処理を行ったりする必要があります。再生中に発生した次のようなエラーについてユーザーに通知します。
•
再生中にネットワーク接続が切断される。
•
再生が完了する前にバッファーが空になる。
アプリケーションが問題に正しく対処できるようにするには、接続やストリームに影響を与える netStatus イベントをリッス
ンし、対応する必要があります。アプリケーションのテスト時や実行時には、Administration Console を使用して接続や
ストリームに関する様々なイベントのトラブルシューティングを行うこともできます。
接続失敗時の処理
接続が確立できない場合、NetStream オブジェクトやその他のオブジェクトを作成する前に、netStatus イベントを処理しま
す。サーバーの URI に再接続を試みたり、ユーザーにユーザー名とパスワードの再入力を求めたり、その他の処理を行った
りすることが必要な場合があります。
次の表は、確認対象のイベントコードと、そのイベントが発生したときの処理の例を示しています。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
イベント
機能
NetConnection.Connect.Failed
ユーザーに対して、サーバーがダウンしている旨のメッセージを表示します。
NetConnection.Connect.Rejected
再接続を試みます。
NetConnection.Connect.AppShutdown
すべてのストリームオブジェクトを切断し、接続を閉じます。
注意:SimpleConnectManage サンプルの SimpleConnectManage.as をご利用ください(これは ActionScript 3.0 で記述
されています)。
NetStatus イベントを処理するクライアントコードの記述
❖ NetConnection オブジェクトを作成してサーバーに接続します。次に、netStatus イベントハンドラーを記述して、その
中で各イベントを検出し、アプリケーションに応じて適切な処理を行います。以下にその例を示します。
public 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.Rejected":
trace ("Oops! the connection was rejected");
// try to connect again
break;
case "NetConnection.Connect.Failed":
trace("The server may be down or unreachable");
break;
case "NetConnection.Connect.AppShutDown":
trace("The application is shutting down");
// this method disconnects all stream objects
nc.close();
break;
...
}
}
ストリームが見つからない場合の処理
アプリケーションで再生しようと試みたストリームが見つからない場合、NetStream.Play.StreamNotFound コードで netStatus
イベントがトリガーされます。netStatus イベントハンドラーでこのコードを検出し、対応する処理を実行する必要がありま
す。例えば、ユーザーに対してメッセージを表示したり、デフォルトの場所にある標準のストリームを再生したりします。
認証コードを書く
❖ netStatus イベントハンドラー内で、StreamNotFound のコードを確認し、対応する処理を実行します。
private function onNetStatus(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetStream.Play.StreamNotFound":
trace("The server could not find the stream you specified");
ns.play( "public/welcome");
break;
...
}
最終更新日 2011/10/10
139
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
再生リストの操作
再生リストについて
再生リストとは、順に再生されるストリームのリストです。サーバーは、ストリームのリストを連続ストリームとして処理
し、バッファリングを提供します。これにより、ストリームが切り替わる場合でも中断が発生しません。再生リストの作成
には、クライアントサイドの ActionScript とサーバーサイドの ActionScript の両方を使用できます。
アドビ システムズ社の伝道者 Jens Loeffler は、ライブストリームをハイライトリールに編集するためにクライアントサイ
ドとサーバーサイドの再生リストを使用する内容の Adobe DevNet の記事を書いています。
クライアントサイド再生リストの作成
重要:1 番目の項目がないクライアントサイド再生リストに影響するバグがあります。そのような再生リストはユーザーが
最初に再生するとき、1 番目の項目がスキップされて再生されます。その後は、毎回その再生リストをユーザーが再生する
たびに、再生リストが再生されません。
この再生リストは、サーバーに格納されているストリームの名前を使用します。この再生リストを変更するには、アプリ
ケーションクライアントのコードを変更する必要があります。
注意:MediaPlayer サンプルの MediaPlayer.as を使用してください(これは ActionScript 3.0 で記述されています)。
1 NetConnection オブジェクトを作成し、サーバーに接続して、netStatus イベントハンドラーを追加します。
2 NetStream オブジェクトを作成し、netStatus イベントをリッスンします。
private function createPlayList(nc:NetConnection):void {
stream = new NetStream(nc);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
...
}
3 NetStream オブジェクトを Video オブジェクトに割り当てます。
video = new Video();
video.attachNetStream(stream);
4 NetStream オブジェクトに、一連の play() メソッドを定義します。
stream.play( "advertisement", 0, 30 );
stream.play( "myvideo", 10, -1, false );
stream.play( "bikes", 0, -1, false );
stream.play( "parade", 30, 120, false);
addChild(video);
5 netStatus イベントハンドラー内で、NetStream イベントコードをリッスンします。
private function netStatusHandler(event:NetStatusEvent):void
{
...
case "NetStream.Play.Stop":
trace("The stream has finished playing");
break;
case "NetStream.Play.StreamNotFound":
trace("The server could not find the stream");
break;
}
この再生リストは、以下のストリームを再生します。
• advertisement.flv という名前の記録済みストリーム、最初から 30 秒間
最終更新日 2011/10/10
140
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
• myvideo.flv という名前の記録済みストリーム、開始後 10 秒の位置から最後まで
• bikes.flv という名前の記録済みストリーム、最初から最後まで
• parade.flv という名前の記録済みストリーム、開始後 30 秒の位置から 2 分間継続
再生リスト内のストリームのスワップ
Flash Player 10 と Flash Media Server 3.5
ストリームのスワップとは、1 つのストリームと別のストリームを交換することです。ストリームの切り換えがキーフレー
ムで行われるのに対して、ストリームのスワップはストリームの境界で実行されます。したがって、ストリームのスワップ
は再生リストを使用するのに役立ちます。例としては、広告セグメントがあるコンテンツを含む再生リストで使用します。
使用パターンに関する統計を収集した後で、1 つの広告と別の広告をスワップすることができます。
再生リスト内でストリームをスワップするには、トランジションモードが SWAP である NetStream.play2() メソッドを使用し
ます。NetStream.play2() メソッドでは、パラメーターとして NetStreamPlayOptions オブジェクトを使用します。
NetStreamPlayOptions オブジェクトでは、古いストリーム、切り替え先のストリーム、使用するトランジションの種類を
指定します(ここでは NetStreamPlayTransitions.SWAP)。
例えば、再生リストがストリーム A、B、C をこの順序で再生するように設定されているとします。
ns.play("streamA", 0, -1, true);
ns.play("streamB", 0, -1, false);
ns.play("streamC", 0, -1, false);
...
ストリーム A を再生し、サーバーがストリーム C の送信を開始する前に、ストリーム C ではなくストリーム Z を再生する
ことにしたとします。このトランジションを実行するには、次のサンプルのようなコードを使用します。
var param:NetStreamPlayOptions = new NetStreamPlayOptions();
param.oldStreamName = "streamC";
param.streamName = "streamZ";
param.transition = NetStreamPlayTransitions.SWAP
ns.play2(param);
SWAP トランジションは SWITCH トランジションとは異なります。ストリームをスワップする呼び出しは、サーバーが古い
ストリーム(この例では、streamC)を配信する前に行う必要があります。streamC が既に再生されている場合、サーバーは
コンテンツをスワップせず、NetStream.Play.Failed イベントを送信します。サーバーがまだ streamC を配信していない場合、
サーバーはコンテンツをスワップします。結果的に、streamA、streamB および streamZ が再生されます。
サーバーが異なるコンテンツのストリームにスワップする場合、クライアントアプリケーションはバッファーをリセットし
ます。サーバーは新しいストリームの先頭からスワップします。このとき、操作が中断されることはありません。
サーバーサイド再生リストの作成
サーバーサイド再生リストは、サーバーサイド ActionScript の Stream オブジェクト上の順番で再生されるメディアのリス
トです。再生リストには、ライブメディアと記録済みメディアの両方を含めることができます。
サーバーサイド再生リストはライブストリーム(Stream オブジェクト)で再生されます。再生時に FLV または F4V ファ
イルとしてストリームを記録することができます。再生リストに FLV ファイルのみが含まれる場合は、再生リストを FLV
ファイルまたは F4V ファイルとして記録できます。それ以外の場合は、F4V ファイルとして記録します。
次のコードは、2 つのライブストリームと 1 つの記録済みストリームからなるサーバーサイド再生リストを作成します。
最終更新日 2011/10/10
141
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
// Start the playlist when the application loads.
// This is a live playlist, it is not recorded.
application.onAppStart = function(){
this.myStream = Stream.get("serverplaylist");
// Play a live stream for 30 seconds.
this.myStream.play("liveStream1", -1, 30);
// Play a recorded stream in full after liveStream1 plays.
this.myStream.play("mp4:recordedStream1.f4v", 0, -1, false);
// Play another live stream for 30 seconds after recordedStream1 plays.
this.myStream.play("liveStream2", -1, 30, false)
}
再生リストを再生するには、クライアントで NetStream.play("serverplaylist") を呼び出します。再生リストをスムーズに再生
するには、クライアントサイドの NetStream.bufferTime プロパティを少なくとも 1 秒に設定します(デフォルト値は 0.1 秒
です)。
再生リストにメディアを追加するには、Stream.play() を呼び出し、reset パラメーターに false を渡します。false を渡すと、現
在再生中のメディアが停止されるまで、メディアは再生を開始しません。
次のサーバーサイドコードは、2 つの記録済みメディアファイルを連続して再生し、それらをファイル「playlist.f4v」に記
録します。メディアファイルはそれぞれ全部再生されます。再生リストを再生するには、クライアントで
NetStream.play("mp4:playlist.f4v") を呼び出します。
application.onAppStart = function(){
this.clientStream = Stream.get("mp4:playlist.f4v");
this.clientStream.record();
this.clientStream.play("mp4:british.mp4", 0, -1);
this.clientStream.play("mp4:shadows.mp4", 0, -1, false);
};
次の例は、Jens Loeffler のブログ flashstreamworks.com で提供されています。
サーバーサイド再生リストを使用して、DVR 対応ライブイベント中にハイライトクリップを書き出します。再生リス
ト(例では、オープニングクリップに続いてライブイベントの選択部分、続いてアーカイブクリップのセクション)を構築
し、.f4v ファイルとして記録します。ハイライトリールを再生するには、ストリーミングプレーヤーを書き出した .f4v ファ
イルにポイントします。
application.myStream = Stream.get("mp4.highlights.f4v");
if (application.myStream){
application.myStream.record();
application.myStream.play("mp4:titles.f4v", 0, 15);
application.myStream.play("livesmith", -1, 30, false);
application.myStream.play("mp4:smitharchive.mp4", 0, 30, false);
application.myStream.play("mp4:closing.f4v", 0, 15, false);
}
};
この例を再生するには、クライアントで NetStream.play("mp4:highlights.f4v") を呼び出します。
サーバーサイド再生リストを再生するには、クライアントサイドの NetStream.bufferTime プロパティを少なくとも 1 秒に設
定します(デフォルト値は 0.1 秒です)。
動的ストリーミング
動的ストリーミングについて
注意:上記の動的ストリーミング API は、Flash Media Server 3.5 以降および Flash Player 10 以降でサポートされていま
す。
最終更新日 2011/10/10
142
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
143
ストリーミングメディアアプリケーションの開発
Flash Media Server は、異なるビットレートでエンコードされているコンテンツストリームのバージョンを切り替えるため
のコマンドを受信します。この機能により、メディアアプリケーションをネットワーク状況の変化に合わせることができま
す。また、処理能力が低く画面が小さいモバイルデバイスなどの、機能の異なるクライアントにアプリケーションを適合さ
せることもできます。例えば、サーバーが高画質ビデオをクライアントアプリケーションにストリーミングする際に、ネッ
トワーク状況が不十分である場合を考えてみます。この場合、サーバーは、低いビットレートの標準画質のストリームに切
り替えることができます。ネットワーク状況が改善された場合、サーバーは HD ビデオに戻すことができます。トランジ
ションは、クライアントでシームレスに行われます。ネットワーク状況が変化した場合でも、クライアントへのビデオスト
リーミングは中断されません。
コンテンツのストリーム
ユーザーの帯域幅
700 kbps
帯域幅
1.5 Mbps
500 kbps
150 kbps
0 kbps
0 分間
2 分間
時間
4 分間
6 分間
8 分間
サーバーは、QoS を維持するため、帯域幅の変更に応じたストリームを配信します。
最適なユーザー操作性のためには、動的ストリーミングでは次のことが必要です。
•
コンテンツの異なるバージョンまたはコンテンツの一部が同期されている(ビデオのタイムラインが一致している必要が
ある)。
•
各コンテンツストリームのオーディオデータまたは他のデータは、そのストリーム内のビデオデータと同期されている必
要がある。
サーバーは、記録されたコンテンツの 2 つの部分の間でトランジションを実装します。トランジションの実装は、ストリー
ミングされているコンテンツの種類に応じて 3 つの方法で行われます。
•
ビデオのみのストリーム。トランジションは、ターゲットのタイムライン内の最も近いキーフレームで行われます。
•
ビデオとオーディオのストリーム。トランジションは、ターゲットストリームのタイムライン内で最も近いキーフレーム
の直前にあるオーディオサンプルで行われます。開始ストリームとターゲットストリームのオーディオのタイムラインは
一致している必要があります。一致していない場合、オーディオアーティファクトが作成されます。
•
オーディオのみのストリーム。トランジションは、最も近いサンプルで行われます。
ライブビデオコンテンツ間でのトランジションの実装は、これよりも少し複雑です。サーバーが正確なトランジション位置
を選択することができるように、ストリームには 3 ∼ 5 ミリ秒以内の十分に近い位置で同期されたタイムスタンプが含まれ
ている必要があります。
ActionScript を使用したストリームの切り替え
ストリームのトランジションはサーバーで行われますが、ストリームを切り替えるコマンドおよび切り替えの決定は、クラ
イアントアプリケーションから送信されます。アプリケーション開発者は、ダウンロードと再生の統計を監視したり、必要
に応じて古いストリームを新しいストリームに切り替えたりするロジックを含めることができます。
ActionScript 3.0 NetStream.info プロパティと NetStreamInfo クラスを使用して、ダウンロードと再生の統計を監視しま
す。NetStream.play2() メソッドと関連する NetStreamPlayOptions クラスを使用して、再生中のストリームを変更します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
NetStreamPlayOptions.offset プロパティは、ストリーム間の高速切り替えを行うために使用します。
NetStreamPlayOptions.offset のデフォルト値である -1 を使用します。デフォルト値 -1 は、netstream.time + 3 の高速切り換え
時間を示します。netstream.offset + 4 などのより大きい値を指定することもできますが、より小さい値は使用しないでくださ
い。
重要:デフォルト値よりも小さい値を NetStreamPlayOptions.offset に使用しないでください。
アプリケーション開発者は、トランジションによって発生した遅延を解消するのに十分な大きさの再生バッファーをクライ
アントアプリケーションが保持するようにする必要があります。遅延の原因になる 2 つの要素としては、ライブストリーム
のキーフレーム間隔と、切り換えられた 2 つのストリームが同期されていないことが挙げられます。例えば、2 秒分のバッ
ファーでは、3 秒のトランジションの遅延に対応することはできません。
重要:NetStream.bufferTime の値は、10 秒以上に設定してください。
アドビは、NetStream クラスを拡張する DynamicStream という新しいクラスを開発しました。DynamicStream クラス
には、帯域幅、バッファーの使用状況および削除されたフレームを監視するイベントリスナーが含まれています。クラスは
この情報に基づいてストリームを切り替えます。DynamicStream クラスを使用して動的ストリーミングを実装したり、
DynamicStream クラスをリファレンスとして使用して、独自の動的ストリーミングアルゴリズムを記述したりすることが
できます。レガシーコードをマイグレートする場合は、DynamicStream クラスを使用することをお勧めします。
ActionScript クラスファイルとこれらのクラスのドキュメントは、www.adobe.com/go/fms_dynamicstreaming からダ
ウンロードします。
注意:これらのクラスは ActionScript 3.0 ライブラリの一部ではありません。アドビが Flash Media Server ユーザー向け
に開発したカスタムクラスです。
動的ストリーミングを使用する状況の判断
次の条件のいくつかまたはすべてを満たすコンテンツに対して動的ストリーミングを使用することをお勧めします。
•
長時間のビデオ
•
ファイルサイズの大きいビデオ
• HD ビデオ
•
全画面ビデオなど、解像度の大きいビデオ
•
企業ユーザーではなく、帯域幅の問題に影響されやすい自宅ユーザーなどのユーザーに配信されるコンテンツ
エンコードの推奨事項
ユーザーに最良の視聴環境を提供するために、コンテンツのエンコード時にこの DevNet の記事および Adobe MAX 2008
の Will Law のプレゼンテーションの推奨事項に従ってください。
推奨事項の要約を次に示します。
•
最もスムーズな切り替えのためには、オーディオは AAC でエンコードします。
• MP3 オーディオ付きのストリームでは、オーディオのビットレートを一定に保ちます。
•
可能な場合、同じオーディオのサンプルレートを使用します。
•
低帯域幅の使用向けにストリームをエンコードするには、1 チャンネル(モノラル)でオーディオをエンコードします。
•
ストリームのビデオのタイムラインが関連付けられ、互換性があることを確認します。
•
すべてのストリームで同じコーデックと同じオーディオビットレートを使用します。そうしない場合、ストリームの切り
替え時にポンという小さな音が聞こえることがあります。
最終更新日 2011/10/10
144
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
•
必須ではありませんが、コンテンツのバージョンが異なってもキーフレーム間隔(キーフレーム頻度)とフレームレート
(fps)が一致していることが推奨されます。キーフレーム間隔を短くすると、サーバーはストリームの切り替えを頻繁に
行うことになり、クライアントはより小さい再生バッファーを持つことになります。
次の表は、1 つのコンテンツのエンコードに使用できる様々なビットレートを示しています。
ビットレート
150 Kbps
300 Kbps
500 Kbps
700 Kbps
1.5 Mbps(完全 Web HD)
ストリームを切り替える状況の判断
どの時点でストリームを切り替えるかは、バッファー長、ダウンロードされたバイト数、ドロップされたフレーム数など、
さまざまな要因を考慮して決定できます。adobe.com からダウンロードできる DynamicStream クラスと
DynamicStreamItem クラスは、これらの要因を考慮して構築されており、動的なストリーミングアプリケーションに必要
なロジックが含まれています。
アプリケーションロジックを独自に開発する場合は、ストリーミングビデオに関する次の戦略が役立ちます。
1 初回の再生時には、画面またはデバイスに適する最小のビットレートを選択します。例えば、標準のコンピューターの
Web ブラウザー上でビデオを再生する場合、初回の再生に適するストリームは 300 kbps、320 x 240 です。
2 再生を即座に開始するには、小さい値のバッファー長を選択します。
3 再生が開始されたら、バッファー長を 10 秒以上に増やします。
4 デフォルト値よりも小さい値を NetStreamPlayOptions.offset に使用しないでください。
5 クライアント帯域幅(NetStream.info.maxBytesPerSecond)とバッファーサイズ(NetStream.bufferLength)の使用につい
て監視を開始します。
現在の帯域幅が十分である場合は、バッファーがすぐに満杯になり、安定します。帯域幅が不足し始めると、バッファー
が空になり始めます。
6 クライアントの帯域幅がストリームの必要条件を超え、バッファーが増えるか満杯になると、解像度の高いコンテンツに
切り替えることができます。
切り替える前に、クライアントの帯域幅が十分であることを確認してください。クライアントの帯域幅とバッファー長に
加えて、ドロップされたフレーム数(NetStream.info.droppedFrames)など、その他の統計を確認することもできます。
7 解像度の高いコンテンツにそれぞれ移行した場合は、タイマーを使用して、5 秒単位でバッファーの監視を続行します。
バッファーが空になり始めた場合は、解像度の低いコンテンツに切り替え、バッファーを監視する頻度を増やします(2
秒単位など)。
8 帯域幅が十分でバッファーが増えるか満杯になっているときに、アップグレードを続けます。最良のユーザー操作性のた
めには、慎重に設定を行う必要があります。アップグレードは、報告された帯域幅が必要なストリーム条件を十分に超え
ている場合のみ行います。
関連項目
DynamicStream クラスの使用
ActionScript Guide to Dynamic Streaming
最終更新日 2011/10/10
145
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
クライアントの帯域幅の確認
ストリームの切り替えが必要な状況を判断するために、クライアントの帯域幅を監視します。クライアントの帯域幅が適切
な場合、クライアントアプリケーションはサーバーに対して、より高いビデオのビットレートに切り替えるよう要求するこ
とができます。クライアントの帯域幅が小さい場合、クライアントアプリケーションはサーバーに対して、より低いビット
レートに切り替えるよう要求することができます。
帯域幅を測定するには、NetStream.info プロパティを使用します。NetStream.info の呼び出しによって、受信するストリーム
のオーディオ、ビデオおよびデータバイトのレートを反映したプロパティと共に NetStreamInfo オブジェクトが返されま
す。受信するデータレートに関する情報によって、帯域幅の品質を推測することができます。
具体的には、NetStreamInfo クラス(ActionScript 2.0 の場合は NetStream.getInfo() によって返されたオブジェクト)の
*byteCount および *bytesPerSecond プロパティを使用します。これらのプロパティの詳細については、『ActionScript
Language References』を参照してください。
クライアントの帯域幅を測定するための 1 つの方法は、NetStream.Buffer.Full ステータスのイベントを受信した際に、
NetStreamInfo.byteCount プロパティを一定時間測定して一秒あたりのバイト値を取得することです。この値は、使用可能な
最大帯域幅に近似したものになります。次に、使用可能な帯域幅と使用可能なビットレートを比較し、必要に応じてトラン
ジションを実装します。
注意:byteCount プロパティは、サーバーの Access ログにある sc-stream-bytes と同じ値は返しません。byteCount プロパ
ティは、ユーザーがストリーム切り替えのタイミングを判断できるデータを提供する QoS(クオリティオブサービス)で
す。byteCount プロパティは請求書には使用しないでください。
削除されたフレームの確認
バッファーの監視に加えて、削除されたフレームを確認します。削除されたフレームが多すぎる場合は、より低いビット
レートのストリームに切り替えます。NetStreamInfo.droppedFrames プロパティを使用します。この読み取り専用のプロパ
ティは数値であり、現在の NetStream 再生セッションでドロップされたビデオフレームの数を返します。
削除されたフレームのレートを決定する方法の 1 つは次のとおりです。タイマーを使用して、削除されたフレームの現在の
値と前の値との違いを計算します。その違いを変数 droppedFPS に格納します。現在の 1 秒あたりの受信フレーム数を、別
の変数 currentFPS で監視します。droppedFPS が currentFPS 値の 20%を超えている場合、より低いビットレートに切り替え
ます。
ストリームの切り替え
同じコンテンツを異なるビットレートでエンコードするストリーム間のトランジションを要求する場合、クライアントアプ
リケーションは NetStream.play2() メソッドを使用します。このメソッドでは、NetStreamPlayOptions オブジェクトをパラ
メーターとして使用します。このオブジェクトにはサーバーがストリームを切り替える方法を指定します。
注意:NetStream.play2() メソッドは NetStream.play() メソッドを拡張したものです。
NetStreamPlayOptions オブジェクトには次のプロパティが含まれています。
プロパティ
説明
oldStreamName
現在再生されているストリームの名前(古いストリーム)。
streamName
再生する新しいストリームの名前(ストリームの切り替え先)。
start
再生する新しいストリームの開始時間。
ほとんどの動的ストリーミングでは、デフォルト値の -2 が最適です。この値によって、streamName で指定されたライ
ブストリームを再生するようにアプリケーションに通知されます。もし、その名前のライブストリームが見つからない場
合は、streamName で指定された記録ストリームが再生されます。ライブストリームも記録ストリームも見つからない場
合は、だれもパブリッシュしていなくても、streamName という名前のライブストリームを開きます。そのストリーム上
でだれかがパブリッシュを開始すると、アプリケーションがそれを受信します。
最終更新日 2011/10/10
146
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
プロパティ
説明
len
再生の継続時間(長さ)。
ほとんどの動的ストリーミングでは、デフォルト値の -1 が最適です。この値は、ライブストリームが使用できなくなる
まで、または記録ストリームが終了するまで、アプリケーションがそれらを再生することを示します。
transition
トランジションのモード。
使用可能な値は、NetStreamPlayTransition クラスの定数です。同じコンテンツを異なるビットレートで切り換えるた
めに最適な値は SWITCH です。その他のモードの詳細については、『ActionScript 3.0 Language Reference』の
「NetStreamPlayTransition クラス」を参照してください。
次のコード例では、SWITCH オプションを使用して、より高いビットレートストリームに切り替えるようサーバーに通知し
ます。この例では、新しいストリームを次の論理キーフレームでサーバーに切り替えるよう通知する oldStreamName の値を
渡しません。この方法によって、最もスムーズなビデオ環境が提供されます(再生リストを使用する場合は、
oldStreamName に値を渡します。141 ページの「再生リスト内のストリームのスワップ」を参照)。動的なストリームをビ
デオおよびオーディオの記録ストリームに切り替える際、ほとんどの場合は、例にあるようにデフォルト値の start および
len を保持することができます。
クライアントがトランジションを要求した場合、サーバーは NetStatusEvent.NET_STATUS イベントをコード
NetStream.Play.Transition と共に送信します(ActionScript 2.0 では、onStatus イベントを同じコードと共に送信します)。
サーバーはこのイベントをクライアントに直ちに送信します。これは、操作が正常に終了したことを示します。新しいスト
リームの最初のフレームがレンダリングされると、サーバーは onPlayStatus メッセージをコード
NetStream.Play.TransitionComplete と共に送信します。このイベントによって、クライアントはいつ新しいストリームのレ
ンダリングが開始されるのかを正確に知ることができます。
Flash Player が NetStream.Play.Transition メッセージを送信したあとでクライアントが検出を行うとストリームは正常に切
り替わりますが、Flash Player は NetStream.Play.TransitionComplete メッセージを送信しません。Player は、検出のあとで
新しい状態に入り、古い状態のステータスイベントを送信することができないので、メッセージを送信しません。Player
は、onMetaData() などの他のコールバックメソッドでも同じように動作します。
次の例では、ストリームのトランジションを処理します。
var stream:NetStream = new NetStream(connection);
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.client = new CustomClient();
var video:Video = new Video();
video.attachNetStream(stream);
stream.play("streamA_150kbps");
addChild(video);
...
//Set up the transition to 700 kpbs content
var param:NetStreamPlayOptions = new NetStreamPlayOptions();
param.streamName = streamA_700kpbs;
param.transition = NetStreamPlayTransitions.SWITCH;
stream.play2(param);
//Handler function for the Transition event
class CustomClient{
public function onPlayStatus(info:Object):void {
trace("switch time: time=" + info.time + " name=" + info.name + " type=" + info.type);
}
}
NetStream.Play.Transition ステータスイベントには、reason フィールドが含まれます。トランジション要求の状態についての
追加情報を取得するには、このフィールドを使用します。通常、reason フィールドには "NetStream.Transition.Success" とい
うコードが含まれ、トランジション要求が成功して正常に処理されたことを示します。ライブストリーム間を切り替えると
最終更新日 2011/10/10
147
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
き、サーバーが 2 つのストリームの間の同期ポイントを検出できない場合があります。このような場合、サーバーは任意の
フレームに対して強制的にトランジションを実行し、reason フィールドにコード "NetStream.Transition.Forced" を設定しま
す。このような状況は、以下のような場合に発生する可能性があります。
•
切り替え対象の 2 つのストリームのタイムラインが同じではないため、サーバーが切り替えを実行する時点を選択できま
せん。
•
新しいストリームのキーフレーム間隔が、クライアントの再生バッファーより長いです。再生バッファーの長さは、サー
バーがトランジションを待機する時間の上限です。サーバーからキーフレームが見えないため、サーバーは切り替えのフ
レームを選択できません。
•
ライブストリームのライブキュー遅延が、クライアントの再生バッファーより長いです。長いキーフレーム間隔と似た遅
延が発生します。
ストリームのトランジション中のメタデータ処理
Flash Media Server は、ストリームのトランジションの一部がクライアントにレンダリングされる際に
NetStream.Play.TransitionComplete ステータスのイベントを送信します。新しいストリームに切り替えられると、
NetStream.Play.TransitionComplete ステータスのイベントに続いて、新しいストリームの onMetadata メッセージが直ちに送
信されます。メタデータをキャプチャする前に TransitionComplete イベントをリッスンします。ストリームがライブである
場合、ストリームに関連付けられているすべてのデータキーフレームが送信されます。
クライアントバッファーの設定
バッファリングは、ビデオの再生中の帯域幅の変動を管理します。
ユーザーが最良の機能を利用できるようにするには、最初はバッファーを小さい値に設定します。値を小さくすると、スト
リームの再生が比較的早く開始します。再生が開始した場合は、バッファーを大きい値に設定します。値を大きくすること
で、ネットワークのノイズまたは中断の有無に関わらず、ストリームがよりスムーズに再生されます。
最良の視聴環境を作成してユーザーに提供するには、ビデオの進行状況を監視し、ビデオのダウンロードするときのバッ
ファーを管理します。最良の再生環境を提供するには、それぞれのユーザーごとに異なるバッファーサイズを設定すること
を検討します。これを行う方法の 1 つとして、クライアントの帯域幅を測定し、この帯域幅に基づいて初期バッファーサイ
ズを設定する方法があります。
ストリームを切り替える状況を判断するために、クライアントのバッファーサイズを監視します。クライアントの帯域幅が
適切な場合、バッファー内のデータ量が増加するか、バッファーがいっぱいになります。クライアントはサーバーに対して
より高いビデオのビットレートに切り替えるよう要求することができます。クライアントの帯域幅が小さい場合、バッ
ファー内のデータ量が減少するか、バッファーが空になります。クライアントはサーバーに対してより低いビットレートに
切り替えるよう要求することができます。
NetStream.info() を呼び出し、ストリームの現在の統計を反映した次のプロパティと共に NetStreamInfoObject を取得します。
バッファーを制御するプロパティは BufferLength および BufferByteLength プロパティです。これらのプロパティについて詳
しくは、「ActionScript 3.0 リファレンスガイド」を参照してください。
また、ストリームの再生中に、netStatus イベントを検出して処理することもできます。例えば、バッファーがいっぱいに
なったとき、netStatus イベントは NetStream.Buffer.Full の info.code 値を返します。バッファーが空になったときは、
NetStream.Buffer.Empty の code 値によって別のイベントが発生します。データのストリーミングが完了すると、
NetStream.Buffer.Flush イベントがディスパッチされます。これらのイベントをリッスンすることによって、バッファーが空
になった場合バッファーサイズを小さくし、バッファーがいっぱいになった場合バッファーサイズを大きくすることができ
ます。
最終更新日 2011/10/10
148
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
注意:Flash Player 9 アップデート 3 以降では、ストリームが一時停止されたときにバッファーがクリアされなくなりまし
た。この機能により、視聴者が間を空けずに再生を再開できるようになりました。コードで NetStream.pause() を使用して
データをバッファーすることができます。例えば、閲覧者がコマーシャルを見ている間にデータをバッファーし、メインの
ビデオが開始されたときにストリームの一時停止を解除することができます。詳細については、「NetStream.pause()」を参照
してください。
バッファー時間の設定
バッファー時間を秒単位で変更するには、NetStream.bufferTime プロパティを設定します。
ns.bufferTime(10);
バッファーに適するサイズは、ユーザーの帯域幅によって異なります。次に示す値は推奨値です。接続が高速な場合は、5
∼ 10 秒が初期バッファーサイズとして適切な値です。より低速な接続では、10 秒が適切な初期バッファーサイズです。再
生の開始後は、バッファーサイズとして適切な値は 30 ∼ 60 秒です。
バッファーイベントの処理
この例では、バッファーイベントを検出して、イベントの発生に合わせてバッファー時間を動的に調整する方法を示してい
ます。ここでコードの主要部分を示しています。完全なサンプルについては、Buffer.as サンプルファイルを参照してくださ
い。
1 メインクライアントクラスのコンストラクター関数内で、NetConnection オブジェクトを作成し、サーバーに接続しま
す(Flash Media Server のルートインストールディレクトリ内の documentation/samples/Buffer ディレクトリにある
Buffer.as を参照してください)。
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect("rtmp://localhost/Buffer");
2 netStatus イベントハンドラーを記述します。成功したか、失敗したかおよびバッファーがいっぱいになったときおよび
バッファーが空になったときのイベントを確認し、それに応じてバッファーサイズを変更します。
private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetConnection.Connect.Success":
trace("The connection was successful");
connectStream(nc);
break;
case "NetConnection.Connect.Failed":
trace("The connection failed");
break;
case "NetConnection.Connect.Rejected":
trace("The connection was rejected");
break;
case "NetStream.Buffer.Full":
ns.bufferTime = 30;
trace("Expanded buffer to 30");
break;
case "NetStream.Buffer.Empty":
ns.bufferTime = 8;
trace("Reduced buffer to 8");
break;
}
}
3 ストリームを再生するためのカスタムメソッドを記述します。このメソッドの中で、初期のバッファー時間を設定しま
す。次の例では、2 秒に設定します。
最終更新日 2011/10/10
149
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
private function connectStream(nc:NetConnection):void {
ns:NetStream = new NetStream(nc);
ns.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
ns.client = new CustomClient();
video = new Video();
video.attachNetStream(ns);
ns.play( "bikes", 0 );
ns.bufferTime = 8;
trace("Set an initial buffer time of 8 seconds");
addChild(video);
}
4 onMetaData() イベントハンドラーおよび onPlayStatus() イベントハンドラーを作成します。
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 {
switch (info.code) {
case "NetStream.Play.Complete":
trace("The stream has completed");
break;
}
}
これらのイベントハンドラーは、NetStream.play() を呼び出すときに必要になります。
ログファイルでのトランジションの識別
アクセスログでストリームのイベントを追跡できます。ログを使用すると、トランジションがある単一のストリーム再生と、
ストリームの複数の再生や異なるストリームの再生を区別できます。単一のコンテンツストリームのトランジションが行わ
れると、サーバーはトランジションとしてストリームのステータスを追跡します。サーバーは、元のストリームに対して
stop イベントを、新しいストリームに対して play イベントをログに記録します。通常の stop イベントおよび play イベント
(トランジションを使用しない stop または play)のステータスコードは 200 です。ストリームのトランジションのステータ
スコードは 210 です。アクセスログには、次の追加情報が提供されます。
フィールド
x-sid
説明
ストリームの ID。この ID は、そのクライアントセッションでは一意ですが、セッション間では一意ではありませ
ん。
x-trans-sname
サーバーがトランジションしたストリームの名前(元のストリーム)
x-trans-sname-query
サーバーがトランジションしたストリームのストリーム名のクエリー部分
x-trans-file-ext
サーバーがトランジションしたストリームのストリーム名のファイル名拡張子部分
ログプロセッサーを使用する場合、ステータスコードと x-sid 値の両方が参照されていることを確認してください。単一の
論理ストリーム上で行われたトランジションを識別するには両方の値を参照します。通常のストリームでは、ストリームの
トランジションは再生 / 停止のペアで行われます。同じストリーム上の 210 のステータスコードの play イベントと、それに
続く 210 のステータスコードの stop イベントを識別することで、ログプロセッサーはストリームのトランジションを追跡で
きます。ステータスコードを参照することで、ログプロセッサーはトランジションのない play イベントまたは stop イベン
トからのストリームのトランジションを区別することができます。
最終更新日 2011/10/10
150
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
切断時のストリームの再接続
Flash Media 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 未満の場合、ストリームは
ネットワーク接続が失われるとすぐに閉じます。
最終更新日 2011/10/10
151
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
152
ストリーミングメディアアプリケーションの開発
単一ストリームの再接続
次のワークフローでは、単一ストリームに再接続します。
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()
を呼び出します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
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 イベントを使用します。次の
表は、ストリーム再接続機能のイベントとプロパティをまとめたものです。
最終更新日 2011/10/10
153
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
154
ストリーミングメディアアプリケーションの開発
プロパティ
サーバーのバージョン
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” です。
詳細情報
関連項目
233 ページの「Authorization プラグインの開発」
サーバーのロギング
次のイベントは、ストリーム再接続機能のため Flash Media Server アクセスログに書き込まれます。
イベント
カテゴリ
connect
session
説明
クライアントが Flash Media Server アプリケーションに接続しました。このイベントは、接続の切断
後に再確立したときに記録されます。
play
stream
ストリームの再生が再開しました。
stop
stream
ストリームの再生が停止しました。
次のフィールドは、ストリーム再接続機能の新しいフィールドです。
フィールド
説明
x-trans-mode
NetStream.play2() 呼び出しでクライアントが設定したトランジションモード。ストリーム再接続では、トランジションモードは
“resume” と “appendAndWait” です。
x-soffset
NetStream の割り当て後にストリーミングを再開する場所を示すオフセット値。
これらのフィールドは、デフォルトでは無効になっています。authEvent.log と access.log にこれらのフィールドを表示す
ることもできます。
ストリーミング間の高速切り替え
Flash Media Server 4.0、Flash Player 10.1
高速切り替えについて
ビットレートが異なるストリーム間で切り替えるタイミングをサーバーに通知するには、NetStreamPlayOptions.offset プロパ
ティを使用します。offset は、ストリームを切り替える時間 ( 秒 ) です。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
offset のデフォルト値は -1 です。これは高速切り替えモードです。このモードでは、netstream.time + 3 後の最初に使用でき
るキーフレームで切り替えが発生します。これは、再生ポイントの約 3 秒後です。
重要:高速切り換えの最適な方法は、NetStream.bufferLength を 10 秒に設定し、NetStreamPlayOptions.offset を 3、4、また
は 5 秒に設定することです。
以前のストリームからバッファーされたデータはすべてフラッシュされます。高速切り替えが標準切り替えモードよりも高
速な理由は、バッファーされたデータの再生をクライアントが待つ必要がないためです。
標準切り替えモードを使用するには、offset をバッファーよりも大きい値に設定します(offset > NetStream.time +
NetStream.bufferLength)。
高速切り替えコードの記述
NetStreamPlayTransitions.SWITCH 定数は、ストリームの切り替えをトリガーするのに使用します。切り替えが発生する絶
対ストリーム時間を指定するには、NetStreamPlayOptions.offset プロパティを使用します。offset プロパティは絶対ストリー
ム時間であり、再生ポイントからのオフセットではありません。例えば、再生ポイントの 5 秒後に切り替えるには、offset プ
ロパティを 5 ではなく netstream time + 5 に設定します。
var ns:NetStream = new NetStream(nc);
var nso:NetStreamPlayOptions = new NetStreamPlayOptions();
nso.streamName = streamName;
nso.transition = NetStreamPlayTransitions.SWITCH;
nso.start = 10;
nso.len = -1; // play until the end of the file
nso.offset = ns.time + 5; // switch 5 secs. after the playback point.
ns.play2(nso);
注意:offset のデフォルト値は netStream.time + 3 です。デフォルト値では、サーバーは再生ポイントから 3 秒後にストリー
ムを切り替えます。
高速切り替え向けの NetStatus イベント
NetStatus イベント
説明
NetStream.Play.Failed
offset の値は、現在の再生ヘッド時間より小です。
ストリームは切り替えできません。
NetStream.Play.Transition
SWITCH 呼び出しが正常に行われたため、サーバーは新しいストリー
ムのデータのストリーミングを開始します。
NetStream.Play.TransitionComplete
新しいストリームが再生を開始します。
高速切り替えモードで、NetStream.Play.Transition イベントと
NetStream.Play.TransitionComplete イベントの間の時間は、標準切
り替えモードの場合よりかなり短かくなります。
最終更新日 2011/10/10
155
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
スマートシーク
Flash Media Server 3.5.3、Flash Player 10.1
スマートシークについて
Flash Media Server 3.5.3 と Flash Player 10.1 が連携し、VOD ストリームと、バッファーを持つライブストリームでのス
マートシークをサポートします。スマートシークは、サーバー内のデータを要求せずに、巻き戻しと再生用のバッファーを
使用します。指定した数のフレームを進めるか巻き戻すことができます(標準のシークでは、バッファー済みのデータをフ
ラッシュし、シーク時間に基づいて新しいデータを送信するようにサーバーに要求します)。スマートシークにより、サー
バーの負荷が減少し、シークのパフォーマンスが向上します。スマートシークを使用して次を作成します。
•
クライアント側 DVR 機能。新しいビデオの配信をサーバーに要求する代わりに、クライアント側のバッファー内でライ
ブストリームをシークします。
•
トリックモード。フレームのコマ送り再生、早送り、巻き戻り、スローモーション再生中の早送りなどを実行するプレー
ヤーを作成します。
スマートシークの例については、アドビ主催の「Stream Reconnect and Smart Seek example」を参照してください。
注意:スマートシークは、ピアアシストネットワーキングアプリケーションやプログレッシブダウンロードではサポートさ
れません。
スマートシーク ActionScript API
注意:スマートシーク ActionScript API は ActionScript 3.0 であり、ActionScript 2.0 ではサポートされません。
Flash Player は巻き戻し用のバッファーと再生用のバッファーを保持しています。巻き戻し用のバッファーは、表示された
データのキャッシュです。再生用のバッファーは、表示されていないデータのキャッシュです。スマートシークにより、こ
れらのバッファー内部からデータが取得されます。
スマートシークをオンにするには、NetStream.inBufferSeek を true に設定します。
バッファーを制御するには、次の API を使用します。
• NetStream.backBufferLength
(読み取り専用)巻戻しおよび再生のためにキャッシュされている、以前に表示されたデータの秒数。これは、巻き戻し
用のバッファーの bufferLength プロパティです。
• NetStream.backBufferTime
以前に表示されたデータを巻戻しおよび再生用にどれだけキャッシュするかを秒単位で指定します。デフォルト値は、デ
スクトップでは 30、モバイルでは 3 です。
• NetStream.bufferLength
(読み取り専用 ) 現在バッファーにあるデータの秒数。
• NetStream.bufferTime
ストリームの表示を開始するまでにメッセージをどの程度の時間バッファリングしておくかを秒単位で指定します。デ
フォルト値は 0.1 です。
バッファー内部でシークし、進めるには、次の API を使用します。
• NetStream.seek()
再生ヘッドを、呼び出しで指定された時刻まで進めます。
最終更新日 2011/10/10
156
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
• NetStream.step()
現在表示されているフレームに対して、指定された数のフレーム分、再生ヘッドを前後に進めます。
スマートシークを検出するには、次のイベントを使用します。
• NetStatusEvent.info.description には文字列 "client-inBufferSeek" が含まれます。
NetStream.seek() の呼び出しに成功するとディスパッチされます。
• NetStream.Step.Notify
NetStream.step() の呼び出しに成功するとディスパッチされます。
これらの API の詳細については、「ActionScript 3.0 リファレンスガイド」を参照してください。
スマートシーク ActionScript API の使用
スマートシークは Flash Player 10.1 以降でサポートされています。コードを実行する前に、Flash Player のバージョンを確
認してください。たとえば、巻き戻しおよび再生ボタンは、Flash Player 10.1 以降が実行されているクライアントだけに表
示できます。次のコードは Flash Player のバージョンをテストし、10.1 以降の場合に true を返します。
public var fp10_1:Boolean;
public function onStart():void{
debug("Flash Player Version: " + Capabilities.version);
fp10_1 = isFP10_1();
debug("fp10.1: "+fp10_1);
}
public function isFP10_1():Boolean {
var va:Array = Capabilities.version.split(" ")[1].toString().split(",");
if(int(va[0]) > 10) { return true; }
if(int(va[0]) < 10) { return false; }
if(int(va[1]) > 1) { return true; }
if(int(va[1]) < 1) { return false; }
return true;
}
次のコードは、Flash Player のバージョンが 10.1 より後の場合に、NetStream.inBufferSeek を true に設定してスマートシー
クをオンにします。
// Call this function when you catch NetConnection.Connect.Success
public function createNetStream():void{
// Write code to create a NetStream object and a Video object...
//...
// Set the forward buffer, in seconds.
ns.bufferTime = 10;
try {
if(fp10_1) {
// If Flash Player is greater than 10.1, turn on smart seeking
// and set the size of the back buffer, in seconds.
ns.inBufferSeek = true;
ns.backBufferTime = 30;
}
} catch(e:Error) {}
スマートシークがオンになっている場合は、NetStream.seek() の呼び出しでバッファーを使用します(標準のシークではバッ
ファーが消去され、データの要求がサーバーに送信される)。次の関数は、seekText と呼ばれるテキストフィールドで指定さ
れた数値まで順方向または逆方向にシークできます。
最終更新日 2011/10/10
157
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
public function seekHandler():void {
if(ns != null) {
ns.seek(Number(seekText.text));
}
}
フレームのコマ送り/コマ戻し、早送り、巻き戻し、またスロー再生を行うプレーヤーを作成するには、step() および seek()
関数に渡す数値を調整します。
クライアントサイド DVR 機能を作成するには、NetStream.backBufferTime および NetStream.bufferTime プロパティを設定
します。これらのプロパティは、Flash Player がクライアントサイドバッファーに格納するデータの量を指定します。たとえ
ば、ライブの前にユーザーによる 30 分間の巻き戻しを可能にするには、backBufferTime を 1800(60 秒 x 30 分)に設定し
ます。キャッシュはメモリに格納されます。コンテンツがネットブックやモバイルデバイスを対象としている場合は、バッ
ファープロパティを小さい値に設定します。
スマートシークのテスト
スマートシークは、NetStream.inBufferSeek が true の場合の NetStream.seek() または NetStream.step() の呼び出しです。
NetStream.seek() の呼び出しに成功した場合、NetStatusEvent の info.description プロパティには、文字列 "clientinBufferSeek" が含まれます。
NetStream.step() の呼び出しに成功した場合、NetStatusEvent の info.code プロパティには文字列 "NetStream.Step.No ify" が
含まれます。step が完了しないと、別の step の呼び出しが実行なしで返されることがあります。もう一度 step を呼び出す
前に、前の呼び出しの "NetStream.Step.Notify" を取得してください。
次のコードは、NetStream.seek() と NetStream.step() の呼び出しをテストします。
private function netStatusHandler(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetStream.Seek.Notify":
var desc:String = new String(event.info.description);
if(desc.indexOf("client-inBufferSeek") >= 0)
trace("A smart seek occured");
else
trace("A standard seek occured");
break;
case "NetStream.Step.Notify":
trace("Successful NetStream.step() call");
break;
}
}
スマートシークには次の要件があります。
• NetStream.inBufferSeek = true
inBufferSeek のデフォルト値が false であること。
• Flash Media Server 3.5.3
• Flash Player 10.1
• ActionScript 3.0
•
バッファー(backBufferLength および bufferLength)の値にシーク要求を満たす十分な大きさがあること。
これらのいずれかの要件が満たされない場合は、Flash Player は標準のシークを使用しますが、コンパイル時または実行時
エラーをスローしません。
最終更新日 2011/10/10
158
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
Authorization プラグインのイベントとプロパティ
Authorization プラグインのイベントとプロパティを使用して、スマートシークに関する情報をロギングし、クライアント
がサーバーにスマートシークコマンドを送信しないようにします。
関連項目
238 ページの「スマートシーク」
サーバーのロギング
次のイベントが、Flash Media Server の access.log に書き込まれます。
イベント
カテゴリ
説明
client-seek
stream
NetStream.seek() と、seekRaw コマンドをサーバーに送信する NetStream.inBufferSeek = true をクライア
ントが呼び出したときのシーク位置。
クライアントは、バッファー内部でのシークの場合にのみ seekRaw コマンドを送信します。クライアント
は、バッファーの外部をシークする場合には「seek」イベントを送信します。
start-transmit
stream
サーバーが startTransmit コマンドを受信しました。このコマンドは、バッファー内の容量が不足している
ため、より多くのデータを送信するようサーバーに要求します。
stop-transmit
stream
サーバーが stopTransmit コマンドを受信しました。このコマンドは、バッファー内に十分なデータがある
ことを理由に、クライアントが startTransmit イベントを送信するまではデータの送信を中断するようサー
バーに要求します。
注意:ユーザーインターフェイスでユーザーがフレームをコマ送り/コマ戻しできると、NetStream.step() が数千回呼び出さ
れることになります。パフォーマンス上の理由により、サーバーはこれらの呼び出しをログファイルに書き込みません。こ
れらの呼び出しによって、クライアントサイドの "NetStream.Step.Notify" NetStatusEvent がトリガーされます。
帯域幅の検出
ActionScript 3.0 でのネイティブな帯域幅検出機能
Flash Media Server 3.0 以降では、サーバーからクライアントへのネイティブな帯域幅検出機能をサポートしています。帯
域幅検出を開始するには、クライアントがサーバーに接続した後に、NetConnection.call("checkBandwidth", null) を呼び出し
ます。サーバーはデータブロックをクライアントに送信し、クライアントからの戻り値を待機します。サーバーサイドコー
ドを記述する必要はありません。
注意:この例は、rootinstall/documentation/samples/bandwidthcheck/Bandwidth.as サンプルに基づいています。
Application.xml ファイルでの帯域幅検出の有効化
❖ 帯域幅検出が Application.xml ファイルで有効になっていることを確認します。
最終更新日 2011/10/10
159
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
<BandwidthDetection enabled="true">
<MaxRate>-1</MaxRate>
<DataSize>16384</DataSize>
<MaxWait>2</MaxWait>
</BandwidthDetection>
帯域幅検出は、デフォルトでは有効になっています。帯域幅検出の有効化と無効化に加えて、サーバーがクライアントに
送信するデータブロックのサイズ、データを送信するレート、データブロック間にサーバーが待機する時間を設定するこ
とができます。
Application.xml ファイルは、アプリケーションレベルまたは仮想ホストレベルで編集することができます。単一アプ
リケーションの設定を参照してください。
クライアントのイベントハンドラークラスの記述
❖ イベントを処理し、サーバーの帯域幅検出機能を呼び出すための ActionScript 3.0 クラスを作成します。このクラスで
は、onBWCheck 関数と onBWDone 関数を実装する必要があります。
class Client {
public function onBWCheck(... rest):Number {
return 0;
}
public function onBWDone(... rest):void {
var bandwidthTotal:Number;
if (rest.length > 0){
bandwidthTotal = rest[0];
// This code runs
// when the bandwidth check is complete.
trace("bandwidth = " + bandwidthTotal + " Kbps.");
}
}
}
onBWCheck() 関数は、ネイティブな帯域幅検出で必要となります。この関数は、引数として ...rest を使用します。値が 0
であった場合でも、クライアントがデータを受信したことをサーバーに通知するため、この関数は必ず値を返します。
onBWCheck() は複数回呼び出すことができます。
帯域幅の測定を終了すると、サーバーは onBWDone() 関数を呼び出します。この関数は 4 つの引数を使用します。1 番目
の引数は、測定した帯域幅です (Kbps 単位 )。2 番目および 3 番目の引数は使用しません。4 番目の引数は、ミリ秒単位
の待ち時間です。
メインクラスの記述
1 ActionScript 3.0 のメインクラスを作成し、任意のパッケージとクラス名を指定します。
package {
import
import
import
import
flash.display.Sprite;
flash.net.NetConnection;
flash.events.NetStatusEvent;
flash.events.AsyncErrorEvent;
public class Bandwidth extends Sprite
{
}
}
例の Bandwidth.as ファイルのように、メインクラスとクライアントクラスは同じファイル内に作成できます。
2 メインクラスのコンストラクター内で、NetConnection オブジェクトを作成し、NetConnection.client プロパティにクラ
イアントクラスのインスタンスを設定して、サーバーに接続します。
最終更新日 2011/10/10
160
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
private var nc:NetConnection;
public function Bandwidth()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
nc.client = new Client();
nc.connect("rtmp://localhost/bandwidthcheck");
}
3 netStatus イベントハンドラー内で、正しく接続された場合に NetConnection.call() を呼び出します。このメソッドには、
実行するコマンドとして checkBandwidth を指定し、応答オブジェクトに null を指定します。
public function netStatusHandler(event:NetStatusEvent):void
{
trace(event.info.code);
switch (event.info.code)
{
case "NetConnection.Connect.Success":
// Calls native bandwidth detection code on the server.
// You don't need to write any server-side code.
nc.call("checkBandwidth", null);
break;
}
}
注意:checkBandwidth() メソッドは、サーバー上の Client クラスに属します。
サンプルの実行
❖ Flash または Flash Builder からメインクラスをテストします。クライアントの帯域幅を示す Flash Builder の出力を次
に示します。
[SWF] C:\samples\Bandwidth\bin\Bandwidth-debug.swf - 2,137 bytes after decompression
The connection was made successfully
Bandwidth from server to client is 17287 Kpbs
この例では、Client クラスは帯域幅の値を表示しています。実際のクライアントでは、クライアントへのストリーミン
グの際にクライアントの帯域幅に応じてビデオを選択するなど、何らかの処理を実行することができます。
ActionScript 2.0 でのネイティブな帯域幅検出機能
ActionScript 2.0 からネイティブな帯域幅検出機能を使用することができます。ActionScript 3.0 の場合と同様に、
onBWCheck() と onBWDone() という名前の関数を定義します。クライアントがサーバーに接続すると、
NetConnection.call("checkBandwidth") を呼び出します。
注意:この例では、rootinstall/documentation/samples/bandwidthcheck/BandwidthAS2.fla サンプルを使用します。
1 サーバーで、rootinstall/applications/bandwidthcheck フォルダーを作成します。
2 次のいずれかの操作を行い、ネイティブな帯域幅検出が有効になっていることを確認します。
• rootinstall/conf/_defaultRoot_/_defaultVHost_/Application.xml ファイルを開き、<BandwidthDetection
enabled="true"> となっていることを確認します。
•
次のコードで Application.xml を作成し、rootinstall/applications/bandwidthcheck フォルダーにコピーします。
最終更新日 2011/10/10
161
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
<Application>
<Client>
<BandwidthDetection enabled="true">
</BandwidthDetection>
</Client>
</Application>
3 新しい ActionScript 2.0 ファイルを作成するために、Flash Professional で、ファイル/新規/ ActionScript 2.0 を選択
します。
4 アクションパネルを開き、フレーム 1 に次のコードを貼り付けます。
nc = new NetConnection();
nc.onStatus = function(info){
trace(info.code);
if(info.code == "NetConnection.Connect.Success"){
checkBandwidth();
}
}
nc.onBWCheck = function(dataChunk){
return 0;
}
nc.onBWDone = function(bandwidth){
trace("Bandwidth from server to client is: " + bandwidth + " Kbps");
}
function checkBandwidth(){
nc.call("checkBandwidth");
}
nc.connect("rtmp://localhost/bandwidthcheck");
5 制御/ムービープレビューを選択します。onStatus メッセージと帯域幅の測定は、出力パネルにトレースされます。
サーバーサイドスクリプトからのネイティブな帯域幅検出の開始
サーバーサイドスクリプトからネイティブな帯域幅検出を開始することができます。この場合、サーバーサイドコードが
サーバー上のネイティブな checkBandwidth() 関数を呼び出します。
application.onConnect = function (clientObj){
this.acceptConnection(clientObj);
clientObj.checkBandwidth();
}
サーバーから帯域幅検出を開始している場合、クライアントから checkBandwidth() を呼び出さないでください。
アドビ システムズ社が VOD アプリケーションに提供している main.asc サーバーサイドスクリプトが checkBandwidth 関数
を呼び出します。例を確認するには、rootinstall/samples/applications/vod/main.asc を開きます。
サーバーサイドスクリプトベースの帯域幅検出
ネイティブな帯域幅検出を無効にして、checkBandwidth 関数を定義するサーバーサイドスクリプトを使用することができま
す。例えば、サーバーサイドスクリプトを使用して帯域幅検出を実行する従来のアプリケーションがある場合、ネイティブ
な帯域幅検出を無効にします。ネイティブな帯域幅検出は、アプリケーションレベルまたは仮想ホストレベルで無効にでき
ます。
最終更新日 2011/10/10
162
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
スクリプトベースの帯域幅検出は、ネイティブな帯域幅検出ほど信頼性は高くありません。エッジサーバーを使用している
場合、ネイティブな帯域幅検出は、オリジンサーバーの負荷を減らすために最も外側のエッジサーバーで実行されます。ス
クリプトベースの帯域幅検出によって、エッジサーバーからクライアントに対してではなく、オリジンサーバーからクライ
アントに対する帯域幅が決定されます。オリジンサーバーとエッジサーバーとの間に遅延が存在すると、帯域幅の計算に影
響が出る場合があります。
オリジンサーバーとエッジサーバーとの間の遅延によって、帯域幅の測定に影響が出る場合があります。
A. オリジンサーバー B. エッジサーバー C. クライアント
ネイティブな帯域幅検出をアプリケーションレベルで無効にするには:
1 テキストエディターを開いて新しいファイルを作成し、Application.xml という名前を付けて
rootinstall/applications/applicationname フォルダーに保存します。
2 次の XML をファイルにコピーします。
<Application>
<Client>
<BandwidthDetection enabled="false">
</BandwidthDetection>
</Client>
</Application>
3 ファイルを保存します。サーバーを再起動する必要はありません。
ネイティブな帯域幅検出を仮想ホストレベルで無効にするには:
1 rootinstall¥conf¥_defaultRoot_¥_defaultVHost_¥Application.xml ファイルをテキストエディターで開きます。
注意:このパスは、デフォルトの仮想ホストのパスです。Application.xml ファイルは、任意の仮想ホスト用に編集する
ことができます。
2 BandwidthDetection タグを探し、以下のように、enabled 属性を false に設定します。
<Application>
...
<Client>
...
<BandwidthDetection enabled="false">
</BandwidthDetection>
...
</Client>
...
</Application>
3 ファイルを保存します。サーバーまたは仮想ホストを再起動します。
ストリームの長さの検出
ストリームの長さの検出について
サーバーサイドの Stream.length() メソッドを呼び出して、オーディオストリームまたはビデオストリームの長さを秒単位で
取得します。この長さは Flash Media Server によって測定されるものであり、onMetaData によって返される長さ(これは
ユーザーやツールによって設定されます)とは異なります。
ストリーム名を Stream.length() メソッドに渡します。アプリケーションインスタンスからの相対 URI に仮想ストリーム名ま
たはストリーム名を渡すことができます。
最終更新日 2011/10/10
163
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
例えば、次のコードでは、アプリケーションの streams/_definst_ フォルダーに格納されているストリームの長さを取得し
ます。
// for
length
// for
length
// for
length
an FLV file
= Stream.length("parade");
an MP3 file
= Stream.length("mp3:parade.mp3");
an MP4 file
= Stream.length("mp4:parade.mp4");
ストリームの長さの取得
この例では、サーバーサイド ActionScript を使用してストリームの長さを取得しています。
注意:StreamLength サンプル、main.asc(サーバーサイド ActionScript)および StreamLength.as(ActionScript 3.0)
を使用します。サンプルを実行するには、117 ページの「アプリケーションのデプロイメント」を参照してください。
認証コードを書く
クライアントが、サーバーに格納されているストリームの長さを取得する必要がある場合があります。例えば、ユーザーが
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 を作成します。
最終更新日 2011/10/10
164
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
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";
}
最終更新日 2011/10/10
165
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ストリーミングメディアアプリケーションの開発
クライアントのイベントハンドラークラスの記述
❖ 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");
}
}
最終更新日 2011/10/10
166
167
第 4 章:ビデオの操作
Adobe Flash Media Server は、オーディオおよびビデオのライブコンテンツを、Flash Player、AIR および Flash Lite ク
ライアントにブロードキャストできます。ライブコンテンツのキャプチャとエンコードを行い、Flash Media Server にスト
リーミングするには、Adobe Media Live Encoder を使用するか、カスタムの Flash Player または AIR アプリケーションを
作成します。
ライブイベントをリアルタイムでキャプチャし、多数の聴衆にストリーミング送信したり、ライブのオーディオとビデオを
含むソーシャルメディアアプリケーションを作成したりすることができます。例えば、Adobe® Acrobat® Connect™ Pro
は、Flash Media Server を使用してライブのオーディオとビデオのキャプチャおよびブロードキャストを行う Web 会議ア
プリケーションです。
ライブビデオのキャプチャ
ライブビデオをキャプチャするための Flash Media Encoder の使用
Flash Media Live Encoder は、ライブビデオのキャプチャ、エンコードおよび Flash Media Server へのストリーミングを
行うフリーのアプリケーションです。デフォルトでは、Flash Media Live Encoder はビデオを rtmp://localhost/live のラ
イブサービスにストリーミングするように設定されています。
Flash Media Server は、ライブサービスからストリーミング再生が可能なサンプルのビデオ Player と共にインストールさ
れます。ビデオ Player は、rootinstall¥samples¥videoPlayer フォルダーにインストールされます。
サンプルビデオ Player は、Open Source Media Framework に基づいて構築された Strobe Media Playback をベースにし
ています。詳細については、osmf.org を参照してください。
Flash Media Live Encoder の詳細については、www.adobe.com/jp/products/flashmediaserver/flashmediaencoder/ を
参照してください。
関連項目
20 ページの「ライブメディアのストリーミング(RTMP)」
例:カスタムビデオキャプチャアプリケーション
ActionScript 3.0 のアプリケーション構築手順は次のとおりです。
•
ビデオをキャプチャしエンコードします。
•
キャプチャした状態でビデオを表示します。
•
ビデオをクライアントから Flash Media Server にストリーミングします。
•
逆にビデオを Flash Media Server からクライアントにストリーミングします。
•
サーバーからストリーミングされたビデオを表示します。
注意:このコードをテストするには、サーバーに rootinstall/applications/publishlive フォルダーを作成します。次に、
rootinstall/documentation/samples/publishlive/PublishLive.swf ファイルを開いてアプリケーションに接続します。
1. 新規 .as ファイルで、NetConnection オブジェクトを作成します。サーバーに接続するには、アプリケーションの URI
を NetConnection.connect() メソッドに渡します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
var
var
var
var
var
var
var
nc:NetConnection;
ns:NetStream;
nsPlayer:NetStream;
vid:Video;
vidPlayer:Video;
cam:Camera;
mic:Microphone;
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://localhost/publishlive");
2. NetStatusEvent イベントを処理する関数を定義します。クライアントがサーバーへの接続に成功すると、コードがアプリ
ケーションを実行する関数を呼び出します。
function onNetStatus(event:NetStatusEvent):void{
trace(event.info.code);
if(event.info.code == "NetConnection.Connect.Success"){
publishCamera();
displayPublishingVideo();
displayPlaybackVideo();
}
}
3. カメラでキャプチャしたビデオとマイクでキャプチャしたオーディオをパブリッシュします。最初に、カメラおよびマイ
クのデータのリファレンスを取得します。サーバーに作成した NetConnection に NetStream オブジェクトを作成します。
次に、NetStream.attachCamera() を呼び出して、キャプチャしたビデオを NetStream オブジェクトに割り当てます。
NetStream.attachAudio() を呼び出して、ライブオーディオを割り当てます。最後に、NetStream.publish("streamName", "live")
を呼び出して、オーディオとビデオをサーバーに送信します。
function publishCamera() {
cam = Camera.getCamera();
mic = Microphone.getMicrophone();
ns = new NetStream(nc);
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish("myCamera", "live");
}
4. クライアントがサーバーにストリーミングしているビデオを表示します。Video オブジェクトを作成します。Video オブ
ジェクトは表示オブジェクトです。Video.attachCamera(cam) を呼び出して、カメラのビデオフィードをビデオオブジェクト
に割り当てます。addChild(vid) を呼び出して、Video オブジェクトを表示リストに追加し、Flash Player に表示されるよう
にします。
function displayPublishingVideo():void {
vid = new Video();
vid.x = 10;
vid.y = 10;
vid.attachCamera(cam);
addChild(vid);
}
5. サーバーがクライアントにストリーミングしているビデオを表示します。クライアントがストリームを作成してサーバー
に送信する処理は「パブリッシュ」と呼ばれます。一方、クライアントがストリームを再生する処理は「サブスクライブ」
と呼ばれます。この例では、クライアントはストリームをパブリッシュし、ストリームにサブスクライブします。クライア
ントでは、送信(パブリッシュ)ストリームと受信(サブスクライブ)ストリームの 2 つのストリームを作成する必要があ
ります。この例では、送信ストリームは ns で、受信ストリームは nsPlayer です。同じ NetConnection オブジェクトを両方
のストリームに使用することができます。
サーバーから返されたオーディオとビデオを再生するには、NetStream.play() を呼び出し、パブリッシュしたストリームの名
前を渡します。受信ビデオを再生するには、Video.attachNetStream() を呼び出します。
最終更新日 2011/10/10
168
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
function displayPlaybackVideo():void{
nsPlayer = new NetStream(nc);
nsPlayer.play("myCamera");
vidPlayer = new Video();
vidPlayer.x = cam.width + 20;
vidPlayer.y = 10;
vidPlayer.attachNetStream(nsPlayer);
addChild(vidPlayer);
}
ActionScript を使用して、再生の制御、ビデオのフルスクリーン表示、キューポイントの使用およびメタデータの使用が行
えるようにします。詳細については、http://www.adobe.com/go/learn_fms_video_jp にある『ActionScript 3.0 デベ
ロッパーズガイド』の「ビデオの操作」の章を参照してください。
この例は Flash に構築されました。Flex に構築された例を見るには、www.adobe.com/go/fms_featureexplorer にある
FMS Feature Explorer AIR アプリケーションをダウンロードします。指示に従ってサンプルアプリケーションの ZIP ファ
イルをダウンロードし、サーバーのアプリケーションフォルダーに解凍します。アプリケーションをサーバーに登録した場
合、FMS Feature Explorer で AVControl / Publish Live Video application を開きます。アプリケーションに構築された
ビューアでソースコードを表示することができます。
ライブビデオへの DVR 機能の追加
DVR サポートについて
Flash Media Server 3.5
注意:Flash Media Streaming Server は DVR 機能をサポートしていません。
DVR(デジタルビデオレコーダー)を使用すると、ビューアでライブビデオを一時停止したり、一時停止の地点から再生を
再開したりすることができます。また、ビューアではライブイベントの巻き戻し、記録されたセクションの再生およびライ
ブセクションの再検出も可能です。Flash Media Server 3.5 では、DVR 機能のサポートが追加されています。数行のコード
を記入するだけで、ビデオ Player を DVR のように動作させることができます。DVR アプリケーションの例には、即時再
生および「追いかけ」サービスがあります。
注意:FLVPlayback コンポーネントのバージョン 2.5 では、DVR をサポートしています。このコンポーネントを、Flash
Media Server ツールからダウンロードします。
動的ストリーミングでの DVR の使用
Flash Media Server 4.0、Flash Player 10.1
動的ストリーミングアプリケーションで DVR を使用するには、サーバーで絶対時間コードを有効にします。絶対時間コー
ドにより DVR 対応のマルチビットレートストリームはサーバーで同期し続けます。
エンコーダーは、絶対時間コードを使用する必要があります。Flash Media Live Encoder は、絶対時間コードをサポート
しますが、Flash Player はサポートしません。サードパーティのエンコーダーも絶対時間コードを使用します。お手持ちの
エンコーダーで絶対時間コードを有効にする方法については、エンコーダーのベンダーに問い合わせてください。
重要:ストリームは同期する必要がありますが、サーバーはストリームを同期しません。絶対時間コードは、エンコーダー
の同期されているストリームを同期し続けるのに必要なすべての情報をサーバーに必ずキャプチャーさせます。
最終更新日 2011/10/10
169
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
絶対時間コードの有効化
Application.xml 設定ファイル内の絶対時間コードをアプリケーションレベルで有効にします。有効になると、サーバー
は、着信ライブストリームには、エンコーダーの入力ソース内に含まれる SMPTE 時間信号といった絶対時刻ベースのタイ
ムスタンプがあるとみなします。デフォルト値は false です。
1 新しいテキストまたは XML ファイルを作成して、アプリケーションのフォルダー (「Application.xml」) に保存しま
す。
注意:アプリケーションレベルの Application.xml ファイルの一例として、
rootinstall/applications/vod/Application.xml をテキストエディターで開きます。
2 次を XML をファイルに追加します。
<Application>
<StreamManager>
<Live>
<AssumeAbsoluteTime>true</AssumeAbsoluteTime>
</Live>
</StreamManager>
</Application
3 ファイルを保存します。
設定ファイルの操作の詳細については、「単一アプリケーションの設定」を参照してください。
動的ストリーミングでの DVR 向けストリームのパブリッシュと記録
DVR ストリームを動的ストリーミングでパブリッシュして記録するには、appendWithGap を NetStream.publish() または
Stream.record() メソッドに渡します。ストリームを appendWithGap モードでパブリッシュまたは記録するとき、記録される
ストリームには、ストリームの停止および再開時に作成されたギャップが保持されます。append モードでは、サーバーは
ギャップを除去するため、ストリームの同期が失われる可能性があります。ギャップは、エンコーダーがオフラインになっ
てオンラインに戻るときに発生します。ギャップは、記録されたファイルの再生時にクライアントから表示可能です。
DVR ビデオのパブリッシュ、再生およびシーク
DVR ビデオ Player 用のストリームをクライアントからパブリッシュするには、次の例のように「record」 フラグまたは
「append」 フラグを使用します。
NetStream.publish("myvideo", "record")
NetStream.publish("myvideo", "append")
DVR ビデオ Player 用のストリームをサーバーからパブリッシュするには、Stream.record() を呼び出します。
Stream.record() メソッドには、ストリームの最大長とファイルサイズが指定可能な maxDuration と maxSize の 2 つの新規パ
ラメーターがあります。次のコードは、最大記録長 10 分(600 秒)およびファイルサイズ無制限でストリームをパブリッ
シュします。
Stream.record("record", 600, -1)
DVR ビデオ Player 用にパブリッシュされたストリームをクライアントが再生する場合、クライアントはライブストリーム
は再生せず、記録されたストリームを再生します。クライアントがストリームを「ライブ」で表示する場合、記録された直
後に記録ストリームを実際に表示しています。
DVR ビデオ Player 用にパブリッシュされたストリームをサブスクライブするには、次のコードを使用します。
NetStream.play("myvideo", 0, -1)
前記のコードを使用すると、イベントに遅れて参加したビューアでも、ストリームを最初から表示できます。
いつでもストリームの最初に戻るには、次のコードを呼び出します。
NetStream.seek(0)
最終更新日 2011/10/10
170
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
イベントの途中で記録を開始するには、サーバーサイド ActionScript の Stream.record() メソッドを呼び出します。このメ
ソッドを呼び出すことで、いつでも記録の開始や停止が可能になります。
(「ライブ」と見なされる)記録の使用可能な最新の部分をシークするボタンを作成するには、ストリームの再生時間(サー
バー上で記録されたデータの長さ)から NetStream.bufferTime の値を引いた位置をシークします。瞬間的な位置にできるだ
け近い位置で再生するには、bufferTime を引き算します。Flash Player は、バッファーがいっぱいになるまで再開されませ
ん。
ストリームの再生時間を計算するには、onMetaData コールバック関数にタイムスタンプを設定します。
public function onMetaData(info:Object):void{
trace("metadata:duration=" + info.duration);
duration = info.duration;
trace("stamp: " + stamp);
stamp = getTimer();
}
seek() メソッドに渡す値を計算するには、現在の再生時間を計算し、念のために bufferTime から 2 秒をさらに引きます。
private function getSeekToLiveValue():uint{
currentDuration = Number((getTimer()-stamp)/1000) + duration;
trace("currentDuration: " + currentDuration);
seekVal = (currentDuration - nsPlayer.bufferLength) - 2;
return seekVal;
}
「ライブ」をシークするには、再生 NetStream オブジェクトで getSeekToLiveValue() 関数を呼び出します。
private function onClick(event:MouseEvent):void {
switch(event.currentTarget){
case rewindBtn:
nsPlayer.seek(nsPlayer.time - 5);
break;
case seekBtn:
trace("seekToEndValue " + getSeekToEndValue());
nsPlayer.seek(getSeekToLiveValue());
break;
}
}
注意:上述のコードは、サーバー上の rootinstall/documentation/samples/dvr フォルダー内にある DVR サンプルにあ
ります。
Flash Media Live Encoder を使用した DVR 再生用ビデオのキャプチャ
Flash Media Live Encoder 3 を使用して、DVR 再生用のビデオをキャプチャすることができます。Flash Media Live
Encoder の以前のバージョンは、サーバーへの記録をサポートしていません。詳細については、
www.adobe.com/jp/products/flashmediaserver/flashmediaencoder/ を参照してください。
例:カスタムキャプチャ、パブリッシュおよび DVR 再生
この例では、クライアントアプリケーションは以下の動作を行います。
•
ビデオをキャプチャしエンコードします。
•
キャプチャした状態でビデオを表示します。
•
ビデオをクライアントから Flash Media Server にストリーミングします。
•
逆にビデオを Flash Media Server からクライアントにストリーミングします。
•
サーバーからストリーミングされたビデオを、ライブビデオの巻き戻しと一時停止が可能な Player に表示します。
最終更新日 2011/10/10
171
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
注意:このコードをテストするには、サーバーに RootInstall/applications/dvr フォルダーを作成します。次に、
RootInstall/documentation/samples/dvr/DVR.swf ファイルを開いてアプリケーションに接続します。
1 Flash Media Server に、RootInstall/applications/dvr フォルダーを作成します。
2 Flash で、ActionScript ファイルを作成し、DVR.as という名前で保存します。
3 次のコードを Script ウィンドウにコピーアンドペーストします。
package {
import flash.display.MovieClip;
import flash.utils.getTimer;
import flash.net.NetConnection;
import flash.events.*;
import flash.net.NetStream;
import flash.media.Video;
import flash.media.Camera;
import flash.media.Microphone;
import fl.controls.Button;
public class DVR extends MovieClip
{
private var nc:NetConnection;
private var ns:NetStream;
private var nsPlayer:NetStream;
private var vid:Video;
private var vidPlayer:Video;
private var cam:Camera;
private var mic:Microphone;
private var pauseBtn:Button;
private var rewindBtn:Button;
private var playBtn:Button;
private var seekBtn:Button;
private var dvrFlag:Boolean;
private var stamp:uint;
private var duration:uint;
private var currentDuration:uint;
private var seekVal;uint;
public function DVR()
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://localhost/dvr");
setupButtons();
dvrFlag = true;
}
private function onNetStatus(event:NetStatusEvent):void{
trace(event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
publishCamera();
displayPublishingVideo();
displayPlaybackVideo();
break;
case "NetStream.Play.Start":
trace("dvrFlag " + dvrFlag);
if(dvrFlag){
nsPlayer.seek(getSeekToLiveValue());
dvrFlag = false;
}
break;
}
}
private function onAsyncError(event:AsyncErrorEvent):void{
最終更新日 2011/10/10
172
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
trace(event.text);
}
private function onClick(event:MouseEvent):void {
switch(event.currentTarget){
case rewindBtn:
nsPlayer.seek(nsPlayer.time - 5);
break;
case pauseBtn:
nsPlayer.pause();
break;
case playBtn:
nsPlayer.resume();
break;
case seekBtn:
nsPlayer.seek(getSeekToLiveValue());
break;
}
}
private function publishCamera() {
cam = Camera.getCamera();
mic = Microphone.getMicrophone();
ns = new NetStream(nc);
ns.client = this;
ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish("video", "record");
}
private function displayPublishingVideo():void {
vid = new Video(cam.width, cam.height);
vid.x = 10;
vid.y = 10;
vid.attachCamera(cam);
addChild(vid);
}
private function displayPlaybackVideo():void{
nsPlayer = new NetStream(nc);
nsPlayer.client = this;
nsPlayer.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nsPlayer.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
nsPlayer.play("video", 0, -1);
vidPlayer = new Video(cam.width, cam.height);
vidPlayer.x = cam.width + 20;
vidPlayer.y = 10;
vidPlayer.attachNetStream(nsPlayer);
addChild(vidPlayer);
}
private function getSeekToLiveValue():uint{
currentDuration = Number((getTimer()-stamp)/1000) + duration;
trace("currentDuration: " + currentDuration);
seekVal = (currentDuration - nsPlayer.bufferTime) - 2;
trace("seekVal: " + seekVal);
return seekVal;
}
private function setupButtons():void {
rewindBtn = new Button();
pauseBtn = new Button();
playBtn = new Button();
seekBtn = new Button();
rewindBtn.width = 52;
最終更新日 2011/10/10
173
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
pauseBtn.width = 52;
playBtn.width = 52;
seekBtn.width = 100;
rewindBtn.move(180,150);
pauseBtn.move(235,150);
playBtn.move(290,150);
seekBtn.move(345, 150);
rewindBtn.label = "Rew 5s";
pauseBtn.label = "Pause";
playBtn.label = "Play";
seekBtn.label = "Seek to Live";
rewindBtn.addEventListener(MouseEvent.CLICK, onClick);
pauseBtn.addEventListener(MouseEvent.CLICK, onClick);
playBtn.addEventListener(MouseEvent.CLICK, onClick);
seekBtn.addEventListener(MouseEvent.CLICK, onClick);
addChild(rewindBtn);
addChild(pauseBtn);
addChild(playBtn);
addChild(seekBtn);
}
public function onMetaData(info:Object):void {
trace("metadata:duration = " + info.duration);
stamp = getTimer();
trace("stamp: " + stamp);
duration = info.duration;
}
}
}
4 DVR.as ファイルを保存します。
5 File / New / Flash File(ActionScript 3.0)を選択し、「OK」をクリックします。
6 ファイルを DVR.as ファイルと同じフォルダーに DVR.fla という名前で保存します。
7 コンポーネントパネルを開き、Button をステージまでドラッグして削除します。
この操作により、ボタンがライブラリに追加されます。ボタンは実行時にアプリケーションに追加されます。
8 ファイル/パブリッシュ設定を選択します。「Flash」タブをクリックします。「Script Settings」をクリックし、DVR
を Document クラスとして入力します。チェックマークをクリックしてパスを検証します。
9 ファイルを保存し、Control / Test Movie を選択してアプリケーションを実行します。
記録のサイズと時間の制限
Application.xml 設定ファイルのパラメーター、サーバーサイド ActionScript および Authorization プラグインを使用し
て、記録の最大サイズと時間を制限することができます。これらの値を設定してディスクスペースの使い過ぎを防ぎます。
以下は、Application.xml ファイルのパラメーターです。
最終更新日 2011/10/10
174
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
175
ビデオの操作
XML 要素
説明
Application/StreamManager/Recording/MaxDuration
秒単位の最大記録時間。デフォルト値は -1 で、最大時間は適用さ
れません。
Application/StreamManager/Recording/MaxDurationCap
秒単位の最大記録キャップ時間。デフォルト値は -1 で、最大時間
のキャップは適用されません。
サーバーサイド Stream.record() メソッドはこの値より優先されま
せん。Authorization プラグインはこの値より優先されます。
キロバイト単位の最大記録サイズ。デフォルト値は -1 で、最大サ
Application/StreamManager/Recording/MaxSize
イズは適用されません。
キロバイト単位の最大記録キャップサイズ。デフォルト値は -1 で、
Application/StreamManager/Recording/MaxSizeCap
最大サイズのキャップは適用されません。
サーバーサイド Stream.record() メソッドはこの値より優先されま
せん。Authorization プラグインはこの値より優先されます。
Application.xml ファイルでは、最大値の設定に加え、最大キャップ値を設定することもできます。サーバーサイドスクリ
プトはこれらのキャップより優先されません。CDN はこれらのキャップを使用して、クライアントが優先されない制限を
設定することができます。
注意:Authorization プラグインは、Application.xml ファイルに設定されたすべての値より優先されます。
サーバーサイド ActionScript で値を設定するには、Stream.record() を呼び出し、maxDuration および maxSize パラメーター
の値を渡します。次のコードは記録を 5 分に制限し、(MaxSizeCap の値まで)無制限の最大ファイルサイズを設定します。
s.record("record", 300, -1);
サーバーは、MaxCapSize および MaxCapDuration を上回る記録を切り捨てます。
関連項目
233 ページの「Authorization プラグインの開発」
DVR アプリケーションのスケーリング
大規模なアプリケーションを構築するには、サーバーサイド NetConnection クラスを使用して、複数のサーバーをまとめ
てチェーン化します。このシナリオでは、クライアントは接続したサーバー上にないストリームを要求することができます。
サーバーサイド ProxyStream クラスを使用して、サーバーチェーンでストリームを探す検索メカニズムを作成します。
Vhost.xml 設定ファイルに値を設定して、ストリームを格納するディスクキャッシュを設定することができます。
XML 要素
属性
説明
VirtualHost/Proxy/CacheDir
enabled
ディスクキャッシュが有効かどうかを判断します。
useAppDir
アプリケーションでキャッシュのサブディレクトリを分割するか指
定します。
VirtualHost/Proxy/CacheDir/Path
ディスクキャッシュのルートディレクトリ。
VirtualHost/Proxy/CacheDir/MaxSize
ギガバイト単位の最大ディスクサイズ。デフォルト値は 32 です。
値が 0 の場合、ディスクキャッシュが無効になります。値が -1 の場
合、最大値は指定されません。
VirtualHost/Proxy/RequestTimeout
上流サーバーからの要求(メタデータではコンテンツなど)に対す
る応答を待つ、秒単位の最大時間。デフォルト値は 2 秒です。
サーバーに複数の仮想ホストがある場合は、仮想ホストをそれぞれのキャッシュディレクトリに指定します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
サーバーが CacheDir への書き込み中に中間またはエッジサーバーでディスクスペースを使い果たすと、ディスクへの書き込
みに失敗した各セグメントの core.xx.log に次の警告メッセージが記録されます。I/O Failed on cached stream file
C:¥Program Files¥Adobe¥Flash Media Server 3.5¥cache¥streams¥00¥proxyapp¥10.192.16.125¥C¥Program
Files¥Adobe¥Flash Media Server
3.5_361¥applications¥primaryapp¥streams¥_definst_¥sample1_1500kbps.f4v¥0000000000000000 during write: 28
No space left on device.
Logging
DVR ビデオ Player で再生したストリームは、記録されたストリームとして再生されます。これらのストリームは、すべて
記録されたストリームとして同じイベントをログファイルに記録します。
関連項目
142 ページの「動的ストリーミング」
ライブストリームへのメタデータの追加
メタデータについて
アドビ システムズ社の伝道者 Jens Loeffler の記事 「Working with metadata for live Flash video streaming」を参
照してください。
ストリーミングメディアのメタデータを使用すると、受信者は、表示しているメディアに関する情報を取得できます。メタ
データには、タイトル、著作権情報、ビデオの再生時間、または作成日など、ビデオについての情報を含めることができま
す。クライアントはメタデータを使用して、ビデオ Player の幅と高さを設定できます。
記録されたストリームでは、メタデータを提供するメディアファイルの先頭に特殊なデータメッセージが挿入されます。
Flash Media Server に接続するすべてのクライアントは、記録されたストリームの再生時にメタデータを受信します。ただ
し、クライアントは、ブロードキャスト中にライブストリームに接続すると、データキーフレームを受信できなくなります。
クライアントがライブストリームに接続するたびにクライアントにメタデータを送信するよう、Flash Media Server に指示
するコードを記述できます。サーバーに接続しているクライアントは、遅れて接続した場合でも、ライブビデオを再生する
とメタデータを受信します。
また、この機能を使用すると、ブロードキャスト中の任意の時点で、ライブストリームにメタデータを追加することもでき
ます。
注意:DVR アプリケーションは記録されたストリームを使用するので、データキーフレームを使用してメタデータをクラ
イアントにプッシュする必要はありません。DVR アプリケーション(およびすべての記録されたビデオアプリケーション)
では、onMetaData() メソッドはストリームの先頭や、検出および一時停止などのイベント間で呼び出されます。
ライブストリームへのメタデータの送信
クライアントがライブストリームに接続したときにクライアントにメタデータを送信するには、特別なコマンドである
@setDataFrame をクライアントサイドの NetStream.send() メソッドまたはサーバーサイドの Stream.send() メソッドに渡しま
す。このコマンドの送信元がクライアントとサーバーのどちらであるかにかかわらず、send() メソッドからのメッセージを
処理する場合と同じように、クライアント上のデータを処理します。ハンドラー名を send() メソッドに渡し、データを処理
する関数をそのハンドラー名で定義します。
クライアントからコマンドを送信するには、NetStream.send() メソッドを呼び出します。
NetStream.send(@setDataFrame, onMetaData [,metadata ])
最終更新日 2011/10/10
176
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
onMetaData パラメーターは、受信したメタデータを処理する関数を指定します。複数のデータキーフレームを作成するこ
とができます。データキーフレームはそれぞれ固有のハンドラーを使用する必要があります(例えば onMetaData1、
onMetaData2 など)。
metadata パラメーターには、ストリーム内に設定するメタデータを含むオブジェクトまたは配列(またはサブクラス)を指
定します。メタデータの各アイテムは名前と値がセットになったプロパティであり、metadata オブジェクト内に設定されま
す。任意の名前を使用することができますが、分かりやすいメタデータの設定のため、アドビ システムズ社では一般的な名
前を使用することをお勧めします。
メタデータをクライアントサイドスクリプトでライブストリームに追加するには、次のコードを使用します。
var metaData:Object = new Object();
metaData.title = "myStream";
metaData.width = 400;
metaData.height = 200;
ns.send("@setDataFrame", "onMetaData", metaData);
メタデータをクライアントサイドスクリプトでライブストリームから消去するには、次のコードを使用します。
ns.send("@clearDataFrame", "onMetaData");
メタデータをサーバーサイドスクリプトでライブストリームに追加するには、次のコードを使用します。
s = Stream.get("myStream");
metaData = new Object();
metaData.title = "myStream";
metaData.width = 400;
metaData.height = 200;
s.send("@setDataFrame", "onMetaData", metaData);
メタデータをサーバーサイドスクリプトでライブストリームから消去するには、次のコードを使用します。
s.send("@clearDataFrame", "onMetaData");
メタデータの取得
メタデータは、クライアントサイドのコードだけから取得できます。サーバーサイドのコードからは取得できません。サー
バーから @setDataFrame メッセージを送信する場合でも、メタデータはクライアントサイドのコードを使用して取得してく
ださい。
メタデータを取得するには、NetStream.client プロパティをオブジェクトに割り当てます。次のように、そのオブジェクトで
onMetaData 関数を定義します。
netstream.client = this;
function onMetaData(info:Object):void {
var key:String;
for (key in info) {
trace(key + ": " + info[key]);
}
}
この関数は、サーバーにより追加されたメタデータと、@setDataFrame とともに送信されたメタデータを出力します。
@setDataFrame メッセージとともに送信するすべてのメッセージに加えて、サーバーにメタデータを追加させるには、次の
ように、"record" フラグまたは "append" フラグを使用してビデオをパブリッシュします。
netstream.publish("mycamera", "record");
netstream.publish("mycamera", "append");
注意:"live" フラグを使用して、または type パラメーターなしでライブビデオをサーバーにパブリッシュすると、サーバーは
ビデオを記録しません。この場合は、サーバーは標準のメタデータをファイルに追加しません。
最終更新日 2011/10/10
177
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
ストリームを再生するには、NetStream.play() を呼び出して start パラメーターの値を渡し、ストリームが記録されたライブ
ストリームであることを示します。
netstream.play("mycamera", 0); // Plays a recorded live stream.
start パラメーターとして 0 以上の値を渡すと、クライアントは、記録されたストリームを、所定の時刻から再生します。記
録されたストリームには、サーバーによって追加される標準のメタデータが含まれます。サーバーが記録されたストリーム
を見つけられない場合は、play() メソッドを無視します。
start パラメーターとして -2 または -1 を渡すと、クライアントはライブビデオを再生し、標準のメタデータを受け取りませ
ん。
netstream.play("mycamera", -2); // Looks for a live stream first.
netstream.play("mycamera", -1); // Plays a live stream.
例:ライブビデオへのメタデータの追加
この例では、クライアントアプリケーションは以下の動作を行います。
•
ビデオをキャプチャしエンコードします。
•
キャプチャした状態でビデオを表示します。
•
ビデオをクライアントから Flash Media Server にストリーミングします。
•
メタデータを、ライブストリームを再生するときクライアントに送信するサーバーに送信します。
•
ボタンを押すと、逆にビデオを Flash Media Server からクライアントにストリーミングします。
•
サーバーからストリーミングされたビデオを表示します。
• TextArea コンポーネントでサーバーから送信されたメタデータを表示します。
注意:このコードをテストするには、サーバーに RootInstall/applications/publishlive フォルダーを作成します。次に、
RootInstall/documentation/samples/metadata/Metadata.swf ファイルを開いてアプリケーションに接続します。
1 Flash Media Server に、RootInstall/applications/publishlive フォルダーを作成します。
2 Flash で、ActionScript ファイルを作成して Metadata.as という名前で保存します。
3 次のコードを Script ウィンドウにコピーアンドペーストします。
package {
import flash.display.MovieClip;
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.events.MouseEvent;
import flash.events.AsyncErrorEvent;
import flash.net.NetStream;
import flash.media.Video;
import flash.media.Camera;
import flash.media.Microphone;
import fl.controls.Button;
import fl.controls.Label;
import fl.controls.TextArea;
public class Metadata extends MovieClip {
private var nc:NetConnection;
private var ns:NetStream;
private var nsPlayer:NetStream;
private var vid:Video;
private var vidPlayer:Video;
private var cam:Camera;
private var mic:Microphone;
private var clearBtn:Button;
private var startPlaybackBtn:Button;
最終更新日 2011/10/10
178
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
private
private
private
private
var
var
var
var
outgoingLbl:Label;
incomingLbl:Label;
myMetadata:Object;
outputWindow:TextArea;
public function Metadata(){
setupUI();
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect("rtmp://localhost/publishlive");
}
/*
* Clear the MetaData associated with the stream
*/
private function clearHandler(event:MouseEvent):void {
if (ns){
trace("Clearing MetaData");
ns.send("@clearDataFrame", "onMetaData");
}
}
private function startHandler(event:MouseEvent):void {
displayPlaybackVideo();
}
private function onNetStatus(event:NetStatusEvent):void {
trace(event.target + ": " + event.info.code);
switch (event.info.code)
{
case "NetConnection.Connect.Success":
publishCamera();
displayPublishingVideo();
break;
case "NetStream.Publish.Start":
sendMetadata();
break;
}
}
private function asyncErrorHandler(event:AsyncErrorEvent):void {
trace(event.text);
}
private function sendMetadata():void {
trace("sendMetaData() called")
myMetadata = new Object();
myMetadata.customProp = "Welcome to the Live feed of YOUR LIFE, already in progress.";
ns.send("@setDataFrame", "onMetaData", myMetadata);
}
private function publishCamera():void {
cam = Camera.getCamera();
mic = Microphone.getMicrophone();
ns = new NetStream(nc);
ns.client = this;
ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish("myCamera", "record");
}
private function displayPublishingVideo():void {
vid = new Video(cam.width, cam.height);
最終更新日 2011/10/10
179
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
vid.x = 10;
vid.y = 10;
vid.attachCamera(cam);
addChild(vid);
}
private function displayPlaybackVideo():void {
nsPlayer = new NetStream(nc);
nsPlayer.client = this;
nsPlayer.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nsPlayer.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
nsPlayer.play("myCamera", 0);
vidPlayer = new Video(cam.width, cam.height);
vidPlayer.x = cam.width + 100;
vidPlayer.y = 10;
vidPlayer.attachNetStream(nsPlayer);
addChild(vidPlayer);
}
private function setupUI():void {
outputWindow = new TextArea();
outputWindow.move(250, 175);
outputWindow.width = 250;
outputWindow.height = 150;
outgoingLbl = new Label();
incomingLbl = new Label();
outgoingLbl.width = 150;
incomingLbl.width = 150;
outgoingLbl.text = "Publishing Stream";
incomingLbl.text = "Playback Stream";
outgoingLbl.move(30, 150);
incomingLbl.move(300, 150);
startPlaybackBtn = new Button();
startPlaybackBtn.width = 150;
startPlaybackBtn.move(250, 345)
startPlaybackBtn.label = "View Live Event";
startPlaybackBtn.addEventListener(MouseEvent.CLICK, startHandler);
clearBtn = new Button();
clearBtn.width = 100;
clearBtn.move(135,345);
clearBtn.label = "Clear Metadata";
clearBtn.addEventListener(MouseEvent.CLICK, clearHandler);
addChild(clearBtn);
addChild(outgoingLbl);
addChild(incomingLbl);
addChild(startPlaybackBtn);
addChild(outputWindow);
}
public function onMetaData(info:Object):void {
var key:String;
for (key in info){
outputWindow.appendText(key + ": " + info[key] + "\n");
}
}
}
}
4 ファイルを保存します。
最終更新日 2011/10/10
180
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
181
ビデオの操作
5 File / New / Flash File(ActionScript 3.0)を選択し、「OK」をクリックします。
6 ファイルを Metadata.as ファイルと同じフォルダーに、Metadata.fla という名前で保存します。
7 コンポーネントパネルを開き、Button および TextArea コンポーネントをステージまでドラッグして削除します。
この操作により、コンポーネントがライブラリに追加されます。コンポーネントは実行時にアプリケーションに追加され
ます。
8 ファイル/パブリッシュ設定を選択します。[Flash] タブをクリックします。「Script Settings」をクリックし、
Metadata を Document クラスとして入力します。チェックマークをクリックしてパスを検証します。
9 ファイルを保存し、Control / Test Movie を選択してアプリケーションを実行します。
Flash Media Live Encoder のメタデータプロパティ
Flash Media Live Encoder は、次のメタデータプロパティと値を設定します。ユーザーがライブストリームにこれらのメ
タデータを追加する必要はありません。
メタデータのプロパティ名
データ型
説明
lastkeyframetimestamp
数値
最後にビデオのキーフレームが記録されたときのタイムスタンプ。
width
数値
ビデオの幅(( ピクセル単位)。
height
数値
ビデオの高さ(ピクセル単位)。
videodatarate
数値
ビデオのビットレート。
audiodatarate
数値
オーディオのビットレート。
framerate
数値
記録されているビデオの 1 秒あたりのフレーム数。
creationDate
文字列
ファイルの作成日。
createdby
文字列
ファイルの クリエータータイプ。
audiocodecid
数値
ファイルで使用されているオーディオコーデック ID。値は次の通りです。
0 非圧縮
1 ADPCM
2 MP3
5 Nellymoser 8 kHz モノラル
6 Nellymoser
10 HE-AAC
11 Speex
videocodecid
数値
ファイルで使用されているビデオコーデック ID。値は次の通りです。
2 Sorenson H.263
3 Screen video
4 On2 VP6
5 On2 VP6(透過情報付き)
7 H.264
audiodelay
数値
オーディオコーデックで発生する遅延(秒単位)。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
182
ビデオの操作
記録されるライブストリームのメタデータプロパティ
ストリーミング時にファイルを記録する場合、次の表に示されるメタデータが Flash Media Server によって追加されます。
サーバーにパブリッシュするときにファイルを記録するには、次のように「record」パラメーターを使用します。
ns.publish("myCamera", "record");
メタデータのプロパティ名
データ型
説明
audiocodecid
数値
ファイルで使用されているオーディオコーデック ID。値は次の通りです。
0 非圧縮
1 ADPCM
2 MP3
5 Nellymoser 8 kHz モノラル
6 Nellymoser
10 HE-AAC
11 Speex
canSeekToEnd
ブール値
最後のビデオフレームがキーフレームかどうか(キーフレームの場合は
true、それ以外は false)。
createdby
文字列
ファイルの作成者の名前。
duration
数値
ファイルの全体の長さを秒数で示します。
creationDate
文字列
ファイルの作成日。
videocodecid
数値
ファイルで使用されているビデオコーデック ID。値は次の通りです。
2 Sorenson H.263
3 Screen video
4 On2 VP6
5 On2 VP6(透過情報付き)
7 H.264
NetStream.publish() 呼び出しで「record」 フラグを使用すると、サーバーはユーザーのメタデータプロパティと標準のメタ
データプロパティとマージしようとします。両者の間にコンフリクトがあると、サーバーは標準のメタデータプロパティを
使用します。例えば、ユーザーが次のメタデータプロパティを追加するとします。
duration=5
x=200
y=300
サーバーによってビデオの記録が開始されると、duration を含む独自のメタデータプロパティのファイルへの書き込みを開
始します。記録時間が 20 秒の場合、サーバーはメタデータに duration=20 を追加します。その際、ユーザーが指定した値は
上書きされます。ただし、x=200 と y=300 はコンフリクトしていないので、これらの値はメタデータとして保存されます。
audiocodecid、videocodecid、creationdate など、サーバーが設定する他のプロパティは、そのままファイルに保存されます。
ストリームが記録されると、キーフレームから記録が始まります。また、キーフレームまたは I フレームで即座に記録が停
止します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
Flash Media Live Encoder から送信されたタイムコードの
キャプチャ
Flash Media Live Encoder は、SMPTE タイムコード、Vertical Interval Timecode(VITC)、Visual Timecode
(BITC)をストリームに埋め込み、Flash Media Server に渡すことができます。タイムコードをキャプチャするには、
OnFI メソッドを NetStream オブジェクトに実装します。詳しくは、www.adobe.com/go/learn_fms_timecode_jp を参
照してください。
RAW ファイル形式でライブビデオのパブリッシュ
Flash Media Server 3.5.3
RAW ファイル形式について
Record and Watch(RAW)ファイル形式では、メディアを、どのバージョンの Flash Player にもストリーミングされる
設定可能なブロックに記録します。RAW ファイル形式を使用して、パフォーマンスに関する問題を引き起こさずに、長い
複数のビットレートに対応する DVR ストリームを提供します。RAW ファイル形式は、H.264 ビデオ、データのみ、オー
ディオのみなどを含む Flash Media Server がサポートするすべてのストリームを記録および再生します。
RAW ファイル形式はサーバーの機能であり、どのバージョンの Flash Player も RAW ストリームをパブリッシュしたり、
再生したりできます。ただし、複数のビットレートに対応するストリームサポート(動的ストリ−ミングとも呼ばれます)
は Flash Player 10 以上を必要とします。
重要:RAW ファイル形式は Flash Media Server の内部にあります。この時点で、サードパーティのツールを使用してこれ
らのファイルを編集したり、これらのファイルを FLV 形式または MP4 形式に変換したりすることはできません。
RAW ファイル形式は、次のファイルに断片化される FLV ファイルです。
ファイル名
説明
index
セグメントファイルと、そのタイムスタンプの範囲のリストが含まれます。
context
ストリームのすべての「コンテキストメッセージ」が含まれます。
16 桁の 16 進数値
ストリームのセグメントごとに 1 つのファイルがあります。ファイルの数が、セグメントの最初のメッ
セージのストリームインデックスになります。最初のセグメント名は常に 0 です。最初のセグメントに
234 個のメッセージが含まれる場合は、次のセグメント名は EA になり、その後も同様になります。
ファイルは、名前がストリームの名前と同一のフォルダーに格納されます。ストリーム「foo」は「foo」という名前のフォ
ルダーに格納されます。「foo」フォルダーには、index、context、0000000000000000、00000000000001C3、
0000000000000386 などのファイルが含まれます。
RAW ファイル形式を使用すると、Flash Media Server は次のシナリオを処理できます。
パラメーター
値
同時 DVR ストリーム
25
各ストリームのビットレート
2 M ビット
最終更新日 2011/10/10
183
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
パラメーター
値
コーデック
H.264 および AAC
ストリームの継続時間
4 時間(x 2 M ビット = 7 GB サイズ)
クライアント数
オリジン/エッジの設定によって異なる
注意:継続時間の長い RAW ストリームによって、1 つのディレクトリに多くのファイルが作成されます。システムリソー
スによっては、ファイルシステムが、記録または再生に対応する十分な速度でディレクトリにアクセスできないことがあり
ます。
関連項目
142 ページの「動的ストリーミング」
RAW ファイルのストリーミング
注意:ActionScript 2.0 と ActionScript 3.0 は、いずれも RAW ファイル形式をサポートしています。Flash Media Live
Encoder 3.0 は RAW ファイル形式をサポートしません。
ライブストリームを RAW ストリームとして記録するには、接頭辞 raw: を NetStream.publish() 呼び出しまたは Stream.get()
呼び出しで使用します。
次のクライアントサイド ActionScript では、RAW ファイル形式を使用してライブストリームをパブリッシュします。
nc:NetConnection = new NetConnection();
nc.connect("rtmp://fms.example.com/live");
// In production code, test for a successful NetConnection here
ns:NetStream = new NetStream(nc);
ns.publish("raw:livestream", "record");
// You can use the "record" or the "append" flag.
次のサーバーサイド ActionScript は、ライブストリームを RAW ストリームとして記録します。
s = Stream.get("raw:recordedStream");
s.record();
s.play("livestream", -1, -1);
次のクライアントサイド ActionScript は RAW ストリームを再生します。
ns.play("raw:livestream", 0, -1)
Flash Media Live Encoder を使用するには、接頭辞 raw: を Stream フィールドで使用します。サーバーサイドスクリプト
を使用してストリームを記録します。サーバーサイドスクリプトは DVRCast アプリケーションで使用できます。
DVRCast アプリケーションを www.adobe.com/go/fms_tools からダウンロードします。次の例では、Flash Media Live
Encoder および DVRCast アプリケーションを使用します。
例:RAW ストリームのパブリッシュおよび再生
1 Flash Media Live Encoder を www.adobe.com/jp/products/flashmediaserver/flashmediaencoder/ からダウンロー
ドしてインストールします。
2 DVRCast アプリケーションを www.adobe.com/go/fms_tools からダウンロードし、次の操作を行います。
a パッケージを解凍します。
b dvrcast1_1¥DVRCast1.1¥adobe¥fms¥samples¥applications¥dvrcast_origin フォルダーとその内容を Flash
Media Server の rootinstall/applications フォルダーにコピーします。
最終更新日 2011/10/10
184
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
185
ビデオの操作
c そのアプリケーションがサーバーに登録されていることを確認するには、Flash Media Server Administration
Console を開きます。「View Applications」をクリックし、画面下部の「New Instance」メニューから
dvrcast_origin を選択します。
3 コンピューターにカメラを接続します。
4 Flash Media Live Encoder を開き、次の操作を行います。
a プリセットを選択します。RAW 形式は、Flash Player がサポートするすべてのコーデックをサポートしています。
b FMS URL の「Output」セクションに rtmp://localhost/dvrcast_origin と入力します。
c ストリームに raw:livestream と入力します。
d 「DVR Auto Record」を選択します。
e 「Start」をクリックします。
5 rootinstall¥applications¥dvrcast_origin¥streams¥_definst_¥livetream を参照します。このフォルダーで RAW
ファイルが生成されます。
6 再生を表示するには、次の操作を行います。
a ブラウザーで rootinstall/samples/videoPlayer/videoplayer.html を開きます。
b ストリーム URL に rtmp://localhost/dvrcast_origin/raw:livestream と入力します。
c 「VOD」を選択します。
d 「Play Stream」をクリックします。
RAW ファイルの検証とエラーメッセージの読み取り
RAW ストリームが有効であることを確認するには、フォルダーを FLVCheck ツールに渡します。たとえば、「foo」とい
う名前の RAW ストリームがフォルダー「C:¥media¥foo」にある場合は、次のコマンドを FLVCheck ツールに渡します。
flvcheck -f C:\media\foo -v -w
次のエラーが FLVCheck ツールバージョン 2.0 によって報告され、ログファイルに書き込まれます。
コード
エラー
レベル
メッセージ
-32
インデックスまたはコンテキストファイルが見つからない/
破損している
エラー
Index or Contexts file missing or corrupted.(インデック
RAW ファイルのインデックスのバージョンが FMS のバー
エラー
-33
スまたはコンテキストファイルが見つからないか、破損して
います。)
ジョンと一致しない
Index File Version %x Not Supported. FMS Requires
Version %x.(インデックスファイルバージョン %x はサ
ポートされていません。FMS にはバージョン %x が必要で
す。)
-34
セグメントファイルが見つからないか、破損している
エラー
Failed read in segment file %s. File missing or
corrupted.(セグメントファイル %s で読み取りに失敗しま
した。ファイルが見つからないか、破損しています。
)
-35
セグメントファイルのメッセージが切り捨てられている
エラー
-36
メッセージタイプが間違っている
エラー
Truncated message in segment file %s.(セグメントファ
イル %s でメッセージが切り捨てられています。)
Unrecognized message type in segment file %s.(セグ
メントファイル %s に認識されないメッセージタイプがあり
ます。)
-37
メッセージのバックタグが長さに一致しない
エラー
Invalid message footer in segment file %s.(セグメント
ファイル %s に無効なメッセージフッターがあります。)
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
186
ビデオの操作
コード
エラー
レベル
メッセージ
-38
セグメントデータがセグメントの範囲に一致しない
エラー
Segment file %s does not match index file.(セグメント
ファイル %s がインデックスファイルに一致しません。)
-119
コンテキストファイルに onMetadata メッセージが含まれな
警告
Missing FLV metadata.(FLV メタデータが見つかりませ
-126
い(また、少なくとも 1 つのセグメントファイルがある)
ん。)
1 つのメッセージから次のメッセージへの間にタイムスタンプ 警告
Found backward timestamp in segment file %s.(セグ
メントファイル %s で過去のタイムスタンプが検出されまし
が戻る
た。)
サーバー間のマルチポイントパブリッシュ
マルチポイントパブリッシュについて
マルチポイントパブリッシュを利用することによって、クライアントからサーバーへの 1 つの接続のみで、クライアントか
ら複数のサーバーにパブリッシュすることができます。この機能によって、サーバーや受信者が地理的に離れた場所にして
いたとしても、大規模なライブブロードキャスト用のアプリケーションを構築することができます。
A
B
C
D
マルチポイントパブリッシュを使用した、地理的な境界を超えたサーバーからサーバーへのコンテンツのパブリッシュ
A. ライブビデオ B. サーバー 1(ニューヨーク) C. サーバー 2(シカゴ)とサーバー 3(ロサンゼルス) D. ユーザー
この図で示されているアプリケーションの流れは次のようになります。
1 クライアントは、ニューヨークにあるサーバー 1 のアプリケーションに接続し、NetStream.publish() を呼び出してライブ
ストリームをパブリッシュします。このクライアントはカスタムの Flash Player、AIR アプリケーションまたは Flash
Media Live Encoder などです。
2 サーバー 1 のサーバーサイドスクリプトは、パブリッシュされたストリームの名前で application.onPublish() イベントを
受信します。
3 application.onPublish() ハンドラーは NetStream オブジェクトを作成し、NetStream.publish() を呼び出してライブスト
リームをサーバー 2(シカゴ)とサーバー 3(ロサンゼルス)に再パブリッシュします。
4 サーバー 2 とサーバー 3 に接続している受信者は、同一のライブストリームを受信します。
5 クライアントがパブリッシュを停止すると、アプリケーションは application.onUnpublish() イベントを受信します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
例:マルチポイントパブリッシュ
この例では、クライアントはストリームをキャプチャおよびエンコードして、サーバーにパブリッシュします。Flash
Media Live Encoder を同じ目的で使用することもできます。
注意:このコードをテストするには、サーバーに RootInstall/applications/livestreams フォルダーを作成します。
Administration Console を開いて、ライブストリームアプリケーションのインスタンスを作成します。Live Logs をクリッ
クして、アプリケーションの実行時にサーバーサイド trace() ステートメントを参照します。
RootInstall/documentation/samples/livestreams/LiveStreams.swf ファイルを開いてアプリケーションに接続します。
1 クライアントサイドスクリプトでは、NetStream.publish() メソッドを呼び出してライブストリームをパブリッシュしま
す。
ns.publish("localnews", "live");
注意:Flash Media Live Encoder をパブリッシュクライアントとして使用するには、FMS URL
rtmp://localhost/livestreams と Stream localnews を入力してください。
2 サーバーサイド main.asc ファイルで、application.onPublish() イベントハンドラーを定義します。このハンドラーは、ク
ライアントからパブリッシュされたストリーム名の受諾、リモートサーバーへの接続およびストリームのリモートサー
バーへの再パブリッシュを行います(この例では、リムーブサーバーは同じアプリケーションのもう 1 つのインスタンス
です)。
// Called when the client publishes
application.onPublish = function(client, myStream) {
trace(myStream.name + " is publishing into application " + application.name);
// This is an example of using the multi-point publish feature to republish
// streams to another application instance on the local server.
if (application.name == "livestreams/_definst_"){
trace("Republishing the stream into livestreams/anotherinstance");
nc = new NetConnection();
nc.connect( "rtmp://localhost/livestreams/anotherinstance" );
ns = new NetStream(nc);
// called when the server NetStream object has a status
ns.onStatus = function(info) {
trace("Stream Status: " + info.code)
if (info.code == "NetStream.Publish.Start") {
trace("The stream is now publishing");
}
}
ns.setBufferTime(2);
ns.attach(myStream);
ns.publish( myStream.name, "live" );
}
}
NetStream.publish() を呼び出すことによって、自分のサーバーからリモートサーバーにストリームをパブリッシュしま
す。
3 main.asc ファイルでは、自分のサーバーからリモートサーバーにパブリッシュするために使用している NetStream オ
ブジェクトで発生したイベントを処理します。
ns.onStatus = function(info) {
trace("Stream Status: " + info.code)
if (info.code == "NetStream.Publish.Start") {
trace("The stream is now publishing");
}
}
最終更新日 2011/10/10
187
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ビデオの操作
サーバーサイド NetStream.publish() メソッドは、NetStatus イベントを NetStream.Publish.Start コードでトリガーします。
これは、クライアントサイド NetStream.publish() メソッドと同様の動作です。
4 クライアントがパブリッシュを停止したときの処理を定義します。
application.onUnpublish = function( client, myStream ) {
trace(myStream.name + " is unpublishing" );
}
最終更新日 2011/10/10
188
189
第 5 章:ピアアシストネットワーキングアプリ
ケーションの構築
Real-Time Media Flow Protocol (RTMFP)
Flash Player 10、AIR 1.5、Flash Media Server 3.5
Flash Player 10 および AIR 1.5 は、Real-Time Media Flow Protocol(RTMFP)をサポートしています。RTMFP は、
User Datagram Protocol(UDP)上に構築されています。RTMP は、Transmission Control Protocol(TCP)上に構築
されています。UDP では、TCP よりも遅延が小さくなります。また、エンドツーエンドのピアリング(つまり、2 つのク
ライアント間の直接データ送信)も可能です。従来のユニキャスト(1 対多または 1 対 1)アプリケーションでは、RTMP
の代わりに RTMFP を使用することで、低遅延と低い帯域幅コストのメリットを享受できます。
RTMFP には、NAT とファイアウォールのトラバース、輻輳制御と優先順位付け、IP アドレスのモビリティ、部分的な信
頼性などの機能があります。
RTMFP ネットワークトラフィックは、128 ビットで暗号化されます。RTMFP 上でストリームを再生するには、クライア
ントはストリームの名前と、パブリッシュ元のピア ID を知っている必要があります。ピア ID は、パブリッシュ元の ID に
関連付けられた 256 ビット値です。パブリッシュ元は、接続を行う前にピア要求を受け入れる必要があります。
アドビ システムズ社のコンピューターサイエンティストである Jozsef Vass が、RTMFP について Adobe DevNet の
記事「Best practices for real-time collaboration using Flash Media Server」で説明しています。
ピア ID について
ピアごとにピア ID があり、ピア ID スペースはサーバー固有です。ピア ID は、クライアントの Diffie-Hellman 公開鍵の
SHA256 です。
クライアントからサーバーへの接続の場合、ピア ID は、ActionScript 3.0 の NetConnection.nearID および
NetConnection.farID のプロパティで使用可能です。nearID はクライアントのピア ID で、farID はサーバーのピア ID です。
また、ピア ID は、サーバーサイド ActionScript の Client.nearID および Client.farID のプロパティで使用可能です。nearID
はサーバーのピア ID で、farID はクライアントのピア ID です。
Flash Player と Flash Media Server 間の接続の場合、クライアントサイド NetConnection.nearID とサーバーサイド
Client.farID のプロパティは同じ値を共有します。クライアントサイド NetConnection.farID とサーバーサイド Client.nearID
のプロパティは同じ値を共有します。
サーバーサイド ActionScript にも NetConnection.nearID と NetConnection.farID のプロパティがあります。このプロパティ
には、サーバーサイド RTMFP 接続の両サイドのピア ID が含まれます。この場合、NetConnection がクライアントです。
RTMFP 上でユニキャスト、ブロードキャスト、およびマルチポイントパブリッ
シュ
RTMFP はピアアシストネットワーキングアプリケーションによく使用されますが、ユニキャスト、ブロードキャスト、お
よびマルチポイントパブリッシュアプリケーションにも使用できます。NetConnection.connect() 呼び出しの RTMP プロト
コルを RTMFP プロトコルで置き換えるだけです。
netconnection.connect("rtmfp://fms.example.com/vod");
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
RTMFP をマルチポイントパブリッシュで使用するには、サーバーサイド NetConnection を作成し RTMFP URL を使用
してターゲットサーバー ( 例えば、rtmfp://localhost/myapp) に接続します。
オーディオ、ビデオ、データをストリーミングするには、RTMP 接続の場合と同様に、NetStream を作成します。ピアア
シストネットワーキングアプリケーションの場合のように、NetStream コンストラクターに GroupSpecifier は渡しませ
ん。
RTMFP 接続を使用するとき、共有オブジェクトに対する更新は、全面的な信頼性で RTMFP 接続内の RTMP チャンクス
トリームデータチャネルを経由して送信されます。RTMFP プロトコルでは、優れた再送信と輻輳処理とともに、オーディ
オ、ビデオ、データ転送に対する幅広い信頼性設定 (0 ∼ フル ) をサポートします。「NetStream.audioReliable」、
「NetStream.videoReliable」、および「NetStream.dataReliable」(『Adobe Flash Platform 用 ActionScript 3.0 リファレンス
ガイド』) を参照してください。
RTMFP グループ
Flash Player 10.1、AIR 2、Flash Media Server 4
Flash Player 10.1、AIR 2 および Flash Media Server 4 は RTMFP グループをサポートしています。クライアントは、
Flash Media Server に対して RTMFP 接続を行い、グループに参加します。
ピア グループのメンバー ( 別称「ノード」)。ピアは、Flash Player または AIR のクライアントで、RTMFP 上で Flash
Media Server に対して接続を行い、グループに参加します。
グループ グループは、特定のパラメーターと機能について合意した、1 つ以上の RTMFP ノードの集まりです。ピアツー
ピアメッシュを形成するグループ内のすべてのピア間にパスがあります。2 つのピアの間に直接接続がない場合もあります
が、他のピアを介してパスは必ずあります。グループは、
「ピアグループ」、
「RTMFP グループ」、
「NetGroup」とも呼ばれ
ます。
ブートストラップ グループの一員になるために、少なくともあるグループの 1 メンバーに接続すること。クライアントをグ
ループにブートストラップするようにアプリケーションロジックを書き込んだり、クライアントを自動的にブートストラッ
プするように Flash Media Server に求めることができます。ピアに関するランダムな検査はありません。また、サーバーは
ピアを探しているネットワークをフラッドしません。
Flash Media Server は、グループへのクライアントの紹介を処理します。Flash Player は、遅延対策にグループの編成や最
適化を行い、グループの完全なつながりを維持しながら、グループ内のピア通信を処理します。
グループは、ピア間の接続を自動的に維持します。ピアがグループ内で完全にメッシュを構成している場合、各ピアはグ
ループ内でデータを渡すことができます。各クライアントにデータを配信するために、データをサーバーに送信する必要は
ありません。ピアは、オーディオ、ビデオ、ActionScript オブジェクトなどのデータを共有できます。RTMFP とグループ
を使用することで、数百万台のクライアントで構成されるピアツーピアアプリケーションを構築できます。
「groupspec」と呼ばれる文字列でグループのパラメーターと機能を定義するには、ActionScript 3.0 GroupSpecifier クラ
スを使用します。groupspec は、NetGroup および NetStream コンストラクターに渡します。グループを管理しグループ
内で ActionScript データを送信するには、NetGroup クラスを使用します。グループ内でオーディオとビデオをマルチ
キャストするには、NetStream クラスを使用します。
groupspecs は、「G:01010b...」のように、「G:」で始まり、16 進数の桁が続く文字列です。文字列の最初の部分は、グ
ループの変更不可能な ID であり、グループの権限が含まれています。ピアがグループの権限またはプロパティを変更する
と、新しいグループが開始されます。文字列では大文字小文字が区別されます。
最終更新日 2011/10/10
190
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
グループでは、次の操作を行えます。
•
ストリームの 196 ページの「マルチキャスティング」
マルチキャスティングは、1 人または数人の送信者がグループ内の全員にデータストリームを配信するために使用しま
す。
• 194 ページの「グループへのメッセージの送信」
ポスティングは、多数の送信者がグループ内の全員に少量のデータを配信するために使用します。
• 195 ページの「ピアへ直接のメッセージのルーティング」
直接ルーティングは、オーバーレイルーティング構造を介して 1 人のピアにメッセージを送信するために使用します。
• 196 ページの「グループ内のオブジェクトの複製」
オブジェクトレプリケーションは、多数の ( 大量になる可能性のある ) オブジェクトでグループ内の全員を同期するする
ために使用します。
ストリームをマルチキャストしたりメッセージを送信したりするには、ActionScript メソッドを呼び出して送信データを渡
します。データはグループ内のその他のノードに到達します。
メッセージをピアに直接ルーティングして、オブジェクトをグループ内で複製するには、ActionScript コードを記述して
データの配信を図る必要があります。
グループの作成
1 Flash Media Server に接続します。「rtmfp」URL を NetConnection.connect() メソッドに渡します。
NetConnection.connect("rtmfp://fms.example.com/p2pexample/test1")
注意:Adaptor.xml ファイルで RTMFP を無効にした場合、クライアントが 「NetConnection.Connect.Failed」ステータ
スを受信するまで最大 2 分かかる可能性があります。この遅延を防ぐには、<RTMFP enable="true"> が Adpator.xml
ファイルにあることを確認します。これはデフォルトで有効になっています。
2 "NetConnection.Connect.Success" で、GroupSpecifier クラスを使用して groupspec を作成します。groupspec を
NetGroup コンストラクターに渡します。
// Called in the "NetConnection.Connect.Success" case in the NetStatusEvent handler.
private function OnConnect():void{
connected = true;
// Create a GroupSpecifier object to pass to the NetGroup constructor.
// The GroupSpecifier determines the properties of the group
var groupSpecifier:GroupSpecifier;
groupSpecifier = new GroupSpecifier("com.example.p2papp");
groupSpecifier.postingEnabled = true;
groupSpecifier.multicastEnabled = true;
// The serverChannel lets the server do auto-bootstrapping
groupSpecifier.serverChannelEnabled = true;
netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations());
netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
}
3 "NetGroup.Connect.Success" で、手動または自動でピアをグループにブートストラップします。例では、サーバーチャネ
ルを有効にして、自動的なブートストラップを実行しています。ブートストラップのためのいくつかの追加のオプション
について、次の節で説明します。
補足情報
Tom Krcha は GroupSpecifier クラスに関する詳細な記事を、ブログ Flash Realtime に書いています。·
最終更新日 2011/10/10
191
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
グループへのピアのブートストラップ
ピアがサーバーに最初に接続した後、ピアを同じグループの 1 つ以上のピアに紹介する必要があります。この手法は「ブー
トストラップ」と呼ばれます。ブートストラップにより、同じグループのメンバーが互いを認識できるようになります。
ブートストラップの後、ピアは自身をグループに組み込み、他のメンバーとメッシュを構成します。
グループに参加するには、クライアントはそのグループを定義する GroupSpecifier を知っている必要があります。2 セッ
トのクライアントが同じ GroupSpecifier を使用し、かつタッチすることがない場合は、別々のグループになります。この 2
つのグループがタッチする場合は、マージされて単一のグループとして大きくなります。
ピアごとにピア ID があり、ピア ID スペースはサーバー固有です。ピア ID は、クライアントの Diffie-Hellman 公開鍵の
SHA256 です。クライアントサイドおよびサーバーサイドの ActionScript は、各 RTMFP クライアントのプロパティとし
てピア ID にアクセスすることができます。ピア ID は、ActionScript 3.0 の NetConnection.nearID および
NetConnection.farID のプロパティで使用可能です。また、ピア ID は、サーバーサイド ActionScript の Client.nearID およ
び farID のプロパティで使用可能です。クライアントサイド NetConnection.nearID とサーバーサイド Client.farID は同じ値を
共有します。クライアントサイド NetConnection.farID とサーバーサイド Client.nearID は同じ値を共有します。
RTMFP グループ内のピアは、次の方法でブートストラップできます。
•
サーバーチャネルの自動的なブートストラップ。
クライアントが RTMFP 接続を使用して接続すると、サーバーは同じ NetGroup のメンバーであるピアにブートスト
ラップします。クライアントサイドで自動的なブートストラップを有効にするには、
GroupSpecifier.serverChannelEnabled を true に設定します。
•
手動ブートストラップ。
ピアをメッシュに手動でブートストラップするには、NetGroup.addNeighbor() メソッドを呼び出します。
• LAN ピアの検出
LAN ピアの検出を有効にするには、GroupSpecifier クラスを使用します。LAN ピアの検出により RTMFP
NetConnection とその NetStream および NetGroup オブジェクトはピアを自動的に検出して現在のサブネット上のグ
ループに参加できます。LAN の同じサブネット上の同じグループにいないピアは、互いを検出できません。groupspecs
が一致する複数のピアが異なるサブネット上にある場合、互いを検出できなくても、エラーまたはその他のイベントは
ディスパッチされません。
次のコードに、LAN ピア検出を有効にする方法を示します。
var nc = new NetConnection();
// Protocol must be RTMFP
nc.connect("rtmfp://fms.example.com/appname/appinstance");
var gs = new GroupSpecifier("com.example.discovery-test");
// Must be enabled for LAN peer discovery to work
gs.ipMulticastMemberUpdatesEnabled = true;
// Multicast address over which to exchange peer discovery.
gs.addIPMulticastAddress("224.0.0.255:30000");
// Additional GroupSpecifier configuration...
var ns = new NetStream(nc, gs.toString());
注意:RTMFP ピア参照統計を取得するには、Administration API getServerStats() コマンドを呼び出します。
サーバーサイド RTMFP グループ
RTMFP NetConnection を作成するには、サーバーサイド ActionScript を使用します。同じサーバー上のアプリケーショ
ンまたは別の Flash Media Server 上のアプリケーションに接続できます。RTMFP NetConnection を作成した後、
GroupSpecifier を定義して NetGroup と NetStream を作成します。サーバーアプリケーションはグループに参加し、グ
ループメッシュのピアになります。単一のクライアントが複数のグループに参加することができます。接続されると、
RTMFP グループ内の他のピアとのやり取りができます。また、ストリームをグループにパブリッシュすることができま
す。
最終更新日 2011/10/10
192
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
サーバーサイド netConnection は仮想 Flash クライアントです。これは独自の RTMFP スタックを持ちます。サーバーに
関する限り、グループに参加するサーバーサイドスクリプトは、クライアントのものと同じです。
注意:サーバーサイド ActionScript では、直接的なピア間での接続の作成はサポートされません。
Flash Player ピアアシストネットワーキングセキュリティダイアログ
NetStream または NetGroup オブジェクトが groupspec を使用して構築されている場合、ピアアシストネットワークダイ
アログが表示されます。ダイアログでは、Flash Player がその接続を使用してそのピアとデータを共有してもかまわないか
どうかが質問されます。
ユーザーが「このドメインでの使用を許可する」をクリックすると、次回ユーザーがこのアプリケーションに接続するとき
にこのダイアログは表示されません。ピアアシストネットワーキングを許可しなかった場合、グループ内のピア機能(ポス
ティング、直接ルーティング、オブジェクトレプリケーションおよびマルチキャスト)はすべて無効になります。RTMFP
を使用して、純粋なネイティブ IP マルチキャストストリームにサブスクライブできます。この場合、ダイアログは表示され
ません。
ピアアシスト機能なしで IP マルチキャストを使用するときは、セキュリティダイアログを無効にすることができます。
GroupSpecifier.peerToPeerDisabled プロパティを true に設定します。デフォルトでは、このプロパティは false ( ピアアシスト
接続が有効 ) です。peerToPeerDisabled が true のとき、セキュリティダイアログは表示されません。
RTMFP グループを操作するための ActionScript クラス
RTMFP グループを使用するアプリケーションを作成するには、次の ActionScript 3.0 クラスとサーバーサイド
ActionScript クラスを使用します。
• NetConnection
Flash Player または AIR アプリケーションと Flash Media Server アプリケーションの間で双方向 RTMFP 接続を作成
するには、NetConnection クラスを使用します。NetConnection.connect() メソッドに渡す URL 中で RTMFP プロトコ
ルを使用します。
• GroupSpecifier
RTMFP ピアツーピアグループの機能、制限事項、権限を定義するには、GroupSpecifier クラスを使用します。機能を
定義したら、groupspec 文字列または GroupSpecifier オブジェクトを NetStream および NetGroup コンストラクター
に渡します。groupspec は、NetStream および NetGroup コンストラクターに渡す内部文字列です。
サーバーサイドコードでは、GroupSpecifier オブジェクトまたは groupspec 文字列を渡せます。
クライアントサイドコードでは、groupspec 文字列のみを渡せます。groupspec 文字列を生成するには、次のメソッドのい
ずれかを呼び出します。toString()、groupSpecWithAuthorizations()、および groupSpecWithoutAuthorizations。()。
• NetGroup
RTMFP グループを管理するには、NetGroup クラスを使用します。クラスプロパティは、グループメンバーに関する
情報を提供します。グループへのメッセージの送信、グループメンバーへのメッセージのルーティング、グループ間での
オブジェクトの複製を行うには、クラスメソッドを呼び出します。NetGroup を作成するには、GroupSpecifier オブ
ジェクトを NetGroup コンストラクターに渡します。
• NetGroupInfo
NetGroupInfo クラスは、NetGroup オブジェクトの RTMFP ピアツーピアデータ転送に関するサービス品質(QoS)
を指定します。NetGroup.info プロパティは、NetGroupInfo オブジェクトを返します。これは現在の QoS 状態です。
• NetStream
グループ内でオーディオとビデオをマルチキャストするには、NetStream クラスを使用します。groupspec を
NetStream コンストラクターに渡し、標準の publish() メソッドおよび play() メソッドを使用します。
最終更新日 2011/10/10
193
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
• NetStreamMulticastInfo
NetStreamMulticastInfo クラスは、NetStream オブジェクトの RTMFP ピアツーピアおよび IP マルチキャストスト
リーム転送に関するサービス品質(QoS)を指定します。NetStream.multicastInfo プロパティは、
NetStreamMulticastInfo オブジェクトを返します。これは現在の QoS 状態です。
グループへのメッセージの送信
Flash Player 10.1、AIR 2、Flash Media Server 4
ActionScript メッセージを NetGroup のすべてのメンバー(「グループ」とも呼ばれます)にブロードキャストするには、
NetGroup.post() メソッドを呼び出します。ポストを受信したときに何かを実行するには、"NetGroup.Posting.Notify" コード
を使用します。
クライアントサイド ActionScript 3.0 NetGroup.post() メソッドからの、またはサーバーサイド ActionScript
NetGroup.post() メソッドからのグループにメッセージを送信できます。
非ステートフルデータをブロードキャストするには、post() メソッドを使用します。例えば、テキストチャット、世論調査、
センサーレポートなどのためにポスティングを使用します。多数のクライアントに少量のデータの送信を許可するには、ポ
スティングを使用します。
この方法は、サーバーサイド ActionScript の Application.broadcastMsg() メソッドに似ていますが、post() メソッドでは、グ
ループ内のノードからノードにメッセージが送信されます。ポスティングは、共有オブジェクトの使用とは似ていません。
共有オブジェクトと異なり、ポスティングでは変更が管理されません。
メッセージの送信に関する次の点について理解してください。
• NetGroup コンストラクターに渡される groupspec 内で、GroupSpecifier.postingEnabled プロパティが true に設定されて
いる必要があります。
• post() を呼び出す前に、NetGroup.Neighbor.Connect イベントを受信します。
•
メッセージは AMF でシリアル化されます。メッセージは任意の AMF オブジェクトでかまいません。メッセージは
MovieClip にはできません。
•
メッセージが新しいものと見なされるには、一意である必要があります。シーケンス番号を使用して、メッセージを一意
にします。
•
メッセージの配信は順序付けられません。メッセージの配信は保証されません。
• post() メソッドはこのメッセージの messageID を返します。エラーの場合は null を返します。messageID はメッセー
ジを直列化した raw バイトの 16 進数の SHA256 です。
• post() メソッドは NetStatusEvent を info.code プロパティの NetGroup.Posting.Notify で NetGroup のイベントリスナー
に送信します。
『ActionScript 3.0 リファレンスガイド』の「NetGroup.post()」のエントリには、チャットアプリケーションの例が記載さ
れています。次の例はその抜粋です。
最終更新日 2011/10/10
194
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
private function OnConnect():void{
StatusMessage("Connected\n");
connected = true;
// Create a GroupSpecifier object to pass to the NetGroup constructor.
// The GroupSpecifier determines the properties of the group
var groupSpecifier:GroupSpecifier;
groupSpecifier = new GroupSpecifier("com.aslrexample/" + groupNameText.text);
groupSpecifier.postingEnabled = true;
groupSpecifier.serverChannelEnabled = true;
netGroup = new NetGroup(netConnection, groupSpecifier.groupspecWithAuthorizations());
netGroup.addEventListener(NetStatusEvent.NET_STATUS, NetStatusHandler);
StatusMessage("Join \"" + groupSpecifier.groupspecWithAuthorizations() + "\"\n");
}
// Called when you the chatText field has focus and you press Enter.
private function DoPost(e:ComponentEvent):void{
if(joinedGroup){
// Build the message to post.
var message:Object = new Object;
message.user = userNameText.text;
message.text = chatText.text;
message.sequence = sequenceNumber++;
message.sender = netConnection.nearID;
// Post the message to the group.
netGroup.post(message);
StatusMessage("==> " + chatText.text + "\n")
} else {
StatusMessage("Click Connect before sending a chat message");
}
ClearChatText();
}
ピアへ直接のメッセージのルーティング
クライアントは、ピアツーピアグループのメンバーに直接接続されていなくても、短い ActionScript メッセージをメン
バーに直接送信できます。この機能は直接ルーティングと呼ばれます。直接ルーティングでは、グループの自己組織化構造
が持つ、変化する接続と幾何学的な特性を利用し、グループ内でメッセージをルーティングします。
直接ルーティングは、特定のクライアントにメッセージを送信するか、分散ハッシュテーブル(DHT)を構築するために
使用します。
メッセージを正常にルーティングするには、送信元と意図する受信者の間の動的なパスに沿って、すべてのピアが直接参加
していることが必要です。各ピアは、メッセージの中継ポイントとして動作します。ピアは、受信したメッセージを自動的
に中継しません。受信とローカル処理またはメッセージの転送を処理するには、ActionScript を使用します。メッセージの
配信は保証されません。
メッセージルーティングの帯域幅に対する負荷は、グループのメンバーに分散され、サーバーに集中しません。
アドビシステムズ社の伝道者、Tom Krcha が 自分の Flash Realtime ブログの記事 Directed routing explained で直
接ルーティングについて説明しています。
サーバーサイド ActionScript 直接ルーティング API を次に示します。
• NetGroup.sendToAllNeighbors()
• NetGroup.sendToNearest()
• NetGroup.sendToNeighbor()
クライアントサイド ActionScript 3.0 直接ルーティング API を次に示します。
• NetGroup.sendToAllNeighbors()
最終更新日 2011/10/10
195
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
• NetGroup.sendToNearest()
• NetGroup.sendToNeighbor()
グループ内のオブジェクトの複製
クライアントは、高い信頼性でピアグループを通じて ActionScript オブジェクトを送信できます。この機能はオブジェク
トレプリケーションと呼ばれます。オブジェクトレプリケーションを使用すると、RTMFP グループのすべてのメンバー
が、オブジェクトセットの一貫したビューを持つことができます。この機能は、ワークスペースの複製、ホワイトボードの
作成、ファイルの転送、ノードでの操作ログの同期などのために使用できます。
オブジェクトレプリケーションは、グループの自己組織化構造が持つ、変化する接続を利用します。オブジェクトを保持し
ているノードから、オブジェクトが必要なノードへ、グループ内でオブジェクトが複製されます。各オブジェクトは、グ
ループ全体で一意の番号でインデックス付けされます。オブジェクトは不変であることが必要です。
サンプルアプリケーションを始めとする、オブジェクトレプリケーションの詳細な説明については、アドビシステムズ
社の伝道者、Tom Krcha のブログポスト「File Sharing over P2P in Flash Player 10.1 with Object Replication」を
参照してください。
グループ内でオブジェクトを複製するには、次のクライアントサイド ActionScript 3.0 API を使用します。
• NetGroup.addHaveObjects()
• NetGroup.addWantObjects()
• NetGroup.denyRequestedObject()
• NetGroup.removeHaveObjects()
• NetGroup.removeWantObjects()
• NetGroup.writeRequestedObject()
オブジェクトレプリケーションとその他の RTMFP グループ機能には、次のサーバーサイド ActionScript API を使用しま
す。
• ByteArray クラス
• File.readBytes()
• File.writeBytes()
マルチキャスティング
Flash Player 10.1、AIR 2、Flash Media Server 4
マルチキャスティングの詳細を学習する前にチュートリアルを完了するには、36 ページの「メディアのマルチキャスト
(RTMFP)」を参照してください。
マルチキャスティングは、オーディオおよびビデオデータを、グループのメンバー間で配信します。サーバーはデータを各
クライアントに送信しません。データはピア間で配信されます。マルチキャスティングにより、少ないパブリッシュ元が大
量のデータを送信できます。メディアをマルチキャストするには、groupspec を NetStream コンストラクターに渡します。
マルチキャストデータに対し、NetStream.publish() または NetStream.play() を呼び出します。データをマルチキャストするに
は、クライアントサイド NetStream クラスとサーバーサイド NetStream クラスを使用できます。
Flash Media Server は、アプリケーションレベルのマルチキャストと IP マルチキャストをサポートしています。また、1
つのストリームでアプリケーションレベルのマルチキャストと IP マルチキャストを一体として使用できます。この使用方法
はマルチキャストフュージョンと呼ばれます。マルチキャストフュージョンは、両方のブロードキャスト手法を使用して、
高いサービス品質をサポートします。ファイアウォールの内部では、IP マルチキャストを使用します。ファイアウォールの
最終更新日 2011/10/10
196
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
外部や、IP マルチキャストをサポートしていないネットワークでは、アプリケーションレベルのマルチキャストを使用しま
す。マルチキャストフュージョンでは、IP マルチキャスト経由では受信できないビデオフラグメントをファイアウォールの
外部にある近隣ノードに受信させることができます。
Flash Media Server は、RTMP 接続上で配信されたストリームをマルチキャストできます。例えば、Flash Media Live
Encoder は、RTMP 上で Flash Media Server にストリームを配信し、Flash Media Server が RTMFP 上でグループにその
ストリームをマルチキャストできます。
マルチキャストに関する次の点について理解してください。
• 1 つのグループで任意の数のストリームをパブリッシュできます。しかし、この方法では、その特定のクライアントでス
トリームが再生中でなくても各グループメンバーがすべてのストリームを消費および中継するため、お勧めできません。
•
同じ名前のストリームをグループ内にパブリッシュできます。
クライアントがストリーム名の再生を要求すると、その名前 ( 検索できる ) の付いた最初のストリームが再生されます。
名前付きのストリームのそのインスタンスのパブリッシュ元が停止した場合、再生クライアントは名前付きのストリーム
の別のインスタンスにリセットし、「NetStream.MulticastStream.Reset」 イベントがディスパッチされます。RTMFP グ
ループ内には、複数のクライアントが同じ名前の付いたストリームをパブリッシュできないようにするための、ストリー
ムの状態の単一の決定者はいません。( 従来のユニキャストストリームパブリッシュで h あ、Flash Media Server はス
トリームの状態に対処します。) マルチキャストストリームのスケーラビリティの向上には重要な理由があります。ただ
し、ストリーム名の衝突やハイジャックから保護するには、グループに対するパブリッシュパスワードを定義して、
groupspec に信頼できるパブリッシュ元への権限のみを承認します。競合するストリームを同じ名前でパブリッシュでき
ないようにするには、権限の承認なしに他のすべてのクライアントに groupspec を渡します。
•
•
パブリッシュ元は NetStream.send() を呼び出して、データをグループに組み込むことができます。
ライブマルチキャストストリームが再生されている RTMFP グループにクライアントがあるとき、このクライアントは、
ある程度の数の直接近隣ノードに対して、当該ストリームの中継ポイントとして動作する可能性があります。この数を制
御するには、「NetStream.multicastPushNeighborLimit」プロパティを使用します。デフォルト値は 4 です。グループ内の
ピアはすべて、ストリームを取得するためにお互いに一体として協力します。各クライアントがストリームをサーバーか
ら個別に取り込むことはありません。したがって、パブリッシュするマルチキャストストリームのビットレートの選択時
に、平均的クライアントアップリンク容量を想定してみます。高すぎるビットレートを選択すると、ピアがストリームを
スムーズに中継できなくなる可能性があります。
注意:この要件は、P2P マルチキャストに固有のものです。P2P マルチキャストと同時に使用できる、IP マルチキャス
トは、ローカルエリアネットワーク内の高めのビットレートにもライブマルチキャストストリームにも使用できます。
補足情報
「Multicast explained in Flash Player 10.1」、Tom Krcha の Flash Realtime ブログの記事。
アプリケーションレベルのマルチキャスト
デフォルトでは、ピアツーピアメッシュは、RTMFP グループにパブリッシュされたストリームを配信します。この技術は
「アプリケーションレベルマルチキャスト」と呼ばれます。
IP マルチキャスト
IP マルチキャストでは、ルーターを使用して、指定された IP アドレスにデータを送信します。ルーターは、IP マルチキャ
ストグループに登録されているすべてのクライアントにデータを送信します。IP マルチキャストを設定するには、IT 部門
と協力して作業します。パブリッシュ先のアドレスを設定し、トラフィックを適切に転送するように企業のマルチキャスト
ルーターを設定するよう依頼します。
ストリームを IP マルチキャストアドレスにパブリッシュするには、パブリッシュを開始する前に、サーバーサイド
ActionScript の NetStream.setIPMulticastPublishAddress() メソッドを呼び出します。
最終更新日 2011/10/10
197
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
グループ内のサブスクライブしている ( 再生中の ) ピアは、IP マルチキャストアドレスを、自身の GroupSpecifier に追加
する必要があります。groupspec を作成するときに、GroupSpecifier.addIPMulticastAddress() を呼び出します。IP マルチ
キャストアドレスを追加することで、クライアントは、IP マルチキャストトラフィックをリッスンして受信できるようにな
ります。
デフォルトでは、アプリケーションレベルのマルチキャストは、IP マルチキャストと同時に動作します。この技術は
「フュージョンマルチキャスト」と呼ばれます。アプリケーションレベルマルチキャストを使用せずに IP マルチキャストを
実行するには、GroupSpecifier で次のように設定します。
• GroupSpecifier.peerToPeerDisabled=true
この設定により、ピアツーピアマルチキャストが無効になります。
• GroupSpecifier.multicastEnabled=true
• GroupSpecifier.addIPMulticastAddress() を呼び出します。
このメソッドは、クライアントサイドのアプリケーションだけで呼び出します。サーバーからパブリッシュするには、ス
トリームはサーバーサイド ActionScript の NetStream.setIPMulticastPublishAddress() メソッドに渡したアドレスにスト
リームをパブリッシュします。そのアドレスは、クライアントが使用しているアドレスと同じです。
ソース特定 IP マルチキャスト
Flash Media Server 4.5
Source-specific multicast(SSM)を使用すると、クライアントがデータを受信する IP アドレスを指定できるようになり
ます。クライアントはこのソースからのみデータを受信します。SSM により、ネットワークの負荷が減少します。SSM を
設定するには、rootinstall/tools/multicast/configurator にインストールされているマルチキャストコンフィグツールを
使用してください。チュートリアル 36 ページの「メディアのマルチキャスト(RTMFP)」では、マルチキャストコンフィ
グツールを使用します。
Source-Specific Multicast は、IP マルチキャストデータの受信を「ソース」から送信されるデータに制限します。マルチ
ホームシステム(複数の IP アドレスを持つシステム)では、サーバーサイドのパブリッシュ元が次の API を使用して必要
なローカルインターフェイス IP アドレスにバインドできます。
netConn.rtmfpBindAddresses = ["10.58.117.135"];
受信者側では、IP マルチキャストアドレスを GroupSpecifier に追加したときに、必要なソースアドレスを示します。
gs.addIPMulticastAddress("{mcastAddr}", {port}, "10.58.117.135");
すべてのホストオペレーティングシステムが SSM をサポートしているわけではありません(例えば、Lion 以前の Mac
OS)。オペレーティングシステムが SSL をサポートしていない場合、クライアントはデータを受信しません。
クライアントサイドのサーバーレス RTMFP 接続の作成
Flash Media Server 4.0
サーバーに接続せずに、RTMFP グループと IP マルチキャスト通信向けのネットワークエンドポイントを作成できますが、
機能は制限されます。このモードは、「サーバーレスモード」と呼ばれます。サーバーへの接続やピアツーピアメッシュへの
ブートストラップをクライアントに要求せずに、パブリッシュ元から純粋な IP マルチキャストストリームを受信するには、
サーバーレスモードを使用します。
注意:サーバーサイド ActionScript では、サーバーレスモードを使用して、堅牢なサーバーのみのグループを作成し、ピア
紹介を配信します。202 ページの「サーバー間のピア紹介の配信」を参照してください。
最終更新日 2011/10/10
198
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
クライアントはサーバーに接続しないため、自動的なブートストラップはありません。サーバーレスモードでは、IP マルチ
キャストを使用して LAN 上でお互いを検出するようにピアを設定します。ピアはお互いを検出すると、グループ内で通信
できます。サーバーレスモードで、クライアントは次を行うことができます。
• IP マルチキャストを使用して、LAN 上のピアを検出します。
• IP マルチキャストを経由してストリームを受信します。
• NetGroup 内のストリームを送受信します。(NetGroup は、LAN 上で IP マルチキャストを経由して検出されたピアの
みで構成されます。)
次のコードでは、接続がサーバーレスモードで作成されます。
var nc:NetConnection = new NetConnection;
nc.connect("rtmfp:");
NetConnection インスタンス nc は、サーバーレス RTMFP NetConnection です。次のコードでは、NetConnection を
使用して、純粋な IP マルチキャストを受信できる NetStream を作成します。また、ピアアシストネットワーキング権限ダ
イアログを非表示にもします
var gs:GroupSpecifier = new GroupSpecifier("com.adobe.pureIPMulticastGroup");
gs.multicastEnabled = true;
// Prevents the P2P permission dialog from appearing.
gs.peerToPeerDisabled = true;
// Receive multicast stream on 239.255.255.1 port 30000
gs.addIPMulticastAddress("239.255.255.1:30000");
var ns:NetStream = new NetStream(nc, gs.groupspecWithAuthorizations());
「NetStream.Connect.Success」メッセージの表示を待ちます。グループ NetStream を使用するには、その前にこのメッセー
ジが表示される必要があります。NetStream をビデオ表示オブジェクトに割り当て、ns.play(streamName) を呼び出します。
または、以下のように、RTMFP グループモードのいずれか向けに LAN 上にグループを作成できます ( ピアツーピアマル
チキャストを含む )。
var gs:GroupSpecifier = new GroupSpecifier("com.adobe.myAdHocGroup");
gs.multicastEnabled = true;
gs.postingEnabled = true;
gs.ipMulticastMemberUpdatesEnabled = true;
// Peers find each other on 239.255.255.11 port 30001
gs.addIPMulticastAddress("239.255.255.11:30001");
var ns:NetStream = new NetStream(nc, gs.groupspecWithAuthorizations());
var ng:NetGroup = new NetGroup(nc, gs.groupspecWithAuthorizations());
NetStream.Connect.Success と NetGroup.Connect.Success が表示されるまで待ちます。上記を受信したら、NetStream 上でピ
アツーピアマルチキャストストリームをパブリッシュまたは再生し、NetGroup 上で送信できます。
アドビ システムズ社の伝道者 Tom Krcha のビデオチュートリアル、「Controlling the desktop with your mobile device
via P2P」を参照してください。
フュージョンマルチキャスト
デフォルトでは、IP マルチキャストを実行すると、アプリケーションレベルのマルチキャストも実行されます。この手法は
「フュージョンマルチキャスト」と呼ばれます。IP マルチキャストとアプリケーションレベルマルチキャストは、調和して
同時に動作します。IP マルチキャストの高い効率を活用するため、アプリケーションレベルマルチキャストは、IP マルチ
キャストよりも若干後で動作します。
最終更新日 2011/10/10
199
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
マルチキャストサービス品質のチェック
クライアントがマルチキャスティングしているかどうかを確認し、サービス品質を確認するには、ActionScript 3.0
NetStream.multicastInfo プロパティを使用します。このプロパティは、マルチキャスティング時に統計のさまざまな QoS 基
準を指定する NetStreamMulticastInfo クラスのインスタンスです。例えば、
NetStreamMulticastInfo.bytesReceivedFromIPMulticast プロパティは、純粋な IP マルチキャストを介してクライアントが受信
している多くのデータを示します ( アプリケーションレベルマルチキャストに対して )。
「サーバーサイド ActionScript リファレンスガイド」では、NetStreamMulticastInfo クラスと MulticastStreamIngest ク
ラスを使用します。
サーバーによるアプリケーションのアンロードの防止
Flash Media Server は、着信接続のないアプリケーションをアイドルと見なします。その結果、サーバーはアプリケーショ
ンをアンロードします。サーバーがアプリケーションをアンロードしないようにするには、false を返す
Application.onAppStop() ハンドラーを定義します。
例えば、サーバー A とサーバー B の 2 台の Flash Media Server がある次のシナリオを考えます。サーバー A は、ピア紹介
者として機能し、ライブストリームを取り込みます。サーバー B 上のアプリケーションは、サーバー A からストリームを受
信し、Stream.play() を呼び出して、RTMFP グループにストリームをパブリッシュします。サーバー B 上のアプリケーショ
ンには、サーバー A への発信接続がありますが、着信クライアント接続はありません。アプリケーションに外部からのクラ
イアント接続がない場合、サーバーは、このアプリケーションをアイドル状態であると見なしてアンロードします。
マルチキャストストリームの取り込み、変換および記録
Flash Media Server 4.5
サーバーサイド ActionScript を使用して、マルチキャスト RTMFP ストリームを取り込みます。サーバーがマルチキャス
トストリームを取り込んだら、スクリプトを記述して次の操作を行います。
•
マルチキャストストリームを Stream オブジェクトに変換します。
• Stream を HTTP 経由でクライアントに配信します。
livepkgr アプリケーションに接続し、HTTP Dynamic Streaming と HTTP Live Streaming を使用した配信のために
Stream をパッケージ化します。
• RTMP/T/S/E を使用して Stream オブジェクトをクライアントに配信します。
• Stream オブジェクトを記録します。
マルチキャストの取り込みを使用して、サーバー層でライブコンテンツを配信します。
注意:RTMFP マルチキャストストリームを別の RTMFP グループに直接ブリッジすること(Stream をマルチキャスト
NetStream に割り当てることにより)はできません。MulticastStreamIngest created Stream に割り当てられている
NetStream を経由してターゲットグループへパブリッシュすることにより、別の RTMFP グループに間接的にブリッジす
ることができます。
マルチキャストストリームを取り込む API
• MulticastStreamIngest クラス
MulticastStreamIngest クラスを使用して、グループ内のマルチキャストストリームにバインドし、マルチキャスト
メッセージを非マルチキャストメッセージに変換します。このクラスを使用して、QoS 情報にアクセスし、取り込みを
制御します。
• MulticastStreamIngest.close()
ソースマルチキャストストリームの取り込みを停止します。
最終更新日 2011/10/10
200
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
• MulticastStreamIngest.ingesting
ターゲットマルチキャストストリームがバインドされて取り込まれているかどうかを示します。
• MulticastStreamIngest.multicastInfo
プロパティにサービスのストリームの質に関する統計情報が含まれる MulticastStreamInfo オブジェクト。
• MulticastStreamIngest.multicastPushNeighborLimit
マルチキャストメディアを移動するピアの最大数。
• MulticastStreamIngest.multicastWindowDuration
ピアツーピアマルチキャスト再構築ウィンドウの継続時間(秒単位)。
• NetGroup.getMulticastStreamIngest("livestream")
NetGroup が参加しているグループにパブリッシュされる指定のストリームにバインドされる、
MulticastStreamIngest オブジェクトを構築して戻すファクトリメソッド。
• Stream.playFromGroup(ingest)
Stream オブジェクトのデータソースを設定します。ingest パラメーターは、グループからマルチキャストストリームを
取り込む MulticastStreamIngest オブジェクトです。 MulticastStreamIngest API の使用
MulticastStreamIngest インスタンスを作成し、ライブストリームを取り込むには、NetGroup.getMulticastStreamIngest() を
呼び出します。取り込まれたストリームを再生するには、Stream.playFromGroup() を呼び出します。
MulticastStreamIngest クラスを使用して、QoS とパブリッシュのステータスをチェックし、ストリームの取り込みを停止
し、取り込み設定を構成します。これらの API の詳細については、
「サーバーサイド ActionScript リファレンスガイド」を
参照してください。
マルチキャストの取り込みアプリケーションフロー
次の擬似コードを使用すると、詳細が示されます。最初に、取り込まれたマルチキャストストリームの再生と記録を実行す
る Stream インスタンスを設定します。
var stream = Stream.get("mp4:multicast-ingest.f4v");
次に、サーバーサイド NetConnection と NetGroup を設定し、マルチキャストストリームがパブリッシュされるグループ
に参加させます。
var nc = new NetConnection();
nc.onStatus = function(info) {
if (info.code == "NetConnection.Connect.Success") {
ng = new NetGroup(nc, groupspec);
ng.onStatus = ngStatusHandler;
}
};
nc.connect("rtmfp://<fms-introduction-server>...");
NetGroup ステータスイベントを処理するコードを記述します。グループに参加すると、それが
"NetGroup.Connect.Success" イベントによって示され、マルチキャストストリームの取り込みを開始します。
function ngStatusHandler(info) {
if (info.code == "NetGroup.Connect.Success") {
ingest = ng.getMulticastStreamIngest(sourceStreamName);
}
}
取り込まれたマルチキャストストリームを再生し、このマルチキャストストリームを記録し、再生を停止します。
最終更新日 2011/10/10
201
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
stream.playFromGroup(ingest);
// The stream can be recorded locally.
stream.record();
...
stream.record(false); // And recording stopped.
// To stop playback of a multicast stream, pass the Boolean false.
stream.playFromGroup(false);
注意:サーバーサイド再生リストはサポートされていません。ただし、回避策があります。取り込まれた Stream から 2 つ
目の Stream オブジェクトへのリモート Stream 再生を作成します。2 つ目の Stream オブジェクトを再生リストの一部とし
て使用します。
ピアアシストネットワーキングアプリケーションの例
「ActionScript 3.0 リファレンスガイド」の「NetGroup」のエントリには、ピアアシストビデオおよびテキストチャットの
例が記載されています。この例は、Flex MXML ファイルです。Flash Builder の代わりに Flash Pro を使用するには、AS
ファイルになっている NetGroup.post() エントリの例を参照してください。
アドビ システムズ社の伝道者、Tom Krcha のブログ「FlashRealtime.com」には、いくつかのチュートリアルとビデオ
チュートリアルがあります。
サーバー間のピア紹介の配信
Flash Media Server 4.5
紹介を配信するワークフロー
注意:紹介を配信できるのはオリジンサーバー間のみです。エッジサーバー間では紹介を配信できません。また、
Authorization プラグインを使用して紹介を配信することはできません。
Flash Media Server は、RTMFP クライアントを互いに紹介し、クライアントが互いに直接接続できるようにします。この
直接接続は、ピアツーピア接続と呼ばれます。この役割を果たす場合、Flash Media Server は紹介者と呼ばれます。Flash
Media Server 4.0 は、クライアントが 1 台のサーバーに接続している場合にのみ、クライアントを互いに紹介することがで
きます。クライアントが個別のサーバーに接続されている場合でも、Flash Media Server 4.5 に追加されているサーバーサ
イド ActionScript API を使用して、クライアントを互いに紹介します。サーバー間に紹介を配信すると、ピアアシスト
ネットワーキングアプリケーションの規模を調整することができます。
次の手順は、ピア紹介を配信するワークフローを示しています。
1 ピア参照イベントをサーバーサイドスクリプトエンジンにディスパッチするようにサーバーを設定します。204 ページの
「イベントをスクリプトエンジンにディスパッチするサーバー設定」を参照してください。
2 紹介者として機能する堅牢なサーバーのグループを作成するサーバーサイドスクリプトを記述します。204 ページの「堅
牢なサーバーのみのグループへのサーバーのデプロイメント」を参照してください。
3 サーバー間にピア紹介を配信するサーバーサイドスクリプトを記述します。208 ページの「配信された紹介の API」を参
照してください。
最終更新日 2011/10/10
202
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
ピア紹介が機能する方法
注意:ポートおよび IP の設定と NAT トラバースについての詳細は、
「ピアアシストネットワーキングのポートと IP アドレ
スの設定」を参照してください。
1 台のサーバーでのピア紹介フロー
デフォルトでは、サーバーは、クライアントが同じサーバーに接続している場合に、クライアントを互いに紹介します。
1 つの RTMFP 紹介者に接続されているクライアントの紹介フロー。
クライアント 1 とクライアント 2 は、ローカルの NAT /ファイアウォールを介して同一の Flash Media Server に対する接
続を確立しています。クライアント 1 は、手動または自動のピア検出のいずれかによってクライアント 2 を検出しています。
クライアント 1 はクライアント 2 と直接接続することを望んでいます。次の手順は、紹介フローを示しています。
1 クライアント 1 は紹介者(Flash Media Server)にピア参照要求を送信します。ピア参照要求には、クライアント 2 の
NetConnection.nearID が含まれています。nearID は、クライアントとクライアントの紹介者へのアクティブな接続にお
いてグローバルに一意のフィンガープリントです。
2 紹介者は次の処理を実行します。
a クライアント 2 の IP アドレスを含むリダイレクトメッセージでクライアント 1 に応答します。
b クライアント 2 に転送メッセージを送信します。このメッセージでは、クライアント 1 が接続を望んでいることをク
ライアント 2 に伝えます。
3
クライアントは次の処理を実行します。
a クライアント 1 は、リダイレクトメッセージで受信したアドレスにピア参照要求を再送します。
b クライアント 2 はクライアント 1 のアドレスに応答 Hello メッセージを送信します。
紹介者が共通なので、クライアントは NAT /ファイアウォールの内側であっても直接接続を確立します。
複数のサーバーでのピア紹介アプリケーションフロー
サーバーサイド ActionScript を使用して、複数の Flash Media Server 紹介者にクライアント紹介を配信します。
異なる RTMFP 紹介者に接続されているクライアントの紹介フロー。
このシナリオでは、クライアント 1 はサーバー A に、クライアント 2 はサーバー B に接続しています。クライアント 1 はク
ライアント 2 の ピア ID を認識しており、直接の接続を確立することを望んでいます。しかし、クライアント 2 はクライア
ント 1 と同じ紹介者には接続していません。サーバーがこれらのクライアントを互いに紹介できるようにするには、サー
バーサイド ActionScript を使用します。次の手順は、紹介フローを示しています。
1 クライアント 1 は紹介者 1 にピア参照要求を送信します。
ピア参照要求は、サーバーサイドスクリプトの application.onPeerLookup() イベントを呼び出します。ピアは、クライア
ント 1 の IP アドレス、クライアント 2 のピア ID、要求を特定するタグ、要求を受信した RTMFP インターフェイスの
ID のすべてを渡します。
2 application.onPeerLookup() コールバックで、紹介者 1 は、application.sendPeerRedirect() を呼び出し、リダイレクトメッ
セージでクライアント 1 に応答します。リダイレクトメッセージには、クライアント 2 の既知のアドレスと、紹介者 2 の
パブリックアドレスが含まれています。
注意:クライアントにピア接続を確立させないようにする場合、紹介者 1 はピア参照要求に応答しません。212 ページの
「紹介要求のフィルター処理」を参照してください。
3 クライアント 1 は、紹介者 2 のアドレスにピア参照要求を再送します。
4 紹介者 2 は、ピア参照要求を処理するために次の処理を実行します。
a クライアント 2 の IP アドレスを含むリダイレクトメッセージでクライアント 1 に応答します。
最終更新日 2011/10/10
203
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
b クライアント 2 に、クライアント 1 が接続を望んでいることを伝える転送メッセージを送信します。
5 クライアントは次の処理を実行します。
a クライント 1 は、クライアント 2 が紹介者 2 から受信したアドレスにピア参照要求を再送します。
b サーバースクリプトは、クライアント 2 オブジェクトの Client.introducePeer() を呼び出し、クライアント 1 のアドレ
スに応答 Hello メッセージを送信します。
イベントをスクリプトエンジンにディスパッチするサーバー設定
デフォルトでは、サーバーはピア参照イベントを内部で処理します。複数のサーバーに紹介を配信するスクリプトを記述す
る場合、スクリプトエンジンにピア参照イベントをディスパッチするようにサーバーを設定します。Application.xml ファ
イルで、PeerLookupEvents の mode 属性を "All" に設定します。
デフォルトでは、サーバーは、グループに参加するピアとグループから退出するピアを内部で処理します。サーバーチャネ
ルを使用してピアをグループ内にブートストラップするスクリプトを記述する場合は、サーバーを設定します。
JoinLeaveEvents の mode 属性を "All" に設定し、これらのイベントをスクリプトエンジンにディスパッチします。
<Application>
...
<RTMFP>
<PeerLookupEvents mode="All"/>
<GroupControl>
<JoinLeaveEvents mode="All"/>
</GroupControl>
</RTMFP>
...
</Application>
mode 属性に指定できる値は次のとおりです。
値
要素
説明
" なし "
PeerLookupEvents と
JoinLeaveEvents
デフォルト値です。サーバーはすべてのピア参照イベントを処
理します。サーバーサイドの ActionScript を使用してピア紹介
を配信またはフィルター処理することはできません。
" 部分測光 "
PeerLookupEvents
サーバーは、同じ fmscore プロセスに接続されているクライア
ントのピア参照イベントを処理します。それ以外のピア参照イ
ベントをサーバーサイドの ActionScript で処理します。
"All"
PeerLookupEvents と
JoinLeaveEvents
すべてのピア参照イベントをサーバーサイドの ActionScript で
処理します。
堅牢なサーバーのみのグループへのサーバーのデプロイメント
配信された RTMFP 紹介者として機能するようにサーバーをデプロイするには、次の方法を使用してください。
•
サーバーレス RTMFP NetConnection と NetGroup を使用して、サーバーのみのグループに参加させます(この場合、
groupspec はプライベートであり、クライアントと共有されません)。
•
永続的なグループメンバーを既知のアドレスに追加します。
•
サーバーチャネルを使用して、ピアブートストラップをグループ内のサーバーに配信します。
サーバーレス RTMFP NetConnection を使用した NetGroup の作成
紹介を配信する場合、サーバーは状態を共有している必要があります。すべてのサーバーはお互いを認識している必要があ
り、さらに、接続されたクライアントすべてのピア ID と near および far IP アドレスを認識している必要があります。状態
を共有する最も簡単な方法は、NetGroup(グループとも呼ばれます)内のサーバーを接続することです。
最終更新日 2011/10/10
204
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
紹介を配信する場合、サーバーグループは堅牢である必要があります。NetGroup 内のサーバーが接続された場合、紹介者
が失敗すると、その紹介者に接続されたすべてのピアが失敗します。堅牢なグループを作成するには、サーバーレスモード
を使用して、サーバー間で RTMFP NetConnection を作成します。サーバーレスモードでは、ピアサーバーのいずれかが
失敗すると、他のサーバーは互いに接続されたままになり、グループを脱退する失敗したサーバーが通知されます。
サーバー間でサーバーレス接続を使用し、サーバーサイド「ピア」の接続が維持されて、ピア ID が変更されないようにし
ます。グループは、GroupSpecifier.ipMemberUpdatesEnabled を使用して、同じサブネット上のネイバーを見つけることがで
きます。
次のコードでは、接続がサーバーレスモードで作成されます。
var nc:NetConnection = new NetConnection;
nc.connect("rtmfp:");
サーバーのみのグループへの永続的なメンバーの追加
この手法により、異なるサブネット間のピアのグループを結合します。永続的なグループメンバーとして機能するサーバー
を選択します。例えば、各サブネット上の 1 台のサーバーまたは各データセンターの 1 台のサーバーの既知のアドレスを特
定することができます。設定ファイルを使用して、既知のアドレスを他のサーバーに配信します。既知のアドレスのサー
バーはグループのメンバーであり、この既知のアドレスを介してサーバーに接続する他のノードとのピアツーピア接続を開
きます。接続されると、この「ブートストラップノード」は、そのネイバーにグループ内の他のピアを通知します。グルー
プ内のビルトイン対話機能は、変化する接続を利用するサーバーのみのグループを作成します。
各データセンターで永続的なグループメンバーとして機能するサーバーを選択します。これらのサーバーにエンドポイント
名と IP アドレスを割り当てます。他のサーバーで、設定ファイルからエンドポイント名と IP アドレスを読み取るアプリ
ケーションロジックを記述します。この情報を使用して、メンバーを直接追加します。
赤色サーバーはサーバーのみグループのブートストラップノードです
上の図で、赤色サーバーはブートストラップノードです。実線は永続的なメンバーへの接続です。点線は、グループの自動
対話機能を使用して作成されたピア接続です。
次のサーバーサイド ActionScript API を使用して、永続的なメンバーをサーバーのみのグループに追加します。
• NetConnection.rtmfpBindAddresses
NetConnection が、その RTMFP プロトコルスタックを開くときにローカルにバインドする特定のアドレスを表す文字
列の配列。
• NetConnection.rtmfpEndpointName
ローカル RTMFP プロトコルスタックのエンドポイント名。
• NetGroup.addPermanentNeighborByName()
ピア ID の代わりに、RTMFP エンドポイント名を使用して、ネイバーを手動で追加します。ピアがこのネイバーから切
断された場合、ピアは自動的に再接続を試みます。
• NetGroup.removePermanentNeighborByName()
RTMFP エンドポイント名により、ネイバーの「永続的」ステータスを手動で削除します。このメソッドを呼び出して
も、接続は切断しません。ただし、将来どちらかの側が接続の切断を選択した場合、切断が可能です。
最終更新日 2011/10/10
205
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
次の図は、サーバーのみのグループのブートストラップを実行するアプリケーションフローを示しています。
注意:太字の呼び出しは、新しいサーバーサイド ActionScript API です。
クライアント 1 がクライアント 2 との対話を開始しますが、そのピア ID を認識していないので、このタイプのブートスト
ラップは固有のものです。クライアント 1 は、IP アドレスと rtmfpEndpointName のみを認識しています。
クライアント 1 が addPermanentNeighborByName() を呼び出し、クライアント 2 の rtmfpEndpointName を渡すと、クライア
ント 2 は、クライアント 1 のピア ID を取得します。クライアント 2 は、そのピア ID を使用して、クライアント 1 を逆方向
のネイバーとして追加します。
これらの 2 つのピアがネイバーになると、両方のピアがサーバーサイド ActionScript の NetGroup.Neighbor.Connect イベン
トを受信します。これらのピアの各 RTMFP スタックは、他のピアについてお互いに対話し、最終的に接続されたグループ
を生成します。
イニシエーターが適切な groupspec 値を使用してネイバーを追加するので、セキュリティリスクはありません。この値を安
全に配信して、推測できないようにすることができます。クライアント 1 が groupspec を認識しない場合、サーバーは、ク
ライアント 2 を永続的なネイバーとして追加する要求を無視します。
NetGroup.addNeighbor() や NetGroup.addMemberHint() とは異なり、NetGroup.addPermanentNeighbor() メソッドでは、こ
のネイバーが削除された場合に、ローカル RTMFP スタックがこのネイバーを自動的に追加します。永続的なネイバーは、
グループが、個別のサブネットにメンバーノードを持つグループ間の完全なつながりを維持できるようにします。
ローカルノードが接続されたグループのメンバーであるかどうかを決定するには、設定された間隔でブートストラップノー
ドから NetGroup.post() を呼び出します。他のノードはこれらのメッセージをリッスンし、これらのノードがブートストラッ
プノードを含むグループのスライスに接続されているかどうかを検出することができます。ノードがメッセージを受信しな
いときは、管理者に通知するか、またはシャットダウンする場合があります。
これらの API の詳細については、『サーバーサイド ActionScript リファレンスガイド』を参照してください。
最終更新日 2011/10/10
206
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
サーバーチャネルを使用した、サーバー間のピアブートストラップの配信
サーバーサイド ActionScript は、ピアをグループにブートストラップする次の方法を提供します。
• GroupSpecifier.addBootstrapPeer(peerID)
ピアがグループに参加する前に、ピア ID をグループ指定子に追加します。
• NetGroup.addNeighbor(peerID) および NetGroup.addMemberHint(peerID)
ピアをグループに手動で追加します。これらのメソッドは、ピア ID を配信する外部フレームワークを必要とします。
• GroupSpecifier.ipMulticastMemberUpdatesEnabled
ピアが LAN 上でお互いに認識できるようにします。
•
サーバーチャネルを使用します。
このメソッドでは、LAN が不要で、ピア ID をの知識は必要ありません。
次の API を使用し、サーバーチャネルを経由してサーバーをグループにブートストラップします。
• Client.onGroupJoin(groupcontrol)
ピアがグループに参加するときに呼び出されます。デフォルトでは、サーバーは参加および退出に関するイベントを内部
で処理します。サーバーサイドスクリプトのこれらのイベントを処理するには、Application.xml ファイルを設定しま
す。204 ページの「イベントをスクリプトエンジンにディスパッチするサーバー設定」を参照してください。
• Client.onGroupLeave(groupspecDigest)
ピアがグループを退出するときに呼び出されます。
• GroupControl.addMemberHint(peerID)
その peerID がグループのメンバーであることを指定するレコードを手動で追加します。トポロジーに必要な場合にのみ、
すぐにこのピアへの接続が試行されます。
• GroupControl.addNeighbor(peerID)
既にグループに存在しているはずの指定された peerID へ直ちに直接接続することによって、手動でネイバーを追加しま
す。
• GroupControl.groupspecDigest
正規の groupspec のダイジェスト。クライアントが参加したグループを安全に識別します。
GroupControl オブジェクトを使用して、ネイバーを追加するようにピアに通知します。アプリケーションコードで、
onGroupJoin() および onGroupLeave() イベントを受信したときにグループ名とグループ内のピアのテーブルを維持します。
新しいピアをネイバーとして追加するように伝えるメッセージをグループ内のピアに送信します。
GroupSpecifier.serverChannelEnabled フラグが true に設定された状態でクライアントがグループに参加すると、
Client.onGroupJoin() コールバックイベントがサーバーサイド ActionScript に送信されます。このメソッドのパラメーター
は、グループの正規の GroupSpecifier 文字列のダイジェクトを含んだ GroupControl オブジェクトです。スクリプトで、
この groupspecDigest 文字列は、接続されたクライアントとグループのメンバーであることを示す GroupControl オブ
ジェクトのリストを格納するテーブルのキーとして使用できます。あるクライアントがグループに参加すると、同じグルー
プに参加している他の接続されたクライアントをこのテーブル内で検索します。検索に成功した場合、
groupControl.addNeighbor() または groupControl.addMemberHint() メソッドを呼び出し、新しいクライアントをピア接続で
グループ内の他のネイバーにブートストラップします。
グループに参加した特定の NetGroup オブジェクトへの groupspecDigests のマッピングを維持するには、サーバーサイド
の GroupSpecifier.encodeGroupspecDigest() メソッドを呼び出します。ソース GroupSpecifier がある場合、このメソッドは
groupspecDigest を生成します。ソース GroupSpecifier がない場合、サーバーは GroupControl オブジェクトの
groupspecDigest プロパティを不透明な文字列として扱う必要があります。ダイジェクトから開始 groupspec 文字列の値
に移動することはできません。
最終更新日 2011/10/10
207
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
次のサーバーサイドスクリプトは、サーバーチャネルブートストラップ API を使用します。
var groups = {};
Client.prototype.onGroupJoin = function(groupControl)
{
groupControl["client"] = this; // Remember the associated Client.
var groupControlArray = groups[groupControl.groupspecDigest];
if (groupControlArray)
{
trace("Register Client in existing Group (by groupspec digest): " +
groupControl.groupspecDigest +
", current Group size is: " +
groupControlArray.length);
// find a random member to bootstrap with
r = Math.random();
index = Math.floor(r * groupControlArray.length);
var peerGroupControl = groupControlArray[index];
groupControl.addNeighbor(peerGroupControl["client"].farID);
groupControlArray.push(groupControl);
}
else
{
trace("Track client joining new Group (by groupspec digest): " + groupControl.groupspecDigest);
groupControlArray = [];
groupControlArray.push(groupControl);
groups[groupControl.groupspecDigest] = groupControlArray;
}
}
これらの API の詳細については、「サーバーサイド ActionScript リファレンスガイド」を参照してください。
配信された紹介の API
配信された紹介のサーバーサイド ActionScript API を使用して、ピア紹介プロセスを制御し、共有されたピアレジストリ
を作成してください。
ピア紹介プロセスの制御
• Application.onPeerLookup()
クライアントがピア参照を開始するときに呼び出されます。このイベントは次のプロパティを持つオブジェクトを受け取
ります。
プロパティ
データ型
説明
targetPeerID
文字列
参照を開始するピアが接続するターゲットピアのピア ID。
initiatorAddress
文字列
接続要求を開始するピアの IP アドレス。リダイレクト情報をこのア
ドレスに送信します。
tag
ByteArray
この参照要求を一意に識別する値。
interfaceID
数値
要求を受信した RTMFP インターフェイスを識別します。
• Application.sendPeerRedirect()
application.onPeerLookup() コールバック関数からこのメソッドを呼び出し、参照を開始するピアにターゲットピアのア
ドレスの配列を送信します。
最終更新日 2011/10/10
208
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
• Client.introducePeer()
接続要求を開始したピアとの接続を開くようにターゲットピアに要求します。
これらの API の詳細については、「サーバーサイド ActionScript リファレンスガイド」を参照してください。
ピアレジストリの作成
これらの API を使用して、ピアレジストリを作成します。ピアレジストリには、紹介者に接続するすべてのクライアントの
ピア ID と IP アドレスが一覧表示されます。分散環境で紹介者として機能するすべてのサーバーは、このピアレジストリを
共有し、ピア参照を受信すると、このレジストリを使用してピアを検出します。ピアレジストリを作成して共有するアプリ
ケーションロジックを記述します。
• Client.farAddress
サーバーがクライアント接続の作成元を参照するときに取得する IP アドレスとポート番号。
• Client.nearAddress
クライアントが接続されているサーバーのパブリックアドレス。
• Client.potentialNearAddresses
サーバーとの通信に使用可能なパブリックインターフェイス。
• Client.reportedAddresses
クライアントが RTMFP トラフィックを受信できるアドレス。クライアントは、サーバーへの RTMFP 接続の存続期間
中に、この値を複数回更新することがあります。この値には、クライアントがその NAT の内側で開いた IP アドレスと
ポートを含むことができます。その場合には、共通の NAT の内側で他のピアと対話するためにこれらのアドレスとポー
トを使用します。
• Client.onFarAddressChange()
クライアントの farAddress が変化したときに呼び出されます。例えば、LAN からワイヤレス接続へのクライアントトラ
ンジションの際にアドレスが変化した場合などです。
• Client.onReportedAddressChange()
クライアントが新しいアドレスを報告すると呼び出されます。
これらの API の詳細については、「サーバーサイド ActionScript リファレンスガイド」を参照してください。
例:サーバー間の紹介配信
これは、サーバー間に紹介を配信する方法の高いレベルの例です。
サーバーのグループに紹介を配信するには、すべてのサーバーが、接続されたすべてのクライアントのピア ID と IP アドレ
スを認識している必要があります。これらの値をピアレジストリで追跡します。次の例では、ピアレジストリを制御する次
の関数があることを前提としています。
• addClient(peerId, clientAddresses)
クライアントがサーバーに接続するときに、ピア ID およびとアドレスをピアレジストリに追加します。
• removeClient(peerId)
クライアントがサーバーから接続解除するときに、ピアレジストリから削除します。
• updateClient(peerId, clientAddresses)
報告されたアドレスの far アドレスが変更されたときに、ピアレジストリの報告されたアドレスを更新します。
• getClientIfLocal(peerId)
最終更新日 2011/10/10
209
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
指定された peerId のクライアントが現在のサーバーに接続されている場合は Client オブジェクトを返します。それ以外
の場合は null を返します。
• getRemoteClientAddrs(peerId)
指定されたピア ID のピアレジストリからクライアントアドレスを返します。クライアントが見つからない場合は null
を返します。
クライアントアドレスのピアレジストリを作成するには、すべてのクライアントアドレスを返すヘルパー関数を作成します。
function getClientRedirectAddrs(client)
{
var redirectAddresses = client.reportedAddresses.slice(0);
redirectAddresses.push(client.farAddress);
redirectAddresses.concat(client.potentialNearAddresses);
return redirectAddresses;
}
クライアントが RTMFP を経由して接続すると、クライアントがピアレジストリに追加されます。
application.onConnect = function(client) {
if (client.protocol == "rtmfp")
{
addClient(client.farID, getClientRedirectAddrs(client));
client.onFarAddressChange = function() {
updateClient(this.farId, getClientRedirectAddrs(client));
};
client.onReportedAddressesChange = function() {
updateClient(this.farId, getClientRedirectAddrs(client));
};
}
}
application.onDisconnect = function(client) {
removeClient(client.farId);
}
application.onPeerLookup() コールバック関数のリダイレクトメッセージと応答 Hello メッセージを送信します。
最終更新日 2011/10/10
210
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
application.onPeerLookup = function(event) {
// Check whether the target peer is local
// (connected to the same server as the initiating peer).
var targetPeer = getClientIfLocal(event.targetPeerID);
if (targetPeer)
{
// Send the addresses of the target peer to the initiating peer.
application.sendPeerRedirect(getClientRedirectAddrs(targetPeer), event);
// Note: getClientIfLocal() must return the actual client object,
// because that allows us to call introducePeer()
// The target peer sends a responder hello to the initiating peer.
targetPeer.introducePeer(event.initiatorAddress, event.tag);
}
else
{
// Client is not connected locally.
targetPeerAddrs = getRemoteClientAddrs(event.targetPeerID);
if (!targetPeerAddrs)
{
// Returning without calling application.sendPeerRedirect()
// prevents the peer-to-peer connection.
return;
}
// Send the addresses of the target peer to the initiating peer.
application.sendPeerRedirect(targetPeerAddrs, event);
}
}
2 台の Flash Media Server(サーバー A とサーバー B)の紹介者に対して前記のコードが使用される次のシナリオを考えま
す。クライアント 1 はサーバー A に、クライアント 2 はサーバー B に接続されています。クライアント 1 はクライアント 2
への接続を望んでいます。
•
クライアント 1 はサーバー A にピア参照要求を送信します。
•
ピア参照要求は、サーバーサイドスクリプトの application.onPeerLookup() コールバック関数を呼び出します。
•
クライアント 2 はサーバー A に接続されず、相応のローカルクライアントオブジェクトがないため、else コードブランチ
が実行されます。サーバー A は getRemoteClientAddrs() を呼び出して、共有ストアからターゲットアドレスを取得しま
す。これらのアドレスには、(クライアント 2 が直接接続されている)サーバー B のアドレスが含まれます。スクリプト
は application.sendPeerRedirect() を呼び出し、ターゲットアドレスをクライアント 1 に渡します。
•
リダイレクトがクライアント 1 に到着すると、Flash Player がピア参照要求をサーバー B のアドレスを含む、すべての
ターゲットアドレスに送信します。
•
要求がサーバー B に到着するときに、ローカルターゲットオブジェクトがあるため、if コードブランチが実行されます。
コードは sendPeerRedirect() をもう一度呼び出して、情報をクライアント 1 に送信します。ただし、現在はスクリプトに
サーバー B のクライアント 2 を表すクライアントオブジェクトがあるため、クライアント 2 で introducePeer() も呼び出す
ことができます。この呼び出しは、クライアント 2 にクライアント 1 へのパケットの送信を開始するように指示します
(クライアント 1 はサーバー A から最初の sendPeerRedirect() アドレスを取得したため、クライアント 2 にパケットを送
信しようとしています)。
•
両方のクライアントが互いにトラフィックを送信している場合は、必然的に NAT ホールパンチングが発生します。両方
のクライアントは互いのトラフィックを確認し、ピアツーピア接続を確立できます(両方のクライアントが行儀のよい
NAT の内側にあることが前提となります)。
最終更新日 2011/10/10
211
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ピアアシストネットワーキングアプリケーションの構築
紹介要求のフィルター処理
Flash Media Server 4.5
配信された紹介 API を使用して、紹介要求をフィルター処理することもできます。次のサンプルスクリプトは、ピア ID と
クライアントアドレスのマップを作成します。サーバーがピア参照要求を受信すると、application.onPeerLookup() コール
バックによってターゲットピアがマップにあるかどうかがチェックされます。マップにない場合、サーバーは参照要求を拒
否します。
// A registry mapping peer ID values to Client objects
// for this application instance.
var peerIDToClientMap = {};
// On client connect, add RTMFP clients to the peer ID registry.
application.onConnect = function(client) {
if (client.protocol == "rtmfp")
peerIDToClientMap[client.farID] = client;
}
//
application.onPeerLookup = function(event) {
var targetPeer = peerIDToClientMap[event.targetPeerID];
if(!targetPeer){
// Returning without calling application.sendPeerRedirect()
// prevents the peer-to-peer connection.
return;
}
}
これらの API の詳細については、「サーバーサイド ActionScript リファレンスガイド」を参照してください。
配信された紹介を監視する Administration API の使用
getServerStats() Administration API メソッドの呼び出しで返された次のプロパティを使用して、配信された紹介を監視し
ます。
• rtmfp_forwards
• rtmfp_lookups
• rtmfp_lookups_denied
• rtmfp_redirects
これらの統計を使用する多くの方法があります。参照数からリダイレクト数を引くと、無視または拒否された参照クエリー
の数が得られます。リダイレクト数から転送数を引くと、参照を開始したクライアントが別の Flash Media Server ノードに
リダイレクトされてターゲットピアに接続した参照の数が得られます。rtmfp_lookups_denied 統計は、明示的に拒否された
参照(例えば、無効な参照であるため)の数を追跡するカウンターです。これは、application.denyPeerLookup() が呼び出さ
れるとインクリメントされます。拒否の数が多すぎる場合、DOS 攻撃を示している可能性があります。
getServerStats() Administration API メソッドの呼び出しで返された次のプロパティを使用して、グループに参加およびグ
ループから退出するピアを監視します。
• group_join
• group_leave
最終更新日 2011/10/10
212
213
第 6 章:ソーシャルアプリケーションの開発
ソーシャルアプリケーションについて
重要:Flash Media Streaming Server は、サーバーサイドのスクリプティングをサポートしていないため、ソーシャルアプ
リケーションをサポートしません。
Adobe Flash Media Enterprise Server、Adobe Flash Media Interactive Server と Adobe Flash Media Development
Server では、ビデオアプリケーションのストリーミングに加え、ソーシャルアプリケーションやその他のリアルタイムコ
ミュニケーション用のアプリケーションをホスティングすることができます。ユーザーは、ライブのオーディオやビデオを
キャプチャして、サーバーにアップロードしたり、記録したり、他のユーザーと共有したりすることができます。また、こ
れらのサーバーエディションでは、多数のユーザー間でデータを同期するリモート共有オブジェクトへのアクセスが提供さ
れます。これは、オンラインゲームを開発するのに理想的です。
サーバーサイド ActionScript を使用して、他のシステムに接続できます。接続可能なシステムには、Java 2 Enterprise
サーバー、Web サービス、Microsoft .NET サーバーなどがあります。この接続性を利用することによって、アプリケー
ションは、データベース認証、Web サービスからのリアルタイム更新、電子メールなど、さまざまなサービスを活用するこ
とができます。
共有オブジェクトについて
共有オブジェクトを使用して、ユーザーを同期し、データを格納します。共有オブジェクトは、ゲームボード上の駒の位置
を保持したり、チャットのテキストメッセージをブロードキャストしたりするなど、あらゆる用途に使用できます。共有オ
ブジェクトを使用することによって、ユーザーの操作をリアルタイムで追跡することができます。
リモート共有オブジェクトを作成して使用します。リモート共有オブジェクトは、複数のクライアントアプリケーション間
でデータを共有するために使用します。1 人のユーザーが変更を行うことでサーバー上の共有オブジェクトが更新されると、
この共有オブジェクトは、他のすべてのユーザーにその変更を送信します。つまり、リモート共有オブジェクトは、多数の
ユーザーを同期するためのハブとして機能します。215 ページの「SharedBall サンプル」のセクションでは、あるユーザー
がボールを移動すると、すべてのユーザーにその移動が表示される例を示しています。
注意:Flash Media Streaming Server はリモート共有オブジェクトをサポートしません。
サーバーのすべてのエディションが、ローカル共有オブジェクトをサポートしています。これは、ブラウザーの cookie と
似た機能を提供します。ローカル共有オブジェクトはクライアントコンピューターに格納されており、サーバーを必要とし
ません。
ローカルまたはリモートのいずれの共有オブジェクトも、一時または永続のいずれかに分けられます。
•
一時共有オブジェクトは、サーバーサイドスクリプトによって作成されるか、共有オブジェクトに接続するクライアント
によって作成されます。最後のクライアントが切断し、サーバーサイドスクリプトによって共有オブジェクトが使用され
なくなると、その共有オブジェクトは削除されます。
•
永続共有オブジェクトは、すべてのクライアントが切断し、アプリケーションインスタンスの実行が停止した後も、その
データが保持されます。アプリケーションインスタンスが次回に起動されるときに、サーバー上の永続共有オブジェクト
を利用することができます。複数のアプリケーションセッションの間で状態を維持することができます。永続オブジェク
トはサーバーまたはクライアント上のファイルに格納されます。
永続的なローカル共有オブジェクト 永続的なローカル共有オブジェクトを作成するには、クライアントサイドの
SharedObject.getLocal() メソッドを使用します。永続的なローカル共有オブジェクトの拡張子は .sol です。
SharedObject.getLocal() コマンドの localPath パラメーターに値を渡すことで、オブジェクトを保存するディレクトリを指
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ソーシャルアプリケーションの開発
定することができます。ローカルまたはリモートに永続的に存在する共有オブジェクトに対するパスを一部だけ指定する
ことで、同じドメインの複数のアプリケーションが同じ共有オブジェクトにアクセスすることができます。
リモートに存在する永続的な共有オブジェクト サーバー上で永続的に存在するリモート共有オブジェクトを作成するに
は、クライアントサイドの SharedObject.getRemote() メソッドまたはサーバーサイドの SharedObject.get() メソッドで
persistence パラメーターに値 true を渡します。これらの共有オブジェクトの拡張子は .fso で、サーバー上で、共有オブ
ジェクトを作成したアプリケーションのサブディレクトリに保存されます。Flash Media Server がこれらのディレクト
リを自動的に作成するため、ユーザーがそれぞれのインスタンス名のディレクトリを作成する必要はありません。
リモートとローカルに永続的に存在する共有オブジェクト クライアント上とサーバー上に永続的に存在するリモート共
有オブジェクトは、クライアントサイドの SharedObject.getRemote() コマンドの persistence パラメーターにローカルパ
スを渡すことで作成します。ローカルに永続的に存在する共有オブジェクトの拡張子は .sor で、クライアント上の指定
されたパスに保存されます。リモートに永続的に存在する共有オブジェクトの拡張子は .fso で、共有オブジェクトを作
成したアプリケーションのサブディレクトリに保存されます。
リモート共有オブジェクト
リモート共有オブジェクトを作成する前に、NetConnection オブジェクトを作成してサーバーに接続します。接続される
と、SharedObject クラスのメソッドを使用して、リモート共有オブジェクトの作成や更新を行うことができるようになり
ます。以下に、リモート共有オブジェクトを使用する際の一般的な手順を示します。
1 NetConnection オブジェクトを作成してサーバーに接続します。
nc = new NetConnection();
nc.connect("rtmp://localhost/SharedBall");
これは、サーバーに接続する最も簡単な方法です。実際のアプリケーションでは、NetConnection オブジェクトにイベ
ントリスナーを追加したり、イベントハンドラーのメソッドを定義したりする作業が必要になる場合があります。詳細に
ついては、215 ページの「SharedBall サンプル」を参照してください。
2 リモート共有オブジェクトを作成します。正しく接続された場合は、SharedObject.getRemote() を呼び出してサーバー上
にリモート共有オブジェクトを作成します。
so = SharedObject.getRemote("ballPosition", nc.uri, false);
最初のパラメーターは、リモート共有オブジェクトの名前です。2 番目のパラメーターは、接続先のアプリケーションの
URI です。この URI は、NetConnection.connect() メソッドで使用した URI と同じものである必要があります。URI を
指定する最も簡単な方法は、nc.uri プロパティを使用する方法です。3 番目のパラメーターは、リモート共有オブジェク
トが永続であるかどうかを指定します。この場合、false を選択すると、一時共有オブジェクトになります。
3 リモート共有オブジェクトに接続します。共有オブジェクトが作成された場合は、前の手順で作成した NetConnection
オブジェクトを使用して、クライアントを共有オブジェクトに接続します。
so.connect(nc);
共有オブジェクトによってディスパッチされる sync イベントを処理するためのイベントリスナーを追加することも必要
です。
so.addEventListener(SyncEvent.SYNC, syncHandler);
4 リモート共有オブジェクトとクライアントを同期します。リモート共有オブジェクトの同期には、2 つの手順が必要で
す。最初に、個々のクライアントが変更を行うとき、またはデータ値を設定するときに、リモート共有オブジェクトを更
新する必要があります。次に、リモート共有オブジェクトに接続している他のすべてのクライアントを更新します。
a クライアントが変更を行っている時にリモート共有オブジェクトを更新するには、setProperty() を使用します。
最終更新日 2011/10/10
214
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ソーシャルアプリケーションの開発
so.setProperty("x", sharedBall.x);
共有オブジェクト内の値を更新するには、setProperty() を使用する必要があります。リモート共有オブジェクトには、
属性と値が格納される data プロパティがあります。ただし、ActionScript 3.0 では、次のように値を直接書き込むこ
とはできません。
so.data.x = sharedBall.x; // you can't do this
b 共有オブジェクトが更新されると、その共有オブジェクトは sync イベントをディスパッチします。他のクライアント
で変更を同期するには、共有オブジェクトの data プロパティの値を読み取ります。
sharedBall.x = so.data.x;
この処理は、通常は sync イベントハンドラー内で実行されます。215 ページの「SharedBall サンプル」にその例が
示されています。
SharedBall サンプル
SharedBall サンプルでは、一時リモート共有オブジェクトを作成します。このサンプルは、マルチプレイヤーゲームに似て
います。1 人のユーザーがボールを移動すると、他のすべてのユーザーのボールも移動されます。
注意:Flash Media Server の ルートインストールディレクトリ内の documentation/samples/SharedBall ディレクトリに
含まれている SharedBall のサンプルファイル(SharedBall.fla、SharedBall.as、SharedBall.swf)をご利用ください。
Flash Player で実行中の SharedBall アプリケーション
アプリケーションの実行
1 次の場所に SharedBall という名前のアプリケーションディレクトリを作成して、サーバーにアプリケーションを登録し
ます。
RootInstall/applications/SharedBall
2 Flash Media Server の ルートインストールディレクトリ内の documentation/samples/SharedBall ディレクトリに含
まれている SharedBall のサンプルファイルを開きます。
3 Web ブラウザーで SharedBall.swf を開きます。
4 ブラウザーウィンドウをもう 1 つ起動し、SharedBall.swf の 2 番目のインスタンスを開きます。
5 一方のウィンドウでボールを移動し、もう一方のウィンドウでボールの動きを観察します。
最終更新日 2011/10/10
215
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ソーシャルアプリケーションの開発
ユーザーインターフェイスを定義します
1 Flash で、ファイル/新規/ Flash ファイル(ActionScript 3.0)を選択し、「OK」をクリックします。
2 ツールボックスから矩形ツールを選択します。右下方向にドラッグして、次に、楕円ツールを選択します。
3 ステージ上に円を描画します。好きな色で塗り潰します。
4 円をダブルクリックし、修正/シンボルに変換を選択します。
5 シンボルに変換ダイアログボックスで、シンボルに ball という名前を付け、「ムービークリップ」が選択されていること
を確認して、「OK」をクリックします。
6 ステージ上で ball シンボルを選択し、プロパティインスペクター(ウィンドウ/プロパティを選択)で、このシンボル
に「sharedBall」というインスタンス名を付けます。
7 SharedBall.fla という名前を付けてこのファイルを保存します。
クライアントサイドコードの記述
サンプルファイルの SharedBall.as を参照してください。ここでの手順は、主要部分のみを示しています。
1 Flash Professional で、新しい ActionScript ファイルを作成します。
2 MovieClip を拡張するクラスを作成します。
public class SharedBall extends MovieClip {...}
FLA ファイル内の sharedBall シンボルはムービークリップシンボルなので、このクラスは MovieClip を拡張する必要
があります。
3 コンストラクターを作成します。コンストラクターにイベントリスナーを追加し、サーバーに接続します。
public function SharedBall()
{
nc = new NetConnection();
addEventListeners();
nc.connect("rtmp://localhost/SharedBall");
}
4 netStatus、mouseDown、mouseUp、mouseMove の各イベントのイベントリスナーを追加します。
private function addEventListeners() {
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
// sharedBall is defined in the FLA file
sharedBall.addEventListener(MouseEvent.MOUSE_DOWN, pickup);
sharedBall.addEventListener(MouseEvent.MOUSE_UP, place);
sharedBall.addEventListener(MouseEvent.MOUSE_MOVE, moveIt);
}
5 netStatus のハンドラー内で、正しく接続されたときにリモート共有オブジェクトを作成します ( サンプル AS ファイルに
記述されているように、接続が拒否された場合や失敗した場合のためのエラーハンドラーを必要に応じて作成します)。
共有オブジェクトに接続し、sync イベントリスナーを追加します。
switch (event.info.code)
{
case "NetConnection.Connect.Success":
trace("Congratulations! you're connected");
so = SharedObject.getRemote("ballPosition", nc.uri, false);
so.connect(nc);
so.addEventListener(SyncEvent.SYNC, syncHandler);
break;
...
}
6 ユーザーがマウスを移動したときに、setProperty() を使用して、ボールの位置の変更をリモート共有オブジェクトに設定
します。
最終更新日 2011/10/10
216
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
ソーシャルアプリケーションの開発
function moveIt( event:MouseEvent ):void {
if( so != null )
{
so.setProperty("x", sharedBall.x);
so.setProperty("y", sharedBall.y);
}
}
リモート共有オブジェクトが更新されると、そのリモート共有オブジェクトは sync イベントをディスパッチします。
7 すべてのクライアントの新しいボールの位置を更新するための sync イベントハンドラーを記述します。
private function syncHandler(event:SyncEvent):void {
sharedBall.x = so.data.x;
sharedBall.y = so.data.y;
}
so.data に書き込むことはできませんが、so.data の値を読み取ることはできます。
多数のユーザーに対するメッセージのブロードキャスト
クライアントまたはサーバーのいずれも、リモート共有オブジェクトを利用することによって、共有オブジェクトに接続し
ているすべてのクライアントに対してメッセージを送信することができます。メッセージの送信には、SharedObject.send()
を使用します。send() メソッドは、例えばテキストチャットアプリケーションに使用することができます。この場合、共有
オブジェクトをサブスクライブするすべてのユーザーがメッセージを受信します。
SharedObject.send() を使用する場合、メッセージの送信者もメッセージのコピーを受け取ることになります。
1 SharedObject.send() によって呼び出されるメソッドを記述します。
private function doSomething(msg:String):void {
trace("Here's the message: " + msg);
}
2 send() を呼び出して、メッセージをブロードキャストします。
so = SharedObject.getRemote("position", nc.uri, false);
so.connect(nc);
so.send("doSomething", msg);
最終更新日 2011/10/10
217
218
第 7 章:アプリケーションのセキュリティ確保
ストリームや共有オブジェクトなどのアセットに対するアクセスを許可または拒否するようにサーバーやアプリケーション
を設定できます。アプリケーションに接続されるクライアントを認証することもできます。
アプリケーションのセキュリティ確保について詳しくは、Adobe DevNet の記事、「Hardening Guide for Flash
Media Server」の「Developer Guidelines」の節を参照してください。Application.xml ファイル [Application.xml
ふぁいる ], サーバーサイド ActionScript, サーバー ,
Graeme Bull のサイト(fmsguru.com)には、セキュリティに関するいくつかのビデオチュートリアルがあります。
•Taking advantage of the Application.xml file settings to help protect your server
• Using the client Agent and Referrer to help protect your server
• Using the client IP to help protect your server
• Using server side client permissions to help protect your server
• Using writeAccess to help protect your server
アセットに対するアクセスの許可または拒否
アクセスコントロールについて
デフォルトでは、サーバーにアクセスしたユーザーは、すべてのストリームと共有オブジェクトに対するすべてのアクセス
権を持っています。ただし、サーバーサイド ActionScript を使用して、共有オブジェクトとストリームに対するダイナミッ
クアクセスコントロールリスト(ACL)を作成することができます。開発者は、共有オブジェクトまたはストリームの作
成、読み込みまたは更新を行うアクセス権を誰に与えるのかを制御することができます。
クライアントがサーバーに接続したときに、サーバーサイドスクリプト(main.asc または yourApplicationName.asc)
に Client オブジェクトが渡されます。それぞれの Client オブジェクトには、readAccess プロパティと writeAccess プロパ
ティが含まれています。これらのプロパティを使用して、接続ごとにアクセスを制御することができます。
ダイナミックアクセスコントロールの実装
Client.readAccess プロパティと Client.writeAccess プロパティは、文字列の値を受け付けます。これらの値には、次のように、
セミコロンで区切られた複数の文字列を含めることができます。
client.readAccess = "appStreams;/appSO/";
client.writeAccess = "appStreams/public/;appSO/public/";
デフォルトでは、readAccess、writeAccess の両方に、/ が設定されます。これは、クライアントはサーバー上のすべてのスト
リームと共有オブジェクトにアクセス可能であることを意味します。
ストリームに対するアクセスの許可
❖ main.asc ファイルの中に onConnect() 関数を追加し、サーバー上のディレクトリ名を指定します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
application.onConnect = function(client, name) {
// give this new client the same name as passed in
client.name = name;
// give write access
client.writeAccess = "appStreams/public/";
// accept the new client's connection
application.acceptConnection(client);
}
この main.asc ファイルは、appStreams/public で始まるすべての URI に対するアクセス権を付与します。
ストリームに対するアクセスの拒否
❖ main.asc の中に onConnect() 関数を追加し、client.writeAccess に null 値を指定します。
application.onConnect = function(client, name) {
...
// deny write access to the server
client.writeAccess = "";
}
共有オブジェクトに対するアクセスの定義
❖ main.asc の中に onConnect() 関数を追加し、URI と同じ命名規則を使用して共有オブジェクトの名前を指定します。
application.onConnect = function(client, name) {
...
client.writeAccess = "appSO/public/";
}
これによって、クライアントに対して、appSO/public/ で始まる URI を持つすべての共有オブジェクトへの書き込みアク
セス権を付与します。
クライアントの認証
Client オブジェクトのプロパティの使用
クライアントがアプリケーションに接続すると、サーバーは、クライアントの情報が含まれた Client オブジェクトを作成
し、それをサーバーサイド ActionScript 内の application.onConnect() ハンドラーに渡します。Client オブジェクトのプロパ
ティにアクセスするサーバーサイドコードを記述し、その値を使用して、接続を試みているクライアントの有効性を検証す
ることができます。
application.onConnect = function( pClient ) {
for (var i in pClient) {
trace( "key: " + i + ", value: " + pClient[i] );
}
}
クライアントの IP アドレスの確認
❖ main.asc の中で client.ip の値を確認し、必要に応じてアプリケーションに対するクライアントの接続を拒否します。
if (client.ip.indexOf("60.120") !=0) {
application.rejectConnection(client, {"Access Denied"} );
}
最終更新日 2011/10/10
219
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
参照元の URL の確認
❖ main.asc の中で、client.referrer の値を、アクセスを拒否する URL のリストに照らし合わせて確認します。アプリケー
ションに接続しようとしている SWF ファイルが、予期した場所からのものであるかどうかを確認します。リストに一致
するものがある場合は、クライアントからの接続を拒否します。
referrerList = {};
referrerList["http://www.example.com"] = true;
referrerList["http://www.abc.com"] = true;
if (!referrerList[client.referrer]) {
application.rejectConnection(client, {"Access Denied"} );
}
固有キーの使用
1 クライアントサイド ActionScript で、次のコードで示すように、ローカルコンピューターの時刻と乱数を連結して固有
キーを作成します。
var keyDate = String(new Date().getTime());
var keyNum = String(Math.random());
var uniqueKey = keyDate + keyNum;
2 このキーを、接続要求と共にサーバーに送信します。
nc.connect("rtmp://www.example.com/someApplication", uniqueKey);
3 main.asc ファイル内の次のコードは、接続要求の中の固有キーを探します。固有キーが存在しない場合または既に使用
されている固有キーの場合、接続は拒否されます。この方法によって、偽証者によるリプレイ接続の試みは失敗します。
clientKeyList = new Object();
// holds the list of clients by key
application.onConnect = function( pClient, uniqueKey ) {
if ( uniqueKey != undefined ) {
// require a unique key with connection request
if ( clientKeyList[uniqueKey] == undefined ) {
// first time -- allow connection
pClient.uniqueKey = uniqueKey;
clientKeyList[uniqueKey] = pClient;
this.acceptConnection(pClient);
} else {
trace( "Connection rejected" );
this.rejectConnection(pClient);
}
}
}
application.onDisconnect = function( pClient ) {
delete clientKeyList[pClient.uniqueKey];
}
Access プラグインの使用
Access プラグインは、外部からの要求がアプリケーションに渡される前に、その要求をインターセプトします。Access プ
ラグインのプログラムを作成することによって、あらゆる認証形式を使用することができます。
関連項目
230 ページの「Access プラグインの開発」
最終更新日 2011/10/10
220
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
Flash Player のバージョンの使用
接続時に受信するユーザーエージェントの文字列に基づいて、Flash Player を実行していないクライアントからコンテンツ
を保護することができます。ユーザーエージェントの文字列によって、プラットフォームと Flash Player のバージョンが識
別されます。以下にその例を示します。
WIN 8,0,0,0
MAC 9,0,45,0
この文字列にアクセスするには、次の 2 つの方法があります。
仮想キー Flash Player クライアントに基づいてストリームを再マッピングするようにサーバーを設定します。
Client.agent サーバーサイド ActionScript を使用して、接続のチャレンジを行います。
application.onConnect = function( pClient ) {
var platform
= pClient.agent.split(" ");
var versionMajor = platform[1].split(",")[0];
var versionMinor = platform[1].split(",")[1];
var versionBuild = platform[1].split(",")[2];
}
//
//
//
//
//
//
output example
Client.agent:
platform[0]:
versionMajor:
versionMinor:
versionBuild:
WIN 9,0,45,0
"WIN"
9
0
45
接続する SWF ファイルの検証
アプリケーションへの接続を許可する前に、クライアントの SWF ファイルが信頼できることを検証するよう、サーバーを
設定することができます。SWF ファイルを検証することによって、第三者が独自の SWF ファイルを作成してリソースをス
トリーミングすることを防止できます。SWF 検証は、Flash Player 9 アップデート 3 以降でサポートされます。
関連項目
52 ページの「Protected HTTP Dynamic Streaming の SWF 検証」
特定のドメインからの接続の許可または拒否
有効なクライアントの接続元のドメインがわかっている場合は、それらのドメインをホワイトリストで管理することができ
ます。逆に、既知の無効なドメインをブラックリストで管理することもできます。
Adaptor.xml ファイルにドメイン名の静的なリストを入力することができます。
また、独自のサーバーサイドコードやファイルを使用して、これらのリストを管理することもできます。次の例では、
bannedIPList.txt という名前のファイルに除外対象の IP アドレスのリストを格納しています。このファイルは随時に編集
することができます。
最終更新日 2011/10/10
221
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
// bannedIPList.txt file contents:
// 192.168.0.1
// 128.493.33.0
function getBannedIPList() {
var bannedIPFile = new File ("bannedIPList.txt") ;
bannedIPFile.open("text","read");
application.bannedIPList = bannedIPFile.readAll();
bannedIPFile.close();
delete bannedIPFile;
}
application.onConnect = function(pClient) {
var isIPOK = true;
getBannedIPList();
for (var index=0; index<this.bannedIPList.length; index++) {
var currentIP = this.bannedIPList[index];
if (pClient.ip == currentIP) {
isIPOK = false;
trace("ip was rejected");
break;
}
}
if (isIPOK) {
this.acceptConnection(pClient);
} else {
this.rejectConnection(pClient);
}
}
また、特定のドメインから短時間の間に要求が来ていないかを確認するためのサーバーサイドコードを作成することもでき
ます。
最終更新日 2011/10/10
222
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
application.VERIFY_TIMEOUT_VALUE = 2000;
Client.prototype.verifyTimeOut = function() {
trace (">>>> Closing Connection")
clearInterval(this.$verifyTimeOut);
application.disconnect(this);
}
function VerifyClientHandler(pClient) {
this.onResult = function (pClientRet) {
// if the client returns the correct key, then clear timer
if (pClientRet.key == pClient.verifyKey.key) {
trace("Connection Passed");
clearInterval(pClient.$verifyTimeOut);
}
}
}
application.onConnect = function(pClient) {
this.acceptConnection(pClient);
// create a random key and package within an Object
pClient.verifyKey = ({key: Math.random()});
// send the key to the client
pClient.call("verifyClient",
new VerifyClientHandler(pClient),
pClient.verifyKey);
// set a wait timer
pClient.$verifyTimeOut = setInterval(pClient,
$verifyTimeOut,
this.VERIFY_TIMEOUT_VALUE,
pClient);
}
application.onDisconnect = function(pClient) {
clearInterval(pClient.$verifyTimeOut);
}
ユーザーの認証
外部リソースを使用した認証
アクセスするユーザーが限られる場合は、証明書(ログイン名とパスワード)を要求し、データベース、LDAP サーバーま
たはその他のアクセス許可サービスなどの外部のリソースを使用して、この証明書を検証する方法が有効です。
1 SWF は、接続要求と共にユーザーの証明書を送信します。
クライアントは、クライアントサイド ActionScript を使用して、トークンまたはユーザー名/パスワードを送信しま
す。
var sUsername = "someUsername";
var sPassword = "somePassword";
nc.connect("rtmp://server/secure1/", sUsername, sPassword);
2 Flash Media Server は、サードパーティのシステムを使用して証明書を検証します。
最終更新日 2011/10/10
223
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
アプリケーションのセキュリティ確保
サーバーサイド ActionScript から外部ソースに対して呼び出しを行うには、WebService、LoadVars、XML クラス、
NetServices(Flash Remoting ゲートウェイへの接続)などのクラスを使用することができます。Flash Remoting の詳
細については、www.adobe.com/go/learn_fms_flashremoting_jp を参照してください。
load("NetServices.asc");
load("WebServices.asc");
// for Flash remoting
// for SOAP web services
pendingConnections = new Object();
application.onConnect = function( pClient, pUsername, pPassword ) {
// create a unique ID for the client
pClient.FMSid = application.FMSid++;
// place the client into a pending array
pendingConnections[FMSid] = pClient;
if (pUsername!= undefined && pPassword !=undefined) {
// issue the external call (3 examples below)
loadVars.send("http://xyz.com/auth.cfm");
webService.authenticate(FMSid, pUsername, pPassword);
netService.authenticate(FMSid, pUsername, pPassword);
}
}
// the result handler (sample only, you will have to customize this)
// this command will return a true/false and the FMS client id
Authenticate.onResult = { }
3 Flash Media Server は接続を受諾するか、拒否します。
接続情報が有効である場合、Flash Media Server は接続を受諾します。
loadVars.onData = function ( FMSid, pData ) {
if (pData) {
application.acceptConnection( pendingConnections[FMSid] );
delete pendingConnections[FMSid];
} else {
application. rejectConnection ( pendingConnections[FMSid] );
delete pendingConnections[FMSid];
}
}
トークンを使用した認証
これは、ユーザー名/パスワードによる認証の代替となる方法です。この方法では、クライアントのプロパティに基づいて
トークンが付与されます。
制御フローは次のようになります。
1 クライアントの SWF は、サードパーティに対して認証トークンを要求します。
2 サードパーティは、クライアントにトークンを返します。
3 クライアントは、接続要求と共にトークンを送信します。
4 Flash Media Server は、サードパーティのシステムを使用してトークンを検証します。
5 Flash Media Server は接続を受諾します。
最終更新日 2011/10/10
224
225
第 8 章:プラグインの開発
Adobe® Flash® Media Server は、C++ で記述されたプラグインアーキテクチャを提供します。このアーキテクチャによっ
て、サーバーの機能を拡張することができます。拡張されたアクセス、権限およびファイル管理ソリューションを備えた固
有のデプロイメントを構築するには、Access、Authorization および File プラグインを使用します。
例えば、アプリケーションレベルのコードに到達する前にクライアントの受諾、拒否またはリダイレクトを行うには、
Access プラグインを使用することができます。また、ストリームやサーバーイベントへのアクセスを制御するには
Authorization プラグインを、ファイル I/O メカニズムを作成するには File プラグインを使用することができます。
プラグインの API の詳細については、『Adobe Flash Media Server プラグイン API 参照』を参照してください。
Flash Media Server 4.5 のプラグインの新機能
Flash Media Server 4.5 には、プラグインに対する次の更新が含まれています。
• HTTP Dynamic Streaming ファイルと HTTP Live Streaming ファイルの操作は、File プラグインを介してルーティン
グされます。262 ページの「File プラグインを使用した HTTP ライブストリーミングコンテンツの管理」を参照してく
ださい。
バージョニング、アップグレードおよびサーバーエディショ
ン
サーバーエディションのサポート
次のプラグインは、Flash Media Enterprise Server、Flash Media Interactive Server および Flash Media Development
Server でサポートされます。
• Access プラグイン [Access ぷらぐいん ]
• Authorization プラグイン
• File プラグイン
次のプラグインは Flash Media Streaming Server でサポートされます。
• Access プラグイン
バージョニングについて
Authorization プラグインと File プラグインには、バージョニングと、付随する create メソッドおよび destroy メソッドが
あります。Access プラグインには、バージョニングはありません。サーバーは、create メソッドおよび destroy メソッドに
よって返された値に基づいて、File プラグインと Authorization プラグインのバージョン番号を検出します。特定のサー
バーバージョンのメソッドを使用するには、正しい create メソッドまたは destroy メソッドを使用し、正しいバージョン番
号を返します。例えば、Flash Media Server 4.0 機能を Authorization プラグインと共に使用するには、
FmsCreateAuthAdaptor3() を呼び出して 2.0 を返します。
注意:プラグインを Flash Media Server 3.0 機能に制限するには、FmsCreateXXXAdaptor2() への呼び出しからバージョン
0.0 を返します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
226
プラグインの開発
バージョニング API の詳細については、『Adobe Flash Media Server プラグイン API 参照』を参照してください。
File プラグインには次のバージョニングがあります。
サーバーのバージョン
プラグインのバー
ジョン
Create および Destroy メソッド
Flash Media Server 3.0 以前
0.0
FmsCreateFileAdaptor()
FmsDestroyFileAdaptor()
Flash Media Server 3.5
1.0
FmsCreateFileAdaptor2()
FmsDestroyFileAdaptor2()
Flash Media Server 4.0
1.0
FmsCreateFileAdaptor2()
FmsDestroyFileAdaptor2()
Authorization プラグインには次のバージョニングがあります。
サーバーのバージョン
プラグインのバー
ジョン
Create および Destroy メソッド
Flash Media Server 3.0 以前
0.0
FmsCreateAuthAdaptor()
FmsDestroyAuthAdaptor()
Flash Media Server 3.5
1.0
FmsCreateAuthAdaptor2()
FmsDestroyAuthAdaptor2()
Flash Media Server 4.0
2.0
FmsCreateAuthAdaptor3()
FmsDestroyAuthAdaptor3()
プラグインのアップグレード
すべての Flash Media Server 3.5.x プラグインは、32 ビット Flash Media Server 4 上で動作します。新しい API を含め、
Flash Media Server 4 の新機能を使用するには、プラグインをアップグレードします。新機能を使用しない場合は、既存の
プラグインコードを引き続き使用することができます。
64 ビットシステム上で 32 ビットのプラグインを使用するには、64 ビット Flash Media Server ライブラリを使用してプラ
グインを再コンパイルします。
32 ビットのサーバーで使用するための 32 ビットのプラグインの再コンパイル
1 Microsoft® Visual C++ 2003、Microsoft® Visual C++ 2005 または Microsoft Visual C++ 2008 を使用してプラグイ
ンを再コンパイルします。Linux では、GNU Compiler Collection 4.x (GCC 4.1 など ) でプラグインを再コンパイルし
ます。これで、CentOS もインストールされます。
2 File プラグインでは、FmsCreateFileAdaptor2() メソッドおよび FmsDestroyFileAdaptor2() メソッドを使用してバージョン
1.0 を返します。
3 Authorization プラグインでは、FmsCreateAuthAdaptor3() メソッドおよび FmsDestroyAuthAdaptor3() メソッドを使用
して、バージョン 2.0 を返します。
『Adobe Flash Media Server プラグイン API 参照』を参照してください。
64 ビットのサーバーで使用するための 32 ビットのプラグインの再コンパイル
• 32 ビットのプラグインコードを 64 ビットコードに移植する場合、一部のフィールドのデータ型が変更されていることに
注意してください。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
• rootinstall/samples/plugins/include フォルダーのインクルードファイルとライブラリを使用してプラグインを再コン
パイルします。
• Linux には、2 つのメイクファイル MakeFile.AuthModule64 と MakeFile.AuthModule があります。64 ビット用に
コンパイルするには、MakeFile.AuthModule64 を使用します。
• Windows では、Visual Studio 2008 以降の Visual C++ の 64 ビットコンパイラーをインストールします。ビルド/構
成マネージャ/ Release x64 を選択します。64 ビットインストールを構築します。
プラグインの操作
プラグインの開発とデプロイメントのワークフロー
注意:プラグインのアップグレードについては、226 ページの「プラグインのアップグレード」を参照してください。
1 組織のニーズに応じてサンプルのプラグインを変更したり、独自のプラグインを作成したりします。
227 ページの「サンプルファイル」を参照してください。
2 プラットフォーム用のプラグインの構築およびコンパイルを行います。
228 ページの「プラグインのコンパイル」を参照してください。
3 プラグインをデプロイします。
229 ページの「プラグインのデプロイメント」を参照してください。
サンプルファイル
サーバーには、プラグインごとにサンプルファイルがあります。上記のサンプルについては、API の使い方や独自のプラグ
インを作成する第一歩としてその使い方を学ぶためのサンプルとして使用してください。
注意:デフォルトのプラグインを構築するには、ファイルの作成を使用します。ファイルの作成を実行するには、-f オプ
ションと共にコマンドの作成を使用します。
Access プラグイン
次のサンプルファイルが rootinstall¥samples¥plugins¥access にインストールされます。
ファイル名
説明
adaptor.cpp
Access プラグインの C++ ファイルとヘッダーファイルのサンプル
sample.cpp
adaptor.h
AccessModuleSample.sln
AccessModuleSample.vcproj
Windows 環境で Access プラグインを構築するために、Microsoft Visual C++ で使用する作業ファイ
ル。ファイルの値を変更して、使用環境でのプラクティスを取り入れることができます。
Makefile.access
このファイルは Linux 上でデフォルトの Access プラグインを構築するために使用します。
StdAfx.h
ファイルのインクルード宣言のサンプル
StdAfx.cpp
Authorization プラグイン
次のサンプルファイルが rootinstall¥samples¥plugins¥auth にインストールされます。
最終更新日 2011/10/10
227
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
ファイル名
説明
AuthModule.cpp
Authorization プラグインの C++ ファイルのサンプル
AuthModule.sln
Windows 環境で Authorizaiton プラグインを構築するために、Microsoft Visual C++ で使用する作業
AuthModule.vcproj
ファイル。ファイルの値を変更して、使用環境でのプラクティスを取り入れることができます。
Makefile.AuthModule
このファイルは Linux 上でデフォルトの Authorization プラグインを構築するために使用します。
StdAfx.h
ファイルのインクルード宣言のサンプル
StdAfx.cpp
File プラグイン
次のサンプルファイルが rootinstall¥samples¥plugins¥file にインストールされます。
ファイル名
説明
SimpleFileAdaptor.cpp
File プラグインの C++ ファイルとヘッダーファイルのサンプル
SimpleFileAdaptor.h
FileModule.h
プラグインの create 関数と destroy 関数を定義するヘッダーファイル
FileUtil.cpp
ファイルとディレクトリを操作するためのユーティリティ関数
FileModule.sln
Windows 環境で File プラグインを構築するために、Microsoft Visual C++ で使用する作業ファイル。
FileModule.vcproj
ファイルの値を変更して、使用環境でのプラクティスを取り入れることができます。
Makefile.FileModule
このファイルは Linux 上でデフォルトの File プラグインを構築するために使用します。
StdAfx.h
ファイルのインクルード宣言のサンプル
StdAfx.cpp
ヘッダーファイル
ヘッダーファイル FmsAdaptor.h、FmsAuthActions.h、FmsAuthAdaptor.h、FmsAuthEvents.h、
FmsFileAdaptor.h、FmsMedia.h、IFCAccessAdaptor.h はプラグイン API を定義しており、
rootinstall¥samples¥plugins¥include にインストールされています。
プラグインのコンパイル
Windows でプラグインをコンパイルするには、Microsoft® Visual Studio .NET 2003、Microsoft Visual C++ 2005、
Microsoft Visual Studio .NET 2008 を使用します。Linux でプラグインをコンパイルするには、GNU Compiler
Collection 3.4.x を使用します。
注意:Authorization プラグインと Access プラグインには、コンパイル警告 ( 無害 ) があります。これらの警告はコンパイ
ル時に無視してください。
プラグインを Release として構築します。プラグインを Debug として構築する場合、サーバープロセスではモジュールが
ロードされません。
プラグインは、Windows システムでは共有ライブラリ(DLL)ファイルとして、Linux システムでは共有オブジェクト
(SO)ファイルとして実装されます。ファイル名は、libconnect.dll / libconenct.so、AuthModule.dll /
AuthModule.so および FileModule.dll / FileModule.so となります。
64 ビットバージョンの linux GCC コンパイラーで構築するには、GCC 用の -m32 スイッチと -B オプションを使用します。
-B スイッチが /usr/lib32 ライブラリを指すようにします。
最終更新日 2011/10/10
228
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
Access プラグインは、libconnect.dll / libconnect.so という名前にする必要があります。Authorization プラグインと
File プラグインには任意の名前を付けることができます。
プラグインのデプロイメント
デプロイされたプラグインは、サーバープロセスに組み込まれます。プラグインは、プロセスのスタートアップ中にロード
され、プロセスのシャットダウン中にアンロードされます。例えば、vhost が再起動と、新規コアプロセスが起動して
Authorization プラグインのコピーがロードされます。vhost が停止すると、コアプロセスにより Authorization プラグイ
ンがアンロードされます。
1 サーバーを停止するには、次のいずれかの操作を行います。
• Windows では、スタート/コントロールパネル/管理ツール/サービスを選択します。サービスの一覧から「Flash
Media Server(FMS)」を選択し、「停止」をクリックします。
• Linux では、シェルウィンドウを開いて、サーバーがインストールされているディレクトリ(cd /opt/adobe/fms)
に移動します。./server stop と入力します。
2 コンパイル済みのプラグインの DLL ファイルまたは SO ファイルを次のいずれかのフォルダーにコピーします。
• rootinstall/modules/access
• rootinstall/modules/auth
• rootinstall/modules/fileio
注意:フォルダー名は変更しないでください。複数の Authorization プラグインをデプロイする場合は、すべてのプラ
グインを /auth フォルダーにコピーしてください。
3 サーバーを起動するには、次のいずれかの操作を行います。
• Windows では、スタート/コントロールパネル/管理ツール/サービスを選択します。サービスの一覧から「Flash
Media Server(FMS)」を選択し、「開始」をクリックします。
• Linux では、シェルウィンドウを開いて、サーバーがインストールされているディレクトリ(cd /opt/adobe/fms)
に移動します。./server start と入力します。
一般的な開発タスク
プラグインからログファイルへのデータの送信
Authorization および File プラグインからログファイルにカスタムメッセージを送信するには、プラグインで
IFmsServerContext クラスの log() 関数を呼び出します。プラグインログファイルは RootInstall/logs ディレクトリにあ
り、デフォルトで fileio.NN.log および authMessage.NN.log という名前が付けられています。
注意:Authorization プラグインは、クライアント接続だけでなく、サーバーサイドの Stream.play() メソッドが呼び出され
たときに行われる接続のログも記録します。これらの接続は、access.log ファイルと authEvent.log ファイルでは IP アドレ
ス 127.0.0.1 によって区別されます。
log() 関数には、ログメッセージをシステムログ(Windows イベントビューアまたは Linux の syslog)にも記録するかどう
かを指定する引数があります。デフォルト値は false です。システムログに過度にログを記録すると、パフォーマンスの問題
を引き起こす可能性があります。
各ログファイルを有効または無効にするには、RootInstall/conf にある Server.xml 設定ファイルの Logging セクションを編
集します。ログファイルの場所と名前などの設定情報を追加または変更するには、RootInstall/conf にある Logger.xml
ファイルを編集します。詳細については、XML ファイル内のコメントを参照してください。
最終更新日 2011/10/10
229
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
Access プラグインは標準出力および標準エラーを閉じるプロセスによってホストされているので、プラグインの開発では、
これらを利用してメッセージをログに書き込むことはできません。代わりに、Access プラグインの場合は、明示的にメッ
セージをファイルに書き込みます。サンプルの Access プラグインでは、回避策が示されています。
RootInstall/samples/plugins/access/adaptor.cpp ファイルで FILE* logFile = fopen("SampleAdaptor.log", "a"); という行を検
索してください。
設定ファイルからのデータの取得
Server.xml 設定ファイルに格納されたカスタムデータを取得するには、Authorization プラグインまたは File プラグイン
の IFmsServerContext クラスの getConfig() 関数を呼び出します。プラグインのこのデータを分析すると、サーバーの設定
に応じてプラグインの異なる機能を有効にすることができます。
プラグインを使用すると、Plugins XML エレメントに格納されたデータを取得することができます。カスタムデータを追加
するには、RootInstall¥conf フォルダーにある Server.xml ファイルをテキストエディターで開き、データを追加します。
XML を検証し、サーバーを再起動します。
getConfig() への呼び出しでは、テキストノード値のみを取得することができます。メソッドへの呼び出しでは、エレメン
ト、複数のエレメント、またはネストされたエレメントとして追加された値を取得することができません。
IFmsServerContext->getConfig() の呼び出しの例については、AuthModule.cpp ファイルを参照してください。
タイムクリティカルな呼び出しの処理
サーバーからファイルへのすべての呼び出し、または Authorization プラグイン ( 例えば、Authorization プラグインの
authorize()) はタイムクリティカルです。呼び出しが返されるまでサーバーは保留状態になるので、できるだけ速く呼び出し
を処理し、サーバーに返す必要があります。呼び出しの処理に時間がかかり、待機またはスリープ操作が必要になった場合
は、渡された引数を保持して、プラグインにより作成されたスレッドプールに渡す必要があります。例として、
FileModule のサンプルを参照してください。
Access プラグインの開発
Access プラグインの概要
重要:サーバーのすべてのエディションで Access プラグインがサポートされています。しかし、Access プラグインは、
RTMFP 接続上ではサポートされません。
Access プラグインによって、セキュリティの層がもう 1 つサーバーに追加されます。この層では接続要求をインターセプト
し、要求がサーバーのスクリプト層に到達する前にクライアントとサーバーを検査して、要求の受諾、拒否またはリダイレ
クトのいずれの処理を行うかを決定します。使用できる Access プラグインは 1 つだけです。
サーバーに接続されているユーザー数や帯域幅の使用量などの基準に従って、接続要求の受諾、拒否またはリダイレクトを
行うように、プラグインをコーディングすることができます。
また、組織のユーザーとパスワードのデータベースに対しクエリーを実行して、どの接続要求を許可するかを決定すること
ができます。プラグインが接続を受諾すると、サーバーに対するそのユーザーのアクセス記録でデータベースを更新するこ
とができます。
サーバー上のファイルやフォルダーに対する読み取りおよび書き込みアクセスの設定、オーディオやビデオビットマップ
データに対するアクセス権限の設定およびクライアントプロパティの検査を行うことができます。
最終更新日 2011/10/10
230
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
Access プラグインの接続フロー
インストールされた Access プラグインは、サーバーの起動時にコンテキストポインターを使用して初期化されます。コン
テキストポインターとプラグインポインターは、Access プラグインとサーバーの間に双方向通信を提供します。
クライアントがサーバーへの接続を試みると、サーバーは Access プラグインが存在するかどうかを確認します。Access プ
ラグインが使用できる場合、このプラグインが接続要求を検査して、接続の許可、拒否またはリダイレクトを行います。
Access プラグインが使用できない場合、接続要求は通常通り進行します。
注意:インストールされたサーバーごとに、Access プラグインを 1 つだけ使用できます。
サーバーへの接続の書き換え
Access プラグインと Authorization プラグインはいずれも、サーバーへの接続を許可するために使用できます。ただし、
それぞれのプラグインは異なる場所で実行され、接続プロセス内の異なる段階でアクティブになります。
新しい接続がエッジプロセス(fmsedge)に到達し、接続メッセージ内のデータは(エッジプロセスで動作する)Access プ
ラグインに送信されます。この段階でプラグインは、IP アドレス、SWF ファイルの元の URL、接続(または「ターゲッ
ト」)URI、ユーザーエージェントなど、クライアントに関する情報を保持しています。この情報を使用して、Access プラ
グインは接続の受諾、拒否またはリダイレクトを行ったり、ターゲット URI を書き換えたりすることができます。ターゲッ
ト URI を書き換えると、接続先が別の vhost、アプリケーションまたはアプリケーションインスタンスに強制的に変更され
ます。アダプターへのソケットレベルの接続が既に行われているので、プラグインは接続先を別のアダプターに書き換える
ことはできません。
外部からの接続の接続先を別の vhost、アプリケーションまたはアプリケーションインスタンスに強制的に変更するには、
Access プラグインを使用する必要があります。Authorization プラグインに通知された時点では、ターゲット URI を書き
換えるには遅すぎます。また、Access プラグインは接続プロセスの早い段階で動作するので、接続をスクリーニングするに
は、このプラグインを使用するのが最も効率的です。許可の動作をできるだけ軽量にするためには、接続 URI を書き換える
必要がなくても、Access プラグインを使用してください。
Authorization プラグインは、接続がアプリケーションに転送された後は、コアプロセス(fmscore)で動作します。
Authorization プラグインは、クライアントによるアプリケーションへの接続試行を受諾、拒否またはリダイレクトするこ
とができますが、接続先を別の URI に書き換えることはできません。
注意:接続のリダイレクトは、接続 URI の書き換えとは異なります。クライアントをリダイレクトすると、新しい URI を
含むリダイレクトメッセージがクライアントに返されて、現在の接続が終了します。すると、クライアントは新しい URI へ
の接続を試みます。
Access プラグインのコードの記述
アドビが提供したサンプルの Access プラグインファイルのコードを変更したり、独自のプラグインを作成したりすること
ができます。
クライアント接続要求は、Access プラグインの onAccess() コールバック関数をトリガーします。接続要求を検査し、クラ
イアントプロパティを変更し、onAccess() コールバック関数による要求を受諾、拒否、またはリダイレクトするコードを記
述します。
クライアントフィールドに対するクエリーを実行するには、getValue() を呼び出します。クライアントフィールドを変更す
るには、setValue() を呼び出します。フィールドの一覧については、『Adobe Flash Media Server プラグイン API 参照』の
「fms_access」名前空間を参照してください。接続元の SWF ファイルまたはサーバーの URL であるフィールド x-page-url
が、Flash Media Server 3.5 に追加されました。
サーバーの統計 eTOTAL_CONNECTED、eBYTES_IN および eBYTES_OUT に対してクエリーを実行するには、getStats() を
呼び出します。
最終更新日 2011/10/10
231
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
フィールドに対してクエリーを実行し、接続ロジックを記述した場合は、accept()、reject() または redirect() を呼び出して、
サーバー上のアプリケーションに対するクライアントの接続を許可または拒否します。
コアプロセスへのアプリケーションの割り当て
コアプロセスにはアプリケーションを動的に割り当てることができます。この機能は、CPU 消費量および記録済みメディ
アのキャッシュサイズなどのリアルタイムのパフォーマンスカウンタに基づいて、複数のコアプロセスに負荷を分散する場
合に使用します。この機能は、特定のユーザーにに対して、高いサービス品質(QoS)を提供する場合にも使用することが
できます。
どのコアプロセスがアプリケーションを処理するかを指定するには、"coreIdNum" フィールドとコア番号を setValue() 関数に
渡します。コア番号は任意の正の整数でありえます。サーバーは core_number % number_of_ cores という式を使用して、
使用するコアプロセスを決定します。例えば、次のコードでは、コア番号 3 が割り当てられます。
char* coreId = "3";
if(!setValue("coreIdNum", coreId))
{
FILE * pFile = fopen ("error.log","a");
fprintf(pFile, "Core id = %s", coreId);
}
次のように getValue() を呼び出すと、クライアント接続が割り当てられているコアプロセスを特定することができます。
const char* coreId = getValue("coreIdNum");
FILE * pFile = fopen ("output.txt","a");
fprintf(pFile, "Core id = %s", coreId);
負荷分散
Access プラグインを使用して、CPU の使用状況や記録メディアのキャッシュサイズなど、パフォーマンス基準を監視し、
それらの基準に応じて負荷分散を実行するようにコーディングできます。複数のコアプロセスに対するアプリケーションの
分散は、Application.xml の numprocs および scope エレメントで定義されます。例えば、numprocs を 3 に、scope を
application に設定すると、各アプリケーションでは 3 つのコアプロセスで外部からの接続が処理されます。コアプロセスが
過負荷である場合は、過負荷になっているコアプロセスに外部からの新たな接続が送信されないようにする、Access プラグ
インを開発することができます。1 つの方法として、次のことを実行するプラグインコードを記述します。
1 各コアプロセスの統計を追跡します。Administration API である getFileCacheStats()、getAppStats()、getInstanceStats()
を使用します。
2 新しいクライアントが接続した場合には、コアプロセスが過負荷になっていないかどうかをプラグインコードで判断する
必要があります。過負荷になっている場合は、過負荷になっていない別のプロセスのコア ID をプラグインコードで判断
し、新しい接続をそのプロセスに送信します。
サービス品質(QoS)
特定のクライアントに対する QoS を高めるには、そのクライアントだけに特定のコアプロセスを使用することができます。
例えば、コンテンツへのアクセスについてプレミアムサブスクリプション料金を支払っている特定のクライアントに、可能
な限り最高度のパフォーマンスを提供するとします。この場合は、6 つのコアプロセスにアプリケーションを分散して各プ
ロセスの統計を監視する Access プラグインを開発できます。クライアントによっては、異なるコアプロセスがアプリケー
ションに対する接続を処理します。3 つのコアプロセスが上位のクライアントに対して予約され、残り 3 つのコアプロセス
がその他すべてのクライアントに割り当てられます。このプラグインは、各プロセスの統計を監視します。特定のプロセス
が過負荷になると、Access プラグインによって、過負荷になっているプロセスが新しい接続を処理することが防止されま
す。このプラグインは、処理能力があるプロセスに新しい接続をルーティングできます。
最終更新日 2011/10/10
232
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
サーバーのフォルダー権限の設定
Application.xml 設定ファイルの Access セクションを使用すると、Access プラグインのフォルダーレベルの権限を設定で
きます。この設定ファイルは、各仮想ホストディレクトリにあります。また、アプリケーションディレクトリにもある可能
性があります。FolderAccess エレメントが true に設定されている場合、Access プラグインの readAccess および writeAccess
フィールドを使用して個々のファイルに対する権限を設定することはできません。設定できるのはフォルダーレベルの権限
だけです。デフォルト値は false で、次のように個々のファイルに対する権限を設定することができます。
<!-- Controls libconnect.dll access configurations -->
<Application>
...
<Client>
...
<Access>
<FolderAccess>false</FolderAccess>
</Access>
...
...
</Application>
Authorization プラグインの開発
Authorization プラグインの概要
Authorization プラグインはクライアントに対し、サーバーイベントと、それらのイベントに関連付けられているフィール
ドへのアクセスを許可します。Authorization プラグインを使用すると、次のことを実行できます。
•
サーバーへの接続の許可
注意:Access プラグインも同様に接続を許可するために使用でき、動作はより軽くなります。詳細については、230
ページの「Access プラグインの概要」を参照してください。
•
ストリームの再生またはストリーム内のシークの許可
•
動的ストリームトランジションの許可
•
ストリームのパブリッシュまたはストリームの記録の許可
•
物理的な場所への論理 URL のマッピング
例えば、ビデオ Player でストリーム「foo」を再生する場合(ns.play("myvideos/foo"))、サーバーが要求を処理するとき
にこの仮想名を c:¥apps¥vidapp¥myvideos¥ にマッピングすることができます。Authorization プラグインを使用する
と、これを別の物理的な場所(c:¥myvideos¥ など)に再マッピングすることができます。
•
サーバーからのクライアントの切断
•
サーバーサイド ActionScript 内のメソッドの呼び出し
•
クライアント統計へのアクセス
•
パブリッシュしているストリーム内で新しいコーデックが検出されたときの識別
•
サイズまたは継続時間による記録サイズの制限
次の 1 つ以上の基準に従ってコンテンツをクライアントに配信するには、Authorization プラグインを使用します。
•
地理的な場所
•
サブスクリプションレベル
•
ストリームのオリジン
最終更新日 2011/10/10
233
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
•
特定のストリームに対するユーザーのアクセスの時刻と継続時間
Authorization プラグインを使用して、ストリームのサービス品質(QoS)を監視することもできます。プラグインはライ
ブストリームの QoS 情報を外部のログファイルに報告し、これをさらに別のカスタム構築されたツールに読み込むこともで
きます。
複数の Authorization プラグインの使用
外部からのイベントに対して順次アクションを実行するために、一連のプラグインを使用することができます。個々のプラ
グインに特定のタイプのイベントを割り当てます。例えば、auth1.dll(または auth1.so)でストリームの再生を許可し、
auth2.dll(または auth2.so)でストリームのパブリッシュを許可するなどの割り当てを行います。
注意:プラットフォーム間の互換性を維持するため、名前には小文字を使用します。
サーバーはプラグインをアルファベット順にロードします。サーバーは、クライアントによるイベント要求を、アルファ
ベット順に従って処理します。各プラグインは外部からの要求をフィルター処理します。
Authorization プラグインのコードの記述
サーバーは Authorization プラグインをロードする際に、次のいずれかのエントリポイントを予期しています。
FmsCreateAuthAdaptor() // Creates an Authorization plug-in.
FmsDestroyAuthAdaptor() // Destroys an Authorization plug-in.
FmsCreateAuthAdaptor2() // Creates an Authorization plug-in with versioning information.
FmsDestroyAuthAdaptor2() // Destroys an Authorization plug-in with versioning.
FmsCreateAuthAdaptor3() // Creates an Authorization plug-in with versioning information.
FmsDestroyAuthAdaptor3() // Destroys an Authorization plug-in with versioning.
使用しているサーバーのバージョンに対して正しいメソッドを使用してください。詳細については、225 ページの「バー
ジョニングについて」を参照してください。
イベントを発生時に処理するには、IFmsAuthAdaptor インターフェイスを実装します。このクラスには、authorize()、
notify() および getEvents() 関数が含まれます。
プラグインが作成されると、サーバーは getEvents() 関数を呼び出し、プラグインがどのイベントを処理するかを確認しま
す。サーバーが getEvents() を一度呼び出すと、イベントはプラグインの存続期間にわたって有効となります。
重要:E_CODEC_CHANGE イベントが除外されていない場合、プラグインでは、すべてのメッセージをスキャンしてコー
デックの変更を検出します。必要な場合にのみ、このイベントをサブスクライブします。このイベントは、サーバーと共に
インストールされた Authorization プラグインのサンプルコードでは無効です。
一部のイベントは、サーバーで実行する前にプラグインによって許可される必要がありますが、その他のイベントは、プラ
グインがイベントの通知を受け取ったことをサーバーに通知するだけで済みます。許可イベントが発生すると、サーバーは
プラグインの authorize() 関数を呼び出します。通知イベントが発生すると、サーバーはプラグインの notify() 関数を呼び出
します。これらの関数で、イベントが発生したときに実行されるコードを記述します。
サーバーは、プラグインが IFmsAuthServerContext クラスの onAuthorize() 関数を呼び出すまで操作を中断します。
authorize() 関数の最終行で onAuthorize() を呼び出します。その関数に、イベントに対するポインターと、イベントが許可さ
れているかどうかを示すブール値を渡します。この呼び出しにより、サーバー上で保留中になっていた操作が完了します。
IFmsAuthServerContext クラスの notify() 関数を呼び出すと、サーバーの操作が続行されます。notify() 関数の最終行で
onNotify() を呼び出します。イベントに対するポインターを渡します。この呼び出しにより、通知が完了してイベントが不
要になったことが、サーバーに通知されます。
イベントを処理する方法には、アクションをイベントに割り当てる方法と、authorize() 関数と notify() 関数にイベントを処
理するコードを記述する方法の 2 つがあります。
最終更新日 2011/10/10
234
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
イベントへのアクションの割り当て
イベントには、IFmsDisconnectAction および IFmsNotifyAction の 2 つのアクションを割り当てることができます。
IFmsDisconnectAction はイベントの発生時に 1 つ以上のクライアントを切断し、IFmsNotifyAction はイベントの発生時に、
サーバーサイドスクリプト内の Client オブジェクトまたはアプリケーションオブジェクトに対する関数を呼び出します。追
加できるアクションの数に制限はありません。アクションは、イベントが処理される直前に割り当てられる順序で実行され
ます。
イベントにアクションを割り当てるには、addDisconnectAction() または addNotifyAction() を IFmsAuthEvent インスタンス
から呼び出します。アクションは、イベントが処理される直前に実行されます。イベントに複数のアクションを割り当てる
と、アクションは割り当てられた順序で実行されます。
次のコードでは、IFmsNotifyAction インスタンス pAction を IFmsAuthEvent インスタンス m_pAev に追加しています。この
アクションは、サーバーサイドスクリプト内の method() を呼び出し、パラメータ 12345 を渡します。
FmsVariant field;
//action to notify SSAS by calling "method" with U16 variable = 12345
//and I64 variable client id
if (m_pAev->getField(IFmsAuthEvent::F_CLIENT_ID, field) == IFmsAuthEvent::S_SUCCESS)
{
I64 clientId = field.i64;
IFmsNotifyAction* pAction = m_pAev->addNotifyAction("Notified by adaptor");
pAction->setClientId(field);
const char mtd[] = "method";
field.setString(reinterpret_cast<I8*>(const_cast<char*>(mtd)));
pAction->setMethodName(field);
field.setU16(12345);
///script does not work with I64 and returns invalid type
//should be preset to double or string
//field.setI64(clientId); //wrong!!!
field.setDouble((double)clientId);
pAction->addParam(field);
}
注意:上述のサンプルコードは、rootinstall/samples/plugins/auth フォルダーの AuthModule.cpp ファイルから抜粋し
たものです。
IFmsNotifyAction インスタンスの addParam() を呼び出して、パラメーターをメソッドに渡すことができます。サーバーサイ
ドスクリプトでメソッドを定義する必要があります。setClientId() に値を渡すと、サーバーサイド Client オブジェクトでメ
ソッドが呼び出されます。setClientId() に値を渡さなかった場合、サーバーサイドアプリケーションオブジェクトでメソッ
ドが呼び出されます。例えば、次のサーバーサイド ActionScript コードは、Client オブジェクトに対する someMethod() を
定義しています。
application.onConnect = function(client){
client.someMethod = function(msg){
trace("inside someMethod");
}
}
ストリームパスのマッピング
重要:URL パラメーター内のコロンをエスケープするには、キャラクタ「%3A」を使用します。例えば、URL が
「rtmp://ip-addr/clientid/filename?foo=Smith:Joe」の場合は、この URL を「rtmp://ip-
addr/clientid/filename?foo=Smith%3AJoe」に変更します。
仮想ストリームパスを別の物理的な場所に再マッピングするには、authorize() 関数を使用します。例えば、クライアント 1
とクライアント 2 の両方がストリーム foo.flv の再生を要求した場合、2 つの E_FILENAME_TRANSFORM イベントが呼び出
されますが、クライアントごとに個別にストリームを再マッピングすることができます。例えば、クライアント 1 ではスト
リーム foo を c:¥yourpath1¥foo.flv に再マッピングし、クライアント 2 ではストリーム foo を c:¥yourpath2¥foo.flv に再
マッピングすることができます。
最終更新日 2011/10/10
235
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
論理ストリームを別の物理パスにマッピングするには、Application.xml ファイルで次のようにパラメーターを設定しま
す。
<Application>
...
<StreamManager>
...
<QualifiedStreamsMapping enable="true" />
クライアントがストリームを再生またはパブリッシュしたり、サーバーサイドの ActionScript でストリーム呼び出しを実
行したりする場合には必ず、E_FILENAME_TRANSFORM イベントが発生します。E_FILENAME_TRANSFORM イベントを
使用すると、F_STREAM_PATH プロパティを変更して、ストリームの物理的な場所のパスを変更することができます。
E_FILENAME_TRANSFORM イベントは、Authorization プラグインと File プラグインの間のリンクです。このイベントで
指定するストリームの物理的な場所へのパスは、特定のファイルの操作で使用するために File プラグインに渡されます。
イベントは次の順に発生します。
1 E_PLAY または E_PUBLISH 論理ストリームの名前をここで変更できます。
2 E_FILENAME_TRANSFORM 結果として生じる物理ストリームの名前をここで変更することがあります。
3 再生が行われます。
4 E_STOP または E_UNPUBLISH
E_FILENAME_TRANSFORM イベントについて
E_FILENAME_TRANSFORM イベントの動作は、Flash Media Server のリリースごとに改善されています。
バージョン 2.5.2 E_FILENAME_TRANSFORM イベントは、アプリケーションインスタンスのストリームごとに 1 回ずつ
呼び出されます。クライアントフィールドは使用できません。例えば、クライアント 1 がアプリケーション
streamtest/inst1 からファイル foo.flv を再生する場合、foo.flv(c:¥defaultpath¥foo.flv)への物理パスを使用して
E_FILENAME_TRANSFORM イベントが呼び出されます。ここで、c:¥yourpath¥yourfoo.flv への物理パスを再マッピング
するとします。アプリケーション streamtest/inst1 foo.flv に対して E_FILENAME_TRANSFORM は再度呼び出されず、
c:¥yourpath¥yourfoo.flv という新しいパスがすべてのクライアントに使用されます。
バージョン 2.5.3 E_FILENAME_TRANSFORM イベントは、ストリームを再生またはパブリッシュするたびに、クライア
ントごとに呼び出されます。クライアントフィールドは使用できます。例えば、クライアント 1 と クライアント 2 の両方が
ファイル foo.flv を再生するとします。この場合、2 つの E_FILENAME_TRANSFORM イベントが呼び出されますが、クラ
イアントごとにこれらのイベントを再マッピングすることができます。
バージョン 3.0 E_FILENAME_TRANSFORM イベントの動作は、再生リストを処理できるように改善されています。再生
リストでは、クライアントは多くのクリップを続けて再生します。E_FILENAME_TRANSFORM イベントは、次のシーケン
スのように、クリップが再生されるたびに呼び出されます。
play("clip0") / E_FILENAME_TRANSFORM / stop()
play("clip1") / E_FILENAME_TRANSFORM / stop()
E_FILENAME_TRANSFORM イベントは、次のシーケンスのように、クライアントが再生リストの同じクリップを複数回連
続して再生しても呼び出されません。
play("clip0") / E_FILENAME_TRANSFORM / stop()
play("clip1") / E_FILENAME_TRANSFORM / stop()
play("clip0") / E_FILENAME_TRANSFORM / stop()
play("clip0") / stop()
play("clip1")/ E_FILENAME_TRANSFORM / stop()
バージョン 3.5 E_FILENAME_TRANSFORM イベントは、次のシーケンスのように、クライアントが再生リストで新しい
クリップを再生するたびに呼び出されます。
最終更新日 2011/10/10
236
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
237
プラグインの開発
play("clip0")
play("clip1")
play("clip0")
play("clip0")
play("clip1")
/
/
/
/
/
E_FILENAME_TRANSFORM / stop()
E_FILENAME_TRANSFORM / stop()
stop()
stop()
stop()
クライアントが再生リストで同じクリップを複数回再生した場合に E_FILENAME_TRANSFORM イベントを使用してパスを
再マッピングするには、Application.xml ファイルで <QualifiedStreamsMapping enable="true"/> と設定します。シーケンス
の例を次に示します。
play("clip0")
play("clip1")
play("clip0")
play("clip0")
play("clip1")
/
/
/
/
/
E_FILENAME_TRANSFORM
E_FILENAME_TRANSFORM
E_FILENAME_TRANSFORM
E_FILENAME_TRANSFORM
E_FILENAME_TRANSFORM
-
Path
Path
Path
Path
Path
1/
1/
2/
3/
2/
stop()
stop()
stop()
stop()
stop()
<QualifiedStreamsMapping enable="false"/> と設定されている場合、E_FILENAME_TRANSFORM イベントはクリップの初回
再生時にのみ呼び出されます。
エッジサーバーおよびオリジンサーバーのデプロイメントの違い
Authorization プラグインはオリジンサーバーとエッジサーバーにデプロイすることができますが、それぞれの場合で機能
が異なります。
オリジン Authorization プラグインがオリジンサーバーにインストールされている場合、E_PLAY(ライブストリーム用)
イベントまたは E_LOADSEGMENT(記録ストリーム用)イベントがクリップを再生するために呼び出されます。記録スト
リームの再生を阻止するには、E_PLAY イベントではなく E_LOADSEGMENT イベントを処理します。
エッジ(コア)サーバーサイド ActionScript はエッジサーバーでは実行されないので、NOTIFY アクションは使用できず、
常に失敗のステータスが返されます。
エラーの処理
Authorization プラグインは、FMSCore プロセスによってロードされます。プラグイン内で例外が発生すると、
FMSCore がクラッシュします。
重要: Authorization プラグインは、例外を処理して FMSCore のクラッシュを防止する必要があります。
認証エラーの理由を示す文字列の指定
Flash Media Server 4.0
Authorization プラグインでは、認証エラーの理由を示す文字列を指定します。Authorization プラグインで、インター
フェイス IFmsAuthServerContext は IFmsAuthServerContext2 に拡張されています。このインターフェイスは、
IFmsAuthServerContext::OnAuthorize method を無効にして AuthFailureDesc 構造を組み込みます。
AuthFailureDesc 構造は、認証エラーの理由を示す文字列、エラーコード、ステータスコードを指定するのに使用します。
この機能を使用するには、FmsCreateAuthAdaptor3() を使用して IFmsAuthServerContext2 にパラメーターとして渡します。
サーバーは、IFmsAuthServerContext2::StatusCode enum を使用してエラーに関する NetStatus メッセージをクライアントに
送信します。
詳細については、
「Adobe Flash Media Server プラグイン API 参照」の IFmsAuthServerContext2 クラスを参照してくだ
さい。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
クライアント統計へのアクセス
C++ 層の Authorization プラグインを通じてクライアント統計にアクセスすると、サーバーサイドスクリプト内のクライ
アント統計にアクセスすることより、サーバーのパフォーマンスが向上します。Authorization プラグインは、要求を集約
してからサーバーに送信します。
次のクライアント統計は、FmsAuthAdaptor.h ファイルの FmsClientStats 構造体で定義されます。
統計
説明
bytes_in
受信した合計バイト数。
bytes_out
送信した合計バイト数。
msg_in
受信した メッセージの合計数。
msg_out
送信した メッセージの合計数。
msg_dropped
欠落した メッセージの合計数。
クライアント統計にアクセスするには、FmsCreateAuthAdaptor2() 関数を実装します。その例については、
RootInstall¥samples¥plugins¥auth にインストールされている AuthModule.cpp ファイルを参照してください。
クライアントがサーバーに接続すると、サーバーは E_CONNECT イベントを Authorization プラグインに送信します。
Authorization プラグインが E_CONNECT イベントを受信した後で、IFmsAuthServerContext::getClientStats() を呼び出して
統計を取得することができます。E_PLAY や E_STOP など、すべてのイベントには、F_CLIENT_STATS_HANDLE という
フィールドがあります。このクライアントの構造ハンドルを getClientStats() 呼び出しでサーバーに戻します。E_CONNECT
および E_DISCONNECT 以外の通知イベント中に F_CLIENT_STATS_HANDLE を使用する場合は、ハンドルを保存する必
要はありません。
クライアントが接続していることを確認するには、getClientStats() で呼び出しの戻りステータスを確認します。この確認は、
特に複数の Authorization プラグインを使用している場合に必要になります。例えば、プラグイン A が E_CONNECT イベ
ントにサブスクライブし、プラグイン B が E_DISCONNECT イベントにサブスクライブするとします。クライアントとサー
バーとの接続が切断されると、アダプター A は E_DISCONNECT メッセージを受信しません。
サーバーはクライアントから切断メッセージを受信すると、E_DISCONNECT イベントで Authorization プラグインに通知
します。F_CLIENT_STATS_HANDLE フィールドは、E_DISCONNECT イベントの後に無効になります。
スマートシーク
Flash Media Server 3.5.3
クライアントの NetStream.inBufferSeek プロパティが true の場合、「スマートシーク」が有効になっています。スマートシー
クにより、Flash Player は前後のバッファー内をシークできます。Player は、Flash Media Server にコマンドを送信して
バッファーを管理します。送信するコマンドは、「seekRaw」、「startTransmit」および「stopTransmit」です。
スマートシークが有効でクライアントが NetStream.seek() を呼び出すと、Authorization プラグインは E_CLIENT_SEEK イ
ベントを受信します。このイベントは、シークイベントをログに記述するために使用します。このイベントでは、
F_STREAM_SEEK_POSITION プロパティを使用できます。この読み取り専用プロパティは、クライアントがシークする位
置です。
注意:E_CLIENT_SEEK イベントは、通知イベントです。このイベントは、クライアントサイドのバッファー内をクライア
ントがシークできないようにする目的では使用できません。
E_START_TRANSMIT イベントは通知および認証イベントです。E_STOP_TRANSMIT イベントは、通知イベントです。
E_START_TRANSMIT イベントは、クライアントがサーバーにデータ送信の開始を要求することをブロックするために使用
します。
最終更新日 2011/10/10
238
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
認証プラグインは、Flash Player バッファーが閾値を下回るときに E_START_TRANSMIT イベントを受信します。このコマ
ンドは、バッファーの稼働率が低いことを理由に、より多くのデータを送信するようサーバーに要求します。このイベント
では、F_STREAM_TRANSMIT_POSITION プロパティを使用できます。この読み取り専用プロパティは、クライアントが
サーバーに送信の開始を要求する位置 ( ミリ秒単位 ) です。Authorization プラグインは Flash Player バッファーが閾値を
上回るときに E_STOP_TRANSMIT イベントを受信します。このコマンドは、バッファー内に十分なデータがあることを理
由に、送信を中断するようサーバーに要求します。このイベントでは、F_STREAM_TRANSMIT_POSITION プロパティを使
用できます。この読み取り専用プロパティは、クライアントが stopTransmit コマンドを送信したときにクライアントバッ
ファーの最後にあるデータの位置(ミリ秒単位)です。
ストリームの再接続
Flash Media Server 3.5.3
Flash Media Server 3.5.3 および Flash Player 10.1 を使用すると、接続が切断された場合や、クライアントが有線ネット
ワーク接続からワイヤレスネットワーク接続に切り替えた場合に、ストリームをシームレスに再接続するアプリケーション
を構築できます。
F_STREAM_OFFSET プロパティおよび F_STREAM_TRANSITION プロパティから情報を取得するには、E_PLAY イベント
を使用します。F_STREAM_OFFSET プロパティ(読み取り専用)は、再接続後にストリーミングを再開する位置(秒単位)
を示します。F_STREAM_TRANSITION プロパティ(読み取りと書き込み)は、NetStream.play2() 呼び出しでクライアント
が送信したトランジションモードを示します。ストリームの再接続のための値は、"resume" および "appendAndWait" です。
関連項目
151 ページの「切断時のストリームの再接続」
イベントとフィールドへのアクセス
サーバーはインターフェイスをイベントオブジェクト IFmsAuthEvent に提供します。これにより、プラグインはイベントに
アクセスすることができます。プラグインは、各イベントの間に特定のフィールドにアクセスできます。すべてのイベント
の間にすべてのフィールドにアクセスできるわけではありません。フィールドはそれぞれ読み取り専用または読み取りと書
き込み可能になっています。
フィールドは、アプリケーション、クライアントまたはストリームに関係します。例えば、F_CLIENT_* という形式の名前
を持つフィールドの値(F_CLIENT_URI や F_CLIENT_REDIRECT_URI など)は、クライアントから発生したものです。ク
ライアントイベントに関連付けられているイベントオブジェクトには、これらのフィールドの値が含まれます。
サーバーサイドスクリプトに関連付けられているイベントは、必ずしもクライアントに関連付けられていないため、
F_CLIENT_* フィールドに常に値が格納されているとは限りません。サーバーサイドスクリプトの呼び出しから
F_CLIENT_* フィールドの値を含める必要がある場合、Client オブジェクトに割り当てられているメソッドを使用して、
サーバーサイドスクリプトの呼び出しを呼び出す必要があります。例えば、play() メソッドは E_FILENAME_TRANSFORM
イベントを呼び出します。
Authorization プラグインのイベント
次の表に、Authorization プラグインのイベントの一覧と、notify() 関数と authorize() で使用できるイベントかどうかを示
します。
最終更新日 2011/10/10
239
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
240
プラグインの開発
イベント名
使用可能な
サーバー
Notify または
Authorize
説明
E_APPSTART
2.5
notify
アプリケーションを開始します。
E_APPSTOP
2.5
notify
アプリケーションを停止します。
E_CONNECT
2.5
notify、authorize
クライアントがサーバーとの間で TCP 制御接続
を確立しました。
E_DISCONNECT
2.5
クライアントとサーバーの間の TCP 接続が切断
notify
されています。
E_FILENAME_TRANSFO
RM
2.5
notify、authorize
サーバーは、クライアントによって要求された
論理ファイル名要求をマッピングするための権
限を要求しました。
E_PLAY
2.5
notify、authorize
ストリームを再生します。
E_STOP
2.5
notify
ストリームを停止します。
E_SEEK
2.5
notify、authorize
ストリームをシークします。
E_PAUSE
2.5
notify、authorize
ストリームの配信を一時停止します。
E_PUBLISH
2.5
notify、authorize
ストリームをパブリッシュします。
E_UNPUBLISH
2.5
notify
ストリームのパブリッシュを解除します。
E_LOADSEGMENT
2.5
notify、authorize
セグメントをロードします。
E_ACTION
2.5
N/A
イベントに割り当てられているアクションが実
行されました。
E_CODEC_CHANGE
3.5
notify
ストリーム中に新しいコーデックが検出されま
した。
E_RECORD
3.5
notify、authorize
ストリームを記録します。
E_RECORD_STOP
3.5
notify
ストリームの記録を停止します。
E_CLIENT_PAUSE
3.5
notify
クライアントがストリームに対してスマート
ポーズを実行します。
E_SWF_VERIFY
3.5.3
notify、authorize
SWF 検証処理が開始される前に呼び出されま
す。このイベントは、検証を禁止し接続を終了
するために使用します。また、このイベントを
使用して、呼び出し元 SWF のダイジェストを提
供することもできます。このメカニズムは、
サーバーの外部にあり、サーバーによって
キャッシュおよび管理されない SWF のインベン
トリを管理するために使用します。SWF が十分
に大きく、部分的な照合が必要な場合、このイ
ベントは複数回呼び出されます。
E_SWF_VERIFY_COMPL 3.5.3
ETE
notify、authorize
このクライアントに対する SWF 検証が正常に完
了しました。
E_CLIENT_SEEK
3.5.3
notify
クライアントがストリームに対してスマート
シークを実行します。
E_START_TRANSMIT
3.5.3
notify、authorize
ストリーム送信を開始します。
E_STOP_TRANSMIT
3.5.3
notify
ストリーム送信を停止します。
E_MAXEVENT
2.5
N/A
enum フィールドの合計イベント数。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
241
プラグインの開発
Authorization プラグインのフィールド
次の表に、Authorization プラグインのフィールドの一覧を示します。
フィールド
サーバーの データ型
バージョン
説明
F_APP_INST
2.5
文字列
アプリケーションインスタンス名。
F_APP_NAME
2.5
文字列
アプリケーション名。
F_APP_URI
2.5
文字列
クライアントの接続先アプリケーションの URI。値には、
サーバー名やポートの情報は含まれません。
F_CLIENT_AMF_ENCODING 2.5
I8
クライアントの Action Message Format(AMF)エン
コーディング。
F_CLIENT_AUDIO_CODECS
2.5
I32
クライアントでサポートされているオーディオコーデッ
クの一覧。
F_CLIENT_AUDIO_SAMPLE
_ACCESS
2.5
文字列
指定したフォルダーにあるストリームからの、生の非圧
縮のオーディオデータへのアクセスをクライアントに許
可します。
F_CLIENT_AUDIO_SAMPLE
_ACCESS_LOCK
2.5
I8
サーバーサイドスクリプトに Client.audioSampleAccess
F_CLIENT_CONNECT_TIME
3.5.3
プロパティの設定を許可(true)または禁止(false)す
るブール値。
I64
クライアントがサーバーに接続した時刻(1970 年 1 月 1
日からの秒数)。このイベントは、クライアントが関連
付けられている任意のイベントから取得できます。この
フィールドが正常に取得される場合、getField() 関数は
S_SUCCESS を返します。
3.5.2
U8
特定の NetConnection に対して setsockopt で使用する
DSCP ビット。
F_CLIENT_DIFFSERV_MASK 3.5.2
U8
setsockopt で使用する DSCP マスク。
F_CLIENT_DIFFSERV_BITS
F_CLIENT_FAR_ID
3.5
文字列
クライアントの far ID。
F_CLIENT_FAR_NONCE
3.5
文字列
クライアントの far nonce。
F_CLIENT_FORWARDED_F
OR
4.0
文字列
F_CLIENT_ID
2.5
HTTP プロキシにより RTMPT セッションに対して追加
される x-forwarded-for ヘッダー。
I64
クライアントを一意に識別する 64 ビット整数値(この
値は、プロセスにまたがって一意ではありません)。
F_CLIENT_IP
2.5
文字列
クライアントの IP アドレス。
F_CLIENT_NEAR_ID
3.5
文字列
クライアントの near ID。
F_CLIENT_NEAR_NONCE
3.5
文字列
クライアントの near nonce。
F_CLIENT_PAGE_URL
2.5
文字列
クライアントの SWF ファイルの URL(このフィールド
は、クライアントが Flash Player 8 以降を使用している
場合にだけ設定されます)。
F_CLIENT_PROTO
2.5
文字列
サーバーに接続するためにクライアントが使用するプロ
トコル。
F_CLIENT_PROTO_VER
3.5
文字列
サーバーに接続するためにクライアントが使用するプロ
トコルのバージョン。
F_CLIENT_READ_ACCESS
2.5
文字列
クライアントに読み取りアクセス権が与えられているア
プリケーションリソース(共有オブジェクトおよびスト
リーム)を含むディレクトリの文字列。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
242
プラグインの開発
フィールド
サーバーの データ型
バージョン
F_CLIENT_READ_ACCESS_L 2.5
OCK
I8
説明
サーバーサイドスクリプトに Client.readAccess プロパ
ティの設定を許可(true)または禁止(false)するブー
ル値。
F_CLIENT_REDIRECT_URI
3.0
文字列
接続のリダイレクト先の URI。
F_CLIENT_REFERRER
2.5
文字列
この接続の作成元の SWF ファイルまたはサーバーの
URL。
F_CLIENT_SECURE
2.5
I8
接続が安全(true)かそうでないか(false)を示すブー
ル値。
F_CLIENT_STATS_HANDLE
3.5
I64
クライアントの構造ハンドルを一意に識別する文字列。
F_CLIENT_SWFV_DEPTH
3.5.3
I64
SWF の検証の間、ダイジェストに対応する元の SWF の
64 ビットサイズ。
F_CLIENT_SWFV_DIGEST
3.5.3
U8*
SWF の検証の間、バイトバッファーとしての 32 ビット
ハッシュダイジェスト。
F_CLIENT_SWFV_EXCEPTIO 3.5.3
N
I8
このクライアントが SWF 検証に対する例外であるか
(true)そうでないか(false)を示すブール値。通常は
SWF 検証の対象になるクライアントを要件から除外する
には、この値に true を設定します。このフィールドは、
設定ファイル Application.xml の
UserAgentExceptions 関数と同等ですが、ここでは 1
つのクライアントを除外します。
F_CLIENT_SWFV_RESULT
4.0
なし
SWF 検証の完了結果。可能な値は、eSWFMatch enum
で定義されています。
F_CLIENT_SWFV_TTL
3.5.3
I32
SWF 検証の間、キャッシュ内の各 SWF ハッシュの有効
時間(秒単位)。
F_CLIENT_SWFV_VERSION
3.5.3
I8
SWF 検証の間、プロトコルのバージョン。
F_CLIENT_TYPE
2.5
I32
クライアントの種類。可能な値は、Normal、Group、
GroupElement(エッジサーバーを通じて接続されたク
ライアント)、Service、All です。
F_CLIENT_URI
2.5
文字列
サーバーに接続するためにクライアントが指定した URI。
値には、アプリケーション名やインスタンス名は含まれ
ません。
F_CLIENT_URI_STEM
2.5
文字列
サーバーに接続するためにクライアントが指定した URI
の、クエリ文字列を除く語幹部分。
F_CLIENT_USER_AGENT
2.5
文字列
クライアントのユーザーエージェント。
F_CLIENT_USERDATA
3.5.3
U8*
このフィールドは、いくつかのユーザーデータをクライ
アントに関連付けるために使用します。このフィールド
は、クライアントが関連付けられている任意の許可イベ
ントから設定します。このフィールドは、クライアント
に関連付けられている以降の任意のイベントで取得しま
す。ユーザーデータが正常に取得または設定された場
合、getField() 関数と setField() 関数は、S_SUCCESS を
返します。FmsVariant に格納できるものであれば何で
も設定できます。データの設定時には、サーバーは保存
前にコピーを作成します。データの取得時に、イベント
の有効期間を超えてデータの有効性を保つ必要がある場
合、プラグインはコピーを作成する必要があります。
F_CLIENT_VHOST
2.5
文字列
クライアントが接続されているアプリケーションの仮想
ホスト。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
243
プラグインの開発
フィールド
サーバーの データ型
バージョン
説明
F_CLIENT_VIDEO_CODECS
2.5
I32
クライアントでサポートされているビデオコーデックの
一覧。
F_CLIENT_VIDEO_SAMPLE_ 2.5
ACCESS
文字列
指定したフォルダーにあるストリームからの、生の非圧
縮のビデオデータへのアクセスをクライアントに許可し
ます。
F_CLIENT_VIDEO_SAMPLE_ 2.5
ACCESS_LOCK
I8
サーバーサイドスクリプトに Client.videoSampleAccess
プロパティの設定を許可(true)または禁止(false)す
るブール値。
F_CLIENT_WRITE_ACCESS
2.5
文字列
クライアントに書き込みアクセス権が与えられているア
プリケーションリソース(共有オブジェクトおよびスト
リーム)を含むディレクトリの文字列。
F_CLIENT_WRITE_ACCESS_
LOCK
2.5
I8
サーバーサイドスクリプトに Client.writeAccess プロパ
F_MAXFIELD
3.5
なし
enum フィールドの合計フィールド数。
F_OLD_STREAM_NAME
3.5
文字列
switch または swap の以前のストリーム。
F_OLD_STREAM_QUERY
3.5
文字列
switch または swap の以前のストリームクエリ文字列。
F_OLD_STREAM_TYPE
3.5
文字列
switch または swap の以前のストリームタイプ。
F_SEGMENT_END
3.0
I64
セグメントの末尾の境界(バイト単位)。
E_LOADSEGMENT のみで使用可能です。
F_SEGMENT_START
3.0
I64
セグメントの先頭の境界(バイト単位)。
E_LOADSEGMENT のみで使用可能です。
F_STREAM_CODEC
3.5
U16
ストリーム中に検出されたコーデックの値。E_CODEC
ティの設定を許可(true)または禁止(false)するブー
ル値。
のみで使用可能です。
F_STREAM_CODEC_TYPE
3.5
U16
ストリーム中に検出されたコーデックの種類。E_CODEC
のみで使用可能です。
F_STREAM_ID
3.5
I32
F_STREAM_IGNORE
2.5
I8
F_STREAM_LENGTH
2.5
浮動小数
ストリーム ID。
タイムスタンプを無視するか(true)無視しないか
(false)を示すブール値。
ストリームの長さ。E_PLAY 以外のストリームイベント
では、F_STREAM_SEEK_POSITION、
F_SEGMENT_START および F_SEGMENT_END フィール
ドを使用します。
F_STREAM_LIVE_EVENT
3.0
なし
このフィールドは、ストリームをライブイベントに割り
当てるために使用します。サーバーはライブイベントを
使用してストリームを HTTP 動的ストリーミングマニ
フェストファイルに格納します。このフィールドは、
サーバーサイド ActionScript の Stream.liveEvent プロ
パティと同じです。
F_STREAM_LIVE_PUBLISH_
PENDING
3.5.2
I32
ブール値です。false の場合、クライアントがストリーム
を再生して SWITCH トランジションを実行し、ストリー
ムがまだパブリッシュされていない場合、クライアント
は NetStream.Play.StreamNotFound メッセージを受信
します。true の場合、サーバーはストリームのパブリッ
シュを待つため、クライアントはメッセージを受信しま
せん。
F_STREAM_NAME
2.5
文字列
ストリームの名前。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
244
プラグインの開発
フィールド
サーバーの データ型
バージョン
F_STREAM_OFFSET
3.8
浮動小数
説明
F_STREAM_TRANSITION がオフセットの場合のオフセッ
ト値。
F_STREAM_PATH
2.5
文字列
サーバー上のストリームの物理パス。プラグインがエッ
ジサーバーにデプロイされている場合、キャッシュの物
理パス。
F_STREAM_PAUSE
3.0
I8
一時停止するか一時停止を解除するかを示すブール値。
E_PAUSE のみで使用できます。
F_STREAM_PAUSE_TIME
3.0
浮動小数
ストリームが一時停止された時刻。E_PAUSE のみで使用
できます。
F_STREAM_PAUSE_TOGGL
E
3.0
F_STREAM_POSITION
2.5
I8
ストリームの一時停止トグル。E_PAUSE のみで使用でき
ます。
浮動小数
ストリームの位置。E_PLAY 以外のストリームイベント
では、F_STREAM_SEEK_POSITION、
F_STREAM_PAUSE_TIME、F_SEGMENT_START および
F_SEGMENT_END フィールドを使用します。
F_STREAM_PUBLISH_BROA 3.0
DCAST
I32
3.0
I32
F_STREAM_PUBLISH_TYPE
ブロードキャストまたはマルチキャスト。現在サポート
されていません。
ストリームパブリッシングの種類(E_PUBLISH のみで使
用できます)。記録の場合 0、記録および既存のストリー
ムへの追加の場合 1、記録中のギャップを保持しつつ記
録および既存ストリームへの追加の場合 2、ライブの場
合 -1。
F_STREAM_QUERY
2.5
文字列
ストリームに追加されるクエリ(例えば
streamName?streamQuery)。
F_STREAM_RECORD_MAX
DURATION
3.5
ストリーム記録の最大時間(秒単位)。E_RECORD のみ
で使用できます。
F_STREAM_RECORD_MAXS 3.5
IZE
F_STREAM_RESET
浮動小数
3.0
浮動小数
ストリーム記録の最大サイズ(KB 単位)。E_RECORD の
みで使用できます。
I8
ストリームの再生リストへの追加を許可するか(true)
禁止するか(false)を示すブール値。E_PLAY 以外のス
トリームイベントでは、F_STREAM_PUBLISH_TYPE を使
用します。
F_STREAM_SEEK_POSITION 3.0
I8
ストリームのシーク先の位置。E_SEEK のみで使用でき
ます。
F_STREAM_TRANSITION
3.5
F_STREAM_TRANSMIT_POS 3.0
ITION
F_STREAM_TYPE
2.5
文字列
switch または swap のトランジションモード文字列。
浮動小数
ストリームの開始と停止位置。E_START_TRANSMIT お
よび E_STOP_TRANSMIT のみで使用できます。
文字列
ストリームのファイルタイプ。
Authorization プラグインのイベントとフィールドのサポート一覧
次の表に、各イベントからアクセスできるフィールドを示します。イベントが多数あることから、1 つの表に示すことがで
きません。そのため、一覧は複数の表に分かれています。各表には、すべてのフィールドと一部のイベントを示します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
245
プラグインの開発
E_APPSTART
E_APPSTOP
E_CONNECT
E_DISCONNECT
F_APP_INST
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_APP_NAME
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_APP_URI
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AMF_ENCOD N/A
ING
N/A
読み取り専用
読み取り専用
F_CLIENT_AUDIO_COD
ECS
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_AUDIO_SAM
PLE_ACCESS
N/A
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_AUDIO_SAM
PLE_ACCESS_LOCK
N/A
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_CONNECT_TI
ME
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_DIFFSERV_BI
TS
N/A
N/A
読み取りと書き込み
N/A
F_CLIENT_DIFFSERV_M
ASK
N/A
N/A
読み取りと書き込み
N/A
F_CLIENT_FAR_ID
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_FAR_NONCE
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_FORWARDED N/A
_FOR
N/A
読み取り専用
読み取り専用
F_CLIENT_ID
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_IP
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_NEAR_ID
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_NEAR_NONC
E
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_PAGE_URL
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_PROTO
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_PROTO_VER
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_READ_ACCES N/A
S
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_READ_ACCES N/A
S_LOCK
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_REDIRECT_U
RI
N/A
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_REFERRER
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_SECURE
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_STATS_HAN
DLE
N/A
N/A
読み取り専用
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
246
プラグインの開発
E_APPSTART
E_APPSTOP
E_CONNECT
E_DISCONNECT
F_CLIENT_SWFV_DEPT
H
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_DIGES
T
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_EXCEP 読み取り専用
TION
読み取り専用
読み取りと書き込み
読み取り専用
F_CLIENT_SWFV_RESUL N/A
T
N/A
N/A
N/A
F_CLIENT_SWFV_TTL
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_VERSI
ON
N/A
N/A
N/A
N/A
F_CLIENT_TYPE
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_URI
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_URI_STEM
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_USER_AGENT N/A
N/A
読み書き可能
読み取り専用
F_CLIENT_USERDATA
N/A
N/A
読み書き可能
読み取り専用
F_CLIENT_VHOST
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_VIDEO_CODE N/A
CS
N/A
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMP N/A
LE_ACCESS
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_VIDEO_SAMP N/A
LE_ACCESS_LOCK
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_WRITE_ACCE
SS
N/A
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_WRITE_ACCE
SS_LOCK
N/A
N/A
読み取りと書き込み
読み取り専用
F_MAXFIELD
N/A
N/A
N/A
N/A
F_OLD_STREAM_NAME
N/A
N/A
N/A
N/A
F_OLD_STREAM_QUER
Y
N/A
N/A
N/A
N/A
F_OLD_STREAM_TYPE
N/A
N/A
N/A
N/A
F_SEGMENT_END
N/A
N/A
N/A
N/A
F_SEGMENT_START
N/A
N/A
N/A
N/A
F_STREAM_CODEC
N/A
N/A
N/A
N/A
F_STREAM_CODEC_TYP N/A
E
N/A
N/A
N/A
F_STREAM_ID
N/A
N/A
N/A
N/A
F_STREAM_IGNORE
N/A
N/A
N/A
N/A
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
247
プラグインの開発
E_APPSTART
E_APPSTOP
E_CONNECT
E_DISCONNECT
N/A
N/A
N/A
N/A
F_STREAM_LIVE_EVENT N/A
N/A
N/A
N/A
F_STREAM_LIVE_PUBLI
SH_PENDING
N/A
N/A
N/A
N/A
F_STREAM_NAME
N/A
N/A
N/A
N/A
F_STREAM_OFFSET
N/A
N/A
N/A
N/A
F_STREAM_PATH
N/A
N/A
N/A
N/A
F_STREAM_PAUSE
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TIM
E
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TO
GGLE
N/A
N/A
N/A
N/A
F_STREAM_POSITION
N/A
N/A
N/A
N/A
F_STREAM_PUBLISH_B
ROADCAST
N/A
N/A
N/A
N/A
F_STREAM_PUBLISH_T
YPE
N/A
N/A
N/A
N/A
F_STREAM_QUERY
N/A
N/A
N/A
N/A
F_STREAM_RECORD_M
AXDURATION
N/A
N/A
N/A
N/A
F_STREAM_RECORD_M
AXSIZE
N/A
N/A
N/A
N/A
F_STREAM_RESET
N/A
N/A
N/A
N/A
F_STREAM_SEEK_POSIT N/A
ION
N/A
N/A
N/A
F_STREAM_TRANSITIO
N
N/A
N/A
N/A
N/A
F_STREAM_TRANSMIT_
POSITION
N/A
N/A
N/A
N/A
F_STREAM_TYPE
N/A
N/A
N/A
N/A
F_STREAM_LENGTH
次の表に、すべてのフィールドとさらなるイベントを示します。
E_FILENAME_TRAN E_PLAY
SFORM
E_STOP
F_APP_INST
読み取り専用
読み取り専用
読み取り専用
F_APP_NAME
読み取り専用
読み取り専用
読み取り専用
F_APP_URI
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AMF_ENCODING 読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AUDIO_CODECS
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
248
プラグインの開発
E_FILENAME_TRAN E_PLAY
SFORM
E_STOP
F_CLIENT_AUDIO_SAMPLE
_ACCESS
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AUDIO_SAMPLE
_ACCESS_LOCK
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_CONNECT_TIME
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_DIFFSERV_BITS
N/A
読み取りと書き込み
読み取り専用
F_CLIENT_DIFFSERV_MASK N/A
読み取りと書き込み
読み取り専用
F_CLIENT_FAR_ID
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_FAR_NONCE
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_FORWARDED_F
OR
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_ID
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_IP
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_NEAR_ID
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_NEAR_NONCE
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PAGE_URL
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PROTO
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PROTO_VER
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS_L 読み取り専用
OCK
読み取り専用
読み取り専用
F_CLIENT_REDIRECT_URI
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_REFERRER
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SECURE
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_STATS_HANDLE
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SWFV_DEPTH
N/A
N/A
N/A
F_CLIENT_SWFV_DIGEST
N/A
N/A
N/A
読み取り専用
読み取り専用
F_CLIENT_SWFV_EXCEPTIO 読み取り専用
N
F_CLIENT_SWFV_RESULT
N/A
N/A
N/A
F_CLIENT_SWFV_TTL
N/A
N/A
N/A
F_CLIENT_SWFV_VERSION
N/A
N/A
N/A
F_CLIENT_TYPE
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_URI
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_URI_STEM
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_USER_AGENT
読み書き可能
読み書き可能
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
249
プラグインの開発
E_FILENAME_TRAN E_PLAY
SFORM
E_STOP
F_CLIENT_USERDATA
読み書き可能
読み書き可能
読み取り専用
F_CLIENT_VHOST
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_VIDEO_CODECS
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS_LOCK
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS_
LOCK
読み取り専用
読み取り専用
読み取り専用
F_MAXFIELD
N/A
N/A
N/A
F_OLD_STREAM_NAME
N/A
読み書き可能
N/A
F_OLD_STREAM_QUERY
N/A
読み書き可能
N/A
F_OLD_STREAM_TYPE
N/A
読み書き可能
N/A
F_SEGMENT_END
N/A
N/A
N/A
F_SEGMENT_START
N/A
N/A
N/A
F_STREAM_CODEC
N/A
N/A
N/A
F_STREAM_CODEC_TYPE
N/A
N/A
N/A
F_STREAM_ID
読み取り専用
読み取り専用
読み取り専用
F_STREAM_IGNORE
読み取り専用
読み書き可能
読み取り専用
F_STREAM_LENGTH
読み取り専用
読み書き可能
読み取り専用
F_STREAM_LIVE_EVENT
N/A
N/A
N/A
F_STREAM_LIVE_PUBLISH_
PENDING
N/A
読み書き可能
N/A
F_STREAM_NAME
N/A
読み書き可能
N/A
F_STREAM_OFFSET
N/A
読み取り専用
N/A
F_STREAM_PATH
読み書き可能
読み取り専用
読み取り専用
F_STREAM_PAUSE
N/A
N/A
N/A
F_STREAM_PAUSE_TIME
N/A
N/A
N/A
F_STREAM_PAUSE_TOGGL
E
N/A
N/A
N/A
F_STREAM_POSITION
読み取り専用
読み書き可能
読み取り専用
F_STREAM_PUBLISH_BROA N/A
DCAST
N/A
N/A
F_STREAM_PUBLISH_TYPE
N/A
N/A
N/A
F_STREAM_QUERY
読み取り専用
読み書き可能
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
250
プラグインの開発
E_FILENAME_TRAN E_PLAY
SFORM
E_STOP
N/A
N/A
N/A
F_STREAM_RECORD_MAXS N/A
IZE
N/A
N/A
読み書き可能
読み取り専用
N/A
N/A
読み書き可能
N/A
N/A
N/A
読み書き可能
読み取り専用
F_STREAM_RECORD_MAX
DURATION
F_STREAM_RESET
読み取り専用
F_STREAM_SEEK_POSITION N/A
F_STREAM_TRANSITION
N/A
F_STREAM_TRANSMIT_POS N/A
ITION
F_STREAM_TYPE
読み書き可能
次の表に、すべてのフィールドとさらなるイベントを示します。
E_CLIENT_SEEK
E_SEEK
E_CLIENT_PAUSE
E_PAUSE
F_APP_INST
読み取り専用
読み取り専用
N/A
読み取り専用
F_APP_NAME
読み取り専用
読み取り専用
N/A
読み取り専用
F_APP_URI
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_AMF_ENCODING 読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_AUDIO_CODECS
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_AUDIO_SAMPLE
_ACCESS
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_AUDIO_SAMPLE
_ACCESS_LOCK
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_CONNECT_TIME
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_DIFFSERV_BITS
N/A
N/A
N/A
N/A
F_CLIENT_DIFFSERV_MASK N/A
N/A
N/A
N/A
F_CLIENT_FAR_ID
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_FAR_NONCE
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_FORWARDED_F
OR
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_ID
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_IP
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_NEAR_ID
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_NEAR_NONCE
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_PAGE_URL
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_PROTO
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_PROTO_VER
読み取り専用
読み取り専用
N/A
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
251
プラグインの開発
E_CLIENT_SEEK
E_SEEK
E_CLIENT_PAUSE
E_PAUSE
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_READ_ACCESS_L 読み取り専用
OCK
読み取り専用
N/A
読み取り専用
F_CLIENT_REDIRECT_URI
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_REFERRER
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_SECURE
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_STATS_HANDLE
読み取り専用
読み取り専用
N/A
読み取り専用
F_CLIENT_SWFV_DEPTH
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_DIGEST
N/A
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS
F_CLIENT_SWFV_EXCEPTIO 読み取り専用
N
F_CLIENT_SWFV_RESULT
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_TTL
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_VERSION
N/A
N/A
N/A
N/A
F_CLIENT_TYPE
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_URI
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_URI_STEM
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_USER_AGENT
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_USERDATA
N/A
読み取り専用
N/A
読み書き可能
F_CLIENT_VHOST
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_VIDEO_CODECS
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ N/A
ACCESS
読み取り専用
N/A
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ N/A
ACCESS_LOCK
読み取り専用
N/A
読み取り専用
F_CLIENT_WRITE_ACCESS
N/A
読み取り専用
N/A
読み取り専用
F_CLIENT_WRITE_ACCESS_
LOCK
N/A
読み取り専用
N/A
読み取り専用
F_MAXFIELD
N/A
N/A
N/A
N/A
F_OLD_STREAM_NAME
N/A
N/A
N/A
N/A
F_OLD_STREAM_QUERY
N/A
N/A
N/A
N/A
F_OLD_STREAM_TYPE
N/A
N/A
N/A
N/A
F_SEGMENT_END
N/A
N/A
N/A
N/A
F_SEGMENT_START
N/A
N/A
N/A
N/A
F_STREAM_CODEC
N/A
N/A
N/A
N/A
F_STREAM_CODEC_TYPE
N/A
N/A
N/A
N/A
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
252
プラグインの開発
E_CLIENT_SEEK
E_SEEK
E_CLIENT_PAUSE
E_PAUSE
F_STREAM_ID
N/A
読み取り専用
N/A
読み取り専用
F_STREAM_IGNORE
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_LENGTH
N/A
読み書き可能
読み取り専用
読み取り専用
F_STREAM_LIVE_EVENT
N/A
N/A
N/A
N/A
F_STREAM_LIVE_PUBLISH_
PENDING
N/A
N/A
N/A
N/A
F_STREAM_NAME
N/A
N/A
読み取り専用
N/A
F_STREAM_OFFSET
N/A
N/A
N/A
N/A
F_STREAM_PATH
N/A
読み取り専用
N/A
読み取り専用
F_STREAM_PAUSE
N/A
N/A
読み取り専用
読み取り専用
F_STREAM_PAUSE_TIME
N/A
N/A
読み取り専用
読み取り専用
F_STREAM_PAUSE_TOGGL
E
N/A
N/A
読み取り専用
読み取り専用
F_STREAM_POSITION
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_PUBLISH_BROA N/A
DCAST
N/A
N/A
N/A
F_STREAM_PUBLISH_TYPE
N/A
N/A
N/A
N/A
F_STREAM_QUERY
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_RECORD_MAX
DURATION
N/A
N/A
N/A
N/A
F_STREAM_RECORD_MAXS N/A
IZE
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
N/A
N/A
N/A
N/A
N/A
N/A
N/A
F_STREAM_TRANSMIT_POS N/A
ITION
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_RESET
N/A
F_STREAM_SEEK_POSITION 読み取り専用
F_STREAM_TRANSITION
F_STREAM_TYPE
N/A
次の表に、すべてのフィールドとさらなるイベントを示します。
E_PUBLISH
E_UNPUBLISH
E_LOADSEGMENT
E_CODEC_CHANGE
F_APP_INST
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_APP_NAME
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_APP_URI
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AMF_ENCODING 読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AUDIO_CODECS
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
253
プラグインの開発
E_PUBLISH
E_UNPUBLISH
E_LOADSEGMENT
E_CODEC_CHANGE
F_CLIENT_AUDIO_SAMPLE
_ACCESS
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_AUDIO_SAMPLE
_ACCESS_LOCK
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_CONNECT_TIME
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_DIFFSERV_BITS
N/A
N/A
N/A
N/A
F_CLIENT_DIFFSERV_MASK N/A
N/A
N/A
N/A
F_CLIENT_FAR_ID
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_FAR_NONCE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_FORWARDED_F
OR
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_ID
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_IP
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_NEAR_ID
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_NEAR_NONCE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PAGE_URL
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PROTO
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_PROTO_VER
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS_L 読み取り専用
OCK
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_REDIRECT_URI
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_REFERRER
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SECURE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_STATS_HANDLE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SWFV_DEPTH
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_DIGEST
N/A
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SWFV_EXCEPTIO 読み取り専用
N
F_CLIENT_SWFV_RESULT
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_TTL
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_VERSION
N/A
N/A
N/A
N/A
F_CLIENT_TYPE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_URI
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_URI_STEM
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_USER_AGENT
読み取り専用
読み取り専用
読み取り専用
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
254
プラグインの開発
E_PUBLISH
E_UNPUBLISH
E_LOADSEGMENT
E_CODEC_CHANGE
F_CLIENT_USERDATA
読み書き可能
読み取り専用
読み書き可能
読み取り専用
F_CLIENT_VHOST
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_VIDEO_CODECS
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS_LOCK
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS_
LOCK
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_MAXFIELD
N/A
N/A
N/A
N/A
F_OLD_STREAM_NAME
N/A
N/A
N/A
N/A
F_OLD_STREAM_QUERY
N/A
N/A
N/A
N/A
F_OLD_STREAM_TYPE
N/A
N/A
N/A
N/A
F_SEGMENT_END
N/A
N/A
読み取り専用
N/A
F_SEGMENT_START
N/A
N/A
読み取り専用
N/A
F_STREAM_CODEC
N/A
N/A
N/A
読み取り専用
F_STREAM_CODEC_TYPE
N/A
N/A
N/A
読み取り専用
F_STREAM_ID
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_STREAM_IGNORE
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_STREAM_LENGTH
読み書き可能
読み取り専用
読み取り専用
読み取り専用
F_STREAM_LIVE_EVENT
読み書き可能
N/A
N/A
N/A
F_STREAM_LIVE_PUBLISH_
PENDING
N/A
N/A
N/A
N/A
F_STREAM_NAME
N/A
N/A
N/A
N/A
F_STREAM_OFFSET
N/A
N/A
N/A
N/A
F_STREAM_PATH
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_STREAM_PAUSE
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TIME
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TOGGL
E
N/A
N/A
N/A
N/A
F_STREAM_POSITION
読み取り専用
読み取り専用
読み取り専用
読み取り専用
F_STREAM_PUBLISH_BROA 読み書き可能
DCAST
読み取り専用
N/A
読み取り専用
F_STREAM_PUBLISH_TYPE
読み書き可能
読み取り専用
N/A
読み取り専用
F_STREAM_QUERY
読み書き可能
読み取り専用
読み取り専用
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
255
プラグインの開発
E_PUBLISH
E_UNPUBLISH
E_LOADSEGMENT
E_CODEC_CHANGE
N/A
N/A
N/A
N/A
F_STREAM_RECORD_MAXS N/A
IZE
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_SEEK_POSITION N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
F_STREAM_TRANSMIT_POS N/A
ITION
N/A
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_STREAM_RECORD_MAX
DURATION
F_STREAM_RESET
F_STREAM_TRANSITION
F_STREAM_TYPE
読み取り専用
読み書き可能
次の表に、すべてのフィールドとさらなるイベントを示します。
E_RECORD
E_RECORD_STOP
F_APP_INST
読み取り専用
読み取り専用
F_APP_NAME
読み取り専用
読み取り専用
F_APP_URI
読み取り専用
読み取り専用
F_CLIENT_AMF_ENCODING
読み取り専用
読み取り専用
F_CLIENT_AUDIO_CODECS
読み取り専用
読み取り専用
F_CLIENT_AUDIO_SAMPLE_ACCESS 読み取り専用
読み取り専用
F_CLIENT_AUDIO_SAMPLE_ACCESS 読み取り専用
_LOCK
読み取り専用
F_CLIENT_CONNECT_TIME
読み取り専用
読み取り専用
F_CLIENT_DIFFSERV_BITS
N/A
N/A
F_CLIENT_DIFFSERV_MASK
N/A
N/A
F_CLIENT_FAR_ID
読み取り専用
読み取り専用
F_CLIENT_FAR_NONCE
読み取り専用
読み取り専用
F_CLIENT_FORWARDED_FOR
読み取り専用
読み取り専用
F_CLIENT_ID
読み取り専用
読み取り専用
F_CLIENT_IP
読み取り専用
読み取り専用
F_CLIENT_NEAR_ID
読み取り専用
読み取り専用
F_CLIENT_NEAR_NONCE
読み取り専用
読み取り専用
F_CLIENT_PAGE_URL
読み取り専用
読み取り専用
F_CLIENT_PROTO
読み取り専用
読み取り専用
F_CLIENT_PROTO_VER
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS
読み取り専用
読み取り専用
F_CLIENT_READ_ACCESS_LOCK
読み取り専用
読み取り専用
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
256
プラグインの開発
E_RECORD
E_RECORD_STOP
F_CLIENT_REDIRECT_URI
読み取り専用
読み取り専用
F_CLIENT_REFERRER
読み取り専用
読み取り専用
F_CLIENT_SECURE
読み取り専用
読み取り専用
F_CLIENT_STATS_HANDLE
N/A
N/A
F_CLIENT_SWFV_DEPTH
N/A
N/A
F_CLIENT_SWFV_DIGEST
N/A
N/A
F_CLIENT_SWFV_EXCEPTION
読み取り専用
読み取り専用
F_CLIENT_SWFV_RESULT
N/A
N/A
F_CLIENT_SWFV_TTL
N/A
N/A
F_CLIENT_SWFV_VERSION
N/A
N/A
F_CLIENT_TYPE
読み取り専用
読み取り専用
F_CLIENT_URI
読み取り専用
読み取り専用
F_CLIENT_URI_STEM
読み取り専用
読み取り専用
F_CLIENT_USER_AGENT
読み取り専用
読み取り専用
F_CLIENT_USERDATA
読み書き可能
読み取り専用
F_CLIENT_VHOST
読み取り専用
読み取り専用
F_CLIENT_VIDEO_CODECS
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ACCESS
読み取り専用
読み取り専用
F_CLIENT_VIDEO_SAMPLE_ACCESS
_LOCK
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS
読み取り専用
読み取り専用
F_CLIENT_WRITE_ACCESS_LOCK
読み取り専用
読み取り専用
F_MAXFIELD
N/A
N/A
F_OLD_STREAM_NAME
N/A
N/A
F_OLD_STREAM_QUERY
N/A
N/A
F_OLD_STREAM_TYPE
N/A
N/A
F_SEGMENT_END
読み取り専用
N/A
F_SEGMENT_START
N/A
N/A
F_STREAM_CODEC
N/A
N/A
F_STREAM_CODEC_TYPE
N/A
N/A
F_STREAM_ID
読み取り専用
読み取り専用
F_STREAM_IGNORE
読み取り専用
読み取り専用
F_STREAM_LENGTH
読み取り専用
読み取り専用
F_STREAM_LIVE_EVENT
N/A
N/A
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
257
プラグインの開発
E_RECORD
E_RECORD_STOP
F_STREAM_LIVE_PUBLISH_PENDIN
G
N/A
N/A
F_STREAM_NAME
N/A
N/A
F_STREAM_OFFSET
N/A
N/A
F_STREAM_PATH
読み取り専用
読み取り専用
F_STREAM_PAUSE
N/A
N/A
F_STREAM_PAUSE_TIME
N/A
N/A
F_STREAM_PAUSE_TOGGLE
N/A
N/A
F_STREAM_POSITION
読み取り専用
読み取り専用
F_STREAM_PUBLISH_BROADCAST
N/A
N/A
F_STREAM_PUBLISH_TYPE
N/A
N/A
F_STREAM_QUERY
読み取り専用
読み取り専用
F_STREAM_RECORD_MAXDURATIO
N
読み書き可能
読み取り専用
F_STREAM_RECORD_MAXSIZE
読み書き可能
読み取り専用
F_STREAM_RESET
読み取り専用
読み取り専用
F_STREAM_SEEK_POSITION
N/A
N/A
F_STREAM_TRANSITION
N/A
N/A
F_STREAM_TRANSMIT_POSITION
N/A
N/A
F_STREAM_TYPE
読み取り専用
読み取り専用
次の表に、すべてのフィールドとさらなるイベントを示します。
E_SWF_VERIFY
E_SWF_VERIFY_CO E_START_TRANSMI E_STOP_TRANSMIT
MPLETE
T
F_APP_INST
読み取り専用
読み取り専用
N/A
N/A
F_APP_NAME
読み取り専用
読み取り専用
N/A
N/A
F_APP_URI
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_AMF_ENCODING 読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_AUDIO_CODECS
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_AUDIO_SAMPLE
_ACCESS
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_AUDIO_SAMPLE
_ACCESS_LOCK
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_CONNECT_TIME
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_DIFFSERV_BITS
N/A
N/A
N/A
N/A
F_CLIENT_DIFFSERV_MASK N/A
N/A
N/A
N/A
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
258
プラグインの開発
E_SWF_VERIFY
E_SWF_VERIFY_CO E_START_TRANSMI E_STOP_TRANSMIT
MPLETE
T
F_CLIENT_FAR_ID
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_FAR_NONCE
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_FORWARDED_F
OR
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_ID
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_IP
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_NEAR_ID
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_NEAR_NONCE
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_PAGE_URL
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_PROTO
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_PROTO_VER
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_READ_ACCESS
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_READ_ACCESS_L 読み取り専用
OCK
読み取り専用
N/A
N/A
F_CLIENT_REDIRECT_URI
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_REFERRER
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_SECURE
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_STATS_HANDLE
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_DEPTH
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_SWFV_DIGEST
読み取りと書き込み
読み取り専用
N/A
N/A
読み取り専用
読み取り専用
読み取り専用
F_CLIENT_SWFV_EXCEPTIO 読み取り専用
N
F_CLIENT_SWFV_RESULT
N/A
N/A
N/A
N/A
F_CLIENT_SWFV_TTL
読み取りと書き込み
読み取り専用
N/A
N/A
F_CLIENT_SWFV_VERSION
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_TYPE
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_URI
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_URI_STEM
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_USER_AGENT
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_USERDATA
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_VHOST
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_VIDEO_CODECS
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS
読み取り専用
N/A
N/A
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
259
プラグインの開発
E_SWF_VERIFY
E_SWF_VERIFY_CO E_START_TRANSMI E_STOP_TRANSMIT
MPLETE
T
F_CLIENT_VIDEO_SAMPLE_ 読み取り専用
ACCESS_LOCK
読み取り専用
N/A
N/A
F_CLIENT_WRITE_ACCESS
読み取り専用
読み取り専用
N/A
N/A
F_CLIENT_WRITE_ACCESS_
LOCK
読み取り専用
読み取り専用
N/A
N/A
F_MAXFIELD
N/A
N/A
N/A
N/A
F_OLD_STREAM_NAME
N/A
N/A
N/A
N/A
F_OLD_STREAM_QUERY
N/A
N/A
N/A
N/A
F_OLD_STREAM_TYPE
N/A
N/A
N/A
N/A
F_SEGMENT_END
N/A
N/A
N/A
N/A
F_SEGMENT_START
N/A
N/A
N/A
N/A
F_STREAM_CODEC
N/A
N/A
N/A
N/A
F_STREAM_CODEC_TYPE
N/A
N/A
N/A
N/A
F_STREAM_ID
N/A
N/A
N/A
N/A
F_STREAM_IGNORE
N/A
N/A
N/A
N/A
F_STREAM_LENGTH
N/A
N/A
N/A
N/A
F_STREAM_LIVE_EVENT
N/A
N/A
N/A
N/A
F_STREAM_LIVE_PUBLISH_
PENDING
N/A
N/A
N/A
N/A
F_STREAM_NAME
N/A
N/A
N/A
N/A
F_STREAM_OFFSET
N/A
N/A
N/A
N/A
F_STREAM_PATH
読み取り専用
読み取り専用
N/A
N/A
F_STREAM_PAUSE
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TIME
N/A
N/A
N/A
N/A
F_STREAM_PAUSE_TOGGL
E
N/A
N/A
N/A
N/A
F_STREAM_POSITION
N/A
N/A
N/A
N/A
F_STREAM_PUBLISH_BROA N/A
DCAST
N/A
N/A
N/A
F_STREAM_PUBLISH_TYPE
N/A
N/A
N/A
N/A
F_STREAM_QUERY
N/A
N/A
N/A
N/A
F_STREAM_RECORD_MAX
DURATION
N/A
N/A
N/A
N/A
F_STREAM_RECORD_MAXS N/A
IZE
N/A
N/A
N/A
N/A
N/A
N/A
N/A
F_STREAM_RESET
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
260
プラグインの開発
E_SWF_VERIFY
E_SWF_VERIFY_CO E_START_TRANSMI E_STOP_TRANSMIT
MPLETE
T
F_STREAM_SEEK_POSITION N/A
N/A
N/A
N/A
N/A
N/A
N/A
N/A
F_STREAM_TRANSMIT_POS N/A
ITION
N/A
読み取り専用
読み取り専用
N/A
N/A
N/A
N/A
F_STREAM_TRANSITION
F_STREAM_TYPE
File プラグインの開発
File プラグインの概要
File プラグインを使用すると、サーバーがファイルシステムからコンテンツを読み取る場所と方法を制御することができま
す。このプラグインは、オペレーティングシステムのファイル I/O メカニズムとサーバーの間のインターフェイスを提供し
ます。サンプルファイルの設定または変更を行うと、デフォルトのオペレーティングシステムに基づくファイルシステム
I/O に代わるものを作成することができます。
サーバーの以前のバージョンでは、ファイルシステムへの同期アクセスをサポートしていました。ファイルの読み取り操作
を要求したときには、そのたびにキューにあるそれより前の要求が完了するまで待つ必要がありました。File プラグインは
非同期アクセスをサポートしており、ネットワークベースのファイル I/O をより簡単に実装できるようになっています。
次のことを実行するように File プラグインをコーディングすることができます。
• HTTP を介してリモートからファイルを取得し、コアサーバープロセスを通じてそれらのファイルをクライアントに配
信することで、コンテンツの管理作業の負荷を軽減します。
•
別の物理的な場所にファイルを再マッピングします。
•
外部 SWF ファイルを取得して検証します。
注意:File プラグインはストリームファイルと SWF ファイルで使用します。
カスタム File プラグインが存在しないか、またはアクティブになっていない場合、サーバーは下位互換性のために標準のオ
ペレーティングシステムのファイルシステムを使用します。使用できる File プラグインは 1 つだけです。
サーバーの呼び出しに対する応答
File プラグインは非同期です。サーバーがプラグインを呼び出したときに、プラグインは直ちには応答しません。サーバー
がプラグインを呼び出すと、プラグインは応答インターフェイスによってサーバーに呼び出しを返します。
サーバーがプラグイン上の関数を呼び出したときに、プラグインインターフェイスはその操作が失敗したことを示すエラー
コード(-1)を返すことができます。関数がエラーを返す場合、プラグインがサーバーに呼び出しを返さないようにする必
要があります。
プラグインへの呼び出しが正常に戻る(0 が返される)場合、プラグインはサーバーに呼び出しを返し、サーバーから受け
取ったコンテキストを渡す必要があります。
close() および remove() の呼び出しは、この規則に対する例外です。サーバーがプラグイン上の close() メソッドと remove()
関数を呼び出した場合、サーバーは応答に関与しません。コールバックが発生する前に要求に関連付けられているリソース
を解放するために、サーバーは pCtx ポインターとして NULL を渡すことがあります。コンテキストが NULL になっている
場合、サーバーに呼び出しを返す必要はありません。プラグインが NULL コンテキストとともにサーバーに呼び出しを返し
た場合、サーバーはそれを無視します。
最終更新日 2011/10/10
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
検証のための外部 SWF ファイルの取得
SWF ファイルを検証することで、許可されたアプリケーションだけが Flash Media Server の特定のインスタンスにアクセ
スできるように制限されます。この方法によって、リソースをストリーミングしようとするアプリケーションが第三者に
よって独自に作成されないようにします。
Content Distribution Network では、検証する SWF ファイルは外部コンテンツリポジトリ、またはクラスタ内の別の
サーバーにあります。サーバーで検証するために、File プラグインを使用して、外部の場所に格納されている SWF ファイ
ルを取得することができます。File プラグインを使用することによって、SWF ファイルを Flash Media Server にローカル
に保存する必要がなくなります。開発者は、サーバーに影響を与えずに SWF ファイルを頻繁に更新することができます。
File プラグインを使用することで、開発者によるコンテンツ管理がシンプルかつ容易になります。
File プラグインを使用する場合、アプリケーションの種類に関わらず、サーバーは SWF ファイルをファイルレベルで検証
します。SWF の検証は、File プラグインを通じてアプリケーション単位で有効にすることはできません。
注意:File プラグインを使用して SWF ファイルを取得できるのは、バージョン 1.0 のプラグイン(Flash Media Server 3.5
以降)だけです。
File プラグインによって SWF ファイルを検証するには、次のワークフローに従います。
• Application.xml で SWF 検証の有効化
• Server.xml で SWF 検証の有効化
• File プラグインの実装
Application.xml で SWF 検証の有効化
1 XML エディターで Application.xml を開きます。
2 SWFVerification タグの enabled 属性を true に設定します。
<SWFVerification enabled="true">
このタグによって、そのファイルが vhost レベルの XML ファイルでもアプリケーションレベルの XML ファイルであっ
ても、すべてのアプリケーションの検証が可能になります。
3 SWFFolder タグは空のままにします。この設定により、デフォルトの SWFFolder の値がサーバーからプラグインに渡さ
れます。デフォルト値は、アプリケーションのフォルダーの下の SWF フォルダーです。例えば、
applications/application_name/SWFs です。
File プラグインは、この値を外部のコンテンツリポジトリにリダイレクトする必要があります。
4 (オプション)追加の検証タグを設定します。
Server.xml で SWF 検証の有効化
1 XML エディターで Server.xml を開きます。
2 Plugins タグで、FilePlugin タグの enabled 属性を true に設定します。
<Plugins>
<FilePlugin enabled="true">
<Content type="Streams">true</Content>
<Content type="SWF">false</Content>
</FilePlugin>
</Plugins>
3 SWF ファイルの検証を有効にするには、<Content type="SWF"> 属性を true に設定します。
4 (オプション)グローバル検証を設定するには、SWFFolder タグを空のままにします。それによって、デフォルトの
SWFFolder の値がサーバーからプラグインに渡されます。File プラグインは、この値を外部のコンテンツリポジトリにリ
ダイレクトする必要があります。
最終更新日 2011/10/10
261
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
グローバル検証では、すべてのアプリケーションに共通の SWF ファイルのグループに対する検証を設定できます。
5 (オプション)その他の検証設定を設定します:DirLevelSWFScan、MaxNumberofRequests および UserDefined エ メント
内の必要なユーザー定義キー。『設定および管理ガイド』の「XML リファレンス」を参照してください。
File プラグインの実装
File プラグインは外部の場所にあるディレクトリまたはファイルを開き、ディレクトリおよびファイルのリストをサーバー
に渡すことができます。File プラグインには、SWF ファイルからストリームファイルを識別する特定の属性が含まれていま
せん。サーバーは、サーバー上に SWF ファイルが格納されている場合と同様に検証を実行します。
サーバーに含まれている File プラグインのサンプルを参照してください。サンプルではコードの主要部分を示しています。
File プラグインのサンプルファイルには、IFmsFileAdaptor::open を呼び出す関数が含まれています。open() 関数には、
sFileName パラメーターが含まれています。sFileName の値はサーバーにより File プラグインに渡されます。これは
Application.xml または Server.xml の SWFFolder タグのデフォルト値です。
File プラグインは、SWFFolder の値を外部コンテンツリポジトリにリダイレクトします。サンプルではそのリポジトリに対
するハンドルを作成し、サーバーに渡しています。getAttributes() 関数はさらにパラメーターとして sFileName を取ります。
open() 関数を呼び出すと、sFileName の値がファイルであるかディレクトリであるかを判定するコードがサンプルに含まれ
て、ファイルが開きます。ディレクトリが開き、一時ファイルに書き込まれます。サンプルでは、新しい属性
FMSFileAttribute::kMode を使用して、sFileName がファイルであるかディレクトリであるかが判定されます(ストリームは
1、ディレクトリは 0)。
File プラグインは、この一時ファイルに対するハンドルをサーバーに返します。ディレクトリにサブディレクトリまたは
SWF ファイルが含まれている場合、サーバーはディレクトリまたはファイルを開き、すべてのサブディレクトリとファイ
ルが読み取られるまでプロセスを続行します。サーバーはプラグインの read() メソッドを使用してファイルを読み取り、検
証を実行します。サーバーはプラグインの close() メソッドを使用して、完全に読み取ったファイルを閉じます。
File プラグインを使用した HTTP ライブストリーミングコンテンツの管理
Flash Media Server 4.5
File プラグインを使用し、非同期ファイル IO の操作を含む、HTTP ライブストリーミングコンテンツの管理を行います。
Live Packager アプリケーション(livepkgr)は、ライブストリームを取り込んでフラグメント(F4F ファイル)と追加ヘ
ルパーファイルにパッケージ化します。これらのファイルを記録するサーバー操作は、File プラグインを介してルーティン
グされます。File プラグインを使用して、次のファイルの場所を管理します。
• .f4f
• .f4x
• .bootstrap
• .control
• .drmmeta
• .meta
Flash Media Server 4.5 は、次の API を追加します。
• rename()
ファイルを移動します。ソースファイルと宛先ファイルの絶対パスを渡します。この呼び出しにより、宛先パスの同じ名
前のファイルが上書きされます。
サーバーは、File プラグインのこのメソッドを同期的または非同期的に呼び出します。サーバーがこのメソッドを非同期
的に呼び出す場合は、onRename() が呼び出され、サーバーの操作が再開されます。
最終更新日 2011/10/10
262
FLASH MEDIA SERVER 4.5 デベロッパーズガイド
プラグインの開発
• truncate()
ファイルを指定されたファイルサイズに切り詰めます。サーバーは、File プラグインのこのメソッドを同期的または非同
期的に呼び出します。サーバーがこのメソッドを非同期的に呼び出す場合は、onTruncate() が呼び出され、サーバーの操
作が再開されます。
• onRename()
サーバーが File プラグインの rename() を非同期的に呼び出した後、サーバーの操作が再開されます。
• onTruncate()
サーバーが File プラグインの truncate() を非同期的に呼び出した後、サーバーの操作が再開されます。
API の詳細については、「Flash Media Server プラグイン API 参照」を参照してください。また、これらの API は、
rootinstall / samples / plugins / file / SimpleFileAdaptor.h にインストールされたサンプル File プラグインで使用
されます。
最終更新日 2011/10/10
263