播放onPlay函数代码:
// 播放
innerAudioContext.onPlay(() => {
console.log('监听播放onPlay',innerAudioContext.duration)
});
监听音频进入onCanplay函数:
// 监听音频进入可以播放状态的事件。但不保证后面可以流畅播放
innerAudioContext.onCanplay(() => {
innerAudioContext.duration // 必须。可以当做是初始化时长
// 创建定时器
let getAudioTime = setInterval(() => {
console.log('定时器获取duration',innerAudioContext.duration)
if(innerAudioContext.duration!==0){ // 里面有时间了
let audioEndTime = Math.floor(innerAudioContext.duration)
console.log('获取音频总时长为-------》',audioEndTime)
this.setState({
audioEndTime
})
clearInterval(getAudioTime)
}
}, 1000);
const audioTime =Math.floor(innerAudioContext.currentTime )
console.log('监听进入播放状态onCanplay','开始时间:',audioTime)
});
播放监听console结果:(结果为Infinity,也就是无限大,这个音频来源是通过getRecorderManager录取上传的,就6s左右)
不停播放结果:(当语音播放完之后,正确的结果才得到了)
如果没有其他解决办法,给个解决方案:在录音开始时和录音结束时记录当前时间,手动计算时长,传给服务器保存,初始化时接收服务器传来的时长参数,作为音频时长。
你试试手机端,ios上这个获取时间是获取不到的,都是0。