【问题标题】:Get User watched total time of a video in jwplayer获取用户在 jwplayer 中观看视频的总时间
【发布时间】:2020-05-28 18:02:47
【问题描述】:

我想从 jwplayer 捕获视频的总播放/观看时间。使用下面的示例代码。

jwplayer("player").setup({
    "playlist": [
        {
            "sources": [
                {
                    "default": false,
                    "file": 'https://content.jwplatform.com/manifests/yp34SRmf.m3u8',
                    "label": "0",
                    "type": "hls",
                    "preload": "meta"
                }
            ]
        }
    ],
    "height": "240",
    "width": "100%",
    "aspectratio": "16:9",
    "stretching": "uniform",
    "controls": true,
    "autostart": true
});

jwplayer("player").on('time', function (e) {
    var count = this.getPosition();        
});

你能帮我做这件事吗?

【问题讨论】:

  • 如何计算playpause 事件之间的时间? (您可能必须删除缓冲时间)
  • 谢谢 Cerlin,我想计算用户在播放视频时的观看时间(准时、前向搜索、后向搜索)。请告诉我如何计算。

标签: javascript jquery jwplayer jwplayer6 jwplayer7


【解决方案1】:

最好的方法是为此依赖 JW Player 事件,特别是 on('time') 事件。

let totalTimeWatched = 0;
let previousPosition = 0;
jwplayer().on('time', (e) => {
    const { position } = e;
    totalTimeWatched += (position - previousPosition);
    previousPosition = position;
});

如果您还想计算广告时间,您可以使用adTime 事件,该事件也有一个position 属性。

编辑

要考虑搜索行为,您可以使用额外的侦听器on('seek') 来重置previousPosition。见下文:

let totalTimeWatched = 0;
let previousPosition = 0;
jwplayer().on('time', (e) => {
    const { position } = e;
    totalTimeWatched += (position - previousPosition);
    previousPosition = position;
});

jwplayer().on('seek', (e) => {
    previousPosition = e.offset;
});

【讨论】:

  • 据我测试,这是行不通的。问题 1:如果您搜索视频,则将其计为已观看。问题2:如果您已经观看了20分钟并且搜索到第2分钟,它将显示总观看时间为2分钟。
  • @Cerlin 很抱歉造成混淆,我已经更新了示例以说明寻求。
【解决方案2】:

你可以通过这个简单的逻辑得到视频播放的总毫秒数

// In ms
var totalPlayBackTime = 0

setInterval(
    function() {
        if(player.getState() == "playing") {
            totalPlayBackTime = totalPlayBackTime + 500
        }
    },
    500
);

这里的代码将每 500 毫秒执行一次,以检查播放器是否正在播放。如果是,则在总播放时间上增加 500 毫秒。读取totalPlayBackTime 变量以获取播放时间。

这样你就不必依赖 jwplayer 事件了

注意:我没有用广告测试过这个。

【讨论】:

    【解决方案3】:

    为什么不使用 e.currentTime?

    【讨论】:

    • 我建议不要在答案中使用修辞问题。他们冒着被误解为根本不是答案的风险。您正在尝试回答此页面顶部的问题,不是吗?否则请删除此帖。
    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多