dev.convexstyle.net

FLV の相対パス

del.icio.us hatena bookmark

凄い基本的な話なのですが、FLV を使用するときは絶対パスでのプログレッシブ再生か FMS を利用したストリーミング配信でのみ開発したことがあったのですが、先日相対パスで読み込もうとしたら読み込めず、httpHeaders で調べたら 404 が返っておかしな挙動をしていたのでメモ。

理由は単純なんですが、仕様を明確に目にしたかったので調べたらこのページにこんな記述が。

注意:ビデオクリップがFLV形式の場合、FLVファイルのパスは相対パス(SWFを基準にした相対位置)で指定されるので、サーバ上で使用するのと同じディレクトリ構造をローカルでも使用できます。

FLV の相対パス
ディレクトリ構成図サンプル

なるほど。
jpg、swf、xml、css、txt などの場合は swf を表示させる html の場所を基準に相対パスを設定するが、flv は違うんですね。上記の図で index.html に index.swf を読み込み表示させ、index.swf が loadMovieNum で main.swf を読み込み、この main.swf が flv を相対パスで読み込むと想定すると、index.html は main/index.swf で index.swf を読み込み、index.swf は index.html を基準に main.swf ではなく main/main.swf として swf を読み込む。同様な考えで flv も index.html を基準に main/flv/sample.flv として読み込もうとするとパスがづれ 404 エラーが返る。flv の読み込みだけは読み込む swf からの相対パスになるみたいで、main.swf から考えた相対パス flv/sample.flv で読み込まれた。

ソースはこんな感じ。


var nc:NetConnection = new NetConnection();
nc.onStatus = function(info:Object):Void {
switch(info.code) {
case "NetConnection.Connect.Success":
startVideo();
break;
case "NetConnection.Connect.Failed":
trace("failed");
break;
case "NetConnection.Connect.Rejected":
trace("rejected");
break;
case "NetConnection.Connect.Closed":
trace("closed");
break;
default:
}
}
nc.connect(null);

function startVideo():Void {
var ns:NetStream = new NetStream(nc);
local_video.attachVideo(ns);
ns.play("main/flv/sample.flv");
ns.play("flv/sample.flv");
}

flv を使用して数年。
初めてこの現実を知りました。。。

この記事関連する書物 from Amazon.co.jp

トラックバック

このエントリーのトラックバックURL:
http://www.convexstyle.net/mt/mt-tb.cgi/40

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)