1、背景
在网上找了很多资料,大家都给了`myMovieName.Play()`等方法来控制Flash视频的播放。可是使用这些方法操作Flash视频(从网上随机找的Flash视频),却都失败了,现贴出代码如下:
<object width="100%" height="100%" id="swf"> <param name="quality" value="high"> <param name="movie" value="http://imgcache.qq.com/tencentvideo_v1/player/TencentPlayer.swf?max_age=86400&v=20140714&vid=s00190fcjfl&vstart=0&vend=-164&cid=xfxd9mej2luhfoz&tpid=0&showend=1&showcfg=1&searchbar=1&shownext=1&list=2&autoplay=1&ptag=www_qq_com%7C%7Bpagetype%7D.focus.big_img.1&outhost=http%3A%2F%2Fv.qq.com%2Fmiyue%2Fmiyue.htm&refer=http%3A%2F%2Fv.qq.com%2F&openbc=0&fakefull=1&bullet=1&bulletid=&title=%E8%8A%88%E6%9C%88%E4%BC%A001"> <param name="allowScriptAccess" value="always"> <param name="loop" value="false"> <param name="play" value=""false""> <embed name="swf" src="http://imgcache.qq.com/tencentvideo_v1/player/TencentPlayer.swf?max_age=86400&v=20140714&vid=s00190fcjfl&vstart=0&vend=-164&cid=xfxd9mej2luhfoz&tpid=0&showend=1&showcfg=1&searchbar=1&shownext=1&list=2&autoplay=1&ptag=www_qq_com%7C%7Bpagetype%7D.focus.big_img.1&outhost=http%3A%2F%2Fv.qq.com%2Fmiyue%2Fmiyue.htm&refer=http%3A%2F%2Fv.qq.com%2F&openbc=0&fakefull=1&bullet=1&bulletid=&title=%E8%8A%88%E6%9C%88%E4%BC%A001" width="400" height="300" align="middle" quality="high" menu="false" play="false" loop="false" FlashVars="" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" id ="swf2"> </embed> </object> </div> <button class="test">点我</button>
控制台输入代码如下:
swf2.StopPlay()
结果无任何效果。
查了一些资料之后才明白其中的道理。Flash本身直接对网页提供了play、stop、pause方法,只是有的Flash设计了策略使得这些方法无效或不能起到作用。所以网上给的一些方法都不能实现。那么如果我自己做个Flash(使用手机拍摄MP4视频,然后使用格式工厂转化为swf文件),是不是就能用这些方法了呢?答案是是,贴出代码如下:
<object width="100%" height="100%" id="swf"> <param name="quality" value="high"> <param name="movie" value="../static/page/test.swf"> <param name="bgcolor" value="#F0F0F0"> <param name="menu" value="false"> <param name="wmode" value="opaque"> <param name="FlashVars" value=""> <param name="allowScriptAccess" value="sameDomain"> <param name="loop" value="false"> <param name="play" value=""false""> <embed name="swf" src="../static/page/test.swf" width="400" height="300" align="middle" quality="high" menu="false" play="false" loop="false" FlashVars="" allowScriptAccess="never" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" id ="swf2"> </embed> </object> </div> <button class="test">点我</button> <script type="text/javascript"> var ua = navigator.userAgent; var swfN = swf2; if (ua.indexOf('ie') > -1){ swfN = swf1; } $('body').on('click','.test',function(){ if (swfN.IsPlaying()){ swfN.StopPlay(); } else{ swfN.Play(); } }) </script>
点击`点我`按钮可以进行播放和暂停了!
那么这是为什么呢?为什么我自己做的Flash就能使用Flash提供的API被javascript控制,而网上的那些视频都不能呢?这要归功于ActionScript了。
2、ActionScript
ActionScript通常简称为AS,它是Flash中的内置编程语言。AS编写的程序,最终可以编译成SWF、SWC。对Flash写入ActionScript,可以控制Flash对脚本的响应,譬如响应什么脚本而不响应什么脚本。
flash如果需要对javascript暴露出来方法,那么需要在ActionScript中进行注册,注册方法为`ExternalInterface.addCallback(‘fnName’, fnName);`。而JS直接使用`(document[‘swfName’] || window[‘swfName’]).fnName();`调用即可.
对于ActionScript就不进行深入学习了,如果有时间可以基于ActionScript以及JavaScript写一个播放器出来.
Awesome, this is what I was browsing for in bing