GStreamer添加timecodestamper提示无set属性问题咨询
问题原因
报错的核心原因是属性名传错了:GstTimeCodeStamper元素不存在名为set的属性,属于属性名记忆偏差。timecodestamper中控制是否向缓冲区写入时间码的属性正确名称为set-tc,你代码里写的"always"确实是该属性的合法枚举值,对应强制覆盖所有入站缓冲区的时间码字段。
另外补充一个容易踩的版本坑:source属性的rtc(实时时钟)选项仅在GStreamer 1.18及以上版本提供,如果你的GStreamer版本低于1.18,就算修正了set的属性名,后续还会触发source属性不存在的警告。
解决方法
- 把错误的属性名
set替换为正确的set-tc,修正后的代码如下:
GstElement *timestamp; timestamp = gst_element_factory_make ("timecodestamper", "myTimeStamp"); g_object_set (timestamp, "set-tc", "always", "source", "rtc", NULL);
- 核对本地GStreamer版本:如果版本低于1.18,要么升级GStreamer版本,要么把
source的取值换成低版本支持的clock(管道时钟)或running-time(管道运行时间)。日常开发中如果不确定元素支持哪些属性,可以直接执行gst-inspect-1.0 timecodestamper命令查看所有合法属性、枚举值和版本要求,避免记错属性名。 - 确认元素摆放位置正确:如果要把时间码嵌入H264码流的元数据中,
timecodestamper必须放在H264编码元素的上游(编码前),放在编码后无法将时间码写入H264的SEI字段。接收端解析时,需要在解码链路中加入h264parse元素,才能正确提取码流中嵌入的时间码到缓冲区元数据中。
内容的提问来源于stack exchange,提问作者Hoekbank
相关产品推荐
相关产品推荐

