使用GStreamer合并音频和视频流

7
我正在使用gstreamer通过RTP流从一个设备向另一个设备传输mp4(mpeg-4)文件。基本上,我将mp4文件分成音频和视频文件,然后将其全部发送到另一个设备进行流式传输。现在,我想将mp4文件保存到另一个设备的磁盘中,但我的问题是我只能分别保存音频和视频文件,并且无法单独播放它们。
我不确定如何将音频和视频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

接收者(客户端)

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

我想到的一个解决方案是在接收器和发送器中删除编码器,即rtpmp4gpay、rtpmp4gdepay和faad。这将导致音频和视频文件的流式传输,而不是编码流,然后在接收器中使用qtmux合并音频和视频流,但我遇到了qtmux与udpsrc不兼容的错误。我应该在哪里进行更改? - user1795516
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 ! queue ! 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
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!queue!muxer。muxer。!queue!filesink location=/home/Desktop/finaldemo.mp4 - user1795516
所以我正在使用上述代码,但现在它显示了内部数据流错误。 - user1795516
1个回答

1

您可以尝试以下管道将音频和视频混合到单个文件中。此管道的步骤如下:

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 

我无法从这个语法构建流水线。 - DURGESH

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