加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash P2P应用AS3源代码示例

发布时间:2020-12-15 17:53:19 所属栏目:百科 来源:网络整理
导读:经过两天两夜的艰苦努力,史上第一个Flash P2P源代码终于被我老虫搞出来啦! 再来看使用方法: 在A、B两台具有静态IP的机器上打开本页后,程序首先生成一个随机的用户名myName并自动连接到Adobe官方的stratus 服务器 ,连接 成功后,程序会自动获取一个myID

经过两天两夜的艰苦努力,史上第一个Flash P2P源代码终于被我老虫搞出来啦!

再来看使用方法:

在A、B两台具有静态IP的机器上打开本页后,程序首先生成一个随机的用户名myName并自动连接到Adobe官方的stratus服务器,连接 成功后,程序会自动获取一个myID号。将A中的myName和myID复制粘贴到B中的oppName和oppID中,单击B中的Call按钮呼叫A, 当A中有呼叫的提示信息时,在A中单击Accept按钮,这样P2P连接就建立了!P2P连接建立后,可以播放对方视频,可以进行文本聊天。

通过该示例你可以:

1、了解如何使用新的RTMFP协议连接到远程服务器。

2、了解如何建立P2P连接。

3、了解如何发布和接收P2P流。

4、了解如何进行文本聊天。

已知问题:

1、(后经测试,是可以在广域网使用的!)。

2、在进行P2P呼叫的时候速度慢,即使是在同一个局域网内。

SWF文件在下面,你可以将它另存到桌面上使用,要注意允许SWF访问网络及相关的安全设置:

