Android 如何确认opus编码缓冲区大小?

Android 如何确认opus编码缓冲区大小?,android,opus,Android,Opus,函数opus_encode需要帧大小作为参数。在api文档中,它表示缓冲区大小是每个通道的样本数。 但如何确定我应该使用哪种尺寸 我在android中使用opus。采样率16k,缓冲区大小1280。当我在编码和解码中将帧大小设置为640时,解码文件的长度是原始pcm的一半。当我设置为960时,解码文件是原始pcm的2/3。但是设置为1280,encode将返回-1作为arg错误 当我使用酷编辑播放解码,它比原始pcm快 我的参数一定有些问题。 任何使用opus的人都可以帮助我。 非常感谢。Opu

函数opus_encode需要帧大小作为参数。在api文档中,它表示缓冲区大小是每个通道的样本数。 但如何确定我应该使用哪种尺寸

我在android中使用opus。采样率16k,缓冲区大小1280。当我在编码和解码中将帧大小设置为640时,解码文件的长度是原始pcm的一半。当我设置为960时,解码文件是原始pcm的2/3。但是设置为1280,encode将返回-1作为arg错误

当我使用酷编辑播放解码,它比原始pcm快

我的参数一定有些问题。 任何使用opus的人都可以帮助我。
非常感谢。

Opus编码定义:

opus_int32 opus_encode  ( OpusEncoder *         st,
                          const opus_int16 *    pcm,
                          int                   frame_size,
                          unsigned char *       data,
                          opus_int32            max_data_bytes )
指定帧大小时,需要将其设置为
pcm
buffer中可用的每个通道的采样数

OPUS codec支持立体声和单声道信号,编码器的相应配置是
通道
参数,您可以在调用
OPUS\u编码器创建
函数时指定该参数

您还需要了解OPUS编解码器支持的帧大小。它支持具有:2.5、5、10、20、40或60毫秒音频数据的帧

16kHz的一毫秒音频是16个采样(16000/1000)。因此,对于mono,您可以将帧大小设置为:

  • 16*2.5=40(非常罕见)
  • 16*5=80(罕见)
  • 16*10=160
  • 16*20=320
  • 16*40=640
  • 16*60=960
OPUS编解码器将不接受其他尺寸。处理1280个样本的缓冲区大小的最佳方法是在四个20ms数据包或两个40ms数据包上拆分

所以你们从一个从缓冲区接收的缓冲区中对两个或四个数据包进行编码