2

我是 Flash 编程的新手。我想做的就是将我的本地网络摄像头流式传输到我的 red5 服务器并在另一个视频中接收数据。

因此,我编写了以下代码:

    NetConnection.defaultObjectEncoding = flash.net.ObjectEncoding.AMF0;
    client_nc = new NetConnection();

    client_nc.objectEncoding = flash.net.ObjectEncoding.AMF0;

    client_nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
    client_nc.connect("rtmp://localhost/myApp/");

    function netStatusHandler(e:NetStatusEvent):void
    {
        var code:String = e.info.code;
            //log.info("code = " + code);
        if (code == "NetConnection.Connect.Success")
        {
            cam_ns = new NetStream(client_nc);

            cam_ns.attachCamera(camera);
            cam_ns.attachAudio(mic);

            cam_ns.publish("user_2", "live");
            in_ns2 = new NetStream(client_nc);

            in_ns2.play("user_2");

            video2 = new Video(640, 480);
            video2.attachNetStream(in_ns2);
            //in_ns2.play("rtmp://localhost/myApp/user_2");
            //in_ns2.play("user_2");
            video2.x = 200;
            video2.y = 10;
            video2.width = 100; 
            video2.height = 100;
            addChild(video2);

        }
        else
        {
            trace(code);
        }
    }

我在 1 个 NetConnections 上使用 2 个 NetStreams,然后在第一个上附加一个 cam+mic。之后,我播放此 NetStream 并尝试将此播放附加到第二个 Netstream 并在新视频中播放。但是,这不起作用。

我对 as3 使用 flashdevelop,对 red5 服务器使用 eclipse。谁能帮我?

4

1 回答 1

0

对我来说,它是这样工作的:

    private function viewStream():void {            
        var stream:NetStream = new NetStream(nc);
        stream.client = new NetStreamClient();
        stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
        stream.play( streamName.text);          
        var video:Video = new Video();
        video.attachNetStream(stream);
        uic.addChild(video);    
    }               

    private function asyncErrorHandler(event:AsyncErrorEvent):void {
        trace(event.text);
    }

其中 nc 是我的单个全局 NetConnection 并且 streamName 是

<mx:TextInput id="streamName" text="test"/>

并且 uic 是一个 UIComponent

<mx:UIComponent id="uic" width="300" height="250"/>

我从一个按钮调用 viewStream 方法

<mx:Button label="view Stream" click="viewStream()"/>

我也遇到了 VideoDisplay 的问题。所以我用 UIComponent 做了它,它运行良好。也许您遇到问题是因为您在发布后直接尝试 ns.play。我认为您应该使用按钮尝试它,然后在开始发布后等待一秒钟。

于 2012-12-05T21:50:36.013 回答