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 からヒューズ fs に転送するにはどうすればよいですか? これを処理する方法がわかりません。私は以前にアプリシンクを使用したことがありません。

私が言いたいことが明確であることを願っています。

4

2 に答える 2

0

試してみましたか: giosink GIO がサポートする任意の場所に書き込む giosrc GIO がサポートする任意の場所から読み取る

Gio を使用すると、FUSE を任意のファイル システムとして扱うことができます。

于 2010-08-04T13:10:41.933 に答える
0

アプリシンクを気にする必要はないと思います。私の直感では、トランスコーディング部分をファイルシステム部分から分離できればできるほど良いと思います。別のスレッドまたはプロセスでファイルシンクにトランスコードし、メッセージを渡して、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をダウンロードするだけで、多くの時間と手間を省くことができます。

于 2010-08-02T17:06:37.800 に答える