Platform: All
Version: MX 2004
1. 現象
Flash MX 2004では、外部FLVファイルをダイナミックにロードしながら再生することができます。ところが、ローカル環境のブラウザで、FLVファイルを読込めないことがあります。
たとえば、オンラインヘルプの[ActionScriptリファレンスガイド]([外部メディアの操作]>[外部FLVファイルのダイナミック再生])には、つぎのようなサンプルスクリプトが紹介されています(ヘルプのスクリプトには、一部誤りがあります)。なお、タイムラインには、FLVをロードするターゲットのVideoインスタンスmy_videoと、NetStreamインスタンスのステータスを表示するためのTextFieldインスタンスstatusを配置しておきます。
// NetConnection オブジェクトを作成する :
var netConn:NetConnection = new NetConnection();
// ローカルストリーミング接続を作成する :
netConn.connect(null);
// NetStream オブジェクトを作成し、onStatus() 関数を定義する :
var netStream:NetStream = new NetStream(netConn);
netStream.onStatus = function(infoObject) {
status.text += "Status (NetStream)"+newline;
status.text += "Level:"+infoObject.level+newline;
status.text += "Code:"+infoObject.code+newline;
};
// NetStream ビデオフィードを Video オブジェクトに割り当てる :
my_video.attachVideo(netStream);
// バッファ時間を設定する :
netStream.setBufferTime(5);
// FLV ファイルを再生する :
netStream.play("videoFile.flv");
ローカル環境でFLVがロードできない場合、NetStream.onStatusハンドラが受取る情報オブジェクト(infoObject)のlevelプロパティの値は"Error"、Codeプロパティは"NetStream.Play.StreamNotFound"を返します。
この問題は、Media ComponentsのコンポーネントでFLVをダイナミックに再生した場合にも、発生することがあります。
2. 原因
外部FLVファイルの完全パスに2バイト文字を含むと、NetStream.play()メソッドはそのFLVファィルをロードすることができないようです。注意しなければならないのは、問題がFLVの「完全パス」だということです。NetStream.play()メソッドに渡す引数のパスが、2バイト文字を含まない「相対パス」であることは関係がありません[*1]。NetStream.onStatusハンドラで取得されるステータスは、ストリームするFLVファイルが検索できず("NetStream.Play.StreamNotFound")、ロードに失敗したことを示します。
[*1] 引数を「絶対パス」で指定すると、2バイト文字を含む完全パスのFLVファイルもロードできます。もっとも、ローカルのFLVを再生するコンテンツは、CD-ROMなどのメディアで提供されることが通常でしょう。とくにWindows環境ではドライブ名が特定できませんので、絶対パスの引数指定は現実的な解決策にはなりにくいと思われます。
|
なお、サーバーにアップロードする場合は、パスに2バイト文字を含みませんので、この問題は生じません。また、Standalone Player(SAFlashPlayer)でSWFを直接開いたり、プロジェクタに書出せば、完全パスに2バイト文字を含んでもFLVは問題なく再生されます。
3. 対処法
ローカル環境のブラウザでFLVをダイナミックに再生する場合には、外部FLVファイルを、2バイト文字が含まれないパスに配置してください。Windowsでは、「デスクトップ」もパスに2バイト文字を含みますので、ご注意ください。
_____
作成者: 野中文雄
更新日: 2004年5月19日 本文の一部修正と注釈の追加
作成日: 2004年5月14日