准备用vue做一个音乐播放器,现在遇到了一点问题,先贴代码:
main.js部分:
const store = new Vuex.Store({
state: {
songList: [{
name: 'For You',
id: '28001046',
duration: '03:18',
arname: 'Madeon'
}]
}
}
player.vue部分
<audio ref="player" @canplay="musicTime" @ended="ended" id="v-player-music">
<source :src="mp3Url">
</audio>
export default {
data () {
return {
mp3Url: ''
}
},
created: function () {
this.axios.get('http://localhost:3000/music/url?id=' + this.$store.state.songList[0].id).then(res => {
this.mp3Url = res.data.data[0].url;
});
}
}
(以上代码只选取了有用的部分)
下面是api返回的数据
现在的问题是,如果mp3正确读取了,播放器应该会显示歌曲的duration,但是现在无法读取到duration,音乐也无法播放
这是说明mp3没有正确读取吗,但是我认为自己的代码应该没有问题,控制台也没有报错。所以问题到底处在哪里,如何才能正确加载mp3文件呢?
遇到bug,有一种分析法,叫去除不相干因素法,留下最小可复现bug的必要条件。
Vue只是一个mvvm框架,和读取mp3无关。
你看看audio内的source是否正确得到的src属性,如果得到了,那就排除掉vuejs的关系。因为即使你不用vue,你用react,你用jQuery,这个问题照样出现。
既然知道和vue不相干,为什么不写个demo,仅仅留下audio标签,来试试这个mp3是否能正确播放呢?
你这样直接使用网易云音乐的mp3资源,是一种“盗链”行为。我没有猜错的话,这就是audio不能正常播放的原因,网易CDN资源服务器上有防盗链措施。