Page 1 of 1

ESP32S3使用player构建的播放器,播放MP3 VBR格式的HTTP链接获取不到正确的播放时长,以及esp_audio_seek无法定位到正确的播放位置

Posted: Wed Mar 05, 2025 7:41 am
by weisong
使用player构建的播放器,在播放MP3格式的HTTP链接时(VBR),播放器获取的播放时长跟实际音频的时长不一致,比如音频的实际时长是240秒,但是播放器获取到的时长是120秒左右,导致使用esp_audio_seek无法定位到160秒之后的位置,最直接的效果是,如果用户在小程序或者APP播放一个可变码率的MP3音源,进度条无法滑动到超出播放器获取的时长之外的进度
构建播放器代码如下:
static esp_audio_handle_t setup_player()
{
esp_audio_cfg_t cfg = DEFAULT_ESP_AUDIO_CONFIG();
audio_board_handle_t board_handle = audio_board_init();

cfg.vol_handle = board_handle->audio_hal;
cfg.vol_set = (audio_volume_set)audio_hal_set_volume;
cfg.vol_get = (audio_volume_get)audio_hal_get_volume;
cfg.resample_rate = 48000;
cfg.prefer_type = ESP_AUDIO_PREFER_MEM;

player = esp_audio_create(&cfg);
audio_hal_ctrl_codec(board_handle->audio_hal, AUDIO_HAL_CODEC_MODE_BOTH, AUDIO_HAL_CTRL_START);

// Create readers and add to esp_audio
tone_stream_cfg_t tone_cfg = TONE_STREAM_CFG_DEFAULT();
tone_cfg.type = AUDIO_STREAM_READER;
esp_audio_input_stream_add(player, tone_stream_init(&tone_cfg));

// Add decoders and encoders to esp_audio
mp3_decoder_cfg_t mp3_dec_cfg = DEFAULT_MP3_DECODER_CONFIG();
mp3_dec_cfg.task_core = 1;
esp_audio_codec_lib_add(player, AUDIO_CODEC_TYPE_DECODER, mp3_decoder_init(&mp3_dec_cfg));

// Create writers and add to esp_audio
#if (CONFIG_ESP32_S3_KORVO2_V3_BOARD == 1) && (CONFIG_AFE_MIC_NUM == 1)
i2s_stream_cfg_t i2s_writer = I2S_STREAM_CFG_DEFAULT_WITH_PARA(I2S_NUM_0, 48000, I2S_DATA_BIT_WIDTH_16BIT, AUDIO_STREAM_WRITER);
#else
i2s_stream_cfg_t i2s_writer = I2S_STREAM_CFG_DEFAULT_WITH_PARA(I2S_NUM_0, 48000, CODEC_ADC_BITS_PER_SAMPLE, AUDIO_STREAM_WRITER);
i2s_writer.need_expand = (CODEC_ADC_BITS_PER_SAMPLE != 16);
#endif

audio_element_handle_t i2s_stream_writer = i2s_stream_init(&i2s_writer);
esp_audio_output_stream_add(player, i2s_stream_writer);

// Set default volume
esp_audio_vol_set(player, 60);
AUDIO_MEM_SHOW(TAG);

ESP_LOGI(TAG, "esp_audio instance is:%p\r\n", player);
return player;
}
微信图片_20250305154059.png
微信图片_20250305154059.png (105.01 KiB) Viewed 1111 times