Получить общее время просмотра пользователем видео в jwplayer

Я хочу зафиксировать общее время воспроизведения/просмотра видео с 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();        
});

Не могли бы вы помочь мне сделать это.


person aniljayanti    schedule 13.02.2020    source источник
comment
Как насчет расчета времени между play и pause событиями? (Возможно, вам придется удалить время буферизации)   -  person Cerlin    schedule 13.02.2020
comment
Спасибо, Cerlin, я хочу рассчитать время просмотра пользователем во время воспроизведения видео (время, поиск вперед, поиск назад). подскажите как рассчитать.   -  person aniljayanti    schedule 13.02.2020


Ответы (2)


Лучшим способом было бы полагаться на события 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;
});
person boyntoni    schedule 13.02.2020
comment
Насколько я проверял, это не работает. Проблема 1: Если вы ищете видео, оно считается просмотренным. Проблема 2: Если вы просмотрели 20 минут и перешли ко 2-й минуте, общее время просмотра будет равно 2 минутам. - person Cerlin; 18.02.2020
comment
@Cerlin Извините за путаницу, я обновил пример, чтобы учесть поиск. - person boyntoni; 19.02.2020

Вы можете получить общее количество миллисекунд, в течение которых воспроизводится видео, с помощью этой простой логики.

// In ms
var totalPlayBackTime = 0

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

Здесь код будет выполняться каждые 500 мс, чтобы проверить, играет ли игрок. Если это так, добавьте 500 мс к общему времени воспроизведения. Прочитайте переменную totalPlayBackTime, чтобы получить время воспроизведения.

Таким образом, вам не нужно полагаться на события jwplayer.

ПРИМЕЧАНИЕ. Я не тестировал это с рекламой.

person Cerlin    schedule 13.02.2020