【问题标题】:fuse & gstreamer transcodingfuse & gstreamer 转码
【发布时间】:2011-05-10 07:30:30
【问题描述】:

我正在尝试创建一个 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 绑定在读取文件时调用该函数:

def read(self, length, offset):

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

我希望我的意思很清楚。

【问题讨论】:

  • 如果您将此作为练习,请继续前进。如果您要将压缩音频转码为不同的压缩算法或质量,请不要:vorbis.com/faq/#transcode

标签: python gstreamer fuse


【解决方案1】:

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

我会使用 filesink 代替 appsink,在将 .mp3 写入大小控制的缓存目录的多个工作线程/进程中进行转码,并让 read() 阻塞,直到正在进行的转码文件足够长完成请求。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 2020-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多