我正在使ASR服务器uisng开源。 客户端通过websocket以webm文件格式发送语音数据。 在服务器端,首先接收8bit消息。 它是由libwebsocket完成的。
然后我想使用opus编解码器获取原始的pcm数据。 听说webm的音频编解码器很麻烦。
我该怎么办? 请从概念上详尽地告诉我。
这是代码。 (来自互联网)
// 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)
MAX_FRAME_SIZE:我很困惑。
frame_size:返回,已解码样本或错误代码的数量。
答案 0 :(得分:1)
您可以使用FFMPEG库(https://ffmpeg.org/)将webm转换为原始pcm。
Webm是文件格式或容器。它可以包含音频或/和视频编码的数据。 (OPUS,VP8 / 9等)
媒体管道:Webm文件格式-> Opus解码器->原始PCM数据
我发现这个git repo对ffmpeg教程很有用:
https://github.com/leandromoreira/ffmpeg-libav-tutorial
其他链接:
Decoding opus using libavcodec from FFmpeg
有关更多详细信息,请google ffmpeg libavcodec webm