如何断开 rtmp 连接?

Posted

技术标签:

【中文标题】如何断开 rtmp 连接?【英文标题】:How to disconnect an rtmp connection? 【发布时间】:2012-08-21 06:08:37 【问题描述】:

您知道是否可以断开 rtmpconnection 以及如何断开连接? 官方文档和 rtmpconnection.lzx 中没有“断开连接”方法。因此,如果您知道断开 rtmp 连接的方法,请告诉我。提前致谢。

【问题讨论】:

【参考方案1】:

<rtmpconnection> class in OpenLaszlo 使用ActionScript 3 NetConnection class 连接到服务器。 NetConnection 类有一个method close(),这里是它的文档:

关闭在本地或服务器上打开的连接,然后 调度带有 code 属性的 netStatus 事件 NetConnection.Connect.Closed。

此方法断开所有运行在 联系。任何尚未发送的排队数据都将被丢弃。 (到 在不关闭连接的情况下终止本地或服务器流,使用 NetStream.close().) 如果你关闭连接然后想要 创建一个新的,您必须创建一个新的 NetConnection 对象并调用 再次调用 connect() 方法。

close() 方法还会断开所有正在运行的远程共享对象 通过这个连接。但是,您不需要重新创建共享 对象重新连接。相反,您可以调用 SharedObject.connect() 重新建立与共享对象的连接。此外,任何数据在 发出时排队的共享对象 NetConnection.close() 在您重新建立连接后发送 共享对象。

使用 Flash Media Server,最佳开发实践是调用 close() 当客户端不再需要与服务器的连接时。 调用 close() 是清理未使用连接的最快方法。你 可以将服务器配置为自动关闭空闲连接作为 备用措施。

的 LZX 源代码中,我可以看到 NetConnection.close() 仅在连接失败的情况下被调用:

<!--- Handle connection failure, attempt to reconnect using altsrc
      @keywords private -->
<method name="_handleConnectionFailure" args="msg"><![CDATA[
    this._nc.close();
    if (this.debug) 
        if ($debug) Debug.warn("error connecting to", this._connecturl, ":", msg);
    
....

我不知道为什么 类上没有定义 close 方法,但是您可以自己添加该代码,方法是扩展 并添加一个 close 方法。只需确保正确处理状态变量即可。

由于我很久没有使用Red5了,所以我无法告诉你Red5是否会自动关闭空闲的NetConnections。

【讨论】:

以上是关于如何断开 rtmp 连接?的主要内容,如果未能解决你的问题,请参考以下文章

JWPLAYER - 没有 RTMP 连接时如何不显示播放器

svn和工程断开连接如何在重新连接

实现一个python RTMP服务器,flash播放器发送媒体数据后重置连接,如何排除故障

如何从SignalR客户端端确定服务器断开连接

delphi 如何断开网络和连接网络

视频流媒体推流平台RTMP协议是如何进行网络连接并推送视频流的?