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

使用GStreamer timecodestamper添加时间码时触发断言失败

解决GStreamer timecodestamper元素的断言失败问题

问题重现

使用timecodestamper元素为GStreamer管道添加时间码时,触发以下断言错误:

gst_video_time_code_add_frames: assertion 'gst_video_time_code_is_valid (tc)' failed
gst_video_time_code_nsec_since_daily_jam: assertion 'gst_video_time_code_is_valid (tc)' failed

涉及的管道配置:

appsrc name=src emit-signals=True format=time
! video/x-raw,format=BGR,width=1920,height=1080,framerate=1/10
! timecodestamper
! videoconvert
! x264enc pass=quant quantizer=0 tune=zerolatency
! h264parse
! mp4mux
! filesink location=output.mp4

原本预期无需额外配置时,timecodestamper会自动为每帧生成递增时间码,但实际触发报错。

问题原因

timecodestamper元素默认不会自动初始化有效的时间码上下文。尽管文档描述默认使用递增计数器,但必须显式提供初始时间码参数,或确保元素能基于输入流元数据生成有效时间码,否则内部时间码对象处于无效状态,触发断言检查失败。

解决方案

1. 显式配置初始时间码参数

为timecodestamper指定起始时间码和匹配输入流的帧率,确保时间码上下文有效:
修改后的管道示例:

appsrc name=src emit-signals=True format=time
! video/x-raw,format=BGR,width=1920,height=1080,framerate=1/10
! timecodestamper start-timecode="00:00:00:00" framerate=1/10
! videoconvert
! x264enc pass=quant quantizer=0 tune=zerolatency
! h264parse
! mp4mux
! filesink location=output.mp4
  • start-timecode:设置起始时间码,格式为HH:MM:SS:FF
  • framerate:必须与输入视频流的framerate完全一致(此处为1/10)

2. 确保appsrc传递有效时间戳

由于appsrc设置了format=time,需保证推送的每个缓冲区都带有正确的时间戳。timecodestamper依赖缓冲区时间戳计算递增时间码,缺失或无效的时间戳会导致时间码初始化失败。

额外验证

可通过以下命令查看timecodestamper的所有可配置参数,按需调整:

gst-inspect-1.0 timecodestamper

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:12:25