Web应用中使用MP3Sharp处理IFormFile转PCM流式处理报错求助
问题分析与解决:MP3Sharp流式处理IFormFile时抛出通道数异常
问题原因
你遇到的异常是因为MemoryStream在完成CopyToAsync后,流的Position停留在了末尾。此时MP3Stream尝试从这个位置读取数据,相当于读取空流,无法解析出有效的MP3文件头部信息,进而导致通道数解析错误(返回-1)。
而保存到磁盘再处理时,通过文件路径创建MP3Stream,底层会自动从文件的起始位置读取数据,所以能正常解析。
修正代码
只需在创建MP3Stream前,将MemoryStream的Position重置为0即可:
using (var fileStream = new MemoryStream()) { await file.CopyToAsync(fileStream); fileStream.Position = 0; // 关键:将流指针重置到起始位置 MP3Stream stream = new MP3Stream(fileStream); // 后续PCM转换逻辑... }
补充说明
- 所有基于流的读取操作,都需要确保流的Position处于正确的起始位置,否则会出现读取不完整或读取空数据的情况
- 如果后续还需要复用这个MemoryStream,处理完后也可以根据需求重置Position
内容的提问来源于stack exchange,提问作者MG123
相关产品推荐
相关产品推荐

