2011-03-24 39 views
2

我想将网络摄像头的视频发布到Flash媒体服务器2. 我的代码在Flash独立播放器中工作(使用10.0和10.2),但不在浏览器插件中(在IE和Opera中都用10.2测试过) 与我的FMS的连接工作正常,但发布后没有任何反应,我从来没有收到NetStream.Publish.Start事件。服务器,我可以看到流标签在管理控制台的连接,即使流,但我无法连接到STREA。NetStream.publish网络摄像头到FMS在独立播放器中工作,但不在浏览器中

任何人的想法可能是什么回事?

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..."; 
    } 
+0

您是否收到任何NetStream状态事件? – www0z0k 2011-03-24 17:46:09

+0

在测试之前,您是否将您的应用程序部署在某台网络服务器上,或者您是否直接从磁盘运行它? – bmleite 2011-03-24 21:58:33

+0

我已经从本地尝试了它(直接从文件系统中打开嵌入在html页面中的swf),并将它放到了Web服务器上。从同一个网络服务器,我可以在以前的项目中连接到媒体服务器,但这是我第一次使用as3连接到FMS2。当从浏览器直接从磁盘或Web服务器尝试时,我没有收到任何NetStream状态事件,但我在独立播放器中按预期得到它们。 – Malyngo 2011-03-25 08:02:38

回答

1

好吧,我发现我的问题是在这里什么: 我宣布connectCamera函数内部参考变量:

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何时可以清理那些东西。

相关问题