0

カスタムUDPプロトコルを介してリモートサーバーからオーディオサンプルのストリームを受信するアプリケーションを開発しています。ストリームはサンプルの小さなシーケンスで構成され、シーケンスごとにチャネル数とレートが異なる場合があります。

私が理解しているように、ストリームのsample_specは、ストリームの作成中(、、など)にのみ設定でき、pa_simple_new後でpa_stream_new切り替える方法はありません。

私の質問は、PulseAudioでこれらのサンプルを再生するための最も効率的なアプローチは何でしょうか?3つのオプションがあります。

  1. 単一のPulseAudioストリームを保持し、サンプルシーケンスを手動でリサンプリングし、必要に応じてチャネルをミックスします(PulseAudioに同じsample_specのサンプルを供給するため)
  2. 単一のPulseAudioストリームを保持し、仕様が変更されたときに新しいsample_specで閉じてから再度開きます
  3. 使用するサンプルの種類ごとに1つずつ、多数のストリームを保持します

オプション1は多くの手作業のようであり、かなりのリソースを消費します。オプション2はひどく非効率的なようです。オプション3はおそらく最良のように見えますが、私はリソースの消費を心配しています。足りないものはありますか?

4

1 に答える 1

1

自分自身をリサンプリングすることは無駄な努力になります。サンプルレートを動的に更新するオプションがあります。PA_STREAM_VARIABLE_RATEを設定し、pa_stream_update_sample_rate()を使用する必要があります。ただし、これはまだサンプル仕様の変更を処理しません。

2と3はどちらも有効であり、リソースを事前に割り当てること(オプション3)とわずかなパフォーマンスの低下(オプション2)との間には明らかにトレードオフがあります。正直なところ、ストリームの作成はそれほど高価ではなく、ストリームの保持もオーバーヘッドが高くならないようにする必要があります(リソースに深刻な制約がある環境にいる場合を除く)。

したがって、スペックとレートの組み合わせの数が決まっている場合は、ストリームを事前に作成するだけです。スペック/レートの変更がまれな場合は、ストリームを破棄して再作成してください。

于 2012-06-21T12:25:13.723 に答える