0

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

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

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

def read(self, length, offset):

如何将缓冲区从 gstreamer 传输到 fuse fs?我不知道如何处理这个。我以前从未使用过appsink。

我希望我的意思很清楚。

4

2 回答 2

0

我不认为你需要打扰appsink。我的直觉是,您可以将转码部分与文件系统部分分离得越远越好。在单独的线程或进程中转码到文件接收器中并传递消息以告诉 FUSE 守护进程转码的进度。

我会使用文件接收器,而不是应用程序接收器,在将 .mp3 写入大小控制的缓存目录的多个工作线程/进程中进行转码,并一直read()阻塞直到正在进行的转码文件足够长来满足请求。

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

您还可以通过下载 mp3fs 或gstfs来节省大量时间和麻烦,它们已经完成了您提到的几乎所有内容。

于 2010-08-02T17:06:37.800 回答
0

您是否尝试过: giosink 写入任何 GIO 支持的位置 giosrc 从任何 GIO 支持的位置读取

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

于 2010-08-04T13:10:41.933 回答