gstreamer:如何改变从文件中获取的一个流的渲染时间

gstreamer: how to shift the time of rendering of one stream taken from file

我有两个媒体文件(比如,"file0" 和 "file1")和 我想将它们合并为一个具有 "picture-in-picture" 效果的单个 - "file0" 中的内容将在整个 window 上显示, "file1" 中的内容将显示在左上角 小盒子。

还有一点就是"file1"的内容应该被渲染 从基准时间开始一段时间后,在标记为 "X1" 的点 下图。

也就是说,如果我把"videotestsrc"作为视频源输入, 我会得到以下示例管道,它说明了我需要什么 作为此任务的结果:

gst-launch-1.0 -ev \
 videotestsrc pattern="snow" num_buffers=100 ! queue ! videoscale ! capsfilter caps="video/x-raw,width=320,height=240,framerate=15/1" ! videoconvert ! videomixer.sink_0 \
 videotestsrc pattern=5 timestamp-offset=3000000000 num_buffers=30 ! queue ! videoscale ! capsfilter caps="video/x-raw,width=120,height=80,framerate=15/1" ! videoconvert ! videomixer.sink_1  \
 videomixer name="videomixer" ! autovideosink 

(您会看到下雪的 320x240 window 并出现小绿框 从开始三秒后两秒)

所以,问题是 - 转移渲染时间的最佳方法是什么 file1 的内容? (通过 gstreamer 插件,在管道中指定参数,或者通过执行 API 调用)

终于有了答案:可以通过为 videomixer 和 audiomixer 元素的特定接收器垫调用 gst-pad-set-offset 来实现。因此,在上面的示例中,您将获得 sink_1 个视频和音频混音器,并通过调用 'gst-pad-set-offset' 指定偏移量。就像一个魅力。

特别感谢 Sebastian Dröge 的回答非常 similar question