使用 gst-launch 对录音添加延迟

Posted

技术标签:

【中文标题】使用 gst-launch 对录音添加延迟【英文标题】:adding a delay on the audio recording with gst-launch 【发布时间】:2021-02-16 01:37:00 【问题描述】:

我有这个使用 gst-plugin-1.0 的现有程序,它通过了这个:

-e udpsrc port=3003 buffer-size=200000 ! h264parse ! queue ! http://mux.video_0 alsasrc device=plughw:1,0 ! "audio/x-raw,channels=1,depth=16,width=16,rate=44100" ! voaacenc bitrate=128000 ! aacparse ! queue ! http://mux.audio_0 qtmux name=mux ! filesink location="$RECPATH/record-`date +%Y%m%d%-H%M%S`.mp4" sync=true

这会从 x264 格式的 udp 源获取视频,并直接从麦克风获取音频。它可以工作,但由于它不会同时对视频和音频进行编码,所以当视频流有延迟时(由于更高的质量设置),我对音频有一点延迟。

因此,作为一种快速修复,我正在考虑在录音中添加延迟以进行补偿。我会根据视频质量手动计算延迟。

约束:gst-launch-1.0 版本 1.10.4(在树莓派,debian 拉伸上),使用驱动程序时间戳似乎无法访问,我收到错误“警告:错误管道:没有属性”在元素“alsasrc0”中使用驱动程序时间戳”。

所以我的问题是:有没有一种简单的方法可以为音频添加延迟?

【问题讨论】:

【参考方案1】:

queue 元素具有min-threshold-time 属性,可让您在n 时间内保留数据。

https://gstreamer.freedesktop.org/documentation/coreelements/queue.html?gi-language=c#queue:min-threshold-time

另外,我也发现了这个,可能对您的情况有用pipeline Gstremer video streaming with delay

【讨论】:

我试过了,它确实有帮助,但是我得到了损坏的文件,或者声音不存在或视频出现故障。在第二条评论中,他们还提出了一个带有autoaudiosink 的解决方案,看起来很有希望,但我不知道如何使用它***.com/a/40196962/2824342【参考方案2】:

试试! autoaudiosink ts-offset=100000000

ts-offset 记录在案here。

您还可以通过延迟补偿试验管道;

https://gstreamer.freedesktop.org/documentation/additional/design/latency.html#latency-compensation

【讨论】:

你能展示如何将它添加到命令行吗?好像到处都被拒绝WARNING: erroneous pipeline: could not link autoaudiosink0 to ...到处都试过了 试试gst-inspect-1.0 autoaudiosink,如果它打印插件的属性,然后试试gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! autoaudiosink,看看它是否会播放声音。然后用ts-offset 尝试相同的命令,看看它是否有效。 还是没有运气。 autoaudiosink 在那里,但它不播放任何声音。你确定这可以在录制时使用吗?我正在将 h264 输入视频与麦克风的声音混合以生成 mp4

以上是关于使用 gst-launch 对录音添加延迟的主要内容,如果未能解决你的问题,请参考以下文章

使用 PyAudio 将多个图层添加到录音中

如何为 C++ 程序添加定时延迟?

aurioTouch2 录音问题。我需要将数据从一个 AudioBufferList 添加到另一个

我有一段录音,里面有杂音,并且声音太底,有人能帮我去除吗,

滚动时重定向到*新页面* - 如何添加时间延迟?

使用 Promise.all 时承诺之间的延迟