-
Notifications
You must be signed in to change notification settings - Fork 723
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
av_audio_enc_start Ringbuffer of AFE is full的问题, VOIP例程中出现的问题 (AUD-6071) #1373
Comments
值得一提是当我修改 UDP数据收发线程的 延时时间从30到100也会出现这个日志 同时出现声音出现了延迟 |
Hi @JeremyXXJ ,该打印提示您 afe 的输出 buffer 已满,可以提高 afe->fetch() 的执行频率尽快取走数据。 |
@JeremyXXJ 打印出现task 信息, 看一下 task 的状态 |
|
你这个怀疑是 aec 出来之后的数据 没有处理导致的 |
好的感谢您 我会排查一下您说的问题 |
static void _audio_enc(void* pv)
} 您好这会是库函数的问题吗 因为我没有对库函数做修改 我仅仅是调用了这个函数 我在发送端调用该函数的时候没有出现问题 只是修改循环延时的时候 出现了 这个问题已经困扰了我很久了 aec 出来之后的数据是在哪里进行处理呢 很抱歉这个时间打扰到您 |
从声音来看 他确实和VOIP例程里的声音不一样 有一些回音 |
把你的 整个 c 文件贴出来看看 |
voip.txt或有一些语法错误 此时板子不在身边 |
av_stream.c 里面的代码有改过嘛? |
应该没有 我明天再确认下 |
voip.txt |
看代码应该是自己实现的 VOIP,encode 完的数据可以保存下来听听是否有问题。没问题整个encoder通路都就是OK的。 |
谢谢您的指导 我想知道我现在暂时不用select 出现我所提到的问题吗 encode在半双工时看起来是没有问题的 “确保发送接收task的优先级较高比如编码抢占而不被占用”这句话我不太理解 是要网络发送任务的优先级高于编解码中 21的优先级吗 |
是的,编解码配置为21太高了,网络任务优先级要高于编解码任务的优先级。保证网络低CPU占用率的任务能及时调度到 |
我已经修改了,但问题没有解决 ,此时我又丰富了一下 出现情况的描述,希望您能给予指导 情况1:但是当我全双工的时候 一边录制一边播放的时候出现了问题,AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!! 报错并且此时抓包没有数据传输 ,打印日志发现两端均在打印AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!! 情况2: 在半双工的基础上,当我再接收端加上网络发送和编码的代码时,发现可以正常发送数据,此时我又加了一个板子作为接收端,第三个板子出现了声音的延迟。 情况3: 在半双工的基础上,当我再发送端加上网络接收和解码的代码时,报错 |
看样子你编码发送的逻辑是通的。你可以加一下log对比下。正常和NG情况下从AFE读了多少比数据,编码了多少次。log看主要是读慢了。你可以把一些环节注释掉看到底是哪里引起的。比如注释掉发送,注释掉解码等。 |
感谢! |
我在VOIP例程上进行修改,我有两块ESP32_S3_KORVO2_V3_BOARD开发板
我将SIP服务期去除掉并使用 UDP socket进行音频数据的传输
我的路径是这样的
发送端 av_audio_enc_start 然后av_audio_enc_read(&udp_send_audio_frame, av_stream); udp_send_audio_frame是我设置的缓存区
再接着通过sendto 发送出去
接收端 av_audio_dec_start 收到以后 int received = recvfrom(sock, udp_receive_audio_frame.data, 160, 0, (struct sockaddr *)&source_addr, &addr_len); ,av_audio_dec_write(&udp_receive_audio_frame, av_stream);再解码播放。
这是只接受和发送没有问题。
情况1:但是当我全双工的时候 一边录制一边播放的时候出现了问题,AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!! 报错并且此时抓包没有数据传输 ,打印日志发现两端均在打印AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!!
情况2: 在半双工的基础上,当我再接收端加上网络发送和编码的代码时,发现可以正常发送数据,此时我又加了一个板子作为接收端,第三个板子出现了声音的延迟。
情况3: 在半双工的基础上,当我再发送端加上网络接收和解码的代码时,报错
AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!!
AFE_VC: Ringbuffer of AFE is full, Please use fetch() to retrieve data from the ringbuffer soon to avoid data loss or overwriting!!!
此时无法正常工作了。
The text was updated successfully, but these errors were encountered: