GStreamer 将流录制到持续时间错误的 wav 文件

GStreamer recording a stream to a wav file with wrong duration

我正在使用 GStreamer 录制一个 wav 文件,通过 UDP 端口接收 G711 流。 任何 wav 播放器都可以播放该文件,但显示错误的持续时间并且不能快进。 我相信 GStreamer 在开头用空数据写入 header。

此管道可以重现问题:

gst-launch-1.0 udpsrc port=3000 caps="application/x-rtp,media=(string)audio, payload=0,clock-rate=(int)8000" ! rtpjitterbuffer ! rtppcmudepay ! mulawdec ! wavenc !  filesink append=true location=c:/recordings/audio-zz.wav

Florian Zwoch 建议使用-e 文件将正确关闭。 的确,它完美地工作。

我在带有 gst1-java-core 库的 Java 程序中使用此管道。 似乎我错过了一些关闭管道的东西。 我的程序与没有 -e 参数的 gst-launch 具有相同的行为。

在停止管道之前,我发送了一个 EOS 事件。

pipeline.sendEvent(新 EOSEvent());

我该如何解决?

filesink 元素的 append 参数不允许重写 header。

谢谢。

如何停止流水线?如果您使用 ctrl-c 中断管道,则可能确实跳过了 header 完成。 运行 您的管道带有 -e 选项,以便在 ctrl-c 您的管道正常停止。