Audio Pipeline
samples
录制语音
gst-launch-1.0 -vv alsasrc device=hw:2,0 ! audioconvert ! audioresample ! capsfilter caps="audio/x-raw,format=S16LE,channels=1,rate=16000" ! wavenc ! filesink location="test.wav"
回放语音
gst-launch-1.0 -vv alsasrc device=hw:2,0 ! audioconvert ! audioresample ! capsfilter caps="audio/x-raw,format=S16LE,channels=1,rate=16000" ! autoaudiosink
播放一段测试语音
gst-launch-1.0 audiotestsrc wave=5 volume=0.3 ! audioconvert ! autoaudiosink
the wave parameters can be:
wave : Oscillator waveform
flags: readable, writable, controllable
Enum "GstAudioTestSrcWave" Default: 0, "sine"
(0): sine - Sine
(1): square - Square
(2): saw - Saw
(3): triangle - Triangle
(4): silence - Silence
(5): white-noise - White uniform noise
(6): pink-noise - Pink noise
(7): sine-table - Sine table
(8): ticks - Periodic Ticks
(9): gaussian-noise - White Gaussian noise
(10): red-noise - Red (brownian) noise
(11): blue-noise - Blue noise
(12): violet-noise - Violet noise
播放来自麦克风的声音
gst-launch-1.0 pulsesrc device=$MIC_DEV_ID ! "audio/x-raw,format=S16LE,rate=16000,channels=1" ! autoaudiosink
gst-launch-1.0 alsasrc device=hw:2,0 ! autoaudiosink
MIC_DEVICE_ID can be got by
gst-device-monitor-1.0 Audio/Source "audio/x-raw,format=S16LE,rate=16000,channels=1"
将收到的语音进行 AGC(自动增益), AEC(回声消除) and ANS(噪声抑制) 处理
gst-launch-1.0 pulsesrc device=$MIC_DEVICE_ID ! "audio/x-raw,format=S16LE,rate=16000,channels=1" ! webrtcdsp ! webrtcechoprobe ! autoaudiosink
转换语音包为 g.711 编码
gst-launch-1.0 pulsesrc device=$MIC_DEVICE_ID ! "audio/x-raw,format=S16LE,rate=16000,channels=1" ! alawenc
write out audio file to disk (using same tone):
gst-launch-1.0 audiotestsrc ! audioconvert ! capsfilter caps = "audio/x-raw,format=S16LE,channels=1,rate=16000" ! filesink location = "audio.raw"
read audio file from disk (should play the same tone):
gst-launch-1.0 filesrc location="audio.raw" ! capsfilter caps = "audio/x-raw,format=S16LE,channels=1,rate=16000" ! audioconvert ! audoaudiosink
decode mp3 and write to disk:
gst-launch-1.0 filesrc location = 16k16bit.mp3 ! decodebin ! audioconvert ! capsfilter caps = "audio/x-raw,format=S16LE,channels=1,rate=16000" ! filesink location = "audio.raw"
将来自麦克风的音频录制成 wave file
# macos
gst-launch-1.0 osxaudiosrc ! wavenc ! filesink location=audio.wav
# linux
gst-launch-1.0 pulsesrc device=xxx ! wavenc ! filesink location=test.wav
gst-launch-1.0 alsasrc device=hw:3,0 ! wavenc ! filesink location=test.wav
将语音录制为 hls 文件
gst-launch-1.0 pulsesrc device=xxx ! avenc_aac ! hlssink2 max-files=5
gst-launch-1.0 osxaudiosrc device=xxx ! avenc_aac ! hlssink2 max-files=5
将语音录制为 hls 文件以及 wave file
gst-launch-1.0 pulsesrc device=$MIC_DEVICE_ID ! "audio/x-raw,format=S16LE,rate=16000,channels=1" ! webrtcdsp ! webrtcechoprobe ! audioconvert ! tee name=t ! queue ! avenc_aac ! hlssink2 max-files=5 playlist-location=waltertest.m3u8 location=waltertest_%05d.ts t. ! queue ! wavenc ! filesink location=waltertest.wav
transmit audio
gst-launch-1.0 -v wasapisrc loopback=true ! audioconvert ! udpsink host=239.0.0.2 port=9998
receive audio
gst-launch-1.0 -v udpsrc address=239.0.0.2 port=9998 multicast-group=239.0.0.1 caps="audio/x-raw,format=F32LE,rate=48000,channels=2" ! queue ! audioconvert ! autoaudiosink
# or
gst-launch-1.0 -v udpsrc address=239.0.0.2 port=9998 multicast-group=239.0.0.1 caps="audio/x-raw,format=S16LE,rate=48000,channels=2" ! queue ! audioconvert ! autoaudiosink
play pcm file
gst-launch-1.0 filesrc location=iat_pcm_16k.pcm ! audio/x-raw, format=S16LE, channels=1, layout=interleaved, rate=16000 ! autoaudiosink
send mp3 audio to remote over udp
gst-launch-1.0 -v filesrc location=/tmp/musicfile.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! audioresample ! audio/x-raw, rate=16000, channels=1, format=S16LE ! audiomixer blocksize=320 ! udpsink host=192.168.1.10 port=10000
gst-launch-1.0 -v udpsrc port=10000 ! rawaudioparse use-sink-caps=false format=pcm pcm-format=s16le sample-rate=16000 num-channels=1 ! queue ! audioconvert ! audioresample ! autoaudiosink
convert wav to pcm
gst-launch filesrc location=input.wav ! wavparse ! audioresample ! audioconvert \
! audio/x-raw-int, rate=8000, channels=1, endianness=4321, width=16, depth=16, signed=true \
! filesink location=output.pcm
gst-launch-1.0 filesrc location=file.wav ! wavparse ! audioresample ! audioconvert \
! audio/x-raw,format=S16BE,channels=1,rate=8000 ! filesink location=file.pcm
convert mp3 to hls(m3u8 + ts)
gst-launch-1.0 -v filesrc location=material/16k16bit.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! avenc_aac ! hlssink2 max-files=5
gst-launch-1.0 -v filesrc location=material/16k16bit.mp3 ! mpegaudioparse ! mpg123audiodec ! audioconvert ! alawenc ! hlssink2 max-files=5
display audio visualisation 音频可视化
gst-launch-1.0 audiotestsrc wave=9 ! audioconvert ! spacescope ! glimagesink
gst-launch-1.0 audiotestsrc ! audioconvert ! wavescope ! glimagesink
# on ubuntu, the device id can be got by arecord -l
gst-launch-1.0 alsasrc device=hw:3,0 ! audioconvert ! wavescope ! videoconvert ! ximagesink
Convert WAV to PCM
gst-launch-1.0 filesrc location=file.wav ! wavparse ! audioresample ! audioconvert ! audio/x-raw,format=S16LE,channels=1,rate=8000 ! filesink location=file.pcm
Play PCM
gst-launch-1.0 filesrc location=/tmp/test.pcm ! capsfilter caps="audio/x-raw,format=S16LE,channels=1,rate=16000" ! audioconvert ! audioresample ! autoaudiosink
split mp3 to multiple wav files
gst-launch-1.0 filesrc location=audio/audio.mp3 ! decodebin ! audioconvert ! splitmuxsink location=/tmp/out_%d.wav muxer=wavenc max-size-time=10000000000
encodes a test audio and video stream and muxes both into an FLV file.
gst-launch-1.0 -v flvmux name=mux ! filesink location=test.flv \
audiotestsrc samplesperbuffer=44100 num-buffers=10 ! faac ! mux. \
videotestsrc num-buffers=250 ! video/x-raw,framerate=25/1 ! x264enc ! mux.
send audio stream to rtpmp
export RTMP_DEST="rtmp://192.168.104.199:1935/live/testaudio"
gst-launch-1.0 audiotestsrc is-live=true ! \
audioconvert ! audioresample ! audio/x-raw,rate=48000 ! \
voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4 ! \
flvmux name=mux ! \
rtmpsink location=$RTMP_DEST
gst-launch-1.0 alsasrc device=hw:2,0 ! audioconvert ! wavescope ! videoconvert \
! x264enc ! flvmux name=muxer ! rtmpsink location="$RTMP_DEST live=1"