<video width="640" height="360" src="http://jakelauer.com/fireplace.mp4" autoplay loop muted/>
在这里 fiddle :http://jsfiddle.net/bWqVf/
IE9 在这方面做得不错。有什么方法可以克服这个问题吗?在像这样的视频中,很明显应该无缝循环,但有令人讨厌的跳过/暂停。
编辑: 如您所见,如果我使用 javascript 来模拟循环,则会出现可测量的延迟:http://jsfiddle.net/bWqVf/13/
最佳答案
问题似乎与 Chrome 和 FF 填充预加载缓冲区的方式有关。在这两种情况下,他们似乎都忽略了循环标志并从开始“重置”缓冲区,这意味着在这种情况下,最后缓冲区被清空并在视频开始时再次预加载导致轻微的延迟/跳跃。
IE 似乎考虑了循环标志并继续填充到最后。
这意味着很难使它看起来无缝。我在几个小时内尝试了几种技术,包括将第一帧预缓存到 15 帧的屏幕外 Canvas 。我能做到的最接近无缝的是将视频修改为在其中包含两个片段(我没有(不再)有能力的硬件,所以我需要减小尺寸并进行测试 - 请参阅 fiddle )。
但是,这里也有缺点:
换句话说,没有稳定的解决方案可以解决这些浏览器的问题。
我建议对上面提到的内容进行扩展,以预循环某些片段。这样您就可以减少故障。
但是,要在这里分享我所做的事情。
首先,我用一个额外的片段扩展了视频(并减小了尺寸以便在我的计算机上运行它):
然后我用下面的代码做了一个重叠循环。即:
这里的理论是,这将掩盖您在开始时遇到的故障,因为视频播放始终在中间(从第二段开始)。
代码如下所示:
由于视频是异步加载的,因此我们需要计算加载量,因为此技术使用两个视频实例并且浏览器似乎无法共享下载。
我们还为视频 1 设置了一个新位置,使其位于中间。当视频移动并准备就绪时,会为此引发一个事件,因此我们从那一点开始一切:
v1.addEventListener('canplay', init, false);
v2.addEventListener('canplay', init, false);
v1.addEventListener('timeupdate', go, false);
处理程序:
function init() {
count--; /// = 2
/// both videos are loaded, prep:
if (count === 0) {
length = v1.duration;
mid = length * 0.5;
current = mid;
/// set first video's start to middle
v1.currentTime = mid + lag;
}
}
function go() {
/// remove listener or this will be called for each "frame"
v1.removeEventListener('timeupdate', go, false);
v1.play();
v2.play();
draw();
}
lag 值试图补偿两个视频开始之间的差异,因为它们不在完全相同的时间开始。
主代码 draw 只是根据主视频 (v1) 的位置在视频之间切换 - 帧速率也降低到 30 fps 以减少开销drawImage 作为 requestAnimationFrame 的最佳运行速度为 60 fps(这里的视频是 30 fps,所以我们只需要每隔一段时间绘制一帧):
function draw() {
/// reduce frame-rate from 60 to 30
if (reduce === true) {
reduce = false;
requestAnimationFrame(draw);
return;
} else {
reduce = true;
}
/// use video that is >= middle time
var v = v1.currentTime >= mid ? v1 : v2;
/// draw video frame onto canvas
ctx.drawImage(v, 0, 0);
requestAnimationFrame(draw);
}
现在,使用 Canvas 还开辟了其他可能性,例如在两个视频之间制作交叉淡入淡出以进一步平滑过渡。我没有实现它,因为它超出了范围(在大小/广度方面),但值得一提,因为它本身就是一个解决方案。
无论如何 - 如前所述,这是一个有很多缺点的解决方案,但它是我能找到的最接近于减少故障的解决方案(使用 Chrome)。
唯一可以正常工作的解决方案是内部浏览器驱动的解决方案,因为您需要访问缓冲区才能完全无缝地执行此操作。
我的“解决方案”本质上是在说:算了吧!它在这些浏览器中不起作用,请改用重复循环的视频。 :-)
关于javascript - 具有循环功能的 <video> 元素不会在 Chrome 或 Firefox 中无缝循环播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930964/
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
我使用Nokogiri(Rubygem)css搜索寻找某些在我的html里面。看起来Nokogiri的css搜索不喜欢正则表达式。我想切换到Nokogiri的xpath搜索,因为这似乎支持搜索字符串中的正则表达式。如何在xpath搜索中实现下面提到的(伪)css搜索?require'rubygems'require'nokogiri'value=Nokogiri::HTML.parse(ABBlaCD3"HTML_END#my_blockisgivenmy_bl="1"#my_eqcorrespondstothisregexmy_eq="\/[0-9]+\/"#FIXMEThefoll
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图