如何在 ios safari 上的 hls 中获取 programDateTime?

how to get programDateTime in hls on ios safari?

我想获取programDateTime,它是浏览器中的时间戳,用于测量HLS的延迟时间。我知道如何在桌面版 Chrome 和 Safari 上获取它。但是,无法通过 iOS Safari 获取它。你知道什么好方法吗?

下面是如何使用hls.js获取programDateTime。但是,这个方法不能用,因为iOS原生播放hls。

hls.on(Hls.Events.FRAG_CHANGED, function(id, data){
    if (data.frag._url) {
        console.log('data',data)
        if (data.frag.programDateTime){
            var progaramDateTime = data.frag.programDateTime;
        } else {
            // for macOS Safari
            var rawProgaramDateTime = data.frag.tagList[2][1];
            rawProgaramDateTime = rawProgaramDateTime.slice(0, -2) + ":" + rawProgaramDateTime.slice(-2);
            var progaramDateTime = Date.parse(rawProgaramDateTime);
        }
        programDateTimeArray.push(progaramDateTime);

        console.log('programDateTimeArray',programDateTimeArray)
        if (programDateTimeArray.length == 5){
            programDateTimeArray.shift();
            chunkTime = programDateTimeArray[3] - programDateTimeArray[0];
        }
        var programDateTime = progaramDateTime - chunkTime - 2000;
        mcDelayTime = getCurrentTime() - programDateTime;
        console.log(data.frag._url, mcDelayTime+"ミリ秒遅延しています");
    }
});

在 Safari 上进行原生 HLS 播放可以使用此方法: https://developer.apple.com/documentation/webkitjs/htmlmediaelement/1634352-getstartdate

如果HLS流中有节目日期时间,第一个将被存储为该方法返回的日期。

从那里,您应该能够将它与视频元素的 currentTime 属性结合起来,以获取当前节目的日期时间。使用这两个值,您应该能够以类似的方式测量延迟时间。