समस्या यह है कि वीडियो चलाए जाने का कुल समय प्राप्त करना है। मैं एक जावास्क्रिप्ट पुस्तकालय के रूप में videojs का उपयोग कर रहा हूँ। सावधानी के तौर पर, वर्तमान समय () विधि वह नहीं है जो हम कुल प्लेबैक समय के रूप में चाहते हैं, हम यह भी मानते हैं कि दर्शक फिल्म को एक मनमानी प्लेबैक स्थिति की तलाश करता है, और वास्तव में खेले जाने वाले समय को प्राप्त करना चाहता है। उदाहरण) ६० सेकंड का वीडियो दर्शक पहले ५ सेकंड देखता है और फिर १० सेकंड के बिंदु पर कूद जाता है और अगले ५ सेकंड देखता है। वर्तमान समय 15 सेकंड है, लेकिन मुझे आशा है कि कुल देखे जाने का समय 10 सेकंड है।

वास्तव में, हर बार दर्शक 10% खेलते हैं, API को कॉल करें। मैं जावास्क्रिप्ट को कैसे कार्यान्वित कर सकता हूं?

संपादित करें) वीडियो पढ़ने में समय लग सकता है, इसलिए new Date() का उपयोग करना मुश्किल है। उदाहरण के लिए, 5 सेकंड के वीडियो में नए काम की गति की समस्या के कारण 10 सेकंड का समय लग सकता है। मैं निम्नलिखित कोड पर विचार कर रहा हूं। जब तक आप कंसोल देखते हैं, यह ज्यादातर मामलों में अच्छा काम करता है, लेकिन जब आप प्लेबैक स्थिति को छोड़ देते हैं, तो दुर्लभ मामलों में प्लेबैक दर के मापन में त्रुटि होती है।

<link href="https://vjs.zencdn.net/7.4.1/video-js.css" rel="stylesheet">
<video id="myPlayer" class="video-js"
    controls preload="auto" width="440" height="264"
    poster="http://vjs.zencdn.net/v/oceans.png">
  <source src="http://vjs.zencdn.net/v/oceans.mp4" type="video/mp4">
</video>
<script src='https://vjs.zencdn.net/7.4.1/video.js'></script>
const player = videojs('myPlayer');
const trackingPoint = 10;
let totalTime = 0;
let tempTotalTime = 0;
let startTime = 0;

player.on('pause', function () {
  totalTime += tempTotalTime;
});

player.on('play', function () {
  startTime = player.currentTime();
});

player.on('timeupdate', function () {
  if (player.paused()) {
    return;
  }
  let currentTime = player.currentTime();
  tempTotalTime = currentTime - startTime;
  let tmptotalTime = totalTime + tempTotalTime;
  let playbackRate = tmptotalTime / player.duration() * 100;
  console.log(Math.floor(playbackRate) + ' %');
});
0
user10035093 26 फरवरी 2019, 06:34

1 उत्तर

यह कोड ठीक है, लेकिन आपको दिनांक की आवश्यकता नहीं है, अंतराल टाइमर की तरह ही कार्य करेगा।

let timer = null,
totalTime = 0;

player.on("play", startPlaying);
player.on("pause", pausePlaying);

function startPlaying() {
    console.log('played');
  timer = window.setInterval(function() {
    totalTime += 1;
  }, 1000);
}

function pausePlaying() {
    console.log('stopped');
  if (timer) clearInterval(timer);
}

वापस आ जाएगा समय वीडियो सेकंड में देखा गया है, और यदि आपको मिलीसेकंड में अधिक सटीक परिणाम की आवश्यकता है तो आप छोटे अंतराल सेट कर सकते हैं (1000 से 1 बदलें ताकि फ़ंक्शन को हर मिलीसेकंड कहा जाएगा) लेकिन मैं ऐसा मत सोचो कि यह विधि ऐसे उपयोग के मामलों के लिए अच्छी है जब आपको इसे इतना सटीक होने की आवश्यकता होती है क्योंकि यह लोडिंग समय को ध्यान में नहीं रखेगा जो लगभग एक सेकंड से अधिक होने की गारंटी है।

0
Pourya Kordi 20 जिंदा 2021, 08:53