flash - 播放 Flash 视频时检测 TCP 连接是否关闭

标签 flash actionscript-3 video tcp

在 Flash 客户端,我如何检测服务器何时故意关闭与其视频流的 TCP 连接?发生这种情况时我需要采取措施 - 可能会尝试重新启动视频或显示错误消息。目前,连接关闭和连接缓慢对我来说看起来是一样的。在这两种情况下,NetStream 对象都会引发一个 NetStream.Play.Stop 事件。当连接速度慢时,它通常会在几秒钟内自行恢复。我希望只在连接关闭时采取行动,而不是在连接缓慢时采取行动。

这是我的一般设置的样子。这是基本的 NetConnection->NetStream->Video 设置。

this.vidConnection = new NetConnection();
this.vidConnection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, this.connectionAsyncError);
this.vidConnection.addEventListener(IOErrorEvent.IO_ERROR, this.connectionIoError);
this.vidConnection.addEventListener(NetStatusEvent.NET_STATUS, this.connectionNetStatus);
this.vidConnection.connect(null);
this.vidStream = new NetStream(this.vidConnection);
this.vidStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, this.streamAsyncError);
this.vidStream.addEventListener(IOErrorEvent.IO_ERROR, this.streamIoError);
this.vidStream.addEventListener(NetStatusEvent.NET_STATUS, this.streamNetStatus);
this.vid.attachNetStream(this.vidStream);

当服务器关闭 TCP 或连接卡住时,不会触发任何错误事件。只有 NetStream.Play.Stop 事件会触发。下面是从最初播放视频到 TCP 连接关闭所发生的事情的踪迹。

connection net status = NetConnection.Connect.Success
playStream(http://192.168.0.44/flv/4d29104a9aefa)
NetStream.Play.Start
NetStream.Buffer.Flush
NetStream.Buffer.Full
NetStream.Buffer.Empty
checkDimensions 0 0
onMetaData
NetStream.Buffer.Full
NetStream.Buffer.Flush
checkDimensions 960 544
NetStream.Buffer.Empty
NetStream.Buffer.Flush
NetStream.Play.Stop

当我在连接关闭和连接缓慢期间对各种属性进行转储时,我看不到可以帮助我区分关闭和缓慢的独特值。

NetConnection->connected = true
NetConnection->connectedProxyType = none
NetConnection->proxyType = none
NetConnection->uri = null
NetConnection->usingTLS = false
VidStream->bufferLength = 0
VidStream->bufferTime = 0.1
VidStream->bytesLoaded = 3204116
VidStream->bytesTotal = 3204116
VidStream->currentFPS = 0
VidStream->time = 63.797

最佳答案

除了“NetStream.Failed”之外,我不知道有任何事件表明连接断开,它只适用于 Flash Media Server(而且我什至不知道它是否或何时被触发) .

你必须找到一个基于“NetStream.Buffer.Empty”的解决方案:每当这个事件发生时启动一个定时器,让它等待足够长的时间以确保连接不太可能恢复,然后启动一个新的试图。您可以在每个“NetStream.Buffer.Full”或电影结束或手动暂停时重置计时器,这样它就不会造成任何伤害,除非确实需要。

关于flash - 播放 Flash 视频时检测 TCP 连接是否关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5010707/

相关文章:

android - 在没有 Flash Player 插件和没有 webview 的 Android 设备上播放 SWF 文件

javascript - 前 Flash 开发人员对基于 HTML 的 Web 应用程序的看法 - DIV == movieclips 吗?

video - FFmpeg -ss 奇怪的行为

c# - C# 从视频流中获取图像

flash - Flash ActionScript 2 的压缩和解压缩工具

Javascript nav 在 flash 上下降,不拦截鼠标事件

actionscript-3 - 在不使用服务器套接字的情况下监听 AS3 (AIR) 客户端中的传入连接

javascript - 从javascript调用actionscript 3函数,addCallback不起作用

闪光灯:提高相机的数据速率/质量

video - FFMPEG以正常速度录制http视频流