2012-12-16 156 views
7

我使用gstreamer通過RTP流將mp4(mpeg-4)文件從一臺設備流式傳輸到另一臺設備。基本上我把mp4文件分解成它的音頻和視頻文件,然後將它們全部發送到其它設備,並在其中進行流式傳輸。現在,我想將mp4文件保存到其他設備的磁盤中,但是我的問題是我能夠單獨保存音頻和視頻文件,並且無法單獨播放。使用gstreamer組合音頻和視頻流

我很困惑如何結合音頻和視頻rtp流,形成我的mp4文件並保存到其他設備的文件。

下面是命令行代碼:

發件人(服務器)

gst-launch-0.10 -v filesrc location=/home/kuber/Desktop/sample.mp4 \ 
      ! qtdemux name=d \ 
      ! queue \ 
      ! rtpmp4vpay \ 
      ! udpsink port=5000 \ 
      d. \ 
      ! queue \ 
      ! rtpmp4gpay \ 
      ! udpsink port=5002 

Reciever(客戶端)

gst-launch-0.10 udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)243, config=(string)000001b0f3000001b50ee040c0cf0000010000000120008440fa282fa0f0a21f, payload=(int)96, ssrc=(uint)4291479415, clock-base=(uint)4002140493, seqnum-base=(uint)57180" \ 
      ! rtpmp4vdepay \ 
      ! ffdec_mpeg4 \ 
      ! xvimagesink sync=false \ 
      udpsrc port=5002 caps="application/x-rtp, media=(string)audio, clock-rate=(int)32000, encoding-name=(string)MPEG4-GENERIC, encoding-params=(string)2, streamtype=(string)5, profile-level-id=(string)2, mode=(string)AAC-hbr, config=(string)1290, sizelength=(string)13, indexlength=(string)3, indexdeltalength=(string)3, payload=(int)96, ssrc=(uint)501975200, clock-base=(uint)4248495069, seqnum-base=(uint)37039"\ 
      ! rtpmp4gdepay \ 
      ! faad \ 
      ! alsasink sync=false 
+0

一個解決方案,我認爲的是去除在reciever編碼器和即發送者:rtpmp4gpay和rtpmp4gdepay和FAAD。這會導致音頻和視頻文件的流式傳輸,而不是編碼流,然後在接收器中使用qtmux合併音頻和視頻流,但是我發現qtmux與udpsrc不兼容。我應該在哪裏做這個改變? – user1795516

+0

@ av501 ........ – user1795516

+0

gst-launch-0.10 udpsrc port = 5000 caps =「application/x-rtp,media =(string)video,clock-rate =(int)90000,encoding-name = (string)MP4V-ES,profile-level-id =(string)243,config =(string)000001b0f3000001b50ee040c0cf0000010000000120008440fa282fa0f0a21f,payload =(int)96,ssrc =(uint)4291479415,clock- base =(uint)4002140493,seqnum- base =(uint)57180「! rtpmp4vdepay!隊列! qtmux name = muxer udpsrc port = 5002 caps =「application/x-rtp,media =(string)audio,clock-rate =(int)32000,encoding-name =(string)MPEG4-GENERIC,encoding-params =(string )2, – user1795516

回答

1

你可以試試下面的管道給MUX音頻和視頻到一個單一的文件。 管道此如下:

gst-launch-0.10 udpsrc port=5000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)243, config=(string)000001b0f3000001b50ee040c0cf0000010000000120008440fa282fa0f0a21f, payload=(int)96, ssrc=(uint)4291479415, clock-base=(uint)4002140493, seqnum-base=(uint)57180" \ 
      ! rtpmp4vdepay \ 
      ! ffdec_mpeg4 \ 
      ! mux. \ 
     udpsrc port=5002 caps="application/x-rtp, media=(string)audio, clock-rate=(int)32000, encoding-name=(string)MPEG4-GENERIC, encoding-params=(string)2, streamtype=(string)5, profile-level-id=(string)2, mode=(string)AAC-hbr, config=(string)1290, sizelength=(string)13, indexlength=(string)3, indexdeltalength=(string)3, payload=(int)96, ssrc=(uint)501975200, clock-base=(uint)4248495069, seqnum-base=(uint)37039"\ 
      ! rtpmp4gdepay \ 
      ! faad \ 
      ! mux. 
     matroskamux name=mux 
      ! filesink location=video.mp4 
+0

我無法從這個syntex建立管道 –