好多人说以下代码播放不了MP3,我从源代码里复制了一份,代码迭代太多了可能更新不及。
以下是最新的代码,在生产环境中已经应用验证了的

我记得没错的话,使用http请求数据的时候播放不出来,所以用了文件流的形式,具体原因也不记得了,有大佬的解释一下的话可以评论,供大家学习,此处抱拳

onRequestVoice(url) {
				let that = this
					console.log('请求语音==URL='+url)
				uni.downloadFile({
					url: url,
					header: {
						'X-Access-Token': that.token
					},
					success: (res) => {
						/* 此处做拦截 界面已经关闭  但是语音还有可能会触发
						 所以写定isshowView标志位
						 */
						if (!that.isshowView) {
							return
						}
						if (res.statusCode == 200) {
							let mp3url = res.tempFilePath
							let mp3data = mp3url
							that.innerAudioContext.src = mp3data;
							that.innerAudioContext.autoplay = true
						
							that.innerAudioContext.onPlay(() => {
								that.isAudoplaying = true;
								console.log('播放开始')
							});
							that.innerAudioContext.onEnded(() => {
								that.onStopAudio()

							})
							that.innerAudioContext.onError((res) => {
								console.log('播放音频失败' + JSON.stringify(res));
								that.onStopAudio()
							})
							that.innerAudioContext.play()
						}
					},
					fail: (err) => {
						that.$u.toast('播放失败')
						console.log('语音流失败=' + JSON.stringify(err))
					},
					complete: () => {
						that.onStopAudio()
						console.log('语音流结束...')
					}
				})
			}

-----------------------以下弃用代码----------------------------

let innerAudioContext = uni.createInnerAudioContext();
					innerAudioContext.autoplay = true;
					innerAudioContext.src = 'data:audio/mp3;base64,'+base64Mp3.replace(/[\r\n]/g, "");
					innerAudioContext.onPlay(() => {
						console.log('开始播放');
					});

其他地方调用

innerAudioContext .play();

更多功能请查阅【官方文档】

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