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

标签 javascript ios safari http-live-streaming

我想获取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 上进行 native HLS 播放时,您可以使用此方法: https://developer.apple.com/documentation/webkitjs/htmlmediaelement/1634352-getstartdate

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

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

关于javascript - 如何在ios safari上的hls中获取programDateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57302098/

相关文章:

iphone - Trigger.io 无法指向证书。/usr/bin/codesign : iPhone Developer: no identity found

javascript - Safari 动画兼容性问题

javascript - 根据一个表中的列从两个解析类中获取数据

javascript - 在获取结构以获得结果期间出现问题 [VueJs]

objective-c - 方法 "shouldChangeTextInRange"和 "stringByReplacingCharactersInRange"是如何工作的?

ios - 在 Alamofire 的请求适配器中添加 GET 参数

ios - PWA 重定向到登录页面并陷入 2FA 循环

ios - Angular 2,iOS Safari 错误 : eval@[native code]

javascript - react 路由器 : render is not a function

javascript - JavaScript test() 是否在正则表达式中保存状态?