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

Kan*_*ski 6 time rendering offset gstreamer

我有两个媒体文件(例如“file0”和“file1”),我想将它们合并为一个具有“画中画”效果的文件 - “file0”中的内容将显示在整个窗口上, “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 
Run Code Online (Sandbox Code Playgroud)

(您将看到雪白的 320x240 窗口,从开始三秒后持续两秒出现小绿框)

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

Kan*_*ski 7

最后的答案:可以通过为视频混合器和音频混合器元素的特定接收器调用gst-pad-set-offset来实现。因此,在上面的示例中,您将获得视频和音频混合器的接收器_1 pad,并通过调用“gst-pad-set-offset”指定偏移量。奇迹般有效。

\n\n

特别感谢 Sebastian Dr\xc3\xb6ge 回答了非常类似的问题

\n