我正在尝试创建一个FUSE fs,它可以将所有的声音文件转换成mp3。我的第一个想法是使用gstreamer作为代码转换的后端。 我考虑过使用这个管道:
gst-launch -v filesrc location=01\ New\ Born.flac ! decodebin ! audioconvert ! lame vbr=4 vbr-quality=9 ! id3v2mux ! appsink
fuse expect的python绑定在读取文件时调用此函数:
^{pr2}$如何将缓冲区从gstreamer传输到fuse fs?我不知道该怎么办。我以前从没用过appsink。在
我希望我的意思很清楚。在
我觉得你不必为appsink操心。我的直觉是,你越能把代码转换部分和文件系统部分分开越好。在一个单独的线程或进程中转换成filesink,并传递消息告诉FUSE守护进程代码转换的进展情况。在
我不使用appsink,而是使用filesink,在多个工作线程/进程中进行代码转换,这些线程/进程将.mp3写入一个大小控制的缓存目录,并在正在进行的代码转换文件足够长以满足请求之前使用
read()
块。在这是filesink的源代码。在没有查找的情况下,它似乎只是将每个缓冲区的内容附加到文件中。http://mediatools.cs.ucl.ac.uk/nets/newvideo/browser/gst-cvs/gstreamer/plugins/elements/gstfilesink.c#L436
您还可以通过下载mp3fs或gstfs为自己节省大量的时间和麻烦,这已经基本上完成了您提到的内容。在
您是否尝试过: giosink写入任何GIO支持的位置 从任何支持GIO的位置读取giosrc
使用Gio,您应该能够将FUSE视为任何文件系统。在
相关问题 更多 >
编程相关推荐