2017-10-17 9 views
0

機能opus_encodeは、フレームサイズをパラメータとして必要とします。 api docでは、バッファサイズはチャンネルごとのサンプル数です。 しかし、どのサイズを使用すればよいですか?opusエンコードバッファサイズを確認する方法は?

私はアンドロイドでopusを使用しています。サンプルレート16k、バッファサイズ1280です。エンコードとデコードでフレームサイズを640に設定すると、デコードされたファイルの長さは生のpcmの半分になります。私が960に設定すると、デコードされたファイルは生のpcmの2/3になります。 1280に設定すると、encodeはargエラーとして-1を返します。

クールな編集を使ってデコードを再生すると、生のpcmよりも速くなります。

私のパラメータに関するものが必要です。 opusを使用している人は誰でも私を助けることができますか? ありがとうございました。

答えて

1

オーパスエンコードの定義:

opus_int32 opus_encode (OpusEncoder *   st, 
          const opus_int16 * pcm, 
          int     frame_size, 
          unsigned char *  data, 
          opus_int32   max_data_bytes) 

あなたはpcmバッファで利用可能な1つのチャンネルあたりのサンプル数に設定する必要がframe_size指定しました。

OPUSコーデックは、ステレオ信号とモノラル信号をサポートしており、opus_encoder_create機能を呼び出すときに指定するエンコーダの対応する設定はchannelsです。

また、サポートされているフレームサイズについては、OPUSコーデックで知る必要があります。 2.5、5、10、20、40、または60 msのオーディオデータを持つフレームをサポートしています。

16ミリ秒のオーディオの1ミリ秒は16サンプル(16000/1000)です。

  • 16 * 2.5 = 40(非常にまれ)
  • 16 * 5 = 80(まれ)
  • 16 * 10 = 160
  • 16 * 20:だからモノために、あなたはframe_sizeに設定を指定することができ= 320
  • 16 * 40 = 640
  • 16 * 60 = 960

OPUSコーデックは、他のサイズを受け付けません。 1280サンプルのバッファサイズを処理する最良の方法は、4つの20msパケットまたは2つの40msパケットに分割することです。

バッファから受信した1つのバッファから2つまたは4つのパケットをエンコードします。

関連する問題