Skip to content
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

pipeline_http_mp3播放卡顿问题,从已关闭议题(AUD-5291) #1174开启 (AUD-5612) #1248

Open
laodi-chen opened this issue Aug 14, 2024 · 8 comments

Comments

@laodi-chen
Copy link

@jason-mao 老哥

后来又按照你说的方式调整了输出缓冲区大小,并进行了以下调整,但是效果都无济于事。
使用的例程默认播放地址https://dl.espressif.com/dl/audio/ff-16b-2c-44100hz.mp3

  1. 使用了更大的请求空间
    http_cfg.out_rb_size = 800 * 1024;
    http_cfg.request_size = 16384;
    http_cfg.request_range_size = 32768;
  1. 使用更高的任务优先级
    i2s_cfg.task_prio = configMAX_PRIORITIES - 1;
    i2s_cfg.task_core = 1;

这是录音

WeChat_20240813182718.mp4
@github-actions github-actions bot changed the title pipeline_http_mp3播放卡顿问题,从已关闭议题(AUD-5291) #1174开启 pipeline_http_mp3播放卡顿问题,从已关闭议题(AUD-5291) #1174开启 (AUD-5612) Aug 14, 2024
@laodi-chen
Copy link
Author

@jason-mao 老哥来瞧瞧

@jason-mao
Copy link
Collaborator

jason-mao commented Aug 20, 2024

@laodi-chen 你获取HTTP 下载端的output ringbuffer 水位, 确认一下在卡顿的时候,是不是没有缓冲数据了?听这个声音应该是阶段性的下载不及时。另外,参考下面的配置,把Wi-Fi 和 TCP 的buffer 调整最优,可以改善上述情况。


@laodi-chen
Copy link
Author

laodi-chen commented Aug 21, 2024

@jason-mao
我有按照你说的方式调整TCP缓冲区大小,并没有直接改善,但发现了另一种行为。

CONFIG_TCP_SND_BUF_DEFAULT=65535
CONFIG_TCP_WND_DEFAULT=65535
CONFIG_TCP_RECVMBOX_SIZE=128

在使用云存储时不知道为什么下载速度就会慢,音频听起来比较卡。
按理说云存储有CDN缓存下载应该更快才对的,哪怕云存储只有5M的带宽也完全足够应付这种小文件的下载了。
测试IIS服务器的对外带宽300M,听起来无比丝滑。
这里还衍生了另一个问题,bin文件在云存储时OTA就会经常失败

测试网络

  1. 公司的联通专线50M带宽
  2. 三星S23U 使用中国移动开启热点
  3. realme GT neo5 se使用中国联通开启热点

音频地址

  1. 腾讯云存储https://test-1323289210.cos.ap-beijing.myqcloud.com/Relax.mp3
  2. 华为云存储https://static-web-file-001.obs.cn-north-4.myhuaweicloud.com/bin/mp3/Relax.mp3
  3. 测试IIS服务器http://82.156.206.104:8013/Relax.mp3

@jason-mao
Copy link
Collaborator

@laodi-chen 在卡顿的时候,获取HTTP 的output ringbuffer 水位, 确认一下在卡顿的时候,是不是没有缓冲数据了?

@laodi-chen
Copy link
Author

@jason-mao
录制了http下载过程的视频,并配有麦克风收录的声音。
我只改了这个部分不知道是不是你说的HTTP 的output ringbuffer 水位。
ESP_LOGE(TAG, "req lengh=%d, read=%d, pos=%d/%d", len, rlen, (int)info.byte_pos, (int)info.total_bytes);

我发现http的加载速度远快于https,但听起来还是会有些许断续感。
第二个视频从1分36秒完全下载完成之后就听着好多了。

HTTPS地址录制的视频https://static-web-file-001.obs.cn-north-4.myhuaweicloud.com/bin/mp3/Relax.mp3

bandicam.2024-08-22.17-53-17-865.mp4

HTTP地址录制的视频http://static-web-file-001.obs.cn-north-4.myhuaweicloud.com/bin/mp3/Relax.mp3

bandicam.2024-08-22.18-01-24-478.mp4

@jason-mao
Copy link
Collaborator

jason-mao commented Aug 22, 2024

看着是和下载速度有关,你在 I2S stream timeout 的地方加点打印,

if (r_size == AEL_IO_TIMEOUT) {
,如果数据有下载不及时,它会进入timeout 分支。IDF 5.x 的话要用
if (r_size == AEL_IO_TIMEOUT) {

我测试了一下你提供的URL,HTTP和HTTPS 都很流畅。你是用的我们模组,还是芯片?IDF 版本?同时你换个环境试试?

@laodi-chen
Copy link
Author

@jason-mao
模组型号:ESP32-WROVER-E-N8R8

我注意到例程在IDF5.x运行良好

IDF4.4.7

IDF版本:IDF4.4.7 38eeba213aa695aabfd6d89aa9f5078dbe5a94c3
ADF版本:master 1f275b5018c73c9cd68b6e858006fdd5c52183b5

  1. 当使用默认HTTP配置总会产生错误
ESP_LOGI(TAG, "[2.1] Create http stream to read data");
http_stream_cfg_t http_cfg = HTTP_STREAM_CFG_DEFAULT();
// http_cfg.out_rb_size = 1024 * 1024;
// http_cfg.request_size = 20 * 1024;
// http_cfg.request_range_size = 30 * 1024;
http_stream_reader = http_stream_init(&http_cfg);

I (3130) HTTP_MP3_EXAMPLE: [ 5 ] Start audio_pipeline
E (35060) TRANSPORT_BASE: esp_tls_conn_read error, errno=No more processes
E (35060) HTTP_STREAM: Invalid HTTP stream, status code = -1
E (35060) AUDIO_ELEMENT: [http] AEL_STATUS_ERROR_OPEN,-1
W (35060) AUDIO_ELEMENT: [http] audio_element_on_cmd_error,7
W (35080) AUDIO_ELEMENT: IN-[mp3] AEL_IO_ABORT
E (35080) MP3_DECODER: Failed to read audio data (line 129)
W (35080) AUDIO_ELEMENT: [mp3] AEL_IO_ABORT, -3
W (35100) AUDIO_ELEMENT: IN-[i2s] AEL_IO_ABORT
W (35140) HTTP_MP3_EXAMPLE: [ * ] Stop event received
bandicam.2024-08-23.15-06-06-602.mp4
  1. 使用if (r_size == AEL_IO_TIMEOUT)获取的超时打印
bandicam.2024-08-23.14-53-36-819.mp4

IDF5.2.1

IDF版本:IDF5.2.1 a322e6bdad4b6675d4597fb2722eea2851ba88cb
ADF版本:master 1f275b5018c73c9cd68b6e858006fdd5c52183b5

  1. idf5.2.1不会存在超时
bandicam.2024-08-23.15-02-08-142.mp4

@jason-mao
Copy link
Collaborator

@laodi-chen 4.4 的分支已经EOL,建议切换到5.2 或者5.3 来。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants