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