1

我对动作脚本非常陌生,我正在使用FLVPlayback该类来播放我的 FLV 文件。

如果我正在尝试播放尚不存在的 FLV 文件,那么我将收到“VideoError: 1000”,消息为Unable to make connection to server or to find FLV on server.

在通过 FLVPlayback 播放 FLV 之前,我想使用文件 URL 或路径检查 FLV 文件是否存在。任何人都可以建议一种方法来做到这一点。

谢谢

4

2 回答 2

3

安全捕获错误的唯一方法是监听fl.video.VideoEvent.STATE_CHANGE事件并采取相应措施。这是有关如何执行此操作的小代码片段:

import fl.video.FLVPlayback;
import fl.video.VideoEvent;
import fl.video.VideoState;

var videoPlayer:FLVPlayback;
videoPlayer.addEventListener( VideoEvent.STATE_CHANGE, onVideoStateChange );
/** Bad source  **/
videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video_error.flv";
/** Good source **/
//videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video.flv";

function onVideoStateChange( evt:VideoEvent ):void
{
    var videoPlayer:FLVPlayback = evt.target as FLVPlayback;
    switch( evt.state )
    {
        case VideoState.CONNECTION_ERROR:
            trace( 'Connection error' );
            /**
             * Once you hit this event, you should run some logic to do one or more of the following:
             *   1. Show an error message to the user
             *   2. Try to load another video
             *   3. Hide the FLVPlayback component
             */
            break;
        default:
            trace( 'Player is: ' + evt.state );
    }
}

有关可能的 VideoState 常量的完整列表,请访问fl.video.VideoState

于 2010-07-26T15:31:15.120 回答
1

我认为您可以利用stateChange事件。一种可能的事件类型是VideoState.CONNECTION_ERROR,另一种是 VideoState.DISCONNECTED,它也可以工作。

试试看。

如果这些不起作用,我能想到的唯一方法是在尝试加载之前对 flv 执行 HEAD 或 GET 请求。只有成功响应才会通过正常方法触发视频加载。我不记得 Flash 是否支持 HEAD 请求,但如果支持,那肯定是更好的选择。

如果 Flash 不支持 HEAD 请求,那么您最好有一个简单的服务器端脚本,该脚本可以在您实际请求 if 之前验证 flv 的存在。这样您就可以使用简单的 GET 请求,而无需检索整个文件。

内联思考
我只是在想,使用 GET 的另一种可能的解决方案是在 bytesLoaded > 1K(例如)或类似的东西时取消加载。只要您检查的大小大于您获得的 404 响应,您就应该能够假设正在加载 flv。

于 2010-07-26T14:49:01.353 回答