【问题标题】:how can I get raw audio pcm data from webm file using opus codec如何使用 opus 编解码器从 webm 文件中获取原始音频 pcm 数据
【发布时间】: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 : 返回,解码样本数或错误码。

【问题讨论】:

    标签: c++ audio pcm webm opus


    【解决方案1】:

    您可以使用 FFMPEG 库 (https://ffmpeg.org/) 将 webm 转换为原始 pcm。

    Webm 是一种文件格式或容器。它可以包含音频或/和视频编码数据。 (作品、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

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2020-01-02
      • 2019-07-18
      • 1970-01-01
      • 2017-10-13
      • 2013-05-05
      • 1970-01-01
      • 2018-02-19
      • 2019-01-09
      相关资源
      最近更新 更多