gst_video_time_code_is_valid 将时间码添加到流时断言失败

问题描述 投票:0回答:1

我正在尝试使用

timecodestamper
元素将时间码添加到 GStreamer 管道

    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

但是,我得到了这些断言失败:

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

据我了解,无需任何额外配置,

timecodestamper
将对每一帧使用递增计数器。

gstreamer timecodes
1个回答
0
投票

失败的功能

gst_video_time_code_is_valid
在这里定义它检查这些东西:

  1. 视频的帧率不是0/x或x/0

  2. 各个时间码字段是有意义的,例如,秒字段不是 >= 60。

  3. /* We can't have more frames than rounded up frames per second */

  4. /* We either need a specific X/1001 framerate or otherwise an integer framerate */

  5. /* We only support 30000/1001 and 60000/1001 as drop-frame framerates. 24000/1001 is *not* a drop-frame framerate! */

  6. /* Drop-frame framerates require skipping over the first two timecodes every minutes except for every tenth minute in case of 30000/1001 and the first four timecodes for 60000/1001 */

由于

drop-frame
属性默认为 false,上面的 #5 和 #6 不适用。

帧速率是 1/10,所以 #1 也不适用。我假设除非 GStreamer 中存在错误,#2 不适用。

然而这个条件是有问题的:

} else if (tc->config.fps_n % tc->config.fps_d != 0) {
  return FALSE;
}

在这种情况下,我们的帧速率是每 10 秒一帧,但是 1 % 10 != 0.

如果我将帧速率更改为 1,我将不再看到断言。但可能这里的限制是一个错误?

© www.soinside.com 2019 - 2024. All rights reserved.