如何在 Windows 上使用 gstreamer 播放 .wav 音频文件?
Posted
技术标签:
【中文标题】如何在 Windows 上使用 gstreamer 播放 .wav 音频文件?【英文标题】:How to play .wav audio file with gstreamer on Windows? 【发布时间】:2020-09-14 19:06:56 【问题描述】:wavparse
documentation 提供了这个示例,通过 Linux 上的扬声器播放 .wav
音频文件,并使用 Alsa 音频。
gst-launch-1.0 filesrc location=sine.wav ! wavparse ! audioconvert ! alsasink
我已尝试使用wasapisink
或autoaudiosink
调整它以在Windows 上使用:
gst-launch-1.0.exe -v filesrc location=1.wav ! wavparse ! audioconvert ! autoaudiosink
gst-launch-1.0.exe -v filesrc location=1.wav ! wavparse ! audioconvert ! wasapisink
两次尝试都导致错误:
错误:来自元素 /GstPipeline:pipeline0/GstWavParse:wavparse0:内部数据流错误。
完整的日志如下所示:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstWavParse:wavparse0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, channels=(int)2, channel-mask=(bitmask)0x0000000000000003, rate=(int)44100
ERROR: from element /GstPipeline:pipeline0/GstWavParse:wavparse0: Internal data stream error.
Additional debug info:
../gst/wavparse/gstwavparse.c(2308): gst_wavparse_loop (): /GstPipeline:pipeline0/GstWavParse:wavparse0:
streaming stopped, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
ERROR: from element /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0/GstWasapiSink:autoaudiosink0-actual-sink-wasapi: The stream is in the wrong format.
Additional debug info:
../gst-libs/gst/audio/gstaudiobasesink.c(1117): gst_audio_base_sink_wait_event (): /GstPipeline:pipeline0/GstAutoAudioSink:autoaudiosink0/GstWasapiSink:autoaudiosink0-actual-sink-wasapi:
Sink not negotiated before eos event.
ERROR: pipeline doesn't want to preroll.
Freeing pipeline ...
我尝试过使用来自不同来源的多个 .wav
文件。总是一样的结果。
我已确认 autoaudiosink
在我的 PC 上工作,因为这两个命令都会产生声音:
gst-launch-1.0.exe -v audiotestsrc samplesperbuffer=160 ! audioconvert ! autoaudiosink
gst-launch-1.0.exe -v audiotestsrc samplesperbuffer=160 ! autoaudiosink
我还确认playbin
可以通过我的扬声器播放文件,但这对我不起作用,因为最终我需要进一步拆分管道。
gst-launch-1.0.exe -v playbin uri=file:///C:/1.wav
我在 Windows 10 中使用 gstreamer 1.18.0。如何使用 filesrc
和 autoaudiosink
通过扬声器播放 .wav
文件的内容?
【问题讨论】:
【参考方案1】:也可以在audioconvert
之前或之后尝试audioresample
。不完全确定当前的 Windows 音频子系统 - 但现在硬件往往需要 48000 赫兹的采样率。如果音频子系统无法处理,您需要自己处理。
【讨论】:
以上是关于如何在 Windows 上使用 gstreamer 播放 .wav 音频文件?的主要内容,如果未能解决你的问题,请参考以下文章
GStreamer在Unbutu和Windows的编译使用细节
如何将 Opencv VideoWriter 与 GStreamer 一起使用?
如何在 Raspberry Pi3 上的 Qt5 上使用 qt-gstreamer 和 qtquick2videosink