2013-05-04 425 views
1

我在Ubuntu中使用以下流水線來傳輸mp3,並且它工作正常。在Windows中使用gstreamer使用RTP流式傳輸mp3

發件人:

gst-launch filesrc location=/home/file.mp3 ! mad ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16, rate=44100 ! rtpL16pay ! udpsink host=192.168.1.103 port=5000 

接收機:

gst-launch udpsrc port=5000 caps="application/x-rtp, media=(string)audio, clock-rate=(int)44100, width=(int)16, height=(int)16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-position=(int)1, payload=(int)96" ! gstrtpjitterbuffer do-lost=true ! rtpL16depay ! audioconvert ! alsasink sync=false 

但是,當我用同樣的在Windows中它無法正常工作。我可以聽到它只在最開始時播放,但只有很短的時間。目的地收到媒體,但我聽不到聲音。下面是使用的管道,

發件人:

gst-launch -v filesrc location=C:/file.mp3 ! mad ! audioconvert ! audio/x-raw-int,channels=1,depth=16,width=16, rate=44100 ! rtpL16pay ! udpsink host=192.168.1.105 port=5000 

接收機:

gst-launch -v udpsrc port=5000 caps="application/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, payload=(int)96" ! gstrtpjitterbuffer do-lost=true ! rtpL16depay ! audioconvert ! autoaudiosink sync=false 

的Gstreamer OSSBUILD在Windows中使用。請幫助我解決問題。

如果需要的話,下面是在終端上的輸出,

發件人:

Setting pipeline to PAUSED ... 
Pipeline is PREROLLING ... 
/GstPipeline:pipeline0/GstMad:mad0.GstPad:src: caps = audio/x-raw-int, endiannes 
s=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100 
, channels=(int)2 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x- 
raw-int, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int)1 
6, rate=(int)44100, channels=(int)1 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x 
-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int) 
32, rate=(int)44100, channels=(int)2 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = audio/x-raw- 
int, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int)16, r 
ate=(int)44100, channels=(int)1 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = audio/x-raw 
-int, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int)16, 
rate=(int)44100, channels=(int)1 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:src: caps = application/x- 
rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, enco 
ding-params=(string)1, channels=(int)1, payload=(int)96, ssrc=(uint)1331970475, 
clock-base=(uint)3177922110, seqnum-base=(uint)10029 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink: caps = audio/x-raw-i 
nt, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int)16, ra 
te=(int)44100, channels=(int)1 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: timestamp = 3177922110 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: seqnum = 10029 
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp 
, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encodin 
g-params=(string)1, channels=(int)1, payload=(int)96, ssrc=(uint)1331970475, clo 
ck-base=(uint)3177922110, seqnum-base=(uint)10029 
Pipeline is PREROLLED ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 
Got EOS from element "pipeline0". 
Execution ended after 40987345000 ns. 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = NULL 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink: caps = NULL 
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:src: caps = NULL 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = NULL 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = NULL 
/GstPipeline:pipeline0/GstMad:mad0.GstPad:src: caps = NULL 
Setting pipeline to NULL ... 
Freeing pipeline ... 

接收機:

Setting pipeline to PAUSED ... 
Pipeline is live and does not need PREROLL ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 
/GstPipeline:pipeline0/GstRtpJitterBuffer:rtpjitterbuffer0.GstPad:src: caps = ap 
plication/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(stri 
ng)L16, encoding-params=(string)1, channels=(int)1, payload=(int)96 
/GstPipeline:pipeline0/GstRtpJitterBuffer:rtpjitterbuffer0.GstPad:sink: caps = a 
pplication/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(str 
ing)L16, encoding-params=(string)1, channels=(int)1, payload=(int)96 
/GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0.GstPad:src: caps = audio/x-ra 
w-int, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int)16, 
rate=(int)44100, channels=(int)1, channel-positions=(GstAudioChannelPosition)< 
GST_AUDIO_CHANNEL_POSITION_FRONT_MONO > 
/GstPipeline:pipeline0/GstRtpL16Depay:rtpl16depay0.GstPad:sink: caps = applicati 
on/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, 
encoding-params=(string)1, channels=(int)1, payload=(int)96 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x- 
raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boolean)tru 
e, channels=(int)1, rate=(int)44100, channel-positions=(GstAudioChannelPosition) 
<GST_AUDIO_CHANNEL_POSITION_FRONT_MONO> 
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x 
-raw-int, endianness=(int)4321, signed=(boolean)true, width=(int)16, depth=(int) 
16, rate=(int)44100, channels=(int)1, channel-positions=(GstAudioChannelPosition 
)<GST_AUDIO_CHANNEL_POSITION_FRONT_MONO> 
/GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0/GstWaveFormSink:autoaudio 
sink0-actual-sink-waveform.GstPad:sink: caps = audio/x-raw-int, width=(int)16, d 
epth=(int)16, endianness=(int)1234, signed=(boolean)true, channels=(int)1, rate= 
(int)44100, channel-positions=(GstAudioChannelPosition)< GST_AUDIO_CHANNEL_POSIT 
ION_FRONT_MONO > 
/GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0.GstGhostPad:sink: caps = 
audio/x-raw-int, width=(int)16, depth=(int)16, endianness=(int)1234, signed=(boo 
lean)true, channels=(int)1, rate=(int)44100, channel-positions=(GstAudioChannelP 
osition)<GST_AUDIO_CHANNEL_POSITION_FRONT_MONO> 
/GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0.GstGhostPad:sink.GstProxy 
Pad:proxypad0: caps = audio/x-raw-int, width=(int)16, depth=(int)16, endianness= 
(int)1234, signed=(boolean)true, channels=(int)1, rate=(int)44100, channel-posit 
ions=(GstAudioChannelPosition)<GST_AUDIO_CHANNEL_POSITION_FRONT_MONO> 

回答

0

你爲什麼不轉儲到一個文件,而不是汽車音響同步和檢查。這會告訴你,如果其餘的管道是好的。我會一直從接收器管道的末端刪除一個元素,並追加文件接收器,以找出哪個元素是罪魁禍首。爲了不使用特定的音頻接收器,而不是自動音頻接收器。這也可能是問題所在。

你有一個簡單的管道:請在下面通過消除

  1. 確保輸入確實是未來汽車無

SRC - >文件接收

SRC - > depay - >文件接收

這樣走,直到找到錯誤的元素。

你的文件大小應該保持增長。哪個元素導致它不再工作是罪魁禍首。如果是audiosink,則使用一個明確的而不是autoaudiosink。

您可以引入一個隊列並進行檢查。 用GST_DEBUG = 3或4或5運行,增加調試信息以檢查調試選項剩下的罪魁禍首。

相關問題