·您当前的位置:首页 > 技术教程 > 播放器教程 >

[AS3]as3编写的FLV,mp4视频播放器源代码示例

时间:2012-12-05 10:12flashcs5as3
制作了一个简单的FLV播放器,应用了NetConnection类,NetStream类以及Video类,在创建视频之前在NetStream类对象上注册了 onMetaData事件和NET_STATUS事件

制作了一个简单的FLV播放器,应用了NetConnection类,NetStream类以及Video类,在创建视频之前在NetStream类对象上注册了 onMetaData事件和NET_STATUS事件,其中onMetaData事件获取视频文件的总时长,NET_STATUS事件处理函数获得流媒体 的下载和播放状态并做相应处理。

  1. import flash.media.*;  
  2. import flash.net.URLStream;  
  3. import flash.net.NetConnection;  
  4. var movieTotalTime:Number=0;//总时间  
  5. var proTime:Number=0;//已经播放的时间  
  6. var dx=drag.x;  
  7. var lx=line.x;  
  8. var dw=drag.width;  
  9. var lw=line.width;  
  10. var tempProgress;  
  11. var now=true;  
  12. btn.buttonMode=true;  
  13. line.line_b.scaleX=0;//进度条控制  
  14. var videoconnection:NetConnection=new NetConnection();

    //创建一个NetConnection对象.  
  15. videoconnection.connect(null);  
  16. var videostream:NetStream=new NetStream(videoconnection);

    //建立一个NetStream对象,连接到NetConnection里面去.  
  17. var myvideo:Video =new Video();  
  18. myvideo.attachNetStream(videostream);  
  19. //Video挂接NetStream,从NetStream那里读内容.  
  20. videostream.play("http://www.cuplayer.com/test.flv");  
  21. var client:Object=new Object();  
  22. client.onMetaData=onMetaData;//回调函数,获取总的时间   
  23. videostream.client=client;  
  24. function onMetaData(data:Object):void {  
  25. movieTotalTime=Math.round(data.duration);  
  26. }  
  27. //视频播放前缓冲到一定时间后才自动播放,  
  28. videostream.bufferTime=5;  
  29. var buffer:Boolean=true;  
  30. function onStatus(_evt:NetStatusEvent ):void {  
  31. trace(_evt.info.code);  
  32. if (_evt.info.code=="NetStream.Play.Start") {  
  33. addEventListener(Event.ENTER_FRAME ,onEnterFrame);  
  34. } else if (_evt.info.code=="NetStream.Buffer.Empty") {  
  35. loadmc.visible = true;  
  36. buffer_txt.visible=true;  
  37. buffer=true;//这里表示视频正在缓冲  
  38. } else if (_evt.info.code=="NetStream.Buffer.Full") {  
  39. buffer=false;  
  40. loadmc.visible = false;  
  41. buffer_txt.visible=false;  
  42. }//CuPlayer.com提示这里表示视频缓冲区填满了  
  43. }  
  44. videostream.addEventListener(NetStatusEvent.NET_STATUS,onStatus);  
  45. function onEnterFrame(_evt:Event ) {  
  46. //这里就是显示当前缓冲了多少了  
  47. bufferbuffer_txt.htmlText=buffer?"正在缓冲:"

    +Math.floor(videostream.bufferLength/videostream.bufferTime*100)+"%":"";  
  48. }  
  49. //视频大小和位置的控制  
  50. myvideo.x=-337;  
  51. myvideo.y=-396;  
  52. myvideo.width=483;  
  53. myvideo.height=372;  
  54. addChild(myvideo);  
  55. setChildIndex(myvideo,0);  
  56. btn_mc.visible=false;  
  57. btn_an.addEventListener(MouseEvent.MOUSE_DOWN,bt_down);  
  58. btn.addEventListener(MouseEvent.CLICK,bt_down);  
  59. line.addEventListener(MouseEvent.MOUSE_DOWN,dragdown);  
  60. line.addEventListener(MouseEvent.MOUSE_UP,dragup);  
  61. function dragdown(e:MouseEvent) {  
  62. drag.x=mouseX;  
  63. proTime=(drag.x-dx)/line.width*movieTotalTime;//当前播放的时间  
  64. videostream.seek(proTime);  
  65. }  
  66. function dragup(e:MouseEvent) {  
  67. removeEventListener(MouseEvent.MOUSE_DOWN,dragdown);  
  68. }  
  69. addEventListener(Event.ENTER_FRAME,dragmove);  
  70. function dragmove(e:Event) {  
  71. if (movieTotalTime!=0) {  
  72. tempProgress=Math.ceil(videostream.time/movieTotalTime*100)/100;  
  73. }  
  74. line.line_b.scaleX=tempProgress;  
  75. drag.x=Math.round(tempProgress*line.width)+dx-dw;  
  76. var ld_minutes=Math.ceil(videostream.time);  
  77. var n_minutes=Math.floor(ld_minutes/60);  
  78. var p_minutes=Math.floor(ld_minutes%60);  
  79. //秒数转化为时间显示  
  80. if (p_minutes<10) {  
  81. if (n_minutes<1) {  
  82. proTitle.text="00"+":"+"0"+String(ld_minutes);  
  83. } else {  
  84. proTitle.text="0"+String(n_minutes)+":"+"0"+String(p_minutes);  
  85. }  
  86. } else {  
  87. proTitle.text="0"+String(n_minutes)+":"+String(p_minutes);  
  88. }  
  89. var str:String;  
  90. var my_minutes=Math.floor(movieTotalTime/60);//得到分钟的正整数  
  91. var my_seconds=Math.floor(movieTotalTime%60);//得到秒钟的正整数  
  92. if (my_seconds<10) {  
  93. str="0"+String(my_seconds);  
  94. } else {  
  95. str=String(my_seconds);  
  96. }  
  97. troTitle.text=String(100+my_minutes).substr(1,2)+":"+str;  
  98. }  
  99. function bt_down(e:MouseEvent):void {  
  100. now!=now;  
  101. if (now) {  
  102. videostream.pause();  
  103. btn_mc.visible=true;  
  104. btn.gotoAndStop(2);  
  105. now=false;  
  106. } else {  
  107. btn_mc.visible=false;  
  108. videostream.resume();  
  109. btn.gotoAndStop(1);  
  110. now=true;  
  111. }  
  112. if (tempProgress>=1) {  
  113. drag.x=dx;  
  114. btn_mc.visible=false;  
  115. videostream.seek(0);  
  116. videostream.resume();  
  117. }  
  118. }  
  119.  
  120. //全屏缩放控制  
  121. btn_screen.buttonMode=true;  
  122. btn_screen.addEventListener(MouseEvent.MOUSE_DOWN,fullScreen);  
  123. function fullScreen(e:MouseEvent):void {  
  124. if (stage.displayState==StageDisplayState.NORMAL) {  
  125. stage.displayState=StageDisplayState.FULL_SCREEN;  
  126. } else if (stage.displayState ==StageDisplayState.FULL_SCREEN) {  
  127. stage.displayState=StageDisplayState.NORMAL;  
  128. }  
  129. }  
  130. //声音控制  
  131. var sound:SoundTransform =new SoundTransform();  
  132. var volumes:Number=sound.volume;  
  133. videostream.soundTransform=sound;  
  134. btn_sy.gotoAndStop(7);  
  135. for (var j:uint=1; j<=7; j++) {  
  136. var s_btn:MovieClip=btn_sy.an.getChildAt(j-1) as MovieClip;  
  137. s_btn.addEventListener(MouseEvent.MOUSE_DOWN,set_volume);  
  138. }  
  139. function set_volume(e:MouseEvent):void {  
  140. var _mc=e.currentTarget;  
  141. var k:Number=btn_sy.an.getChildIndex(_mc);  
  142. btn_sy.gotoAndStop(k+1);  
  143. sound.volume=(k+1)/7;  
  144. videostream.soundTransform=sound;  

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器