使用gstreamer将PCM数据发送到VLC播放器

时间:2015-09-14 09:08:04

标签: gstreamer vlc rtp pcm

我想将原始音频数据(PCM)发送到RTP上的VLC播放器,以便使用gstreamer播放PCM。

这是发送PCM的命令

  

gst-launch-1.0 -v filesrc location = / home / webos / pcm_data_dump! audio / x-raw,rate = 44100,channels = 2,endianness = 1234,format = S16LE,layout = interleaved,clock-rate = 44100! audioconvert!听觉样本! audio / x-raw,rate = 44100,channels = 2,format = S32LE,layout = interleaved! audioconvert! rtpL16pay pt = 10! application / x-rtp,pt = 10,encoding-name = L16,payload = 10,clock-rate = 44100,channels = 2! udpsink host = 192.168.0.2 port = 5555

这是接收PCM的VLC选项

  

RTP://192.168.0.2:5555

VLC播放器可以从gstreamer获取PCM,但它无法播放。 VLC显示如下的调试消息。 最后,在VLC调试消息中重复显示“核心调试:缓冲0%”消息。

core debug: output 'f32l' 44100 Hz Stereo frame=1 samples/8 bytes 
core debug: looking for audio volume module matching "any": 2 candidates
core debug: using audio volume module "float_mixer"
core debug: input 's16l' 44100 Hz Stereo frame=1 samples/4 bytes
core debug: looking for audio filter module matching "scaletempo": 14         candidates
scaletempo debug: format: 44100 rate, 2 nch, 4 bps, fl32
scaletempo debug: params: 30 stride, 0.200 overlap, 14 search
scaletempo debug: 1.000 scale, 1323.000 stride_in, 1323 stride_out, 1059 
standing, 264 overlap, 617 search, 2204 queue, fl32 mode
core debug: using audio filter module "scaletempo"
core debug: conversion: 's16l'->'f32l' 44100 Hz->44100 Hz Stereo->Stereo
core debug: looking for audio converter module matching "any": 12 candidates
audio_format debug: s16l->f32l, bits per sample: 16->32
core debug: using audio converter module "audio_format"
core debug: conversion pipeline complete
core debug: conversion: 'f32l'->'f32l' 44100 Hz->44100 Hz Stereo->Stereo
core debug: Buffering 0%
core debug: conversion pipeline complete
core debug: looking for audio resampler module matching "any": 3 candidates
core debug: Buffering 0%
core debug: Buffering 0%
core debug: Buffering 0%
core debug: Buffering 0%
core debug: Buffering 0%
.......

并且,一旦发送PCM的gstreamer命令启动,就会显示以下日志。 通常,当命令启动时,gstreamer会被“New clock:GstSystemClock”消息阻止。

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = audio/x-    raw, format=(string)S32LE, layout=(string)interleaved, rate=(int)44100,     channels=(int)2
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = audio/x-raw,   format=(string)S32LE, layout=(string)interleaved, rate=(int)44100, channels=  (int)2
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = audio/x-raw,   format=(string)S32LE, layout=(string)interleaved, rate=(int)44100, channels= (int)2
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps =   audio/x-raw, layout=(string)interleaved, rate=(int)44100, format=(string)S16BE,                                             channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = audio/x-raw, layout=(string)interleaved, rate=(int)44100, format=(string)S16BE, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = audio/x-raw, layout=(string)interleaved, rate=(int)44100, format=(string)S16BE, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:src: caps = application/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encoding-params=(string)2, channels=(int)2, payload=(int)10, ssrc=(uint)2226113402, timestamp-offset=(uint)1744959080, seqnum-offset=(uint)62815
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)audio, clock-rate=(int)44100, encoding-name=(string)L16, encoding-params=(string)2, channels=(int)2, payload=(int)10, ssrc=(uint)2226113402, timestamp-offset=(uint)1744959080, seqnum-offset=(uint)62815
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink: caps = audio/x-raw, layout=(string)interleaved, rate=(int)44100, format=(string)S16BE, channels=(int)2, channel-mask=(bitmask)0x0000000000000003
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x-raw, format=(string)S32LE, layout=(string)interleaved, rate=(int)44100, channels=(int)2
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: timestamp = 1744959080
/GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0: seqnum = 62815
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.622147167
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

gst-launch-0.1没问题,只有1.0有问题。 有什么问题吗?

1 个答案:

答案 0 :(得分:0)

如果我将filesrc替换为audiotestsrc,则该示例适用于我。我还是要指出一些改进的空间。

  1. 使用audioparse代替第一个capsfilter
  2. 不要两次音频转换。
  3. 这是一个适合我的简化管道:

    gst-launch-1.0 -v audiotestsrc ! audioresample ! audioconvert ! rtpL16pay pt=10 ! application/x-rtp, pt=10, encoding-name=L16, payload=10, clock-rate=44100, channels=2 ! udpsink host=localhost port=5555