我对动作脚本非常陌生,我正在使用FLVPlayback
该类来播放我的 FLV 文件。
如果我正在尝试播放尚不存在的 FLV 文件,那么我将收到“VideoError: 1000”,消息为Unable to make connection to server or to find FLV on server
.
在通过 FLVPlayback 播放 FLV 之前,我想使用文件 URL 或路径检查 FLV 文件是否存在。任何人都可以建议一种方法来做到这一点。
谢谢
我对动作脚本非常陌生,我正在使用FLVPlayback
该类来播放我的 FLV 文件。
如果我正在尝试播放尚不存在的 FLV 文件,那么我将收到“VideoError: 1000”,消息为Unable to make connection to server or to find FLV on server
.
在通过 FLVPlayback 播放 FLV 之前,我想使用文件 URL 或路径检查 FLV 文件是否存在。任何人都可以建议一种方法来做到这一点。
谢谢
安全捕获错误的唯一方法是监听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。
我认为您可以利用stateChange事件。一种可能的事件类型是VideoState.CONNECTION_ERROR,另一种是 VideoState.DISCONNECTED,它也可以工作。
试试看。
如果这些不起作用,我能想到的唯一方法是在尝试加载之前对 flv 执行 HEAD 或 GET 请求。只有成功响应才会通过正常方法触发视频加载。我不记得 Flash 是否支持 HEAD 请求,但如果支持,那肯定是更好的选择。
如果 Flash 不支持 HEAD 请求,那么您最好有一个简单的服务器端脚本,该脚本可以在您实际请求 if 之前验证 flv 的存在。这样您就可以使用简单的 GET 请求,而无需检索整个文件。
内联思考
我只是在想,使用 GET 的另一种可能的解决方案是在 bytesLoaded > 1K(例如)或类似的东西时取消加载。只要您检查的大小大于您获得的 404 响应,您就应该能够假设正在加载 flv。