fuse和gstreamer转码

2024-05-13 02:29:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个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。在

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


Tags: 代码new管道locationlaunchfsmp3fuse
2条回答

我觉得你不必为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视为任何文件系统。在

相关问题 更多 >