uni-app uni.createInnerAudioContext()打包到ios无法正常播放声音
uni-app uni.createInnerAudioContext()打包到ios无法正常播放声音
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | win11 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:4.08
手机系统:iOS
手机系统版本号:iOS 16
手机厂商:苹果
手机机型:iPhone 13
页面类型:vue
vue版本:vue2
打包方式:云端
示例代码:
//输入框密码长度变化
ischange(e) {
this.initialisePassword()
this.passwordContexts['ber'].play()
this.passwordContexts['ber'].onPlay(() => {
console.log('开始播放')
})
this.passwordContexts['ber'].onEnded(() => {
this.passwordContexts['ber'].destroy()
})
this.passwordContexts['ber'].onError((res) => {
console.log(res, 'yinpin')
})
},
//输入密码的音频
initialisePassword() {
if (this.passwordContexts['ber']) {
this.passwordContexts['ber'].destroy();
}
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = false; // 禁自动播放
innerAudioContext.src = '/static/sounds/ber.mp3';
innerAudioContext.sessionCategory = 'ambient';
this.passwordContexts['ber'] = innerAudioContext
},
操作步骤:
methods: {
//失去焦点之后把自动聚焦变为false
isblur(e) {
if (e == 'ok') {
this.showKeyboard = false
}
},
//输入框长度变化了
ischange(e) {
this.initialisePassword()
this.passwordContexts['ber'].play()
this.passwordContexts['ber'].onPlay(() => {
console.log('开始播放')
})
this.passwordContexts['ber'].onEnded(() => {
this.passwordContexts['ber'].destroy()
})
this.passwordContexts['ber'].onError((res) => {
console.log(res, 'yinpin')
})
},
//输入密码的音频
initialisePassword() {
if (this.passwordContexts['ber']) {
this.passwordContexts['ber'].destroy();
}
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = false; // 禁自动播放
innerAudioContext.src = '/static/sounds/ber.mp3';
innerAudioContext.sessionCategory = 'ambient';
this.passwordContexts['ber'] = innerAudioContext
},
//点击房间的音频
initialiseClick() {
if (this.qiaContexts['qia']) {
this.qiaContexts['qia'].destroy();
}
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = false; // 禁自动播放
innerAudioContext.src = '/static/sounds/qia.mp3';
innerAudioContext.sessionCategory = 'ambient';
this.qiaContexts['qia'] = innerAudioContext
},
预期结果:
音频能够正常播放,并且不会中止其他声音播放
实际结果:
ischange(e) {
this.initialisePassword()
this.passwordContexts['ber'].play()
this.passwordContexts['ber'].onPlay(() => {
console.log('开始播放')
})
this.passwordContexts['ber'].onEnded(() => {
this.passwordContexts['ber'].destroy()
})
this.passwordContexts['ber'].onError((res) => {
console.log(res, 'yinpin')
})
},
{"errMsg":"MediaError","errCode":-5} , yinpin
经过我今天的调试,最终发现在每次音频播放的时候,同一时间onPlay()里的回调会打印两次,我估计这可能是音频没办法正常播放的原因,然后我把innerAudioContext.sessionCategory = ‘ambient’;改为了’playback’,声音能正常出来了,但是并不能完全满足需求,因为项目中部分地方的音频可能会根据后端的数据变化同时出现。
bug描述:
项目打包到安卓和h5播放所有的音频都没有问题,但是打包到ios进行真机调试的时候音频无法播放,偶尔会出现一下声音但是马上又消失,
更多关于uni-app uni.createInnerAudioContext()打包到ios无法正常播放声音的实战教程也可以访问 https://www.itying.com/category-93-b0.html
解决了么 我也遇到了
更多关于uni-app uni.createInnerAudioContext()打包到ios无法正常播放声音的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni.createInnerAudioContext() 开发 uni-app 应用时,如果在 iOS 上打包后无法正常播放声音,可能是由于以下几个原因导致的。以下是一些常见的问题及解决方案:
1. 音频文件路径问题
- 问题描述:iOS 对音频文件路径的要求较为严格,如果路径不正确,音频无法加载。
- 解决方案:
- 确保音频文件路径是 相对路径 或 网络路径。
- 如果是本地文件,建议将音频文件放在
static目录下,并使用相对路径引用:const audio = uni.createInnerAudioContext(); audio.src = '/static/audio.mp3'; // 确保路径正确 - 如果是网络路径,确保 URL 是有效的,并且支持 HTTPS。
2. 音频文件格式问题
- 问题描述:iOS 对音频格式的支持有限,某些格式可能无法播放。
- 解决方案:
- 确保音频文件是 iOS 支持的格式,如
.mp3、.m4a、.wav等。 - 如果格式不支持,可以使用工具将音频文件转换为 iOS 支持的格式。
- 确保音频文件是 iOS 支持的格式,如
3. iOS 自动播放限制
- 问题描述:iOS 对音频的自动播放有严格的限制,用户必须主动触发播放(如点击事件)。
- 解决方案:
- 在用户交互事件(如按钮点击)中触发播放:
const audio = uni.createInnerAudioContext(); audio.src = '/static/audio.mp3'; document.getElementById('playButton').addEventListener('click', () => { audio.play(); }); - 避免在页面加载时自动播放。
- 在用户交互事件(如按钮点击)中触发播放:
4. iOS 静音模式
- 问题描述:如果 iOS 设备处于静音模式,音频可能无法播放。
- 解决方案:
- 提示用户关闭静音模式。
- 在代码中检测并处理静音模式(但 iOS 对静音模式的控制较为严格,开发者无法直接绕过)。
5. 权限问题
- 问题描述:iOS 可能需要特定权限才能播放音频。
- 解决方案:
- 确保在
manifest.json中配置了必要的权限:{ "app-plus": { "ios": { "permissions": { "audio": true } } } }
- 确保在
6. uni-app 打包配置问题
- 问题描述:iOS 打包时,某些配置可能导致音频无法正常播放。
- 解决方案:
- 确保打包配置正确,尤其是
manifest.json中的app-plus和ios配置。 - 如果使用了自定义基座,尝试重新打包或使用官方基座测试。
- 确保打包配置正确,尤其是
7. 调试与日志
- 问题描述:无法确定具体问题所在。
- 解决方案:
- 使用
console.log打印音频加载和播放的状态:audio.onPlay(() => { console.log('音频开始播放'); }); audio.onError((err) => { console.error('音频播放失败', err); });
- 使用

