2011-04-29 76 views
0

我正在嘗試製作一個簡單的視頻電話應用程序,所以我試圖製作一個程序來發送視頻並使用Adobe的Cirrus接收視頻。儘管我收到了流,但仍遇到問題。下面是我使用的鱈魚:我該如何解決這個視頻電話應用程序?

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="init()"> 
    <fx:Declarations> 
     <!-- Place non-visual elements (e.g., services, value objects) here --> 
    </fx:Declarations> 

    <fx:Script> 
     <![CDATA[ 
      import mx.core.UIComponent; 
      import mx.core.mx_internal; 

      import spark.components.Group; 
      private const SERVER:String = "rtmfp://p2p.rtmfp.net/"; 
      private const DEVKEY:String = "MY-DEV-KEY"; 

      [Bindable] 
      //Net Connection variable 
      private var netConnection:NetConnection; 
      //Sending video stream var 
      private var sendStream:NetStream; 
      //Sending video video var 
      private var videoSend:Video; 
      //Receiving video stream var 
      private var recvStream:NetStream; 
      //String for getting their ID 
      private var id_of_publishing_client:String; 


      private function init():void { 
       //Setup videoSend 
       videoSend = new Video(320,240); 
       videoSend.x = 10; 
       videoSend.y = 10; 
       var uic:UIComponent = new UIComponent(); 
       uic.addChild(videoSend);        
       addElement(uic); 
       //connect 
       connect(); 
      } 

      private function connect():void{ 
       netConnection = new NetConnection(); 
       netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); 
       netConnection.connect(SERVER,DEVKEY); 
      } 

      private function setupStreamOutgoing():void{ 
       //Send Stream setting up 
       sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); 
       sendStream.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler); 
       //setup camera 
       var cam:Camera = Camera.getCamera(); 
       //attach the camera to the to the sendStream 
       sendStream.attachCamera(cam); 
       //publish the sendStream 
       sendStream.publish("media"); 
       //attach the camera to the videoStream object 
       videoSend.attachCamera(cam); 
      } 

      private function getVideoReceiver():void{ 
       id_of_publishing_client = theirID.text; 
       writeText("inside getVideoReceiver()"); 
       if(id_of_publishing_client){ 
        recvStream = new NetStream(netConnection, id_of_publishing_client); 
        recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); 
        writeText("flag"); 
        //play the recvStream 
        recvStream.play("media"); 
        writeText("recvStream.play(media)"); 
        //attach the stream to the myVid 
        myVid.mx_internal::videoPlayer.attachNetStream(recvStream);    
       } 
       else { 
        theirID.text = "Please place an ID here."; 
       } 

      } 

      private function netStreamHandler(event:NetStatusEvent):void{ 
       writeText(event.info.code); 

       switch(event.info.code){ 
        case "NetConnection.Connect.Success": 
         //Display my ID in myID.text 
         myID.text = netConnection.nearID; 
         setupStreamOutgoing(); 
         break; 
        case "NetStream.Connect.Success": 
         break; 
        case "NetStream.Connect.Closed": 
         break; 

       } 
      } 

      private function writeText(txt:String):void{ 
       txtHistory.text += txt+"\n"; 
      } 

     ]]> 
    </fx:Script> 

    <s:TextArea top="10" bottom="10" id="txtHistory" width="252" right="10"/> 
    <s:TextInput id="theirID" x="112" y="342" width="437"/> 
    <s:TextInput id="myID" x="112" y="312" width="437"/> 
    <s:Button x="10" y="312" label="My Connection" width="94" /> 
    <s:Button x="10" y="341" label="Their Connection" width="94" click="getVideoReceiver()"/> 
    <mx:VideoDisplay id="myVid" 
        x="340" 
        y="10" 
        width="320" height="240" /> 
</s:Application> 

裏面的getVideoReveiver()功能,我發現了標誌,以避免writeText("flag")熄滅然後我得到和輸出的文本框:

NetStream.Play.Reset 
NetStream.Play.Start 
來自 netStreamHandler

