import {
|
urlToFile
|
} from 'uni-platform/helpers/file'
|
|
export function getVideoInfo ({
|
src
|
}, callbackId) {
|
const {
|
invokeCallbackHandler: invoke
|
} = UniServiceJSBridge
|
urlToFile(src, true).then(file => {
|
return file
|
}).catch(() => {
|
return {}
|
}).then(file => {
|
const result = file.size ? {
|
size: file.size,
|
errMsg: 'getVideoInfo:ok'
|
} : {
|
errMsg: 'getVideoInfo:fail'
|
}
|
const video = document.createElement('video')
|
if (video.onloadedmetadata !== undefined) {
|
// 部分浏览器(如微信内置浏览器)未播放无法触发loadedmetadata事件
|
const handle = setTimeout(() => {
|
video.onloadedmetadata = null
|
video.onerror = null
|
invoke(callbackId, result)
|
}, src.startsWith('data:') || src.startsWith('blob:') ? 300 : 3000)
|
// 尝试获取视频的宽高信息
|
video.onloadedmetadata = function () {
|
clearTimeout(handle)
|
video.onerror = null
|
invoke(callbackId, Object.assign(result, {
|
size: file.size,
|
duration: video.duration || 0,
|
width: video.videoWidth || 0,
|
height: video.videoHeight || 0,
|
errMsg: 'getVideoInfo:ok'
|
}))
|
}
|
video.onerror = function () {
|
clearTimeout(handle)
|
video.onloadedmetadata = null
|
invoke(callbackId, result)
|
}
|
video.src = src
|
} else {
|
invoke(callbackId, result)
|
}
|
})
|
}
|