保险丝和gstreamer转码

时间:2010-08-02 12:01:22

标签: python gstreamer fuse

我正在尝试创建一个将所有声音文件转码为mp3的FUSE fs。我的第一个想法是使用gstreamer作为转码的后端。 我考虑过使用这个管道:

gst-launch -v filesrc location=01\ New\ Born.flac ! decodebin ! audioconvert ! lame vbr=4 vbr-quality=9 ! id3v2mux ! appsink

fuse的python绑定期望在读取文件时调用此函数:

def read(self, length, offset):

如何将缓冲区从gstreamer转移到保险丝fs?我不知道如何处理这个问题。我之前从未使用过appink。

我希望我的意思很清楚。

2 个答案:

答案 0 :(得分:0)

我认为你不需要为appink烦恼。我的直觉是,你可以将转码部分与文件系统部分分开得越多越好。将单独的线程或进程转码到filesink中并传递消息,告诉FUSE守护进程转码进展的程度。

我使用filesink,在许多将.mp3s写入大小控制的缓存目录的工作线程/进程中进行转码,并且read()阻塞,直到正在进行转码的文件很长足以满足要求。

这是filesink的源代码。在没有搜索的情况下,它似乎只是将每个缓冲区的内容附加到文件中。 http://mediatools.cs.ucl.ac.uk/nets/newvideo/browser/gst-cvs/gstreamer/plugins/elements/gstfilesink.c#L436

你也可以通过下载mp3fs或gstfs来节省你自己很多时间和麻烦,这已经完成了你所提到的。

答案 1 :(得分:0)

你试过了吗?  giosink写入任何GIO支持的位置  giosrc从任何GIO支持的位置读取

使用Gio,您应该能够将FUSE视为任何文件系统。