2012-12-16 93 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建立管道 –