本人开始的时候是参考http://www.knowsky.com/441541.html,进行制作的。可以看到其中的actionscript代码为
//创建一个名为nc的NetConnection对象 var nc:NetConnection = new NetConnection(); nc.connect(null); //创建一个名为ns的NetStream对象,并将nc作为参数填写在括号内 var ns:NetStream = new NetStream(nc); //创建一个名为myVideo的Video对象 var myVideo:Video; //将myVideo播放的视频指定为ns myVideo.attachVideo(ns); //让ns执行play()方法,括号内填写flv文件的路径,这里我用的是本地路径 ns.play("1.flv");
1 第一个错误
但是你会发现直接运行会有下面的错误,参考下面的两个文章:
http://flashascript.wordpress.com/2010/11/08/flash-custom-video-player-tutorial-part-1/
http://glqhappywithyou.blog.163.com/blog/static/1184761912011101243029906/
可以知道原因是myVideo.attachVideo(ns)这个方法在actionscript3.0里面已经没有了,其实上面是actionscript2.0的方法,所以并不适用。
于是将这句话修改为:myVideo.attachNetStream (ns); 这样就不会报错了。
2 第二个错误
但是还是无法正常的播放视频,上面百度空间的也遇到这个问题,但是没有继续查找原因。
通过按ctrl+shift+enter,会得到下面的错误:
TypeError: Error #1009: 无法访问空对象引用的属性或方法。
at flashplayer_fla::MainTimeline/frame1()[flashplayer_fla.MainTimeline::frame1:23]
可以发现是myVideo.attachNetStream (ns);这句话出现了问题,这里空对象引用出现了问题,说明myVideo是个空对象。
因为我没用过actionscript2.0,不明白语法,有达人知道为什么2.0是ok可以在下面告诉我。
但是对于actionscript3.0这里的错误就是因为myVideo是空对象,应该修改为var myVideo:Video = new Video();
3 第三个错误
你可以发现播放器能够播放视频,但是播放的时候存在下面的问题
Error #2044: 未处理的 AsyncErrorEvent:。 text=Error #2095: flash.net.NetStream 无法调用回调 onMetaData。 error=ReferenceError: Error #1069: 在 flash.net.NetStream 上找不到属性 onMetaData,且没有默认值。
at flashplayer_fla::MainTimeline/frame1()
为什么会报错,由于在下也是初学,不知道所以然,有高手可以回复一下,或者以后找到原因也会写上去。
如何解决呢?
我参考了
http://tian-qi.iteye.com/blog/604759
http://bbs.9ria.com/thread-31175-1-1.html
下面是完整的acitonscript3.0代码
//创建一个名为nc的NetConnection对象 var nc:NetConnection = new NetConnection(); nc.connect(null); var customClient:Object = new Object(); customClient.onMetaData = metaDataHandler; //创建一个名为ns的NetStream对象,并将nc作为参数填写在括号内 var ns:NetStream = new NetStream(nc); ns.client=customClient; //创建一个名为myVideo的Video对象 var myVideo:Video = new Video(); addChild(myVideo); //将myVideo播放的视频指定为ns myVideo.attachNetStream (ns); //让ns执行play()方法,括号内填写flv文件的路径,这里我用的是本地路径 ns.play("1.flv"); //onMetaData回调函数的事件 function metaDataHandler(infoObject:Object):void {}
这样就可以在本地播放视频了。
所有代码可以参考https://github.com/destinym/flashplayer.git