html - 按顺序在线播放视频文件,视频之间没有延迟/缓冲

标签 html flash video actionscript ffmpeg

是否可以在线播放由两个或多个视频文件组成的视频?

由于我原来的帖子不够清楚,这里有扩展的解释和问题。

我的站点托管在 Linux/Apache/PHP 服务器上。我有 FLV/F4V 格式的视频文件。如有必要,我还可以将它们转换为其他可用格式。所有视频都具有相同的纵横比和其他参数。

我想要的是构建(或使用如果存在的话)在线视频播放器,播放由多个实时连接在一起的视频文件组成的视频,即当用户点击观看视频时。

例如,访问者来到我的网站并看到标题为“欢迎”的视频可以播放。当他/她点击播放该视频时,我将视频文件“Opening.f4v”、“Welcome.f4v”和“Ending.f4v”接一个接一个地加入/合并/连接以即时创建一个连续的视频。

生成的视频看起来就像一个视频,没有任何视觉线索、滞后,甚至视频部分之间可观察到的最小延迟。基本上所做的是某种形式的即时编辑或预编辑,用户可以看到结果。生成的视频不会保存在服务器上,它只是实时合成和播放的。

另外,如果可能的话,不应该让用户在他/她看到生成的视频之前等待这个合并结束,而是能够立即播放视频的第一部分,同时合并是同时完成的。

这是否可以通过 flash/actionscript、ffmpeg、html5 或其他一些在线技术实现?我不需要解释这是怎么可能的,只需点头表示这是可能的,并提供一些链接以进一步调查。

此外,如果一种选择是使用 flash,那么当从 iphone/ipad 访问网站时,有什么替代方法可以使这项工作正常进行?

最佳答案

目前适用于某些浏览器以及 future 大多数浏览器的方法是使用 HTML5 视频媒体源扩展机制。

这实际上允许您将 HTML5 页面中视频的静态“src”文件替换为动态 src 缓冲区,然后您可以使用自己的 Javascript 代码以任何方式填充该缓冲区。

因此,当您接近第一个视频的结尾时,您可以编写代码来预缓冲第二个视频,然后在第一个视频的最后一个数据包之后立即开始将第二个视频的数据包添加到 src。

在非常高层次的术语中,这看起来像:

用于将视频插入页面中所需位置的 HTML:

.
.
.
<div>
  <video id="yourVideo1" controls="" autoplay="" width="320" height="240"></video> 
</div>
.
.
.

用于提供视频源的 Javascript:

//Get the video element
var videoElement = document.getElementById('yourVideo1');

//Create a 'MediaSource' and associate it with this video
var mediaSource = new MediaSource();
video.src = window.URL.createObjectURL(mediaSource);

//Add a listener to the MediaSource object to check for
//the video been opened. In this function you can add your
//code to get the get your videos from the servers and add
//'chunks' to the media source buffer

mediaSource.addEventListener('sourceopen', function(e) {

  //Set the format of the source video
  var mediaSourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"');

  //Get your video from the web
  while (not the end of your video playlist) {
    ...
    //Stream video from server 
    ...
    //Add packets received to the media source bufer
    mediaSourceBuffer.appendBuffer(receivedVideoPackets);

    //If near end of video start fetching next video to 
    //avoid buffering delay
    ...

    //If end of video go to next video in playlist
    ...

  }


}, false);

请查看下面的 HTML5 Rocks 演示以了解实际效果(针对稍微不同的用例)。

考虑到视频操作的难度和格式的多样性等,如果其中一个成熟的视频播放器提供开箱即用的功能,对您来说会容易得多,所以我仍然会像评论中提到的那样尝试他们的论坛,但至少你知道这在技术上是可行的。

此处提供 MSE 规范:

这里有一个很好的介绍性博客和演示(确保您的浏览器支持 MSE - 最新版本的 Chrome 支持):

您可以在这里找到最新的浏览器支持:

关于html - 按顺序在线播放视频文件,视频之间没有延迟/缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28703029/

相关文章:

javascript - 样式输入类型 ="file"- 文件名 javascript-solution 不起作用

javascript - 使用 html5 导出按钮 meteor 表格导出数据

html - Div 宽度和高度以适合页面但也有 3 行

flash - crossdomain.xml 有什么意义?

flash - Adobe Flash iOS 打包程序在打包大型项目时抛出 java.lang.OutOfMemoryError

html - 有没有办法让包含嵌入式 vimeo 视频的 iframe 静音?

api - YouTube API请求访问给定日期的视频观看次数?

animation - 视频文件(带 Alpha)作为闪屏?

html - 表单标签占用的空间超出其需要

flash - 如何将数据存入ESP32的Flash中?