case 3: video_evtPlay(); break; case 8: break; } } 因为代码本来也是拷贝人家的,注释也说得很清楚,笔者就把这些注释也拷出来,方便大家参考。在这里,笔者用了其中的几个事件,并且为每个事件都定义了函数。停止播放的时候,响应video_evtStop函数,暂停时,响应evtPause函数,缓冲时,响应video_evtBuffer函数(不过这里是不能获得缓冲百分比的,如要获得,就换一个事件:Buffering(bf)),播放中,响应video_evtPlay函数。 4.3 下面,定义这几个函数 function video_evtStop(){ player.setVariable("playstatus","已停止") } function video_evtPause(){ player.setVariable("playstatus","已暂停") } function video_evtBuffer(){ player.setVariable("playstatus","正在缓冲,请稍侯") } function video_evtPlay(){ player.setVariable("playstatus","正在播放") } 这几个函数都设置了Flash里头的一个变量值,将显示在视频区域下方的动态文本里。那么,WMP在触发这四个事件的时候,Flash里就可以显示出来了。
那么,setvideo这一接口算是基本完成了,不过,别忘了还有点尾巴没有收好,就是让用户输入视频路径,按“确定”也同样可以播放视频。于是, 5.1 回到player.fla文件,给“确定”按钮添加动作: on (release) { if (addressBox.text != "") {//通过检查是否没有输入路径以降低出错的机率。 fscommand("setvideo", addressBox.text); } } 5.2 当然,这也不能避免用户输入的地址有误或者不能播放而导致的加载错误,因此,现在要在HTML里处理错误了。 之前已经加了这么句代码: <script language="JScript" for="video" event="error()">video_evtWmpError();</script> 因此,下面应该定义video_evtWmpError函数: function evtWmpError(){ video.Error.clearErrorQueue();//先清空错误 player.setVariable("playstatus","加载失败")//让Flash的动态文本显示出错消息 Retry()//进入重试状态 } var tryTime=0 function Retry(){ tryTime++; if(tryTime>5){//重试次数超过5次的时候
tryTime=0;//重置tryTime clearTimeout(RetryID)//放弃重试 }else{//在重试次数还没超过5次的时候, RetryID=setTimeout(initvideo,1000,video.URL)//每隔一秒重试一次。 } } 以上只是笔者的一个错误处理方案,你们完全可以根据自己的需要,在evtWmpError函数里头写出适合于你自己具体情况的错误处理代码。笔者的这一代码,是在加载错误以后,周期性调用重试函数,再在重试函数里头让播放视频的动作重新执行,以达到重试的目的。如果再一次播放失败的话,WMP会自动调用evtWmpError事件,此时tryTime会加一,说明已经重试了一遍。如此反复,如果第五次调用initvideo函数还出错的话,那么就会执行clearTimeout(RetryID),放弃重试。 当这些事件处理已经比较完善的时候,我们接下来的一些控制就不需要考虑播放时究竟发生了什么,然后要提示用户些什么,我们只管去控制视频的播放,播放状态的提示就会自动给你跑出来。不信,你们试试看。 6.1 分别给播放,暂停,停止,全屏按钮加入以下的四段代码: 播放按钮: on(release){ fscommand("playvideo") } 暂停按钮: on(release){ fscommand("pausevideo") } 停止按钮: on(release){ fscommand("stopvideo") } 全屏按钮: on(release){ fscommand("fullscreen",true)//注意,这里的控制不是让播放器全屏,这是用在网页上的,跟之前几个是同等的。 } 然后,在HTML的fscommand函数的switch里追加代码: |