From d16b735d5399bf52b65df6c44a1f01dafbb7ce87 Mon Sep 17 00:00:00 2001 From: harry Date: Thu, 12 Mar 2020 20:44:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../courses/Video/video-play/index.jsx | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/public/react/src/modules/courses/Video/video-play/index.jsx b/public/react/src/modules/courses/Video/video-play/index.jsx index 6cb54fb5b..8972c588d 100644 --- a/public/react/src/modules/courses/Video/video-play/index.jsx +++ b/public/react/src/modules/courses/Video/video-play/index.jsx @@ -20,6 +20,8 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { let initLog = false let timeTick = 20 //记录频率 默认20s let logCount = 1 + let isLoging = false + let isSeeking = false const log = useCallback((callback) => { let params = {} @@ -29,7 +31,8 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { params['total_duration'] = sumTimePlayed //累计观看视频时长,拖放进度条,重复的视频片段观看时,重复观看时长要累积进来 } else { if (courseId) { - params['course_video_id'] = videoId + params['video_id'] = parseInt(videoId, 10) + params['course_id'] = parseInt(courseId, 10) } else { params['video_id'] = videoId } @@ -37,8 +40,10 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { params['device'] = device } async function getLogId() { + isLoging = true let id = await logWatchHistory(params) logId = id + isLoging = false if (callback) { callback() } @@ -91,25 +96,42 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { lastUpdatedTime = 0 sumTimePlayed = 0 initLog = false + isLoging = false lastEffectUpdatedTime = 0 + isSeeking = false }) } function onTimeupdate() { - let newTime = el.current.currentTime - let timeDiff = newTime - lastUpdatedTime - let effectTimeDiff = newTime - lastEffectUpdatedTime - if (effectTimeDiff > 0) { - totalTimePlayed += effectTimeDiff - lastEffectUpdatedTime = newTime + if (!isSeeking) { + let newTime = el.current.currentTime + let timeDiff = newTime - lastUpdatedTime + let effectTimeDiff = newTime - lastEffectUpdatedTime + if (effectTimeDiff > 0) { + 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() { @@ -122,12 +144,16 @@ export default ({ src, videoId, logWatchHistory, courseId = null }) => { el.current.addEventListener('canplay', onCanPlay) el.current.addEventListener('ended', onEnded) + el.current.addEventListener('seeking', onSeeking) + el.current.addEventListener('seeked', onSeeked) el.current.addEventListener('timeupdate', onTimeupdate) return () => { el.current.removeEventListener('canplay', onCanPlay) el.current.removeEventListener('play', onPlay) el.current.removeEventListener('ended', onEnded) + el.current.removeEventListener('seeking', onSeeking) + el.current.removeEventListener('seeked', onSeeked) el.current.removeEventListener('timeupdate', onTimeupdate) } }, [el, src])