【发布时间】: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 为我解决了问题