【问题标题】:How to check for the FLV file existence before playing that using FLVPlayback in Action Script 3?如何在使用动作脚本 3 中的 FLVPlayback 播放之前检查 FLV 文件是否存在?
【发布时间】:2011-03-21 03:08:57
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: actionscript-3 action flvplayback


    【解决方案1】:

    安全捕获错误的唯一方法是侦听fl.video.VideoEvent.STATE_CHANGE 事件并采取相应措施。这是一个关于如何做到这一点的小代码sn-p:

    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

    【讨论】:

    • 顺便说一下,为了让 sn-p 正常工作,您需要在时间轴中拥有一个名为“videoPlayer”的 FLVPlayback 组件实例。
    • 谢谢 Rudisimo,你的代码很清晰,对我很有用。是否有任何 VideoState(如 CONNECTION_ERROR),之后我可以使用“play()”方法播放视频?
    • 我已经编辑了答案,以便在 VideoState 常量的完整列表中包含一个列表。
    【解决方案2】:

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

    尝试一下。

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

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

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

    【讨论】:

    • 非常感谢 sberry2A,您的解决方案很好地解决了我的问题。我使用“VideoState.CONNECTION_ERROR”来解决我的问题。
    猜你喜欢
    • 2021-11-17
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    相关资源
    最近更新 更多