如何停止视频并断开NetStream连接 - AS3

3

我从服务器上进行视频流传输,后来我想要在旁边添加另一个视频。这很好,我做到了。现在我的问题是当我想要移除视频时。我设法将其从屏幕上移除了,但我可以听到视频仍在后台播放。那么我该如何停止正在播放的视频流?

以下是我的设置视频的代码:

ns = new NetStream(connection);
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
ns.play(item[1].toString() + ".flv");
video = new Video();
video.attachNetStream( ns );
video.width = 160;
video.height = 120;
videoWrapper = new UIComponent();
videoWrapper.addChild( video );
videos.addElement( videoWrapper );

这里是有关删除的内容

videos.removeElement(myVideos[p][1]); // myVideos[p][1] is a reference of videoWrapper
2个回答

6

您可以通过调用video.attachNetStream(null)来断开连接,或使用ns.close();关闭流。

最好两者都做。


好的,我不能说video.attachNetStream(null)完全不起作用,它确实可以停止视频,但只有在开始其他视频时才能这样做。我正在本地工作,所以也许视频已经下载了,这就是为什么它仍然在播放。无论如何,我不确定如何放置ns.close()。我只有对videoWrapper的引用,所以我使用getChildAt(0)从该引用中获取video,但现在如何获取“ns”呢? - Giedrius
1
ns这个名字来自你自己的代码:ns = new NetStream(connection); 你应该保留那个实例。我认为你无法从视频实例中获取它。 - Jonatan Hedborg
没错,那个方法可行,我只是在数组中添加了ns的引用,并从关闭视频的函数中调用它。至于你的问题,我不确定我是否理解正确,因为我对AS3的了解非常有限。你能稍微解释一下吗?无论如何,我将视频添加到videoWrapper中,因为视频本身不可见,然后videoWrapper将进入mxml中创建的Group的ID为videos的组中。 - Giedrius
主要是最后一行看起来有些可疑 videos.addElement( videoWrapper );。它看起来应该会创建一个循环依赖(例如,试图显示 obj1,而 obj1 又试图显示 obj2,而 obj2 又试图显示 obj1 等等)。然而,我对 flex 不是很熟悉,所以我可能错了。 - Jonatan Hedborg
哦,对不起。视频不等于视频 :) - Jonatan Hedborg
显示剩余2条评论

4
在普通的视频对象上,不要调用attachNetStream(null),因为AS3后期将无法使用.clear()清除视频的最后一帧。看起来像是一个错误。使用ns.close(),然后使用vid.clear(),这样视频对象就可以再次变成透明的。
StageVideo上,情况有所不同:您可以调用vid.attachNetStream(null),它也会从StageVideo中删除最后一帧。但要小心,它不会停止播放本身。您必须调用ns.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接