uni-app createInnerAudioContext语音src路径不带后缀则不能播放的问题

uni-app createInnerAudioContext语音src路径不带后缀则不能播放的问题

开发环境 版本号 项目创建方式
Mac MacOs 11.6 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:3.2.3

手机系统:iOS

手机系统版本号:IOS 14

手机厂商:苹果

手机机型:iPhone 11 Pro

页面类型:vue

打包方式:云端


操作步骤:

当src为https://cos.ap-shanghai.myqcloud.com/20d4-shanghai-007-shared-07-1256635546/8f1b-1400578222/36ae-admin/94a805f88f0f9fa467b0da9a8c461667.m4a的时候可以正常播放
当src为https://cos.ap-shanghai.myqcloud.com/20d4-shanghai-007-shared-07-1256635546/8f1b-1400578222/36ae-admin/fcfa7ad3949478968ec2d6cca1e5cf76-admin的时候则不能正常播放

预期结果:

正常播放

实际结果:

不能正常播放

bug描述:

使用createInnerAudioContext进行语音播放的时候,当src有文件后缀的时候正常,当src没有后缀的时候报错

{
"errMsg": "MediaError",
"errCode": -5
}

更多关于uni-app createInnerAudioContext语音src路径不带后缀则不能播放的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app createInnerAudioContext语音src路径不带后缀则不能播放的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个问题是由于iOS系统对音频文件格式的识别机制导致的。当URL路径中没有明确文件后缀时,iOS的AVPlayer无法准确识别音频文件的MIME类型,从而导致播放失败。

原因分析:

  1. iOS系统在播放网络音频时,会通过URL的后缀名来判断文件格式
  2. 当URL中没有后缀名时,系统无法确定正确的解码器
  3. 即使服务器返回了正确的Content-Type头部,iOS在某些情况下仍需要后缀名来辅助识别

解决方案:

  1. 最佳方案:确保URL包含正确的文件后缀 在服务器端或前端处理时,确保音频文件的URL包含正确的后缀名(如.mp3、.m4a、.aac等)

  2. 临时解决方案:使用URL参数添加后缀

    // 在播放前处理URL
    let audioUrl = 'https://example.com/audio-file';
    if (!audioUrl.match(/\.[a-zA-Z0-9]+$/)) {
        audioUrl += '.m4a'; // 根据实际文件格式添加
    }
    innerAudioContext.src = audioUrl;
    
  3. 服务器端配置:

    • 确保服务器返回正确的Content-Type头部
    • 例如:Content-Type: audio/mpeg 对应.mp3文件
  4. uni-app端处理:

    const innerAudioContext = uni.createInnerAudioContext();
    // 在设置src前进行后缀检查
    innerAudioContext.src = ensureAudioExtension(yourAudioUrl);
回到顶部