96
本来只是想解析一下上传的视频时长,然后发现这个也可以预览
getVideoDuration (file) {
const binaryData = []
let duration = null
binaryData.push(file.getNative())
this.videoSrc = window.URL.createObjectURL(
new Blob(binaryData, { type: 'video/mp4' })
)
const audio = new Audio(this.videoSrc)
audio.addEventListener('loadedmetadata', () => {
duration = audio.duration
})
setTimeout(() => {
this.$emit('duration', duration)
this.duration = duration
}, 1000)
},
<video v-if="duration" :src="videoSrc" loop autoplay muted style="margin-top:10px" width="300"/>
事件监听会导致duration在外面因为还没有load完而拿不到,所以用异步处理,或者里面写一个别的函数,在函数里面赋值。createURL里面只能是Blob,File或MediaSource对象,然后这个对象还得是原生的文件。