微信小程序> 微信小程序音频IOS无法播放问题总结

微信小程序音频IOS无法播放问题总结

浏览量:1401 时间: 来源:weixin_33897722

【问题】

微信小程序,将文字转换为语音后,使用音频进行播放。在安卓手机下可以正常播放,在IOS下不行。

【环境】

微信小程序库版本2.3.0
百度语音合成服务

【解决方法】

正确代码:

//创建一个音频实例const myaudio = wx.createInnerAudioContext();//设置obeyMuteSwitch: false(不遵循系统静音开关,即使用户打开了静音开关,也能继续发出声音)//设置autoplay: true(自动开始播放)if (wx.setInnerAudioOption) {  wx.setInnerAudioOption({    obeyMuteSwitch: false,    autoplay: true  })}else {  myaudio.obeyMuteSwitch = false;  myaudio.autoplay = true;}//监听各个阶段myaudio.onCanplay(() => {  console.log('可以播放');});myaudio.onPlay(() => {  console.log('监听到音频开始播放');});myaudio.onEnded(() => {  console.log('音频自然播放结束事件');});myaudio.onStop(() => {  console.log('音频停止事件');});myaudio.onError((res) => {  console.log(res.errMsg);  console.log(res.errCode);});myaudio.onWaiting((res) => {  console.log('音频加载中事件,当音频因为数据不足,需要停下来加载时会触发')});//设置播放链接myaudio.src = 'https://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=abcdxxx&tok=24.b63*************************************.1543030920.282335-11522973&tex=' + encodeURIComponent(encodeURIComponent('哈哈哈哈哈哈哈哈哈')) + '&vol=5&per=0&spd=5&pit=5&aue=324.b6306a3dff68e153a0d5656b3a78bd5e.2592000.1543030920.282335-11522973';//播放myaudio.play();

这样,在安卓和IOS下都可以正常播放了。

【问题总结】

为什么总是播放不了?注意下面两点:

1、这个播放链接返回的必须是格式正确的音频文件

所以如果换一个链接就能播放了,那可能就说明你原来的链接返回了错误的音频格式。

原本我的播放链接是:

myaudio.src = 'https://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=5&text=' + encodeURIComponent('哈哈哈哈哈哈哈哈哈');

这个tts.baidu.com和tsn.baidu.com长得非常像,为什么一开始用的不是tsn?是因为在网上搜索到的好多案例都是用的tts,而且tsn需要token参数,这个参数要么需要从百度AI开放平台手动获取,要么需要调用获取token的接口,而这个接口又不支持浏览器跨域,因此需要从服务端获取token或者每隔30天手动输入更新,我嫌麻烦,所以一开始先用了tts。

tts在安卓下确实可以正常播放,可以看到Console中依次打印出了:

监听到音频开始播放音频加载中事件,当音频因为数据不足,需要停下来加载时会触发可以播放音频自然播放结束事件

但是在IOS下就无法播放了,Console中依次打印出了:

音频加载中事件,当音频因为数据不足,需要停下来加载时会触发INNERERRCODE:-11850, ERRMSG:操作停止10002

根据官方的说法,应该是因为返回的音频格式IOS不支持。(https://developers.weixin.qq....)如果返回的音频格式正确,是可以正常播放的。

ps:后来查了一下发现tts这个接口应该只是他们内部demo地址,所以还是使用正式的tsn吧。

2、需要对tsn接口的文本字符串参数进行编码
比如: encodeURIComponent(encodeURIComponent('哈哈哈哈哈哈哈哈哈'));

没有做编码,直接上文本的,也会出现安卓行IOS不行的情况。

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