收藏
回答

小程序对某些mp3格式不兼容,播放不了

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.createInnerAudioContext() 客户端 7.0.0 2.5.1

- 当前 Bug 的表现(可附上截图)

    推测:小程序对某些mp3格式不兼容,这些语音都是通过tts工具自动生成的

- 预期表现

    电脑或手机浏览器能播放的mp3,在小程序上也应该可以播放

- 复现路径

    1:新建一个小程序工程,选择建立普通快速启动模板。

    2:按照下面的修改index.js代码。 在电脑上可以听到声音。

    3:将程序传到网上,在手机上听不到声音。

         在手机上,打开这个链接:http://hz.runzhichina.com/audio/word/10025.mp3,可以听到声音。

    4:将index: 修改成 10026,再执行step1-step3,在手机上可以听到声音。

    推测:小程序对某些mp3格式不兼容


- 提供一个最简复现 Demo



//获取应用实例

const app = getApp()

const innerAudioContext = wx.createInnerAudioContext();

Page({

data: {

motto: 'Hello World',

userInfo: {},

hasUserInfo: false,

index: 10025,

canIUse: wx.canIUse('button.open-type.getUserInfo')

},

//事件处理函数

bindViewTap: function() {

wx.navigateTo({

url: '../logs/logs'

})

},

onLoad: function () {


var path = "http://hz.runzhichina.com/audio/word/" + this.data.index + ".mp3"

innerAudioContext.src = path;

innerAudioContext.play(); //这个必须要加上,不然会出现错误


if (app.globalData.userInfo) {

this.setData({

userInfo: app.globalData.userInfo,

hasUserInfo: true

})

} else if (this.data.canIUse){

// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

// 所以此处加入 callback 以防止这种情况

app.userInfoReadyCallback = res => {

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

} else {

// 在没有 open-type=getUserInfo 版本的兼容处理

wx.getUserInfo({

success: res => {

app.globalData.userInfo = res.userInfo

this.setData({

userInfo: res.userInfo,

hasUserInfo: true

})

}

})

}

},


/**

  * 生命周期函数--监听页面隐藏

  */

onHide: function () {

innerAudioContext.stop();

console.log("onHide=============")

},


/**

  * 生命周期函数--监听页面卸载

  */

onUnload: function () {

innerAudioContext.stop();

console.log("onUnload=============")

},


go(res) {

var newIndex = this.data.index + 1;


var path = "http://hz.runzhichina.com/audio/word/" + newIndex + ".mp3"

innerAudioContext.src = path;

innerAudioContext.play(); //这个必须要加上,不然会出现错误


this.setData({

index: newIndex

})

},



getUserInfo: function(e) {

console.log(e)

app.globalData.userInfo = e.detail.userInfo

this.setData({

userInfo: e.detail.userInfo,

hasUserInfo: true

})

}

})


回答关注问题邀请回答
收藏
登录 后发表内容