使用 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 对录音添加延迟的主要内容,如果未能解决你的问题,请参考以下文章