微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 opus 编解码器中获取丢失隐藏的丢失数据包

如何解决如何从 opus 编解码器中获取丢失隐藏的丢失数据包

我在我的一个应用程序中使用 opus 编解码器对语音数据进行编码/解码。在我的环境中有一点丢包,所以我想恢复那些丢失的数据包以使语音流畅。我开始知道opus已经有这个功能了,可以通过解码方法获得丢失的数据包。在他们的 documentation 中有

可以通过使用空指针和丢失数据包的零长度调用解码器来替换丢失的数据包

我的解码线程如下

void audioDecodingTask() {
    int chunkSize = 5000;
    unsigned char* buffer = new unsigned char[chunkSize];
    short* shortBuffer = new short[chunkSize];
    int byteLen,shortLen;
    DEBUG("Audio decoding thread started successfully");
    
    while (true)
    {
        Frame frame = receivedData.pop();
        if (!running) {
            DEBUG("exiting decoder task");
            break;
        }
        //do decoding
        shortLen = opus_decode(dec,frame.data,frame.len,shortBuffer,chunkSize,0);
        

        byteLen = convertShortToByte(shortBuffer,shortLen,buffer);
        frame.copy(buffer,byteLen);

        decodedData.push(frame);
    }
}

这里的 receivedData一个带有编码语音帧的阻塞队列。我可以检测数据包是否在网络中丢失,但我不知道如何更改我的代码以从 opus 解码器中恢复该数据包。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。