2012-01-14 181 views
2

我正在使用NetStream播放本地.FLV文件。 NetStream接收FLV文件的名称。AS3:检查FLV文件是否存在

如何在尝试播放之前检查FLV是否存在?或者如果可能,试图播放不存在的视频时是否会发生一个事件?

// Doesn't catch an error if the FLV does not exist 
try { 
    ns.play("MyFLV.flv"); 
} catch (e:Error) { 
    trace("File does not exist"); 
} 
+0

这应做到: [检查是否存在FLV] [1] [1]:http://stackoverflow.com/questions/3335790/how-to-检查为flv文件存在之前播放,使用flvplayback在 – John 2012-01-15 03:57:45

+0

我只使用NetStreams,而不是FLVPlayback类,所以这将无法正常工作。 – Abdulla 2012-01-15 04:12:50

回答

2

即使该文件不存在,Event.OPEN仍然会响应。将其更改为ProgressEvent为我工作。

fileTest.addEventListener(ProgressEvent.PROGRESS, fileTest_progressHandler); 

... 

function fileTest_progressHandler(event:ProgressEvent):void 
{ 
    fileTest.close(); 
    // Your file exists 
} 
1

您是否使用AIR?您可以使用File类:

var f:File = new File(); 
f.nativePath = "path/to/your/FLV"; 
if (f.exists) 
{ 
    // Your file exists 
} 
else 
{ 
    // Your file doesn't exist 
} 

,如果你正在开发一个Web播放寿没有太大的帮助,你很可能使用URLLoader在这种情况下?像这样?

var fileTest:URLLoader = new URLLoader(); 
fileTest.addEventListener(IOErrorEvent.IO_ERROR, fileTest_errorHandler); 
fileTest.addEventListener(Event.OPEN, fileTest_openHandler); 
fileTest.load(new URLRequest("path/to/your/FLV")); 

function fileTest_errorHandler(event:Event):void 
{ 
    // Your file doesn't exist 
} 

function fileTest_openHandler(event:Event):void 
{ 
    fileTest.close(); 
    // Your file exists 
} 
0

警告:上面的代码示例略有误导。如果您忘记在路径中放置一个前导斜杠,则上面设置nativePath字段的代码将因错误2004而崩溃,因为根相对路径总是以正斜杠(在Macintosh上)开始。在Windows上,您可以输入类似于“C:\ my \ folder \ path \ filename.txt”的路径

通常,使用resolvePath函数更安全一些,它使用正斜杠创建独立于平台的路径结构作为子文件夹的分隔符。即使您需要根相对路径,也可以使用resolvePath函数。在下面的代码中,您可以看到我们已经创建了一个相对于applicationDirectory的路径(这是AIR中的一个特殊的元文件夹名称),但是如果子路径有一个开始斜杠,那么路径将是根相对的。

var f:File = File.applicationDirectory.resolvePath(subpath); 
if (f.exists) 
    return T; 
else 
    return F;