您的位置:首页 > 移动开发 > Objective-C

解决烦人的Windows Media Player(web嵌入) 不能自动播放

2011-09-05 18:05 567 查看
 
如果你看到题目感到有点奇怪,那就请你继续读下去吧!

如果你知道param AutoStart 参数可以使视频或音频(以下都将用视频代替)文件在加载后自动播放,那就更该继续看下去了,因为这里指的内容可能会纠正你一个错误的思路,下面正式开始阐述今天的问题。

音乐播放器想必你一定用过,播放完一首音乐是不是想自动切换到下一首呢,当然,这是每个播放器必须的功能。但是如果你是用Windows Media Player(WMP)来做的,估计你一定绕了不少弯路,因为Web嵌入WMP的好多属性着实让人感到头疼。

欲实现的功能很简单就是在当前视频播放完毕时开始自动切换到下一视频继续播放,先让我猜猜你的思路:当WMP的上个视频文件播放结束时,你先重新给WMP的URL赋值,然后开始播放。没错,你的思路是正确的,但是WMP可不一定完全按照你的意思办事,下边先看下这个思路的代码

 

MediaPlay.attachEvent("PlayStateChange",function(lOldState, lNewState){
switch(lOldState)        {
case 8://8代表播放视频关闭
//MediaPlay.controls.stop();//这个其实是没用的
MediaPlay.URL="a.wmv";//改为新的视频
MediaPlay.controls.play();//播放视频
break;          // case null: //   ....         //其他你需要捕获的状态
}
});


 

 

其中MeidaPlay为你嵌入Object对象的ID,用attachEvent来为播放器捕获PlayStateChange事件。

这样的思路看似完美了,但是运行效果却没有想象的好,播放器会在播放完上一个视频的同时停止,状态显示为“正在获取视频信息”,这时只有用户手动的点击播放按钮,视频才会继续播放下一个你新添加的视频。

那么,怎样才可以自动播放呢?先看代码:

 

MediaPlay.attachEvent("PlayStateChange",function(lOldState, lNewState){
switch(lOldState)     {
case 8:
MeidaPlay.URL="a.wmv";
window.setTimeout("MediaPlay.controls.play()",500);//关键在这
break;
}
});


 

修改简单吧,这样就可以自动播放了。

到底为什么呢?答案是Play方法是异步的只有在播放器的所有进程都结束时才会执行,所以在播放视频关闭时play方法是不起作用的。网上还有一些资料说可以用open方法因为这个方法是同步的,但我试了没有效果,不知道你有没有更好的办法,请告知!

顺便说一下微软的东西实在太可怕了,单单就这个问题困扰了我好久,因为官方没有这方面的解释,而且好多官方的好多方法都不正确,唉,只能我们自己摸索了!

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息