源代码如下:

      
      
  1. package?{??
  2. import?flash.display.MovieClip;??
  3. import?fl.managers.StyleManager;??
  4. import?flash.text.TextFormat;??
  5. import?flash.net.NetConnection;??
  6. import?flash.net.NetStream;??
  7. import?flash.net.ObjectEncoding;??
  8. import?flash.net.URLLoader;??
  9. import?flash.net.URLRequest;??
  10. import?flash.net.URLRequestMethod;??
  11. import?flash.net.URLRequestHeader;??
  12. import?flash.net.URLVariables;??
  13. import?flash.events.Event;??
  14. import?flash.events.IOErrorEvent;??
  15. import?flash.events.MouseEvent;??
  16. import?flash.events.AsyncErrorEvent;??
  17. import?flash.events.SecurityErrorEvent;??
  18. import?flash.events.NetStatusEvent;??
  19. import?flash.media.SoundTransform;??
  20. import?flash.media.Camera;??
  21. import?flash.media.Microphone;??
  22. public?class?p2p?extends?MovieClip?{??
  23. ???private?var?fmsPath:String;??
  24. ???private?var?myNC:NetConnection;??
  25. ???private?var?controlStream:NetStream;??
  26. ???private?var?outgoingStream:NetStream;??
  27. ???private?var?incomingStream:NetStream;??
  28. ???private?var?listenerStream:NetStream;??
  29. ???private?var?yourName:String;??
  30. ???private?var?yourID:String;??
  31. ???private?var?oppName:String;??
  32. ???private?var?oppID:String;??
  33. ???private?var?WebServiceUrl:String;??
  34. ???//正式开始喽??
  35. ???public?function?p2p()?{??
  36. ????setCommonStyle();??
  37. ????init();??
  38. ???}??
  39. ???private?function?setCommonStyle()?{??
  40. ????//CuPlayer.com提示:设置所有组件的样式??
  41. ????var?myTF:TextFormat=new?TextFormat?;??
  42. ????myTF.size=12;??
  43. ????StyleManager.setStyle("textFormat",myTF);??
  44. ???}??
  45. ???//CuPlayer.com提示:初始化工作??
  46. ???private?function?init()?{??
  47. ????fmsPath="rtmfp://stratus.adobe.com/HawkPrerelease-4e4efa13755c/FMSer.cn";??
  48. ????WebServiceUrl="http://76.74.170.61/cgi-bin/reg";??
  49. ????myNC=new?NetConnection();??
  50. ????myNC.client=this;??
  51. ????myNC.objectEncoding=ObjectEncoding.AMF3;??
  52. ????myNC.addEventListener(NetStatusEvent.NET_STATUS,netStatus);??
  53. ????myNC.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError);??
  54. ????myNC.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError);??
  55. ????//CuPlayer.com提示:开始连接服务器??
  56. ????myNC.connect(fmsPath);??
  57. ????//CuPlayer.com提示:随机生成用户名??
  58. ????myNameTxt.text="FMSer"+int(Math.random()*100);??
  59. ????sendBtn.addEventListener(MouseEvent.CLICK,sendChatMsg);??
  60. ???}??
  61. ??
  62. ???private?function?asyncError(e:AsyncErrorEvent)?{??
  63. ???}??
  64. ???private?function?securityError(e:SecurityErrorEvent)?{??
  65. ???}??
  66. ???//连接功能后将自己的用户名和ID传给WEB服务器暂存??
  67. ???private?function?netStatus(e:NetStatusEvent)?{??
  68. ????switch?(e.info.code)?{??
  69. ?????case?"NetConnection.Connect.Success"?:??
  70. ??????trace("CuPlayer.com提示:连接成功!");??
  71. ??????myIDTxt.text=myNC.nearID;??
  72. ??????callWebService();??
  73. ??????break;??
  74. ?????case?"NetConnection.Connect.Failed"?:??
  75. ??????trace("CuPlayer.com提示:连接失败!");??
  76. ??????break;??
  77. ?????case?"NetConnection.Connect.Rejected"?:??
  78. ??????trace("CuPlayer.com提示:连接失败!");??
  79. ??????case?"NetConnection.Connect.Closed"?:??
  80. ??????trace("CuPlayer.com提示:连接中断!");??
  81. ??????break;??
  82. ????}??
  83. ??
  84. ???}??
  85. ???//CuPlayer.com提示:完成用户信息提交工作??
  86. ???private?function?callWebService()?{??
  87. ????var?urlLoader:URLLoader?=?new?URLLoader();??
  88. ????urlLoader.addEventListener(Event.COMPLETE,?completeHandler);??
  89. ????urlLoader.addEventListener(IOErrorEvent.IO_ERROR,?ioerrorHandler);??
  90. ????var?urlRequest:URLRequest=new?URLRequest(WebServiceUrl);??
  91. ????var?parameter:URLVariables=new?URLVariables?;??
  92. ????parameter.username=myNameTxt.text;??
  93. ????parameter.identity=myIDTxt.text;??
  94. ????urlRequest.data=parameter;??
  95. ????urlLoader.load(urlRequest);??
  96. ???}??
  97. ???//准备呼叫和被呼叫??
  98. ???private?function?completeHandler(e:Event)?{??
  99. ????callBtn.addEventListener(MouseEvent.CLICK,startCall);??
  100. ????completeRegistration();??
  101. ???}??
  102. ???private?function?ioerrorHandler(e:IOErrorEvent)?{??
  103. ???}??
  104. ???//CuPlayer.com提示:开始呼叫??
  105. ???private?function?startCall(e:MouseEvent)?{??
  106. ????oppName=oppNameTxt.text;??
  107. ????oppID=oppIDTxt.text;??
  108. ????placeCall(oppName,oppID);??
  109. ???}??
  110. ???//CuPlayer.com提示:呼叫主函数??
  111. ???private?function?placeCall(tmpOppName:String,tmpOppID:String)?{??
  112. ????msgTxt.text="正在呼叫:"+tmpOppName+"...";??
  113. ????//尝试播放对方视频??
  114. ????controlStream=new?NetStream(myNC,tmpOppID);??
  115. ????controlStream.addEventListener(NetStatusEvent.NET_STATUS,controlHandler);??
  116. ????controlStream.play("control"?+tmpOppName);??
  117. ????//CuPlayer.com提示:对外发布点对点视频??
  118. ????outgoingStream=????outgoingStream.addEventListener(NetStatusEvent.NET_STATUS,outgoingStreamHandler);??
  119. ????outgoingStream.publish("media-caller");??
  120. ????var?o:*?=?new?Object();??
  121. ????o.onPeerConnect?=function?(tmpNS:NetStream){??
  122. ????msgTxt.text="正在建立P2P连接..."??
  123. ????};??
  124. ????ooutgoingStream.client=o;??
  125. ????startAudio();??
  126. ????startVideo();??
  127. ????//接收来自外部的点对点视频??
  128. ????incomingStream=????incomingStream.addEventListener(NetStatusEvent.NET_STATUS,incomingStreamHandler);??
  129. ????incomingStream.play("media-callee");??
  130. ????var?st:*?=new?SoundTransform(50);??
  131. ????incomingStream.soundTransform=st;??
  132. ????//CuPlayer.com提示:被呼叫方接受连接时触发该事件??
  133. ????var?i:*?=?new?Object();??
  134. ????i.onCallAccepted?=function?(tmpOppName:String){??????
  135. ????msgTxt.text=tmpOppName+"已经接受了你的呼叫..."??
  136. ????};??
  137. ????//被呼叫方接受连接时触发该事件??
  138. ????i.onIm?=?function?(userName:String,chatMsg:String){??
  139. ????chatContentchatContent.text?=chatContent.text?+?(userName+?":?"?+?chatMsg?+?"n");??
  140. ????chatContentchatContent.verticalScrollPosition?=chatContent.textHeight;??
  141. ????}??
  142. ?????
  143. ????iincomingStream.client=i;??
  144. ????remoteVideoDisplay.attachNetStream(incomingStream);??
  145. ???}??
  146. ???private?function?controlHandler(e:NetStatusEvent)?{??
  147. ????trace(e.info.code);??
  148. ???}??
  149. ???private?function?outgoingStreamHandler(e:NetStatusEvent)?{??
  150. ????outgoingStream.send("onIncomingCall",myNameTxt.text);??
  151. ????trace(e.info.code);?????
  152. ???}??
  153. ???private?function?startAudio()?{??
  154. ????var?myMic:Microphone=Microphone.getMicrophone(0);??
  155. ????outgoingStream.attachAudio(myMic);??
  156. ???}??
  157. ???private?function?startVideo()?{??
  158. ????var?myCam:Camera=Camera.getCamera();??
  159. ????localVideoDisplay.attachCamera(myCam);??
  160. ????outgoingStream.attachCamera(myCam);??
  161. ???}??
  162. ??
  163. ???private?function?incomingStreamHandler(e:NetStatusEvent)?{??
  164. ????trace(e.info.code);??
  165. ???}??
  166. ???//向Web服务器提交完信息后为连接做准备??
  167. ???private?function?completeRegistration()?{??
  168. ????listenerStream=????listenerStream.addEventListener(NetStatusEvent.NET_STATUS,listenerHandler);??
  169. ????listenerStream.publish("control"?+myNameTxt.text);?????
  170. ????var?c:*?=?new?Object();??
  171. ????c.onPeerConnect?=?function?(tmpNS:NetStream){??
  172. ????var?caller:*?=tmpNS;??
  173. ????incomingStream?=?????incomingStream.addEventListener(NetStatusEvent.NET_STATUS,?incomingStreamHandler);??
  174. ????incomingStream.play("media-caller");??
  175. ????var?st:SoundTransform=?new?SoundTransform(50);??
  176. ????incomingStream.soundTransform?=?st;??
  177. ????incomingStream.receiveAudio(false);??
  178. ????incomingStream.receiveVideo(false);??
  179. ????var?i:Object=?new?Object();??
  180. ????i.onIncomingCall?=?function?(tmpOppName:String){??
  181. ????msgTxt.text=tmpOppName+"正在呼叫你,你接受吗?"??
  182. ????acceptBtn.addEventListener(MouseEvent.CLICK,acceptCall)??
  183. ????}??
  184. ????i.onIm?=?function?(userName:String,chatMsg:String){??
  185. ????chatContentchatContent.text?=chatContent.text?+?(userName+?":?"?+?chatMsg?+?"n");??
  186. ????chatContentchatContent.verticalScrollPosition?=chatContent.textHeight;??
  187. ????}??
  188. ????iincomingStream.client?=?i;??
  189. ????};??
  190. ????listenerStream.client=c;??
  191. ???}??
  192. ???private?function?listenerHandler(e:NetStatusEvent)?{??
  193. ????trace(e.info.code);??
  194. ???}??
  195. ????
  196. ???//CuPlayer.com提示:接受呼叫??
  197. ???public?function?acceptCall(e:MouseEvent)?{??
  198. ????msgTxt.text="你已经接受了对方的呼叫...";??
  199. ????incomingStream.receiveAudio(true);??
  200. ????incomingStream.receiveVideo(true);??
  201. ????remoteVideoDisplay.attachNetStream(incomingStream);??
  202. ????outgoingStream=????outgoingStream.publish("media-callee");??
  203. ????var?o:*?=?new?Object();??
  204. ????o.onPeerConnect?=?function?(tmpNS:NetStream){??
  205. ???????trace(tmpNS.farID);??????
  206. ????}??
  207. ????;??
  208. ????ooutgoingStream.client=o;??
  209. ????outgoingStream.send("onCallAccepted",myNameTxt.text);??
  210. ????startVideo();??
  211. ????startAudio();??
  212. ???}??
  213. ???//CuPlayer.com提示:发送聊天信息??
  214. ???private?function?sendChatMsg(e:MouseEvent)?{??
  215. ????var?tmpMsg:*?=chatTxt.text;?????
  216. ????if?(tmpMsg!=0&&outgoingStream)?{??
  217. ?????chatContentchatContent.text=chatContent.text+myNameTxt.text+":?"+tmpMsg+"n";??
  218. ?????outgoingStream.send("onIm",myNameTxt.text,tmpMsg);??
  219. ?????chatTxt.text="";??
  220. ????}?else?{??
  221. ?????chatContent.appendText("发送内容为空或连接尚未建立!"+"n");??
  222. ?????chatTxt.text="";??
  223. ????}??
  224. ???}??
  225. }??
  226. }??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读