我正在尝试创建一个FUSE fs,它可以将所有的声音文件转码为mp3。我的第一个想法是使用gstreamer作为转码的后端。我考虑过使用这个管道:
gst-launch -v filesrc location=01\ New\ Born.flac ! decodebin ! audioconvert ! lame vbr=4 vbr-quality=9 ! id3v2mux ! appsinkfuse expect的python绑定在读取文件时调用此函数:
def read(self, length, offset):我如何将缓冲区从gstreamer转移到fuse fs?我不知道怎么处理这件事。我以前从来没有用过appsink。
我希望我的意思很清楚。
发布于 2010-08-03 01:06:38
我不认为你需要费心去处理appsink。我的直觉是,代码转换部分与文件系统部分分离得越远越好。在单独的线程或进程中将代码转换为文件链接,并传递消息以告诉FUSE守护进程代码转换已经进行了多远。
我使用filesink而不是appsink,在许多工作线程/进程中进行代码转换,这些工作线程/进程将.mp3s写入到一个大小可控的缓存目录中,并让appsink阻塞,直到正在进行的代码转换文件足够长来满足请求。
这是filesink的源代码。在没有查找的情况下,它似乎只是将每个缓冲区的内容附加到文件中。http://mediatools.cs.ucl.ac.uk/nets/newvideo/browser/gst-cvs/gstreamer/plugins/elements/gstfilesink.c#L436
你也可以通过下载mp3fs或gstfs来节省大量的时间和麻烦,它们已经完成了你提到的几乎所有的事情。
发布于 2010-08-04 21:10:42
您是否尝试过: giosink写入任何支持GIO的位置giosrc从任何支持GIO的位置读取
使用Gio,您应该能够将FUSE视为任何文件系统。
https://stackoverflow.com/questions/3387506
复制相似问题