2010-08-02 78 views
0

我想创建一个FUSE FS将所有声音文件转码为MP3。我的第一个想法是使用gstreamer作为转码的后端。 我想过用这条管道:保险丝&gstreamer转码

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

保险丝的Python绑定想到调用此函数当读取一个文件:

def read(self, length, offset): 

我怎么会缓冲从GStreamer的转移到熔丝FS ?我不怎么处理这个问题。我以前从未使用过appsink。

我希望这很清楚我的意思。

+0

如果你正在做这个练习,那就摇滚吧。如果您将压缩音频转码为不同的压缩算法或质量,请不要:http://www.vorbis.com/faq/#transcode – msw 2010-08-02 12:05:19

+1

只是一个练习:) – Leon 2010-08-02 12:10:55

回答

0

我不认为你需要打扰appsink。我的直觉是,你可以进一步将转码部分与文件系统部分分离得更好。在单独的线程或进程中将代码转换为文件链接并传递消息以告知FUSE守护程序转码已经进行了多久。

代替appsink,我会使用filesink,在大量工作线程/进程中转码,将.mp3s写入大小控制的缓存目录,并且read()会阻塞,直到转码后的文件进行足够长的时间请求。

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

你也可以通过下载mp3fs或gstfs节省很多时间和麻烦,它们已经完成了你提到的几乎完全一样。

0

你试过: giosink写入任何GIO支持位置 giosrc从任何GIO支持位置

随着吉奥你应该能够把FUSE任何文件系统读取。