You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向已运行GStreamer流水线添加10秒wav文件播放的问题咨询

动态添加WAV支路的问题解决

只播放后半段的核心原因

wavparse解析WAV文件输出的音频帧默认时间戳从0开始,而已经运行的主流水线时钟已经走到了对应时间点,audiomixer会直接丢弃时间戳早于当前时钟的音频帧,因此第6秒添加支路时前6秒的WAV内容都会被丢弃,仅能听到最后4秒。

设置ts-offset后音频损坏的原因

你把clocksync节点放在了wavparse前面,这是错误的:

  • filesrc输出的是未解析的二进制WAV数据流,本身没有标准化的音频帧时间戳
  • 此时给二进制数据块加时间戳偏移,会打乱wavparse识别帧边界、生成正确音频时间戳的逻辑,甚至导致采样率、声道数解析错误,输出自然全是杂音和咔哒声。

正确操作方案

  1. 调整新增支路的链路顺序,将clocksync放在wavparse之后,保证偏移是加在已经解析好的带正确原始时间戳的音频帧上:
    filesrc -> wavparse -> clocksync -> audiomixer
    
  2. 保留你现有的偏移设置代码即可:
    nanosecs = pipeline.query_position(Gst.Format.TIME)[1]
    clocksync.set_property("ts-offset", nanosecs)
    
  3. 把新增支路所有元素状态设为Gst.State.PLAYING即可,不需要修改主流水线状态,不会产生爆音。

可选简化方案

不需要额外加clocksync节点也能实现相同效果:给audiomixer对应新支路的sink pad设置offset属性,值为当前流水线的运行时间(纳秒)即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者tamworth10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:06:04