如何修复此视频电话应用?

时间:2011-04-29 15:53:04

标签: actionscript-3 flash-builder

我正在尝试制作一个简单的视频电话应用程序,所以我正在尝试制作一个程序来发送视频并使用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并将其粘贴到textInput theirID中。我不确定下一步该尝试什么?

1 个答案:

答案 0 :(得分:0)

这是我为那些希望以此为例的人工作的脚本。您只需要一个Cirrus dev键。

                  

<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()"/>