如果流名足够大,red5 RTMPClient 不会发布流

Posted

技术标签:

【中文标题】如果流名足够大,red5 RTMPClient 不会发布流【英文标题】:red5 RTMPClient is not publishing stream if streamname is big enough 【发布时间】:2013-10-02 18:40:38 【问题描述】:

我有一个 Red5 客户端实现,它发布流,从视频文件加载到我们的 wowza 媒体服务器。问题是,如果流名称很大——大约超过 90 个符号——客户端不会发布它并且会静默失败。客户端预期的所有其他操作都已完成:它连接到服务器并创建一个流。但从不发布流。我没有看到相应的 RTMP 消息,也没有在 wowza 的日志中看到相应的反应。

我尝试调试客户端并跟踪执行,直到它开始写入 SocketChannel。对于执行较短的命名流(可以发布)和具有长名称的流的情况,一切都是相同的,永远不会发送“发布”的 RTMP 命令。

一个问题是:

    怎么了?

    如果我向 SocketChannel 写入了一些字节而没有抛出任何异常 - 是否保证发送了相应的消息?

    1234563虽然我知道,通过 WireShark,这条数据从未发送过。

更新 ...而且更奇怪的是 - 在发送“大”数据包之后发送一个较小的数据包并没有帮助。将更大长度的数据包提交到套接字后,将无法发送数据包。

【问题讨论】:

【参考方案1】:

如果我向 SocketChannel 写入了一些字节而没有抛出任何异常 - 它是否保证发送了相应的消息?

它保证数据已经在本地套接字发送缓冲区中缓冲,直到 write() 返回的计数。仅此而已。

由于您无法发送更多数据,因此在我看来,接收器似乎没有读取大量数据。它是否可能因异常而失败并完全停止阅读?

【讨论】:

EJP,Wireshark 告诉我,我写入 SocketChannel 的 RTMP 数据包从未发送过。所以看起来这是一个客户端问题。可能是一些操作系统缓冲区溢出?.. 或者,你的意思是客户端可能不发送数据包,但尝试发送它并在服务器端失败,从而阻止 Wireshark 放下统计数据?

以上是关于如果流名足够大,red5 RTMPClient 不会发布流的主要内容,如果未能解决你的问题,请参考以下文章

Red5视频流录制正在中断

EQNEDT32.EXE 分析思路

《条目三十:确保目标区间足够大》

使用 red5 的 Http 流式传输

Red5 和安卓。流音频

如何使用 RED5 闪存服务器为 MP3 提供服务