FMSer.cn's Profile
| Name |
FMSer.CN
|
| About Me |
<p>I am a FMS developer from China,I love Flash and FMS.</p>
|
| Languages Spoken |
Chinese
|
| Company |
www.FMSer.CN
|
| Position |
CTO
|
| Interests |
<p>Flash,FMS,AS,P2P,etc.</p>
|
| Recent Code |
package { import flash.display.MovieClip; import fl.managers.StyleManager; import flash.text.TextFormat; import flash.net.NetConnection; import flash.net.NetStream; import flash.net.ObjectEncoding; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLRequestHeader; import flash.net.URLVariables; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.events.AsyncErrorEvent; import flash.events.SecurityErrorEvent; import flash.events.NetStatusEvent; import flash.media.SoundTransform; import flash.media.Camera; import flash.media.Microphone; public class p2p extends MovieClip { private var fmsPath:String; private var myNC:NetConnection; private var controlStream:NetStream; private var outgoingStream:NetStream; private var incomingStream:NetStream; private var listenerStream:NetStream; private var yourName:String; private var yourID:String; private var oppName:String; private var oppID:String; private var WebServiceUrl:String; //正式开始喽 public function p2p() { setCommonStyle(); init(); } private function setCommonStyle() { //设置所有组件的样式 var myTF:TextFormat=new TextFormat ; myTF.size=12; StyleManager.setStyle("textFormat",myTF); } //初始化工作 private function init() { fmsPath="rtmfp://stratus.adobe.com/HawkPrerelease-4e4efa13755c/labs.adobe.com"; WebServiceUrl="http://76.74.170.61/cgi-bin/reg"; myNC=new NetConnection(); myNC.client=this; myNC.objectEncoding=ObjectEncoding.AMF3; myNC.addEventListener(NetStatusEvent.NET_STATUS,netStatus); myNC.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError); myNC.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError); //开始连接服务器 myNC.connect(fmsPath); //随机生成用户名 myNameTxt.text="FMSer"+int(Math.random()*100); sendBtn.addEventListener(MouseEvent.CLICK,sendChatMsg); } private function asyncError(e:AsyncErrorEvent) { } private function securityError(e:SecurityErrorEvent) { } //连接功能后将自己的用户名和ID传给WEB服务器暂存 private function netStatus(e:NetStatusEvent) { switch (e.info.code) { case "NetConnection.Connect.Success" : trace("连接成功!"); myIDTxt.text=myNC.nearID; callWebService(); break; case "NetConnection.Connect.Failed" : trace("连接失败!"); break; case "NetConnection.Connect.Rejected" : trace("连接失败!"); break; case "NetConnection.Connect.Closed" : trace("连接中断!"); break; } } //完成用户信息提交工作 private function callWebService() { var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE, completeHandler); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioerrorHandler); var urlRequest:URLRequest=new URLRequest(WebServiceUrl); var parameter:URLVariables=new URLVariables ; parameter.username=myNameTxt.text; parameter.identity=myIDTxt.text; urlRequest.data=parameter; urlLoader.load(urlRequest); } //准备呼叫和被呼叫 private function completeHandler(e:Event) { callBtn.addEventListener(MouseEvent.CLICK,startCall); completeRegistration(); } private function ioerrorHandler(e:IOErrorEvent) { } //开始呼叫 private function startCall(e:MouseEvent) { oppName=oppNameTxt.text; oppID=oppIDTxt.text; placeCall(oppName,oppID); } //呼叫主函数 private function placeCall(tmpOppName:String,tmpOppID:String) { msgTxt.text="正在呼叫:"+tmpOppName+"..."; //尝试播放对方视频 controlStream=new NetStream(myNC,tmpOppID); controlStream.addEventListener(NetStatusEvent.NET_STATUS,controlHandler); controlStream.play("control" +tmpOppName); //对外发布点对点视频 outgoingStream=new NetStream(myNC,NetStream.DIRECT_CONNECTIONS); outgoingStream.addEventListener(NetStatusEvent.NET_STATUS,outgoingStreamHandler); outgoingStream.publish("media-caller"); var o:* = new Object(); o.onPeerConnect =function (tmpNS:NetStream){ msgTxt.text="正在建立P2P连接..." }; outgoingStream.client=o; startAudio(); startVideo(); //接收来自外部的点对点视频 incomingStream=new NetStream(myNC,tmpOppID); incomingStream.addEventListener(NetStatusEvent.NET_STATUS,incomingStreamHandler); incomingStream.play("media-callee"); var st:* =new SoundTransform(50); incomingStream.soundTransform=st; //被呼叫方接受连接时触发该事件 var i:* = new Object(); i.onCallAccepted =function (tmpOppName:String){ msgTxt.text=tmpOppName+"已经接受了你的呼叫..." }; //被呼叫方接受连接时触发该事件 i.onIm = function (userName:String,chatMsg:String){ chatContent.text =chatContent.text + (userName+ ": " + chatMsg + "\n"); chatContent.verticalScrollPosition =chatContent.textHeight; } incomingStream.client=i; remoteVideoDisplay.attachNetStream(incomingStream); } private function controlHandler(e:NetStatusEvent) { trace(e.info.code); } private function outgoingStreamHandler(e:NetStatusEvent) { outgoingStream.send("onIncomingCall",myNameTxt.text); trace(e.info.code); } private function startAudio() { var myMic:Microphone=Microphone.getMicrophone(0); outgoingStream.attachAudio(myMic); } private function startVideo() { var myCam:Camera=Camera.getCamera(); localVideoDisplay.attachCamera(myCam); outgoingStream.attachCamera(myCam); } private function incomingStreamHandler(e:NetStatusEvent) { trace(e.info.code); } //向Web服务器提交完信息后为连接做准备 private function completeRegistration() { listenerStream=new NetStream(myNC,NetStream.DIRECT_CONNECTIONS); listenerStream.addEventListener(NetStatusEvent.NET_STATUS,listenerHandler); listenerStream.publish("control" +myNameTxt.text); var c:* = new Object(); c.onPeerConnect = function (tmpNS:NetStream){ var caller:* =tmpNS; incomingStream = new NetStream(myNC,caller.farID); incomingStream.addEventListener(NetStatusEvent.NET_STATUS, incomingStreamHandler); incomingStream.play("media-caller"); var st:SoundTransform= new SoundTransform(50); incomingStream.soundTransform = st; incomingStream.receiveAudio(false); incomingStream.receiveVideo(false); var i:Object= new Object(); i.onIncomingCall = function (tmpOppName:String){ msgTxt.text=tmpOppName+"正在呼叫你,你接受吗?" acceptBtn.addEventListener(MouseEvent.CLICK,acceptCall) } i.onIm = function (userName:String,chatMsg:String){ chatContent.text =chatContent.text + (userName+ ": " + chatMsg + "\n"); chatContent.verticalScrollPosition =chatContent.textHeight; } incomingStream.client = i; }; listenerStream.client=c; } private function listenerHandler(e:NetStatusEvent) { trace(e.info.code); } //接受呼叫 public function acceptCall(e:MouseEvent) { msgTxt.text="你已经接受了对方的呼叫..."; incomingStream.receiveAudio(true); incomingStream.receiveVideo(true); remoteVideoDisplay.attachNetStream(incomingStream); outgoingStream=new NetStream(myNC,NetStream.DIRECT_CONNECTIONS); outgoingStream.addEventListener(NetStatusEvent.NET_STATUS,outgoingStreamHandler); outgoingStream.publish("media-callee"); var o:* = new Object(); o.onPeerConnect = function (tmpNS:NetStream){ trace(tmpNS.farID); } ; outgoingStream.client=o; outgoingStream.send("onCallAccepted",myNameTxt.text); startVideo(); startAudio(); } //发送聊天信息 private function sendChatMsg(e:MouseEvent) { var tmpMsg:* =chatTxt.text; if (tmpMsg!=0&&outgoingStream) { chatContent.text=chatContent.text+myNameTxt.text+": "+tmpMsg+"\n"; outgoingStream.send("onIm",myNameTxt.text,tmpMsg); chatTxt.text=""; } else { chatContent.appendText("发送内容为空或连接尚未建立!"+"\n"); chatTxt.text=""; } } }}
|
|
Stats
Last online 05/06/12
Groups
FMSer.cn is a member of the following Groups:
9ria.com
Group - Asia 405 Members
Adobe Media Server Users Group
Group - Virtual 808 Members
Flash Users
Group - Virtual 499 Members
Hong Kong Adobe Flex and AIR User Group
Group - Asia 112 Members
Open Source Media Framework Users
Group - Virtual 568 Members
RIA Shanghai 上海
Group - Asia 38 Members
RIAMeeting
Group - Asia 572 Members
|