Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同html5视频之间的平滑过渡_Javascript_Html_Video - Fatal编程技术网

Javascript 不同html5视频之间的平滑过渡

Javascript 不同html5视频之间的平滑过渡,javascript,html,video,Javascript,Html,Video,我有一个视频标签列表,我需要用预设的currentTime逐个播放。当我加载页面时,视频的readyState会停留在1,视频会出现一个启动故障。我使用了预加载属性,但视频在每个开关上开始播放仍需要时间。即使某些视频设置了currentTime且readyState=4,播放视频也需要时间。我研究了xhr createObjectURL blob方法,但下载所有视频需要的时间太长。出于同样的原因,我没有尝试MediaSourceAPI 媒体源扩展(MSE)不要求您在播放视频之前下载整个视频 它允

我有一个视频标签列表,我需要用预设的currentTime逐个播放。当我加载页面时,视频的readyState会停留在1,视频会出现一个启动故障。我使用了预加载属性,但视频在每个开关上开始播放仍需要时间。即使某些视频设置了currentTime且readyState=4,播放视频也需要时间。我研究了xhr createObjectURL blob方法,但下载所有视频需要的时间太长。出于同样的原因,我没有尝试MediaSourceAPI

媒体源扩展(MSE)不要求您在播放视频之前下载整个视频

它允许您逐段请求视频片段,并在将这些片段设置为视频播放器的源之前以任何方式操纵这些片段

这里有一个很好的概述以及一些示例javascript,我认为它们有助于理解这里的方法:

您可以在这里看到一个简单的工作示例:

一般做法是:

  • 创建一个MediaSource对象
  • 将HTML页面中视频元素的源设置为MediaSource对象
  • 为正在打开的媒体源添加侦听器(播放视频时)
  • 获取第一段并添加一个侦听器以请求下一段
  • 当接收到段时,将其附加到MediaSource缓冲区
  • 当没有更多要请求的段时,停止
在您的情况下,您可以在第一个视频结束时立即开始请求下一个视频


另一件事是twitch for-mp4视频的结尾通常有元数据,这意味着您需要下载整个视频才能开始。您可以使用特殊工具将元数据移动到起始位置,或者如果您自己进行代码转换,则只需确保首先将元数据放在那里。例如,ffmpeg支持使用命令行选项“-movflags faststart”移动数据。

媒体源扩展(MSE)不要求您在播放整个视频之前下载它

它允许您逐段请求视频片段,并在将这些片段设置为视频播放器的源之前以任何方式操纵这些片段

这里有一个很好的概述以及一些示例javascript,我认为它们有助于理解这里的方法:

您可以在这里看到一个简单的工作示例:

一般做法是:

  • 创建一个MediaSource对象
  • 将HTML页面中视频元素的源设置为MediaSource对象
  • 为正在打开的媒体源添加侦听器(播放视频时)
  • 获取第一段并添加一个侦听器以请求下一段
  • 当接收到段时,将其附加到MediaSource缓冲区
  • 当没有更多要请求的段时,停止
在您的情况下,您可以在第一个视频结束时立即开始请求下一个视频

另一件事是twitch for-mp4视频的结尾通常有元数据,这意味着您需要下载整个视频才能开始。您可以使用特殊工具将元数据移动到起始位置,或者如果您自己进行代码转换,则只需确保首先将元数据放在那里。例如,ffmpeg支持使用命令行选项“-movflags faststart”移动数据