【发布时间】:2011-08-19 23:37:01
【问题描述】:
我正在编写一个应用程序来(非正式地)替换一个用 adobe air 制作的客户端,他们使用 RTMP 作为连接协议,我必须创建自己的类来实现它:
据我所知RTMP是放在TCP协议下的,但是我必须先建立TCP连接/handshake,然后再进行RTMP握手吗?
还是忽略了 TCP 握手而 TCP 标头仅用于传输 RTMP 握手/数据?
亲切的问候。
【问题讨论】:
我正在编写一个应用程序来(非正式地)替换一个用 adobe air 制作的客户端,他们使用 RTMP 作为连接协议,我必须创建自己的类来实现它:
据我所知RTMP是放在TCP协议下的,但是我必须先建立TCP连接/handshake,然后再进行RTMP握手吗?
还是忽略了 TCP 握手而 TCP 标头仅用于传输 RTMP 握手/数据?
亲切的问候。
【问题讨论】:
您建立 TCP 连接,然后立即进行 RTMP 握手,即您从发送 C0 开始,然后转到 S0、C1、S1、C2、S2。一旦你收到后者,RTMP 握手就完成了。祝您使用 RTMP 好运,您将需要它。
【讨论】:
哇,你有一个很好的项目。
按照您的建议,RTMP 通过 TCP。有趣的是,不仅控制命令而且媒体数据都是通过 TCP 发送的。与按预期使用 UDP 的 RTSP 不同。还有一些图书馆可以做你想做的事情。我发现有趣的一个是用 php - http://code.google.com/p/php-rtmp-client/ 编写的。
您还需要使用 AMF,这是一种用于对 RTMP 命令进行编码的二进制格式。有一篇关于它的很好的维基百科文章和一些解析器,比如 AMFPHP
【讨论】:
如果有人像我一样在 Google 上寻找解决方案时偶然发现了这个问题,我在 http://www.fluorinefx.com/ 中找到了我的解决方案。无需担心握手或任何事情。都包得很整齐:)
【讨论】: