_孙大圣_
_孙大圣_
  • 发布:2022-04-26 12:52
  • 更新:2022-04-28 19:53
  • 阅读:103

IOS下,createInnerAudioContext 播放过程中,切换后台,结束播放后,想播放下一个音乐,在调用下一个音乐的play方法时,会被阻塞,无法播放

分类:uni-app

IOS下,使用createInnerAudioContext创建Audio并播放, 在播放过程中,切换到后台,当audio播放结束后,想播放下一个音乐,在调用下一个音乐的play方法时,会被阻塞,无法播放。

Android无此问题

2022-04-26 12:52 负责人:DCloud_iOS_XHY 分享
已邀请:
_孙大圣_

_孙大圣_ (作者) - 只想用nvue

额额额有人吗

DCloud_iOS_XHY

DCloud_iOS_XHY

反馈问题请使用 报 bug 模版,上传一个可复现问题的完整示例工程

  • _孙大圣_ (作者)

    附件看看

    2022-04-27 11:32

  • _孙大圣_ (作者)

    你是处理IOS的吗,那你可以再看看这个问题,https://ask.dcloud.net.cn/question/143757?notification_id-1067405rf-falseitem_id-196563#!answer_196563 。这个是关于当暂停情况下,切换倍速,音频会自动播放,示例里面也可以测试的

    2022-04-27 11:45

  • _孙大圣_ (作者)

    大佬,看了吗这个问题

    2022-04-28 13:47

_孙大圣_

_孙大圣_ (作者) - 只想用nvue

这个bug比较好重现吧,既然要了就给一个,你可以看看

DCloud_iOS_XHY

DCloud_iOS_XHY

1.第一个问题
使用demo测试了,本帖中描述的问题不是bug

this.audioContext.onCanplay(()=>{  
                    //切换到后台,这里能执行,但是不能播放  
                    console.log("进入can play");  
                    this.audioContext.play();   
                })

iOS平台 onCanplay 事件如果是同一个 src 的话只会触发一次,平台差异问题,所以只播放了一次,在设置完 scr 后调用一下 play 就好了;

2.暂停状态设置倍速 >1 后会自动播放确认为bug,下个版本会修复此问题

  • _孙大圣_ (作者)

    第一个bug:,播放完毕是切换了src的,你可以看代码

    2022-04-28 21:34

  • _孙大圣_ (作者)

    this.playMusic("../../static/start_en.m4a",()=>{  

    //播放结束,播放下一个mp3,网络地址
    this.playMusic("http://downsc.chinaz.net/Files/DownLoad/sound1/201906/11582.mp3");

    });

    2022-04-28 21:36

  • _孙大圣_ (作者)

    你可以看这个,我是先播放上面那个m4a在播放下面那个11582.mp3

    2022-04-28 21:36

  • _孙大圣_ (作者)

    而且,播放第二个音频的时候,是进入了onCanplay方法的,而且也调用了play()方法,但是.play()方法是没执行成功的

    2022-04-28 21:39

  • _孙大圣_ (作者)

    不切换应用的时候,是可以在音频播放结束后切换音频的,但是切换应用后就不能了

    2022-04-28 21:42

  • DCloud_iOS_XHY

    回复 _孙大圣_: 说的是第二个播放完成后,你的逻辑不是再次循环播放第二个吗,此时 src 没变化,所以没有触发 onCanplay

    2022-04-29 12:00

  • DCloud_iOS_XHY

    this.audioContext.src = url;

    src设置完后调用 play 就解决问题了

    this.audioContext.play();

    2022-04-29 12:04

  • _孙大圣_ (作者)

    回复 DCloud_iOS_XHY: 我的逻辑是,播放了第一个音乐,当第一个音乐播放结束的时候,播放第二个音乐

    2022-04-29 20:42

  • DCloud_iOS_XHY

    回复 _孙大圣_: 对呀,目前你给的demo第一个播放结束后播放第二个音频没有问题呀,第二个播放结束后无法再次循环播放的问题

    2022-04-29 20:45

  • _孙大圣_ (作者)

    1、功能:播放第一个音乐,在第一个音乐播放结束的时候(onEnded),播放第二个音乐

    2、Bug:播放完成第一个音乐,执行了onEnded方法,对audioContext进行了src的切换,然后在canPlay方法执行.play()方法,但是当切换到后台或者其它应用的时候,.play()方法并没有播放成功第二个音乐,注意,是切换到后台或者其他应用,Android无此问题。,、

    3、我代码可能写得有点烂,那个demo里面,可能onEded,onTimeUpdate,onCanplay多注册了一次,但是不影响.play()方法触发才对

    2022-04-29 20:56

  • _孙大圣_ (作者)

    回复 DCloud_iOS_XHY: 不是循环问题,我并不需要循环,现在是第一个在播放过程中,切换到后台或者其他应用,第一个播放完成后,第二个并不能播放

    2022-04-29 20:58

  • DCloud_iOS_XHY

    回复 _孙大圣_: 这个问题没有复现,第一个播放完成后第二个可以正常播放

    2022-05-05 20:09

  • _孙大圣_ (作者)

    回复 DCloud_iOS_XHY: 第一个音乐播放的过程中,切换到后台,我找到个可以解决这个问题的方法,先将背景音乐打开,然后bgAudioMannager.src="";,先将背景音乐的链接赋值为空,这样就不会出现这个问题了

    2022-05-05 22:03

要回复问题请先登录注册