【问题标题】:How to get current segment .ts information of m3u8 standard playlist?如何获取 m3u8 标准播放列表的当前段 .ts 信息?
【发布时间】:2017-11-02 07:05:05
【问题描述】:

我们正在使用 videojs.fairplay.js 在 MAC Safari 浏览器中播放 DRM 内容。首先,在播放 DRM 视频时,我们会得到一个标准播放列表 (.m3u8),其中定义了片段堆栈 (.ts)。我们需要知道每个段信息和完整的元信息,如(长度、类型、url 等)。

【问题讨论】:

    标签: javascript video.js http-live-streaming m3u8 fairplay


    【解决方案1】:
    var video = videojs("my-video");
    
    video.on('playing', function () {
        console.log("The video has been playing");
    
        var segment = get_current_segment_info(this);
        console.log(segment.uri);
    });
    
    function get_current_segment_info(obj, old_segment = null) {
        var target_media = obj.tech().hls.playlists.media();
        var snapshot_time = obj.currentTime();
    
    var segment;
    var segment_time;
    
    // Itinerate trough available segments and get first within which snapshot_time is
    for (var i = 0, l = target_media.segments.length; i < l; i++) {
        // Note: segment.end may be undefined or is not properly set
        if (snapshot_time < target_media.segments[i].end) {
            segment = target_media.segments[i];
            break;
        }
    }
    
    // Null segment_time in case it's lower then 0.
    if (segment) {
        segment_time = Math.max(0, snapshot_time - (segment.end - segment.duration));
        // Because early segments don't have end property
    } else {
        segment = target_media.segments[0];
        segment_time = 0;
    }
    console.log(snapshot_time);
    console.log(segment.uri);
    console.log(segment.resolvedUri);
    console.log(segment);
    return segment;
    
    }
    

    【讨论】:

    • 欢迎来到SO,请为您的回答提供一些解释,仅发布代码不会被视为有效答案。
    • 仅代码的答案被认为是低质量的:请务必说明您的代码的作用以及它如何解决问题。如果您可以在帖子中添加更多信息,它将帮助提问者和未来的读者。另请参阅解释完全基于代码的答案:meta.stackexchange.com/questions/114762/…
    猜你喜欢
    • 2013-11-09
    • 2016-05-01
    • 2014-04-20
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多