如何 encode/decode 在单个 gstreamer 管道中直播音频?

How to encode/decode live audio in a single gstreamer pipeline?

为了测试,我想构建一个对实时音频进行编码然后解码的管道。我已经尝试过 mp3 或 aac 编码,如果源不是实时的,我当然可以做到:

$ gst-launch-1.0 audiotestsrc ! lamemp3enc ! mpegaudioparse ! mad ! alsasink
$ gst-launch-1.0 audiotestsrc ! faac ! audio/mpeg, stream-format=raw ! aacparse ! faad ! alsasink

在上述情况下,管道已构建,我可以听到音频播放。但是,如果源是实时的,管道不会播放失败,但没有音频播放。

我确定我遗漏了一些关键概念,但看不出是什么!

是否是您使用的实时源导致了问题?它可能有额外的延迟,导致音频接收器丢弃所有样本。

这条管道怎么样:

$ gst-launch-1.0 audiotestsrc is-live=true ! faac ! aacparse ! faad ! autoaudiosink

这里的 audiotestsrc 就像是一个实时源一样。另请注意,建议在编码器元素之后添加解析器。所以 "aacparse" 用于 AAC 音频,"mpegaudioparse" 用于 MP3 音频。