·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]基于rtmp协议的Mp3流媒体播放器fms音乐播放器

时间:2013-10-27 17:16cuplayer
[AS3]基于rtmp协议的Mp3流媒体播放器fms音乐播放器,fms音乐播放器,rtmp播放器,mp3播放器

[AS3]基于rtmp协议的Mp3流媒体播放器fms音乐播放器,fms音乐播放器,rtmp播放器,mp3播放器

  1. /******************************* 
  2. Import Classes 
  3. *******************************/ 
  4. //Allow AS3 to talk to FMS2 AS1 
  5. NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0; 
  6.   
  7. /******************************* 
  8. Var 
  9. *******************************/ 
  10. var rtmp:String = "rtmp://yourserver.com"
  11. var songList:Array = new Array("You and I", "05 Phantom pt. I"); 
  12. var nc:NetConnection = new NetConnection(); 
  13. // nc.objectEncoding = flash.net.ObjectEncoding.AMF0; 
  14. var ns:NetStream; 
  15. var id3_ns:NetStream; 
  16. var nsClient:Object = new Object(); 
  17. var id3Client:Object = new Object(); 
  18. var isConnected:Boolean = false
  19. var currentSong:Number = 0
  20. var soundXForm:SoundTransform = new SoundTransform(); 
  21. soundXForm.volume = 0.5; 
  22.   
  23. /******************************* 
  24. Event Listeners 
  25. *******************************/ 
  26. prev_btn.addEventListener(MouseEvent.CLICK, prevHandler); 
  27. next_btn.addEventListener(MouseEvent.CLICK, nextHandler); 
  28. play_mc.addEventListener(MouseEvent.CLICK, toggleButton); 
  29. play_mc.addEventListener(MouseEvent.CLICK, pauseHandler); 
  30.   
  31. seekBar_mc.buttonMode = true
  32. seekBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, seekStartDrag); 
  33.   
  34. seekScrub_mc.buttonMode = true
  35. seekScrub_mc.addEventListener(MouseEvent.MOUSE_DOWN, seekStartDrag); 
  36.   
  37. volScrub_mc.buttonMode = true
  38. volScrub_mc.scaleX = (volBar_mc.scaleX / 2); 
  39. volScrub_mc.addEventListener(MouseEvent.MOUSE_DOWN, volStartDrag); 
  40.   
  41. volBar_mc.buttonMode = true
  42. volBar_mc.addEventListener(MouseEvent.MOUSE_DOWN, volStartDrag); 
  43.   
  44. /******************************* 
  45. Event Handlers 
  46. *******************************/ 
  47. function prevHandler(e:MouseEvent):void { 
  48. prevSong(); 
  49. function pauseHandler(e:MouseEvent):void { 
  50. pauseSong(); 
  51. function playHandler(e:MouseEvent):void { 
  52. //Play the song based on the position of the seekKnob 
  53. playSong(ns.time); 
  54. function nextHandler(e:MouseEvent):void { 
  55. nextSong(); 
  56. function toggleButton(e:MouseEvent) { 
  57. // trace(e.target.currentFrame); 
  58. //on - 1 :: onOver - 5 :: mute - 10 :: muteOver - 15 
  59. if (e.target.currentFrame == 1) 
  60. e.target.gotoAndStop(10); 
  61. } else if (e.target.currentFrame == 5) 
  62. e.target.gotoAndStop(15); 
  63. } else if (e.target.currentFrame == 10) 
  64. e.target.gotoAndStop(1); 
  65. } else if (e.target.currentFrame == 15) 
  66. e.target.gotoAndStop(5); 
  67. /******************************* 
  68. Connect to FMS and play song 
  69. *******************************/ 
  70. //cuplayer.comThis Handles a Function call made by the Flash Media Server default main.asc 
  71. NetConnection.prototype.onBWDone = function(info) {} 
  72. NetConnection.prototype.onBWCheck = function() {} 
  73.   
  74. function createConnection(appURL:String):void { 
  75. if( !nc.connected){ 
  76. nc.connect(appURL); 
  77. nc.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler ); 
  78. nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
  79. }else{ 
  80. nc.close(); 
  81. isConnected = false
  82. function securityErrorHandler( e ):void{ 
  83. trace("SecurityError: " + e); 
  84. //Detect when a connection has been made as well as the status of a playing song 
  85. function netStatusHandler( e:NetStatusEvent ):void { 
  86. switch( e.info.code ) { 
  87. case "NetConnection.Connect.Success": 
  88. connectionSuccess( new Event( "success" ) ); 
  89. break; 
  90. case "NetConnection.Connect.Failed": 
  91. connectionFailed( new Event( "failed" ) ); 
  92. break; 
  93. case "NetStream.Play.Stop": 
  94. // trace("netStatusHandler:code: " + e.info.code); 
  95. break; 
  96. default: 
  97. //trace( "netStatusHandler:code: " + e.info.code ); 
  98. break; 
  99. function connectionSuccess( e:Event ):void {     
  100. //A. Assign that a NetConnection has been made 
  101. isConnected = true
  102. //B. Assign a new NetStream connection 
  103. if( ns == null ){ 
  104. ns = new NetStream(nc); 
  105. ns.addEventListener( AsyncErrorEvent.ASYNC_ERROR, catchAll ); 
  106. ns.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler ); 
  107. ns.addEventListener( IOErrorEvent.IO_ERROR, catchAll ); 
  108. //C. Assign a new ID3 Netstream Connection 
  109. if( id3_ns == null ) { 
  110. id3_ns = new NetStream(nc); 
  111. id3_ns.addEventListener( AsyncErrorEvent.ASYNC_ERROR, catchAll ); 
  112. id3_ns.addEventListener( IOErrorEvent.IO_ERROR, catchAll ); 
  113. id3_ns.addEventListener( NetStatusEvent.NET_STATUS, netStatusHandler ); 
  114. playSong(0); 
  115. function connectionFailed( e:Event ):void { 
  116. isConnected = false
  117. function catchAll( e:Event ){ 
  118. trace("\n\n\n\nCatch All: " + e + "\n\n\n\n"); 
  119.   
  120. /******************************* 
  121. Single callback functions that process the information sent by FMS2 
  122. *******************************/ 
  123. nsClient.onPlayStatus   = function( obj:Object ):void{ 
  124. switch ( obj.code ){ 
  125. case "NetStream.Play.Switch": 
  126. break; 
  127. case "NetStream.Play.Complete": 
  128. soundCompleteHandler(); 
  129. break; 
  130. default: 
  131. for( var a:String in obj ){ trace(a + " " + obj[ a ]); } 
  132. break; 
  133. id3Client.onId3 = function( obj:Object ):void{ 
  134. if(obj["artist"] != undefined){ 
  135. text_txt.text = "Artist: " + obj["artist"].toString(); 
  136. if(obj["songtitle"] != undefined){ 
  137. text_txt.text += "\nTitle: " + obj["songtitle"].toString() 
  138. }    
  139. for( var b:String in obj ) { 
  140. //trace(b + ": " + obj[ b ]); 
  141. function setNetClientLength(length:Number):void{ 
  142. nsClient.length = length; 
  143. }    
  144. /******************************* 
  145. Song 
  146. *******************************/ 
  147. function prevSong():void { 
  148. //cuplayer.comA. Close NetStream connection to allow for a new one 
  149. ns.close(); 
  150. //B. If there is no previous song to play, restart the currentSong 
  151. if (currentSong > 0) { 
  152. currentSong--; 
  153. } else { 
  154. currentSong = songList.length - 1; 
  155. //C. Create a new Net Stream. The new Event is simply Fluff 
  156. connectionSuccess( new Event("Empty String")); 
  157. function nextSong():void { 
  158. //A. Close the NetStream connection to allow for a new one 
  159. ns.close(); 
  160. //B. If there is another song in the playlist, play on! 
  161. if (currentSong < songList.length - 1) { 
  162. currentSong++; 
  163. }else { 
  164. //C. Otherwise return to the first song on the playlist 
  165. currentSong = 0
  166. //cuplayer.comD. Create a new NetStream connection 
  167. connectionSuccess(new Event("Empty String")); 
  168. function playSong(position:Number):void { 
  169. text_txt.text = ""
  170. //A. Ensure that the connection to FMS is open 
  171. if (!isConnected) { createConnection(rtmp); } 
  172. //B. Find the ID3 Information of the Mp3 
  173. id3_ns.play("id3:" + songList[currentSong]); 
  174. //C. Reassign the id3Client:Object to re-catch any ID3 info 
  175. id3_ns.client = id3Client
  176. //C. Play the new NetStream connection 
  177. //play(songName, postion in Seconds:Number, duration in seconds:Number, flush:Boolean -> false means play the next song) 
  178. ns.play("mp3:" + songList[currentSong], position); 
  179. //D. Reassign the nsClient:Object to ensure the catch of the onPlayStatus 
  180. ns.client = nsClient
  181. //cuplayer.comE. Adjust the Volume 
  182. ns.soundTransform = soundXForm
  183. //E. Retreive the Length of the Song from FMS and set it to nsClient.length 
  184. nc.call("getStreamLength", new Responder(setNetClientLength), "mp3:" + songList[currentSong]); 
  185. //F. Begin tracking the position of the song for the status bar 
  186. seekBar_mc.addEventListener(Event.ENTER_FRAME, songPosition); 
  187. function pauseSong():void { 
  188. ns.togglePause(); 
  189. function soundCompleteHandler():void { 
  190. trace("soundCompleteHandler"); 
  191. //Garbage Collection 
  192. seekBar_mc.removeEventListener(Event.ENTER_FRAME, songPosition); 
  193. //This resets the Progress Bar back to 0 
  194. songPosition(new Event("Empty String")); 
  195. //Flip the Play/Pause button back to play 
  196. play_mc.gotoAndStop("play"); 
  197. //Repeat the song 
  198. nextSong(); 
  199. /******************************* 
  200. Volume 
  201. *******************************/ 
  202. function volStartDrag(e:MouseEvent):void { 
  203. volumeUpdate(e); 
  204. volBar_mc.addEventListener(MouseEvent.MOUSE_MOVE, volumeUpdate); 
  205. volScrub_mc.addEventListener(MouseEvent.MOUSE_MOVE, volumeUpdate); 
  206. stage.addEventListener(MouseEvent.MOUSE_UP, volumeStopDrag); 
  207. function volumeStopDrag(e:MouseEvent):void { 
  208. volBar_mc.removeEventListener(MouseEvent.MOUSE_MOVE, volumeUpdate); 
  209. volScrub_mc.removeEventListener(MouseEvent.MOUSE_MOVE, volumeUpdate); 
  210. stage.removeEventListener(MouseEvent.MOUSE_UP, volumeStopDrag); 
  211. function volumeUpdate(e:MouseEvent):void{ 
  212. //Calculate the Distance Between the Mouse (e.stageX) and the volBar_mc.x 
  213. var dist:Number = ((e.stageX - volBar_mc.x) / volBar_mc.width); 
  214. if (dist >= 0 && dist <= 1){ 
  215. //Adjust the Volume Bar GUI 
  216. volumeBarUpdate(dist); 
  217. //Adjust the Sound Volume 
  218. soundXForm.volume = dist
  219. ns.soundTransform = soundXForm
  220. }    
  221. function volumeBarUpdate(dist:Number):void{ 
  222. volScrub_mc.scaleX = (dist); 
  223. /******************************* 
  224. Seek 
  225. *******************************/ 
  226. function seekStartDrag(e:MouseEvent):void { 
  227. //cuplayer.comA. Jump to the spot in the song where the user clicked 
  228. seekUpdate(e); 
  229. //A. Remain seeking while the Mouse is Still Down and Moving 
  230. seekBar_mc.addEventListener(MouseEvent.MOUSE_MOVE, seekUpdate); 
  231. seekScrub_mc.addEventListener(MouseEvent.MOUSE_MOVE, seekUpdate); 
  232. //cuplayer.comC. Self Destruct 
  233. stage.addEventListener(MouseEvent.MOUSE_UP, seekStopDrag); 
  234. function seekStopDrag(e:Event):void { 
  235. seekScrub_mc.removeEventListener(MouseEvent.MOUSE_MOVE, seekUpdate); 
  236. seekBar_mc.removeEventListener(MouseEvent.MOUSE_MOVE, seekUpdate); 
  237. stage.removeEventListener(MouseEvent.MOUSE_UP, seekStopDrag); 
  238. function seekUpdate(e:MouseEvent):void { 
  239. //cuplayer.comA. If a user clicks a new part of the song, you must first seek() then update the Progress Bar 
  240. var dist:Number = ((e.stageX - seekBar_mc.x) / seekBar_mc.width); 
  241. //cuplayer.comB. Seek the spot 
  242. ns.seek(Math.floor(nsClient.length * dist)); 
  243. //C. Upate the Progress Bar 
  244. seekBarUpdate(dist) 
  245. function songPosition(e:Event):void{ 
  246. var dist:Number = ns.time / nsClient.length; 
  247. if (!isNaN(dist)) { 
  248. seekBarUpdate(dist); 
  249. } else { 
  250. seekBarUpdate(0); 
  251. }    
  252. function seekBarUpdate(dist:Number){ 
  253. //A. Adjust the GUI 
  254. seekScrub_mc.scaleX = dist
  255. /******************************* 
  256. Launch the Application on Frame(0) cuplayer.com 
  257. *******************************/ 
  258. addFrameScript(0, createConnection(rtmp)); 

 

热门文章推荐

请稍候...

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

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