我受命与GStreamer一起工作,在处理了几个不同的问题之后,我已经做了很多尝试来找出问题所在。我目前面临许多问题,但是让我比任何事情都更抓挠我的头是,在将接收器状态设置为NULL或READY后,没有得到警告,我无法更改文件接收器的文件位置。 >
** (python3:12542): WARNING **: Changing the `location' property on filesink when a file is open is not supported.
现在,这是一小段代码,显示了我为使此错误发生而正在做的事情:
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,设置文件接收器位置,将状态设置为PLAYING。
感谢您的帮助!
答案 0 :(得分:0)
还没有在Python中尝试过,但是在C / C ++代码中,我通常会在更改文件名时将管道设置为READY
状态。