乐鑫技术交流
直播中

张鹏

7年用户 1089经验值
私信 关注
[问答]

使用ADF2.3的opus编码时发现,opus的输出并不流畅,数据输出卡顿,为什么?

我在使用ADF2.3的opus编码时发现,opus的输出并不流畅,数据输出卡顿。
我的数据流为:
i2s -》opus编码-》raw
opus参数如下:
sample_rate = 16000
ch = 1
bit_rate = 6000
complexity = 0

在raw中的数据并不能实时输出,raw的ringbuf输出部分数据后会有几百个ms的空闲。
感觉是opus编码器内部进行了较大深度的缓存?是否有解决实时性问题的方案?
                                                                                                                                                           

回帖(1)

tr12345

3 天前
在使用ADF2.3的opus编码时,如果发现opus的输出不流畅,数据输出卡顿,可能有以下几个原因:

1. **编码复杂度**:您提到的复杂度设置为0,这是最低的复杂度设置,可能会导致编码器的性能不佳。尝试将复杂度提高到一个更高的值,例如5或10,以查看是否有改善。

2. **编码器内部缓存**:Opus编码器可能确实有较大的内部缓存,这可能导致数据输出的延迟。您可以尝试调整编码器的缓存设置,以减少延迟。

3. **系统性能问题**:如果编码器运行在性能较低的设备上,可能会导致编码过程变慢。请确保您的设备具有足够的处理能力来处理Opus编码任务。

4. **I2S数据流问题**:请检查I2S数据流是否稳定,以及是否有数据丢失或错误。如果I2S数据流不稳定,可能会导致编码器无法实时处理数据。

5. **Ringbuffer大小**:如果ringbuffer大小设置不当,可能会导致数据输出的延迟。尝试调整ringbuffer的大小,以确保数据能够实时输出。

为了解决实时性问题,您可以尝试以下方案:

1. **提高复杂度**:如上所述,提高编码复杂度可能会改善实时性。

2. **减少缓存**:尝试调整编码器的缓存设置,以减少延迟。

3. **优化系统性能**:确保您的设备具有足够的处理能力,并优化系统性能。

4. **优化I2S数据流**:确保I2S数据流稳定,无数据丢失或错误。

5. **调整ringbuffer大小**:根据需要调整ringbuffer的大小,以确保数据能够实时输出。

6. **使用实时操作系统**:如果可能的话,使用实时操作系统(RTOS)来提高任务调度的实时性。

7. **考虑使用其他编码器**:如果Opus编码器无法满足您的需求,您可以考虑使用其他编码器,如AAC或Speex,这些编码器可能在实时性方面表现更好。

希望这些建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分