8

Python Gstreamerバインディングを使用してオーディオを再生するアプリケーションを作成していますが、オーディオもデコードしようとしています。つまり、を使用してデータを読み取りdecodebin、生のPCMバッファーを受信したいと考えています。具体的には、ファイル全体をメモリに読み込むのではなく、ファイルのチャンクを段階的に読み込みたいと考えています。

いくつかの具体的な質問:Gstreamerでこれをどのように達成できますか?特にpygstとは?ストリームからデータを読み取るために使用する必要がある特定の「シンク」要素はありますか?pygstBufferオブジェクトからデータを読み取るための好ましい方法はありますか?(単に「メインループ」に入るのではなく)データを消費する速度を制御するにはどうすればよいですか?

4

1 に答える 1

5

アプリケーションにデータを戻すために推奨される方法は、appsinkです。

このような単純なオーディオ プレーヤーに基づいて(oggdemux/vorbisdec を decodebin & capsfilter で caps = "audio/x-raw-int" に置き換えます)、autoaudiosink を appsink に変更し、"new-buffer"シグナルを python に接続します。関数 + 「送信シグナル」を True に設定します。この関数は、PCM/int データのデコードされたチャンクを受け取ります。デコードの速度は、デコードして消費できる速度によって異なります。new-buffer シグナルは Gstreamer スレッド コンテキストにあるため、その関数でスリープ/待機するだけで、デコード速度を制御または遅くすることができます。

于 2010-08-18T09:40:56.827 に答える