2012-11-12 141 views
0

建立时间:目前我正在使用gstreamer通过RTP将数据包(.mp3文件)从源(服务器)流式传输到客户端(客户端A)。这件事很容易,我可以通过网络从服务器到设备流式传输音乐。通过RTP使用gstreamer流式传输数据包重传

要求:现在,我想从客户端A实时地(或尽可能接近实时地)重新传输数据包以表示任何其他客户端B.因此,控制权仍然与客户端A保持一致,并且现在只有音乐实际上与客户端B流在一起。

什么是做这种事情的最佳方式。

回答

1

假设您想快速尝试此操作。理想的方法是在客户端A上设置一个可以转发客户端B数据的rtsp服务器。如果你想这样做你的方式是这样做的:

如果你有一个播放器在客户端B可以播放rtp流给出一个sdp文件,这是你可以做的: 创建副本您在客户端A中获得的sdp。通过某个路径将其交给客户端B. [说tcp插座,两者都同意通信]

将您在客户端A中获得的内容的副本也传输到客户端B。

您需要将sdp中的端口号更改为客户端B上可用的端口号[RTSP协商所做的]。如果客户端B可以在获取SDP之前告诉客户端A的端口号,那么您可以正确设置端口号,将其提供给客户端B,然后将其流的副本发送给客户端B.完成。

+0

我正在尝试相同的事情。所以我的服务器端代码是: gst-launch-0.10 filesrc location =/home/kuber/Downloads/brownrang.mp3!疯了! audioconvert! audio/x-raw-int,channels = 1,depth = 16,width = 16,rate = 44100! rtpL16pay!我试图保存流的客户端代码是: gst-launch rtspsrc location = rtsp:// localhost:5000/brownrang.mp3 name = d d。 ! rtpmp4adepay! qtmux name = mux! filesink location =〜/ Desktop/sync-rtsp.mp4 sync = true name = f。 .mp4文件正在保存在该位置,但其为空。它没有被数据填充,我不知道为什么? – user1795516

+0

这是因为您的服务器是纯粹的rtp/udp接收器,而不是rtsp接收器。当您尝试从rtsp源文件读取时。将源代码更改为updsrc并在其后面输入正确的大写字母。 – av501

+0

你能给我你正在谈论的服务器的确切命令行吗? – user1795516

0

您还使用TCP上的RTP。 因此对您来说很容易,因为在RTP级别不需要进行任何更改。 您需要将数据包传递给RTSP,而不是通过UDP套接字直接发送。一切都将由RTSP处理。 如果你使用RTP作为独立的,使用rfc 3550,它不是RTP的一部分 你仍然不想这样做,那么你不遵循标准的RTP实现方式。

+0

我想同样的事情。所以我的服务器端代码是:gst-launch-0.10 filesrc location =/home/kuber/Downloads/brownrang.mp3!疯了! audioconvert! audio/x-raw-int,channels = 1,depth = 16,width = 16,rate = 44100! rtpL16pay! udpsink host = localhost port = 5000我试图保存流的客户端代码是:gst-launch rtspsrc location = rtsp:// localhost:5000/brownrang.mp3 name = d d。 ! rtpmp4adepay! qtmux name = mux! filesink location =〜/ Desktop/sync-rtsp.mp4 sync = true name = f。 .mp4文件正在保存在该位置,但它是空的。它没有被数据填充,我不知道为什么? – user1795516

+0

在这里ypu是使用UDP协议进行流式传输并尝试使用TCP接收,那么你怎么样?这是不可能的。当你处理网络时,客户端服务器必须运行在相同的协议上。 –

+0

你也可以尝试使用UDP src和UDP接收器。如果你能够流式传输,那么稍后使用TCP(使用RTSP) –

相关问题