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
一个解决方案,我认为的是去除在reciever编码器和即发送者:rtpmp4gpay和rtpmp4gdepay和FAAD。这会导致音频和视频文件的流式传输,而不是编码流,然后在接收器中使用qtmux合并音频和视频流,但是我发现qtmux与udpsrc不兼容。我应该在哪里做这个改变? – user1795516
@ av501 ........ – 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!队列! 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