【发布时间】:2020-01-01 07:18:20
【问题描述】:
我正在制作一个开源的 ASR 服务器。 客户端通过 websocket 以 webm 文件格式发送语音数据。 在服务器端,首先接收 8bit msg。 它是由 libwebsocket 完成的。
然后我想使用 opus 编解码器获取原始 pcm 数据。 听说webm的音频编解码器是opus。
我该怎么做? 请从概念上详细地告诉我方法。
这是代码。 (来自网络)
// libopus audio decoder init
{
int err = 0;
my_opus_decoder = opus_decoder_create(16000, 1, &err);
if (err<0)
{
fprintf(stderr, "failed to set bitrate: %s\n", opus_strerror(err));
return EXIT_FAILURE;
}
}
....................... 这是libwebsocket的回调函数。
//* If receive a data from client*/
case LWS_CALLBACK_RECEIVE:
printf(KCYN_L"[Main Service] Server recvived: size %d %s\n"RESET, strlen((char *)in), (char *)in);
frame_size = opus_decode(my_opus_decoder, (const unsigned char *)in, nbBytes, out , MAX_FRAME_SIZE, 0);
这里 char *in 是流,我将它发送到 opus 解码器。 但是opus解码器发生了无效数据包错误(返回值为-4)
nbytes : 输入长度,4096。
out : 解码输出,数组,int16 out[2*960].
MAX_FRAME_SIZE :我搞不清楚这是什么。
(我设置为 960*2,采样率为 16khz)。
frame_size : 返回,解码样本数或错误码。
【问题讨论】: