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