|
|
@ -20,6 +20,8 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => {
|
|
|
|
let initLog = false
|
|
|
|
let initLog = false
|
|
|
|
let timeTick = 20 //记录频率 默认20s
|
|
|
|
let timeTick = 20 //记录频率 默认20s
|
|
|
|
let logCount = 1
|
|
|
|
let logCount = 1
|
|
|
|
|
|
|
|
let isLoging = false
|
|
|
|
|
|
|
|
let isSeeking = false
|
|
|
|
|
|
|
|
|
|
|
|
const log = useCallback((callback) => {
|
|
|
|
const log = useCallback((callback) => {
|
|
|
|
let params = {}
|
|
|
|
let params = {}
|
|
|
@ -29,7 +31,8 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => {
|
|
|
|
params['total_duration'] = sumTimePlayed //累计观看视频时长,拖放进度条,重复的视频片段观看时,重复观看时长要累积进来
|
|
|
|
params['total_duration'] = sumTimePlayed //累计观看视频时长,拖放进度条,重复的视频片段观看时,重复观看时长要累积进来
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
if (courseId) {
|
|
|
|
if (courseId) {
|
|
|
|
params['course_video_id'] = videoId
|
|
|
|
params['video_id'] = parseInt(videoId, 10)
|
|
|
|
|
|
|
|
params['course_id'] = parseInt(courseId, 10)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
params['video_id'] = videoId
|
|
|
|
params['video_id'] = videoId
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -37,8 +40,10 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => {
|
|
|
|
params['device'] = device
|
|
|
|
params['device'] = device
|
|
|
|
}
|
|
|
|
}
|
|
|
|
async function getLogId() {
|
|
|
|
async function getLogId() {
|
|
|
|
|
|
|
|
isLoging = true
|
|
|
|
let id = await logWatchHistory(params)
|
|
|
|
let id = await logWatchHistory(params)
|
|
|
|
logId = id
|
|
|
|
logId = id
|
|
|
|
|
|
|
|
isLoging = false
|
|
|
|
if (callback) {
|
|
|
|
if (callback) {
|
|
|
|
callback()
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -91,25 +96,42 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => {
|
|
|
|
lastUpdatedTime = 0
|
|
|
|
lastUpdatedTime = 0
|
|
|
|
sumTimePlayed = 0
|
|
|
|
sumTimePlayed = 0
|
|
|
|
initLog = false
|
|
|
|
initLog = false
|
|
|
|
|
|
|
|
isLoging = false
|
|
|
|
lastEffectUpdatedTime = 0
|
|
|
|
lastEffectUpdatedTime = 0
|
|
|
|
|
|
|
|
isSeeking = false
|
|
|
|
})
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function onTimeupdate() {
|
|
|
|
function onTimeupdate() {
|
|
|
|
let newTime = el.current.currentTime
|
|
|
|
if (!isSeeking) {
|
|
|
|
let timeDiff = newTime - lastUpdatedTime
|
|
|
|
let newTime = el.current.currentTime
|
|
|
|
let effectTimeDiff = newTime - lastEffectUpdatedTime
|
|
|
|
let timeDiff = newTime - lastUpdatedTime
|
|
|
|
if (effectTimeDiff > 0) {
|
|
|
|
let effectTimeDiff = newTime - lastEffectUpdatedTime
|
|
|
|
totalTimePlayed += effectTimeDiff
|
|
|
|
if (effectTimeDiff > 0) {
|
|
|
|
lastEffectUpdatedTime = newTime
|
|
|
|
totalTimePlayed += effectTimeDiff
|
|
|
|
|
|
|
|
lastEffectUpdatedTime = newTime
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sumTimePlayed += Math.abs(timeDiff)
|
|
|
|
|
|
|
|
lastUpdatedTime = newTime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!isLoging) {
|
|
|
|
|
|
|
|
if (sumTimePlayed - logCount * timeTick >= 0) {
|
|
|
|
|
|
|
|
logCount++
|
|
|
|
|
|
|
|
log()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sumTimePlayed += Math.abs(timeDiff)
|
|
|
|
|
|
|
|
lastUpdatedTime = newTime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (sumTimePlayed - logCount * timeTick >= 0) {
|
|
|
|
}
|
|
|
|
logCount++
|
|
|
|
|
|
|
|
log()
|
|
|
|
function onSeeking() {
|
|
|
|
}
|
|
|
|
isSeeking = true
|
|
|
|
|
|
|
|
lastUpdatedTime = el.current.currentTime
|
|
|
|
|
|
|
|
lastEffectUpdatedTime = el.current.currentTime
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onSeeked() {
|
|
|
|
|
|
|
|
isSeeking = false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function onCanPlay() {
|
|
|
|
function onCanPlay() {
|
|
|
@ -122,12 +144,16 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => {
|
|
|
|
|
|
|
|
|
|
|
|
el.current.addEventListener('canplay', onCanPlay)
|
|
|
|
el.current.addEventListener('canplay', onCanPlay)
|
|
|
|
el.current.addEventListener('ended', onEnded)
|
|
|
|
el.current.addEventListener('ended', onEnded)
|
|
|
|
|
|
|
|
el.current.addEventListener('seeking', onSeeking)
|
|
|
|
|
|
|
|
el.current.addEventListener('seeked', onSeeked)
|
|
|
|
|
|
|
|
|
|
|
|
el.current.addEventListener('timeupdate', onTimeupdate)
|
|
|
|
el.current.addEventListener('timeupdate', onTimeupdate)
|
|
|
|
return () => {
|
|
|
|
return () => {
|
|
|
|
el.current.removeEventListener('canplay', onCanPlay)
|
|
|
|
el.current.removeEventListener('canplay', onCanPlay)
|
|
|
|
el.current.removeEventListener('play', onPlay)
|
|
|
|
el.current.removeEventListener('play', onPlay)
|
|
|
|
el.current.removeEventListener('ended', onEnded)
|
|
|
|
el.current.removeEventListener('ended', onEnded)
|
|
|
|
|
|
|
|
el.current.removeEventListener('seeking', onSeeking)
|
|
|
|
|
|
|
|
el.current.removeEventListener('seeked', onSeeked)
|
|
|
|
el.current.removeEventListener('timeupdate', onTimeupdate)
|
|
|
|
el.current.removeEventListener('timeupdate', onTimeupdate)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, [el, src])
|
|
|
|
}, [el, src])
|
|
|
|