2012-11-12 143 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) –

相關問題