【问题标题】:How to pause video recording in gstreamer如何在 gstreamer 中暂停视频录制
【发布时间】:2011-09-23 05:30:22
【问题描述】:

我这样创建了一个管道:

v4l2src -> tee -> queue -> encoder -> avimux -> filesink
           tee -> queue -> v4l2sink

现在我想暂停录制(保持环回,但暂停编码器),当我恢复时,我希望重新编码文件从我恢复的地方继续。 我尝试使用 gst_element_set_state: 如果我暂停管道,则环回停止。 如果我暂停编码器,则 gst_element_set_state 的返回值是可以的,但编码器并没有真正暂停。 我暂停了avimux,与编码器相同。 任何人都可以帮忙吗?非常感谢。

【问题讨论】:

标签: gstreamer recording


【解决方案1】:

请查看 gst-plugins-bad 中的 camerabin / camerabin2。不幸的是,您想要做的有点复杂。我会解释的。对于初学者,您需要将 src-pad 放在队列中,将其设置为leaky=downstream 并阻止 src-pad。这会暂停视频。您也可以在队列之后使用阀门元素以获得相同的效果。如果你幸运的话,一切都很好(avimux 应该是这种情况)。对于其他格式(mp4mux),您需要记住暂停时最后一个缓冲区的时间戳(通过 pad-data-probe),当您在取消暂停后获得第一个新缓冲区时,从时间戳中减去暂停时间。否则,您将在生成的视频中暂停。这是因为 mp4 容器中的视频流可能很稀疏。这也会影响其他格式。从理论上讲,您还应该能够通过在取消暂停后(在第一个缓冲区之前)向下游发送新段事件来处理此问题,但我没有尝试过。再次检查它是如何完成的,尤其是在 camerabin2 中。还可以考虑只使用 camerabin2 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多