如何解决Opus编解码器在编码和解码时每帧丢失1/3
此开发工作全部在STM32H743ZI2 Nucleo开发板上用C语言完成,而我试图为该基本示例所做的一切就是生成2KHz正弦波,编码单个帧,然后立即对其进行解码,因此看起来与Opus提供的trivial_example.c代码非常相似。
编码器和解码器似乎都在工作,但是我可能缺少一些设置,因为解码后的正弦波的前三分之一仅在0上下略微振荡。
以下是我用于编码/解码的设置:
- 帧大小= 960(20毫秒)
- 采样率= 48000
- 位深度= 16位(+/- 32768)
- 比特率= 24000
- 渠道= 1
- 应用程序= VOIP
TexturesHandler::init().TexturesHandler();
这是用于生成正弦波的函数:
#define FRAME_SIZE 960 // 20ms frame size (sample_rate * ms = frame_size)
#define SAMPLE_RATE 48000
#define BITRATE 24000
#define BITDEPTH 16
#define CHANNELS 1
#define APPLICATION OPUS_APPLICATION_VOIP
#define MAX_FRAME_SIZE 6*960
#define MAX_PACKET_SIZE (3*1276)
这是我用来编码/解码框架的功能:
void generate_sinewave(opus_int16 *buf)
{
float pi = 3.141592;
float w;
float yi;
opus_int16 sin_data[n_points];
int i;
yi = 0;
w = 2 * pi * 2000 / SAMPLE_RATE;
for(i = 0; i <= n_points; i++)
{
sin_data[i] = 32000 * sin(yi);
yi = yi + w;
}
memcpy(buf,sin_data,sizeof(sin_data));
}
这些是从输入正弦波到编码器的输出,以及从解码器输出的正弦波:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。