我正在尝试创建一个将所有声音文件转码为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。
我希望我的意思很清楚。
答案 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视为任何文件系统。