uni-app uni.getBackgroundAudioManager 当设置的播放地址带有特殊字符 比如%2b 转义字符时 无法播放

uni-app uni.getBackgroundAudioManager 当设置的播放地址带有特殊字符 比如%2b 转义字符时 无法播放

示例代码:

const musicContext = uni.getBackgroundAudioManager() musicContext.src = ‘https://outin-503930ac97f911eeaadb00163e1a6832.oss-cn-shanghai.aliyuncs.com/c02fac15ec0d71eebf9f5017f1e90102/bc4652211baeb789d4bc4a2199a4a16d-sq.mp3?Expires=1711631931&OSSAccessKeyId=LTAIVVfYx6D0HeL2&Signature=EhuB33v2vCkil28NN3hAjZ%2Bc1Ws%3D


## 操作步骤:
无

## 预期结果:
无

## 实际结果:
无

## bug描述:
uni.getBackgroundAudioManager   当设置的播放地址带有 特殊字符的时候 比如%2b 转义字符时 无法播放。

| 信息类别       | 信息内容               |
|----------------|------------------------|
| 产品分类       | uniapp/App             |
| PC开发环境     | Windows                |
| PC开发环境版本 | win10                  |
| 手机系统       | Android                |
| 手机系统版本   | Android 12             |
| 手机厂商       | 小米                   |
| 手机机型       | K40                    |
| 页面类型       | vue                    |
| vue版本        | vue3                   |
| 打包方式       | 云端                   |
| 项目创建方式   | CLI                    |
| CLI版本号      | 3.0.0-3061820230117001 |

更多关于uni-app uni.getBackgroundAudioManager 当设置的播放地址带有特殊字符 比如%2b 转义字符时 无法播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

阿里云OSS地址 防盗链 有签名 签名上有编码后的特殊字符。感觉是播放器设置src时解码了。导致签名失败 无法播放

更多关于uni-app uni.getBackgroundAudioManager 当设置的播放地址带有特殊字符 比如%2b 转义字符时 无法播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在使用 uni.getBackgroundAudioManager 播放音频时,如果音频 URL 中包含特殊字符(如 %2b),可能会导致无法正常播放。这是因为 %2b+ 的 URL 编码形式,而某些情况下,URL 解码可能会导致播放器无法正确解析 URL。

解决方案

  1. 确保 URL 正确编码: 确保音频 URL 已经被正确编码。如果 URL 中包含特殊字符,确保这些字符已经被正确转义。你可以使用 JavaScript 的 encodeURIComponent 函数来对 URL 进行编码。

    let audioUrl = 'https://example.com/audio%2btest.mp3';
    let encodedUrl = encodeURIComponent(audioUrl);
    

    但请注意,encodeURIComponent 会对整个 URL 进行编码,这可能会导致 URL 结构被破坏。因此,你可能只需要对 URL 中的特定部分进行编码。

  2. 手动处理特殊字符: 如果 URL 中的特殊字符是已知的,你可以手动替换这些字符。

    let audioUrl = 'https://example.com/audio%2btest.mp3';
    let decodedUrl = audioUrl.replace(/%2b/g, '+');
    
  3. 使用 decodeURIComponent: 如果 URL 已经被编码,你可以使用 decodeURIComponent 来解码 URL,然后再传递给 uni.getBackgroundAudioManager

    let audioUrl = 'https://example.com/audio%2btest.mp3';
    let decodedUrl = decodeURIComponent(audioUrl);
    
    const backgroundAudioManager = uni.getBackgroundAudioManager();
    backgroundAudioManager.src = decodedUrl;
    backgroundAudioManager.play();
    
  4. 检查网络请求: 确保音频文件能够通过网络正常访问。你可以使用浏览器开发者工具或网络抓包工具来检查音频文件是否能够正常下载。

示例代码

const backgroundAudioManager = uni.getBackgroundAudioManager();

let audioUrl = 'https://example.com/audio%2btest.mp3';
let decodedUrl = decodeURIComponent(audioUrl);

backgroundAudioManager.src = decodedUrl;
backgroundAudioManager.title = 'Audio Title';
backgroundAudioManager.coverImgUrl = 'https://example.com/cover.jpg';

backgroundAudioManager.play();
回到顶部