如何将不同的视频流传输到同一个RTMP URL?

3
我正在尝试使用Red5作为服务器,使用Flash和Adobe Air作为客户端开发视频会议应用程序。在学习如何使用Flex创建简单的视频聊天应用程序后,我很困惑如何将多人会议中的视频流式传输到相同的rtmp url上? 我的rtmp url是:rtmp://localhost/MyFirstRed5Server 现在我不能理解这里的逻辑。我是否需要为不同的用户使用不同的URL,或者我可以将所有用户的视频流式传输到相同的rtmp url上? 我是初学者,请谅解我的问题和英语表达能力。我只需要一些指引。任何帮助都将不胜感激。

我从未使用过RED5,但使用Adobe FMS时,rtmp(或rtmfp)URL仅用于连接NetConnection对象。您可以使用NetStream的publish方法创建流并为其命名。其他人可以通过知道流名称来播放该流。 - David Goshadze
1个回答

2

不,每个用户都将连接到相同的rtmp-url。 但是当您加载视频时,您会连接到另一个NetStream。

因此,NetConnection可以在所有NetStreams之间共享,但当然视频聊天中的每个客户端都有自己的流。

您只需要确保发送方和接收方知道流的名称,可能会通过RTMP或SharedObject发送有关流名称的消息。 您可以捕获有人开始在Red5 / Server-Side上流式传输时的事件。因此,客户端实际上不需要主动创建消息并提前发送任何内容。您只需在服务器端侦听该事件,然后与所有客户端进行同步(除了正在广播的客户端)。

Sebastian


谢谢你的回答,Sebastian。我已经为每个客户端使用了SharedObjects来向服务器请求其唯一ID,这也将是流名称。当新客户端加入会议时,服务器将为其提供一个新的ID,并将该ID发送给所有连接的客户端。这样做的方式正确吗?还有一件事,对于基于Java的客户端,我该怎么办?我无法使用流名称发布或访问,因为我只能访问顶级URL流:rtmp://[host]/myserver。是否有任何方法可以将流解析为RTMP URL? - Biswas Lamichhane
你可以尝试使用 RTMPClient.java 类,但我们仅用它来发布流,而不是接收流。我不会为每个客户端创建固定的 ID,因为客户端可以发布多个流(或更改设置后重新发布)。此外,您仍然需要等待每个客户端实际开始流式传输。因此,我会重写 ApplicationAdapter 中的“streamPublishStart”方法以侦听流启动事件,并使用该方法通知所有客户端有新的流。不仅仅是“当新客户加入房间时”,因为新客户可能加入房间,但这并不意味着他正在广播任何内容。 - seba.wagner
谢谢Sebastian,你提到这些小但非常重要的信息,节省了我很多时间。我在客户加入房间时通知客户,并想知道为什么视频没有更新...再次感谢。如果您了解Flex SDK,您知道如何在单击客户端视频时将其全屏吗? - Biswas Lamichhane
全屏是Flash有点奇怪。问题在于当您处于全屏状态时,唯一可用的按钮是“esc”按钮(退出全屏)。原因是否则某人可以将一个全屏放在一个看起来像您的在线银行网站的视图前面,并窃取您的用户名/密码。但是,如果您仍然认为这对您有意义,那么有很多如何做到这一点的示例在www中...或者开始一个新线程。基本上,您需要向SWF的HTML嵌入代码添加一些属性,然后可以运行一些as3片段以全屏运行。 - seba.wagner
但是,当我尝试在单个服务器上使用多个FFMPEG进程将视频(在服务器上)流式传输到相同的URL(在不同的服务器上)时,它会出现错误:[rtmp @ 0x568ba09317c0] Server error: Already publishing rtmp://<ip address>/mystream: Operation not permitted。我这样做的目的是进行负载测试。 - Nav

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