NetStreamを使ってるswfをHTMLと別階層に配置することになって、flvが読めなくなって混乱。改めてヘルプを見ると、flvはHTMLでなくswfからの相対パスになるってことなのね。以下引用。
ローカルファイルの再生
メディアファイルの場所。引数には、String、URLRequest.url プロパティ、またはこのどちらかを参照する変数を使用できます。アプリケーションセキュリティサンドボックス外にある Flash Player および AIR コンテンツの場合、SWF ファイルまたはサブディレクトリと同じディレクトリに保存されているローカルビデオファイルを再生できます。ただし、上位レベルのディレクトリに移動することはできません。
アプリケーションセキュリティサンドボックス内の AIR コンテンツの場合、メディアファイルに指定するパスは、SWF ファイルのディレクトリに相対します。ただし、SWF ファイルのディレクトリより上位に移動することはできません。AIR でパスを相対パスとして処理するため、完全なパスは指定しないでください。
|
「参照するパスの起点はHTML」って考えが染みついていると、普段HTMLとswfは同階層に置くことが多いので、ちょっと混乱しました(笑)。ヘルプの該当箇所は
こちらから。
ちょっとはまったのでメモ。
AACファイルをNetStreamを使って再生する場合、FLVと同様に・・・
rcv_ns.play(url_flv);
rcv_ns.seek(0);
rcv_ns.pause();
みたいな感じで、先頭に位置づけておいて、NetStream.resume()とNetStream.puase()を切り替えて、再生・一時停止を実装しています。例えば、こんな感じ。
if (isNowPlaying) {
//終了の場合は、巻き戻して再生
if (flg_finish) {
flg_finish = false;
rcv_ns.seek(0);
}
rcv_ns.resume();
} else {
rcv_ns.pause();
}
この状態で、NetStream.seek(0)で一時停止(NetStream.pause())した状態で放置しておくと、NetStream.resume()してもAACが再生されなくなってしまいます。つまり初期状態や先頭まで巻き戻した状態でそのままにしておくと、再生ボタンが効かなくなるということです。
FLVでテストしても問題は発生せず、どうもAACに固有の問題のようです。結局、NetStream.resume()の前には、強制的にNetStream.timeで位置合わせしてやることで解決しました。
if (isNowPlaying) {
//終了の場合は、巻き戻して再生
if (flg_finish) {
flg_finish = false;
rcv_ns.seek(0);
} else {
rcv_ns.seek(rcv_ns.time);
}
rcv_ns.resume();
} else {
rcv_ns.pause();
}
う〜ん、なんか釈然としないけど、バグなんだろうか?
直接は関係ないですが、AdobeのサイトにAAC関連の記事を見つけたので貼っておきます。NetStreamで読み込むAACにSoundTransformを使う方法なんて事も書いてあります。
AS,Objective-C,Javascript,その他諸々の備忘録