2017-10-17 45 views
0

函數opus_encode需要幀大小作爲參數。在API文件中說緩衝區大小是每個通道的採樣數量。 但如何確定我應該使用哪種尺寸?如何確認opus編碼緩衝區大小?

我在android中使用opus。採樣率16k,緩衝區大小1280.當我在編碼和解碼時將幀大小設置爲640時,解碼文件的長度是原始pcm的一半。當我設置爲960時,解碼文件是原始pcm的2/3。但設置爲1280,編碼將返回-1作爲arg錯誤。

當我使用酷編輯播放解碼,它比原始pcm更快。

必須有一些關於我的參數。 有人使用opus可以幫助我。 非常感謝。

回答

1

作品編碼定義:

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

當指定frame_size需要將其設定爲每在pcm緩衝器中可用一個通道的樣本數。

OPUS編解碼器支持立體聲和單聲道信號,編碼器的相應配置是channels當您調用opus_encoder_create函數時指定的參數。

您還需要了解OPUS編解碼器支持的幀大小。它支持幀數爲2.5,5,10,20,40或60ms的音頻數據。

1毫秒的16kHz音頻是16個樣本(16000/1000)。因此,對於單聲道可以指定frame_size設置爲:

  • 16 * 2.5 = 40(非常罕見)
  • 16 * 5 = 80(罕見)
  • 16 * 10 = 160
  • 16 * 20 = 320
  • 16 * 40 = 640
  • 16 * 60 = 960

OPUS編解碼器將不接受另一尺寸。處理1280個採樣的緩衝區大小的最佳方式是分割四個20ms數據包或兩個40ms數據包。

因此,您從緩衝區接收的一個緩衝區編碼兩個或四個數據包。