,但視頻從不出現在接收視頻元素中。

我正在運行這是同一臺計算機的兩個不同的視頻,並將一個流中的nearID粘貼到文本輸入theirID。我不確定接下來要嘗試什麼?

+0

我想通了這一點,以後我會發布修改後的代碼作爲一個答案類似的問題的人。 – Mike 2011-04-29 16:08:30

回答

0

下面是我爲任何希望以此爲例的人工作的腳本。所有你需要的是一個Cirrus開發密鑰。

<fx:Script> 
    <![CDATA[ 
     import mx.core.UIComponent; 
     import mx.core.mx_internal; 
     import flash.display.MovieClip; 
     import flash.events.*; 
     import flash.net.*; 

     import spark.components.Group; 
     private const SERVER:String = "rtmfp://p2p.rtmfp.net/"; 
     private const DEVKEY:String = "YOUR-DEV-KEY"; 

     [Bindable] 
     //Net Connection variable that is needed to s 
     private var netConnection:NetConnection; 
     //Sending video stream var 
     private var sendStream:NetStream; 
     //Sending video video var 
     private var videoSend:Video; 
     //receiving video video var 
     private var videoRecv:Video; 
     //Receiving video stream var 
     private var recvStream:NetStream; 
     //String for getting their ID 
     private var id_of_publishing_client:String; 

     private function init():void { 
      //Setup videoSend 
      videoSend = new Video(320,240); 
      videoSend.x = 10; 
      videoSend.y = 10; 
      //Setup videoRecv 
      videoRecv = new Video(320,240); 
      videoRecv.x = 340; 
      videoRecv.y = 10; 
      var uic:UIComponent = new UIComponent(); 
      uic.addChild(videoSend); 
      uic.addChild(videoRecv); 
      addElement(uic); 
      //connect to cirrus 
      connect(); 
     } 

     private function connect():void{ 
      netConnection = new NetConnection(); 
      netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); 
      netConnection.connect(SERVER,DEVKEY); 
     } 

     private function setupStreamOutgoing():void{ 
      //Send Stream setting up 
      sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); 
      sendStream.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler); 
      //setup camera 
      var cam:Camera = Camera.getCamera(); 
      //attach the camera to the to the sendStream 
      sendStream.attachCamera(cam); 
      //publish the sendStream 
      sendStream.publish("media"); 
      //attach the camera to the videoStream object 
      videoSend.attachCamera(cam); 
     } 

     private function getVideoReceiver():void{ 
      id_of_publishing_client = theirID.text; 
      writeText("inside getVideoReceiver()"); 
      if(id_of_publishing_client){ 
       recvStream = new NetStream(netConnection, id_of_publishing_client); 
       recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler); 
       writeText("flag"); 
       //play the recvStream 
       recvStream.play("media"); 
       writeText("recvStream.play(media)"); 
       //attach the stream videoRecv 
       videoRecv.attachNetStream(recvStream); 
       } 
      else { 
       theirID.text = "Please place an ID here."; 
      } 

     } 

     private function netStreamHandler(event:NetStatusEvent):void{ 
      writeText(event.info.code); 

      switch(event.info.code){ 
       case "NetConnection.Connect.Success": 
        //Display my ID in myID.text 
        myID.text = netConnection.nearID; 
        setupStreamOutgoing(); 
        break; 
       case "NetStream.Connect.Success": 
        break; 
       case "NetStream.Connect.Closed": 
        break; 
       case "NetStream.Play.Start": 
        break; 
      } 
     } 

     private function writeText(txt:String):void{ 
      txtHistory.text += txt+"\n"; 
     } 

    ]]> 
</fx:Script> 

<s:TextArea top="10" bottom="10" id="txtHistory" width="252" right="10"/> 
<s:TextInput id="theirID" x="112" y="342" width="437"/> 
<s:TextInput id="myID" x="112" y="312" width="437"/> 
<s:Button x="10" y="312" label="My Connection" width="94" /> 
<s:Button x="10" y="341" label="Their Connection" width="94" click="getVideoReceiver()"/>