【问题标题】:GStreamer "Changing the `location' property on filesink when a file is open is not supported."GStreamer“不支持在文件打开时更改文件接收器上的‘位置’属性。”
【发布时间】:2019-07-10 16:44:13
【问题描述】:

我的任务是与 GStreamer 合作,在处理了几个不同的问题后,我尝试了很多来找出问题所在。我目前面临许多问题,但最让我摸不着头脑的是,在将接收器状态设置为 NULL 或 READY 后,我无法更改文件接收器的文件位置而不会收到警告。

** (python3:12542): WARNING **: Changing the `location' property on filesink when a file is open is not supported.

现在,这是一个最小的 sn-p 代码,它显示了我正在做什么以使这个错误发生:

    self.sink.set_state(Gst.State.READY) # have also tried NULL
    self.muxer.set_state(Gst.State.READY) # have also tried NULL

    self.sink.set_property('location', output_file)

    self.muxer.set_state(Gst.State.PLAYING)
    self.sink.set_state(Gst.State.PLAYING)

这是假设一个管道,其中数据被输入到复用器,最后到文件接收器。在 C 应用程序中有效,但线程模型略有不同。

需要注意的是,此代码是从 GStreamer 管道外部的回调执行的,它可以访问 GStreamer 管道元素。在“官方 GStreamer 管道”之外请求状态更改是错误的吗?让另一个线程改变状态是否未定义?

有一次,我在所述线程中放置了一个 while 循环,以等待元素上的状态发生变化,但它从未发生过。

如果这是错误的,是否有一些文档可以告诉我为什么这是错误的,或者如何以一种不太麻烦的方式进行操作?它在 C 程序中运行良好,只是有一个 GLib 线程执行回调,而不是 Python 线程。那里的模式是一样的,设置状态为NULL,设置文件接收位置,设置状态为播放。

感谢您的帮助!

【问题讨论】:

  • 将管道状态设置为 GST_STATE_NULL 为我解决了问题

标签: python gstreamer


【解决方案1】:

没有在 Python 中尝试过,但在 C/C++ 代码中,我通常会在更改文件名时将 管道 设置为 READY 状态。

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多