如何从 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 (将#修改为@)