zoeDylan
zoeDylan
  • 发布:2020-03-19 18:34
  • 更新:2021-08-24 16:36
  • 阅读:3464

【报Bug】发布到安卓app,无法同时播放多个音频。

分类:uni-app

发布到APP,只有安卓系统出现此问题。

  1. 无法同时播放多个音频
  2. 快速点击播放按钮,音频出现无法播放问题,并且报错。uni.createInnerAudioContext

问题1测试:

  1. uni.createInnerAudioContext单独使用
  2. uni.getBackgroundAudioManager + uni.createInnerAudioContext 混合使用
  3. plus.audio.createPlayer单独使用

问题2测试:

  1. 快速点击音效按钮
  2. 错误信息,见下图

代码:pages/index/index.nvue(nvue/vue都会出现相同问题)

<template>  
    <view>  
        <button @click="bg()" type="default">背景</button>  
        <button @click="eff()" type="default">音效</button>  
        <button @click="effByPlus()" type="default">音效,plus方式</button>  
    </view>  
</template>  

<script>  
    export default {  
        methods: {  
            /** 背景音频 **/  
            bg() {  
                // 播放报错  
                var a = uni.getBackgroundAudioManager();  
                a.onError(res => console.error('背景出错:', res))  
                if(a.src)return a.play();  
                a.src = '/static/bg.mp3';  
            },  
            /** 音效测试 **/  
            eff() {  
                var a = uni.createInnerAudioContext();  
                a.src = '/static/test1.mp3';  
                a.onError(err => console.error('播放出错:', err));  
                a.play();  
            },  
            /** plus **/  
            effByPlus() {  
                var a = plus.audio.createPlayer('/static/test1.mp3');  
                a.addEventListener('error', err => console.error('播放出错[plus]:', err));  
                a.play();  
            }  
        }  
    }  
</script>

IDE运行环境说明

  • IDE:HBuilderX
  • 版本:2.6.5.20200314
  • 系统:mac 10.15.3
  • 编译器版本:2.6.5(v3)
  • 手机端调试基座版本号:2.6.5
  • 测试机信息
    • 小米6X,MIUI 11.0.3 稳定版,安卓版本:9
    • oppo
    • vivo

安卓APK基于以上环境信息进行的云打包。

同类问题:

  1. 【报Bug】createInnerAudioContext不能同时创建播放两个音频
2020-03-19 18:34 负责人:无 分享
已邀请:
DCloud_heavensoft

DCloud_heavensoft

app-vue下可以这样试试,一个用uni的api播放,另一个用renderjs,在渲染层的webview里播放

  • zoeDylan (作者)

    renderjs方式可以实现,不过还是有些小问题,具体在后面回复。

    2020-03-20 10:55

zoeDylan

zoeDylan (作者)

renderjs方式代码

问题:

  1. 不能在nvue里面实现
  2. 只能用 window.Audio 方式实现多个播放
  3. window.Audio 方式播放,如果使用原生播放,也会被暂停。
<template>  
    <view>  
        <button @click="bg()" type="default">背景</button>  
        <button @click="eff()" type="default">音效</button>  
        <button @click="effByPlus()" type="default">音效,plus方式</button>  
        <text>下面是renderJS:</text>  
        <button @click="test.bg" type="default">背景</button>  
        <button @click="test.eff" type="default">音效</button>  
        <button @click="test.effByPlus" type="default">音效,plus方式</button>  
    </view>  
</template>  

<script>  
    export default {  
        methods: {  
            /** 背景音频 **/  
            bg() {  
                // 播放报错    
                var a = uni.getBackgroundAudioManager();  
                a.onError(res => console.error('背景出错:', res))  
                if (a.src) return a.play();  
                a.src = '/static/bg.mp3';  
            },  
            /** 音效测试 **/  
            eff() {  
                var a = uni.createInnerAudioContext();  
                a.src = '/static/test1.mp3';  
                a.onError(err => console.error('播放出错:', err));  
                a.play();  
            },  
            /** plus **/  
            effByPlus() {  
                var a = plus.audio.createPlayer('/static/test1.mp3');  
                a.addEventListener('error', err => console.error('播放出错[plus]:', err));  
                a.play();  
            }  
        }  
    }  
</script>  
<script module="test" lang="renderjs">  
    export default {  
        methods: {  
            /** 背景音频 **/  
            bg() {  
                // 播放报错    
                var a = new window.Audio();  
                a.src = './static/bg.mp3';  
                a.play();  
            },  
            /** 音效测试 **/  
            eff() {  
                var a = new window.Audio();  
                a.src = './static/test1.mp3';  
                a.play();  
            },  
            /** plus **/  
            effByPlus() {  
                var a = plus.audio.createPlayer('/static/test1.mp3');  
                a.addEventListener('error', err => console.error('播放出错[plus]:', err));  
                a.play();  
            }  
        }  
    }  
</script>  

<style>  
</style>  
  • DCloud_heavensoft

    对的。renderjs不支持nvue,如果render里还用原生播放,肯定还是只有一个,所以说要另一个要使用web自带的audio而不是原生的

    2020-03-22 07:38

  • 天空蓝青草绿

    尝试了一下 window.Audio 也只有一个音频播放出来

    2020-05-28 14:44

HelloWord1955

HelloWord1955

这样写没有办法动态替换音频地址,请问作者有解决办法么

美少女

美少女

请问大佬解决了吗 我也遇到同样的问题了 , 安卓没办法同时播放两个音频, 我需要一个背景音乐,一个音效

hnrtwh

hnrtwh

还有一个办法,使用一个video来播放音频,并设置样式把video移出屏幕外,

<video

style="position: fixed;top: -100vh;left: -200vw;"

id="myVideo"

src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-hello-uniapp/2cc220e0-c27a-11ea-9dfb-6da8e309e0d8.mp3"

@error="videoErrorCallback"

enable-danmu

danmu-btn

controls

</video>

这样就能和uni.createInnerAudioContext 一起使用了

  • 7***@qq.com

    如果多个音频是需要对齐的,建议别这样用,虽然可以但是会有很多噩梦一样的问题,by一个受害者。

    2021-08-30 19:59

  • hnrtwh

    回复 7***@qq.com: 我已经更换了方法了,可以用player1=uni.createInnerAudioContext() 创建一个,再用player2=plus.audio.createPlayer()+player2.setSessionCategory('ambient') 创建一个,先放player1,再延时下放player2的就行了,player2放需要先停止下

    2021-08-31 10:19

  • hnrtwh

    回复 7***@qq.com: 这个可以对齐

    2021-08-31 10:20

  • 7***@qq.com

    回复 hnrtwh: 延时多久?网络不好的情况也能对齐吗?

    2021-08-31 11:40

  • hnrtwh

    回复 7***@qq.com: 我试了下好像不延迟也行,先放自带的,再放plus的,网络不好估计不行把

    2021-08-31 14:21

该问题目前已经被锁定, 无法添加新回复