如何在 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

我已尝试使用wasapisinkautoaudiosink 调整它以在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。如何使用 filesrcautoaudiosink 通过扬声器播放 .wav 文件的内容?

【问题讨论】:

【参考方案1】:

也可以在audioconvert 之前或之后尝试audioresample。不完全确定当前的 Windows 音频子系统 - 但现在硬件往往需要 48000 赫兹的采样率。如果音频子系统无法处理,您需要自己处理。

【讨论】:

以上是关于如何在 Windows 上使用 gstreamer 播放 .wav 音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

GStreamer在Unbutu和Windows的编译使用细节

如何将 Opencv VideoWriter 与 GStreamer 一起使用?

用于 Windows 的 python gstreamer

如何在 Raspberry Pi3 上的 Qt5 上使用 qt-gstreamer 和 qtquick2videosink

科普分享 | GStreamer是什么?

如何在 Qt5.5 中使用 gstreamer1.0 而不是 0.10?