uni-app createInnerAudioContext 创建两个实例一个背景音乐一个插播 播放时会把背景音乐关闭 有大佬知道为什么吗?

uni-app createInnerAudioContext 创建两个实例一个背景音乐一个插播 播放时会把背景音乐关闭 有大佬知道为什么吗?

测试过的手机

苹果,三星

操作步骤

  • 一直播放背景,插播播报,背景音乐被暂停了

预期结果

  • 背景音乐长时间播放,插播播报,背景音乐不会被关闭

实际结果

  • 传播播报,背景音乐自动关闭播报了

bug描述

createInnerAudioContext 创建两个一个背景音乐一个插播 播放会把背景音乐给关闭了,有大佬知道为什么吗?

  • 刚开始都可以正常播放,过了一会播放另外一个插播音频就把背景音乐给暂停了
  • 使用了:sessionCategory = ‘ambient’ 无效

| 信息类别       | 内容                               |
|----------------|------------------------------------|
| 产品分类       | uniapp/App                         |
| PC开发环境     | Windows                            |
| PC开发环境版本 | [@10](/user/10).0.19044                        |
| HBuilderX类型  | 正式                               |
| HBuilderX版本  | 4.15                               |
| 手机系统       | 全部                               |
| 手机厂商       | 苹果                               |
| 页面类型       | nvue                               |
| vue版本        | vue2                               |
| 打包方式       | 离线                               |
| 项目创建方式   | HBuilderX                          |

更多关于uni-app createInnerAudioContext 创建两个实例一个背景音乐一个插播 播放时会把背景音乐关闭 有大佬知道为什么吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

sessionCategory字段设置不起

更多关于uni-app createInnerAudioContext 创建两个实例一个背景音乐一个插播 播放时会把背景音乐关闭 有大佬知道为什么吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中,使用 createInnerAudioContext 创建多个音频实例时,默认情况下,这些音频实例是相互独立的,它们不会直接相互影响。然而,如果你在播放一个音频时,另一个音频停止了,可能是因为以下几种原因:

  1. 系统资源限制

    • 在某些设备或浏览器中,系统可能会限制同时播放的音频资源。如果设备或浏览器不支持同时播放多个音频流,系统可能会自动停止其他音频的播放。
  2. 音频实例的交互

    • 虽然 createInnerAudioContext 创建的音频实例是独立的,但在某些情况下,音频实例可能会相互影响。例如,如果你在播放一个音频时,另一个音频的播放事件(如 onPlay)触发了某些逻辑,导致背景音乐被停止。
  3. 代码逻辑问题

    • 检查你的代码,确保没有在播放插播音频时手动停止背景音乐。例如,可能在插播音频的 onPlay 事件中调用了背景音乐的 stop 方法。
  4. 浏览器或平台的限制

    • 不同的浏览器或平台可能有不同的音频处理策略。某些平台可能不允许同时播放多个音频,或者在某些情况下会自动暂停其他音频。

解决方案

  1. 检查代码逻辑

    • 确保在播放插播音频时,没有手动停止背景音乐。
  2. 使用 autoplayloop

    • 如果背景音乐是循环播放的,可以设置 autoplayloop 属性,确保背景音乐在插播音频结束后自动恢复播放。
    const bgMusic = uni.createInnerAudioContext();
    bgMusic.src = 'background_music.mp3';
    bgMusic.autoplay = true;
    bgMusic.loop = true;
    
    const interruption = uni.createInnerAudioContext();
    interruption.src = 'interruption.mp3';
    interruption.autoplay = false;
    
    // 播放插播音频
    interruption.play();
    
    // 监听插播音频的结束事件,恢复背景音乐
    interruption.onEnded(() => {
        bgMusic.play();
    });
    
  3. 使用 onPauseonPlay 事件

    • 监听插播音频的 onPlayonPause 事件,确保背景音乐在适当的时候暂停和恢复。
    const bgMusic = uni.createInnerAudioContext();
    bgMusic.src = 'background_music.mp3';
    bgMusic.autoplay = true;
    bgMusic.loop = true;
    
    const interruption = uni.createInnerAudioContext();
    interruption.src = 'interruption.mp3';
    interruption.autoplay = false;
    
    interruption.onPlay(() => {
        bgMusic.pause();
    });
    
    interruption.onPause(() => {
        bgMusic.play();
    });
    
    interruption.onEnded(() => {
        bgMusic.play();
    });
    
    // 播放插播音频
    interruption.play();
回到顶部