我在闪存CS6上使用闪存媒体服务器5尝试播放视频,但它永远不会起作用。它总是说:
{ArgumentError: Error #2126: NetConnection object must be connected
at flash.net::NetStream/ctor()
at flash.net::NetStream()
at flashmediaservertest_fla::MainTimeline/frame1()}
我的代码:
var my_nc:NetConnection =new NetConnection();
my_nc.connect("rtmp://127.0.0.1/flv/");
my_nc.client = this;
var my_ns= new NetStream(my_nc);
video.attachNetStream(my_ns);
my_ns.play("simple.flv");
怎么了?
问题是NetConnection
的connect
方法是异步的。 这意味着应用程序不会冻结整个程序等待响应(有时可能需要一段时间(,而是立即移动到代码的其余部分,并在连接完成后调度事件。
您需要做的是将事件侦听器添加到您的网络连接中,以便您的程序知道该连接何时完成。然后,只有在您知道连接已建立之后,才运行您的网络流代码。
下面是一个示例:
//instantiate your net connection (no change here)
var my_nc:NetConnection = new NetConnection();
//listen for the NET_STATUS event which you tell you when you have successfully connected or if your connection is lost etc.
my_nc.addEventListener(NetStatusEvent.NET_STATUS, statusHandler);
my_nc.client = this;
my_nc.connect("rtmp://127.0.0.1/flv/");
function statusHandler(e:NetStatusEvent):void {
switch (e.info.code) {
case "NetConnection.Connect.Success":
startStream();
break;
case "NetConnection.Connect.Closed":
//your connection was closed
break;
}
}
function startStream():void {
var my_ns= new NetStream(my_nc);
video.attachNetStream(my_ns);
my_ns.play("simple.flv");
}
您可以在此处查看所有不同NET_STATUS信息代码的列表。 处理所有各种连接错误也是一个好主意。