Javascript 有没有一种方法可以随机播放碎片化的mp4?

Javascript 有没有一种方法可以随机播放碎片化的mp4?,javascript,ffmpeg,html5-video,mp4,media-source,Javascript,Ffmpeg,Html5 Video,Mp4,Media Source,假设有一段视频被渲染成由许多块/片段组成的片段mp4。问题是:在init加载到MediaSource缓冲区后,有没有办法播放随机片段 对事物的规格进行了一次小规模的研究,对这个问题几乎没有什么了解。片段似乎有一种顺序ID硬编码在其中。在流式传输内容时,如果连接不可靠和异步抓取,将其包含在文件中是一个相当合理的想法,但是有没有一种方法可以解析块并使用JavaScript更改其ID 下面的代码只是播放2分钟的视频,根据用户的时间分为12段,应该能够从任何一块开始(不仅仅是第一块),然后重复 let

假设有一段视频被渲染成由许多块/片段组成的片段mp4。问题是:在init加载到MediaSource缓冲区后,有没有办法播放随机片段

对事物的规格进行了一次小规模的研究,对这个问题几乎没有什么了解。片段似乎有一种顺序ID硬编码在其中。在流式传输内容时,如果连接不可靠和异步抓取,将其包含在文件中是一个相当合理的想法,但是有没有一种方法可以解析块并使用JavaScript更改其ID

下面的代码只是播放2分钟的视频,根据用户的时间分为12段,应该能够从任何一块开始(不仅仅是第一块),然后重复

let mediaSource = new MediaSource
document.getElementById('video').src = URL.createObjectURL(mediaSource)

mediaSource.addEventListener('sourceopen', () => {
    let buffer = mediaSource.addSourceBuffer('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')
    let loadToBuffer = url => {
        let xhr = new XMLHttpRequest
        xhr.responseType = 'arraybuffer'
        xhr.open('GET', url, true)
        xhr.addEventListener('loadend', () => buffer.appendBuffer(new Uint8Array(xhr.response)))
        xhr.send()
    }
    loadToBuffer('video/init.mp4')
    setInterval(() => loadToBuffer('video/video' + (Math.floor(new Date().getTime() / 1000 / 10) % 12) + '.m4s'), 10 * 1000)
})

sourceBuffer
中加载片段时,这些片段包括演示时间戳(
PTS
),这将使它们在缓冲区中按正确的播放顺序播放

您可以修改片段本身,为此您必须解析原子并更改
PTS
(以及可能的其他)值,或者更改视频元素
currentTime
属性,以便在正确缓冲的位置播放视频

您可以检查视频元素对象上的
buffered
属性,以检查已加载的时间范围