Actionscript 3 NetStream.publish Webcam到FMS在独立播放器中工作,但不在浏览器中

Actionscript 3 NetStream.publish Webcam到FMS在独立播放器中工作,但不在浏览器中,actionscript-3,webcam,flash-media-server,Actionscript 3,Webcam,Flash Media Server,我正在尝试将网络摄像头的视频发布到Flash Media Server 2。 我的代码在FlashStandalonePlayer(用10.0和10.2测试)中运行,但在浏览器插件(用10.2测试,在IE和Opera中都可以)。 与我的FMS的连接正在成功运行,但在发布后,什么也没有发生,我从未获得NetStream.publish.Start事件。在服务器上,我可以在管理控制台中看到连接,甚至在“流”选项卡中看到流。但我无法连接到该流 有人知道会出什么问题吗 NetConnection.def

我正在尝试将网络摄像头的视频发布到Flash Media Server 2。 我的代码在FlashStandalonePlayer(用10.0和10.2测试)中运行,但在浏览器插件(用10.2测试,在IE和Opera中都可以)。 与我的FMS的连接正在成功运行,但在发布后,什么也没有发生,我从未获得NetStream.publish.Start事件。在服务器上,我可以在管理控制台中看到连接,甚至在“流”选项卡中看到流。但我无法连接到该流

有人知道会出什么问题吗

NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0; // needed to get correct connection to FMS2

private function netStatusHandler(event:NetStatusEvent):void {
        output.appendText("\n" + event.info.code);
        switch (event.info.code) {
            case "NetConnection.Connect.Success":
                output.text = ("Connection successful, streaming camera...");
                connectCamera();
                break;
            case "NetConnection.Connect.Failed":

                break;
            case "NetStream.Play.StreamNotFound":
                break;

            case "NetStream.Publish.Start":
                output.appendText("\nPublishing video!");
                break;

        }
    }

    private function connectCamera(ev:Event = null):void {
        var stream:NetStream = new NetStream(connection);
        stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
        stream.attachCamera(camera);
        videoURL = createGUID();
        stream.publish(videoURL, "live");
        output.text = "publish stream...";
    }

好的,我发现我的问题在这里: 我在connectCamera函数中声明对stream变量的引用:

private function connectCamera(ev:Event = null):void {
    var stream:NetStream = new NetStream(connection);
}
因此,流仅在该函数的作用域内声明。 这在单机版播放器中似乎不是问题,但在浏览器插件中却是问题。浏览器插件似乎在垃圾收集器上做了更细致的工作,在函数执行后垃圾收集我的流。 所以我要做的是在函数范围外,类范围内声明流变量

var stream:NetStream;
private function connectCamera(ev:Event = null):void {
    stream = new NetStream(connection);
}

您应该始终将稍后需要的内容声明为类中的字段,而不是函数中的字段。您永远不知道GC何时会清理这些内容。

您是否收到任何NetStream状态事件?您是在测试应用程序之前将其部署到某个web服务器上,还是直接从磁盘上运行?我已在lo上尝试过cal(直接从文件系统打开嵌入在html页面中的swf)在以前的项目中,我可以从同一个Web服务器连接到媒体服务器,但这是我第一次使用as3连接到FMS2。当从浏览器、直接从磁盘或Web服务器尝试时,我没有得到任何NetStream状态事件,但我在单机版中得到了预期的结果播放器。@Malyngo,我正在尝试在flash cs6中创建一个网络摄像头视频发布软件swf,它将输出一个与red5 publisher类似的livestream url,但我可以更好地控制质量。您是在flash中处理编解码器和fps等,还是使用ffmpeg?@cea,我想您应该开始另一个问题。当流到flash媒体服务器时从网络摄像头上看,这只是Flash player流媒体到媒体服务器,不涉及其他事情(我甚至不知道如何)。对于流媒体质量,您可以在网络摄像头上设置一些参数,最重要的是确保您使用h264编解码器对网络摄像头流进行编码(我想这是从FP11开始提供的).这一切都可以用Flash单独完成。