更改 html5 视频标签的源

2024-01-08

我正在尝试构建一个可以在任何地方使用的视频播放器。到目前为止我会选择:

<video>
    <source src="video.mp4"></source>
    <source src="video.ogv"></source>
    <object data="flowplayer.swf" type="application/x-shockwave-flash">
        <param name="movie" value="flowplayer.swf" />
        <param name="flashvars" value='config={"clip":"video.mp4"}' />
    </object>
</video>

(如在几个网站上看到的,例如视频给大家 http://camendesign.com/code/video_for_everybody) 到目前为止,一切都很好。

但现在我还想要某种播放列表/菜单以及视频播放器,我可以从中选择其他视频。这些应该立即在我的播放器中打开。所以我必须“动态更改视频源”(如上所示dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ http://dev.opera.com/articles/view/everything-you-need-to-know-about-html5-video-and-audio/- 使用 Javascript 的“让我们看另一部电影”部分。让我们暂时忘记 Flash 播放器(以及 IE)部分,稍后我会尝试处理这个问题。

所以我的JS要改变<source>标签应该是这样的:

<script>
function loadAnotherVideo() {
    var video = document.getElementsByTagName('video')[0];
    var sources = video.getElementsByTagName('source');
    sources[0].src = 'video2.mp4';
    sources[1].src = 'video2.ogv';
    video.load();
}
</script>

问题是,这并不适用于所有浏览器。也就是说,在 Firefox 中有一个很好的页面,您可以在其中观察我遇到的问题:http://www.w3.org/2010/05/video/mediaevents.html http://www.w3.org/2010/05/video/mediaevents.html

一旦我触发load()方法(请注意,在 Firefox 中),视频播放器会死掉。

现在我发现当我不使用多个<source>标签,但只有一个src内的属性<video>标签,整个事情does在 Firefox 中工作。

所以我的计划就是使用它src属性并使用确定适当的文件canPlayType() http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#dom-navigator-canplaytype功能。

我是不是做错了什么或者让事情变得复杂了?


我讨厌所有这些答案,因为它们太短或依赖于其他框架。

这是执行此操作的“一种”vanilla JS 方法,在 Chrome 中工作,请在其他浏览器中测试:

var video = document.getElementById('video');
var source = document.createElement('source');

source.setAttribute('src', 'http://techslides.com/demos/sample-videos/small.mp4');
source.setAttribute('type', 'video/mp4');

video.appendChild(source);
video.play();
console.log({
  src: source.getAttribute('src'),
  type: source.getAttribute('type'),
});

setTimeout(function() {
  video.pause();

  source.setAttribute('src', 'http://techslides.com/demos/sample-videos/small.webm');
  source.setAttribute('type', 'video/webm');

  video.load();
  video.play();
  console.log({
    src: source.getAttribute('src'),
    type: source.getAttribute('type'),
  });
}, 3000);
<video id="video" width="320" height="240"></video>

外部链接 https://jsfiddle.net/mattdlockyer/5eCEu/2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 html5 视频标签的源 的相关文章

随机推荐

  • 使用 koa.js 显示静态 html 文件

    我想要做的是在调用索引路由 即 localhost 3000 时提供 index html 文件 我使用 koa router 进行路由 所以我的路线如下所示 app all function next Send the file here
  • 我在 Matter.js 中自己的模型

    我正在使用 Matter js 编写一个简单的游戏 我无法弄清楚如何最好地将我的模型挂接到 Matter js 中 我的游戏以细菌为特色 我想上一堂课Bacterium这样我就可以管理这些人了 在我当前的实现中 此类创建并存储自己的Matt
  • char 160 在我的源代码中意味着什么?

    我正在使用以下格式字符串 将数字格式化为字符串 在某些时候我需要将这些数字字符串 1 234 567 转回类似 1234567 的内容 我正在尝试删除空字符但发现 value value Replace 由于某种原因 该字符串仍然是 1 2
  • 通过智能感知支持从文件动态生成枚举

    我听说了很多关于 Roslyn 的事情 我只是想是否可以从 xml 文件动态生成代码 这样对于开发人员来说它是透明的 他可以使用 IntelliSense 枚举代码 就像代码是在项目中编写的一样 我正在编写一个框架 其中通过配置文件完成了很
  • SPARK 整数溢出检查

    我有以下程序 procedure Main with SPARK Mode is F array 0 10 of Integer 0 1 others gt 0 begin for I in 2 F Last loop F I F I 1
  • 单个应用程序的 REST 和 SOAP Web 服务

    我们使用 Spring 构建了一个应用程序 并使用 Tomcat 部署了它 我们有一个可用的 REST 接口 但是我们的一个客户端只有一个 SOAP 客户端 我的理解是 SOAP Web 服务和 REST Web 服务不能在同一端口或应用程
  • 使用 JavaScript 手动单步执行 CSS 动画

    如果我有一个像这样的 CSS 关键帧动画 keyframes flash red 50 background f00 goflash anm flash animation name flash red animation duration
  • 即使删除了大量较大的文件,GIT Repo 仍然很大

    我有一个长期存在的 git 存储库 最终来自另一个开发人员的一大堆不相关的文件 占用了大量的存储空间 它使用了像 5gb 这样愚蠢的东西 因为他包含了资源文件 有 5000 个 PSD 文件在回购协议中 我已经从存储库中删除了所有这些文件并
  • MySQL EXPLAIN EXTENDED 过滤列(显然不是百分比)

    我一直在寻找这个 他们都说明了某种百分比 解释一下 EXPLAIN EXTENDED SELECT FROM PageAccess ORDER BY AccessId DESC LIMIT 20 SELECT COUNT FROM Page
  • C++ - 如何隐藏其他应用程序的窗口

    我正在尝试创建一个软件 Qt C 其中我需要一种根据窗口标题隐藏其他应用程序窗口的功能 隐藏意味着不可见而不是最小化 任何人都可以说出如何实现这一目标吗 我目前正在Windows平台上工作 注意 如果您通过 Qt 提供解决方案 将会更加舒适
  • 在多边形内部随机放置一个多边形

    我有两个多边形定义为一系列 2D 浮点值 不保证它们是凹的或凸的 他们不会超越自己 他们不能旋转 如果可能的话 我想将一个随机放置在另一个内部 主要问题是效率 我必须在几秒钟内执行大约 200 次左右 我已经研究这个问题几天了 但没有取得明
  • 为什么页面错误通常由操作系统而不是硬件处理?

    我发现在TLB丢失过程中 有些体系结构使用硬件来处理它 而有些体系结构则使用操作系统 但当涉及到页面错误时 大多数都使用操作系统而不是硬件 我试图找到答案 但没有找到任何文章解释原因 有人可以帮忙解决这个问题吗 谢谢 如果硬件能够自行处理它
  • 为什么 0.1 + 0.1 == 0.2?

    这是关于Java的 据我了解 由于二进制表示形式 Java 无法完美表示 0 1 这使得 0 1 0 1 0 1 0 3 错误的 然而 为什么 0 1 0 1 0 2 给出真实的 由于二进制表示形式 0 1 无法用 Java 完美表示 这使
  • createStackNavigator 不是一个函数

    我正在构建我的第一个练习应用程序 并尝试使用 createApp Navigator 组合屏幕之间的导航 但是 一旦我尝试使用createAppNavigator我收到以下错误 相关代码 App js import React from r
  • 向下滚动时,recyclerview 内的嵌套滚动视图不会触发 onscrolllistener

    Edit 我已经从 Web 服务加载了 200 多个数据集 当我向下滚动 recyclerview 时 它不会触发滚动侦听器 因为 如果我不使用 dy gt 0 条件 它会加载所有接下来的 20 个数据 20 个数据等等 最初是在进行此活动
  • 同一网页内的小程序之间如何共享数据?

    我在同一个网页中有几个小程序 我想在它们之间共享数据 做到这一点的最佳解决方案是什么 EDIT 感谢您的回复 我会尝试更具体 我的网页上有 3 个小程序 第一个将从网络服务器下载文件 第二个将用于本地修改文件 第三个会将修改后的文件发送回服
  • C# 3.0 中的命名/可选参数?

    有没有办法像 C 4 0 一样向 C 3 0 添加可选参数 我一定要拥有这个功能 我已经等不及了 Edit 如果您知道实现此目的的解决方法 技巧 也请发布它 谢谢 您可以使用匿名类型和反射作为命名参数的解决方法 public void Fo
  • 使用 UTF8 格式化 MySQL 命令行

    我有一个包含瑞典 挪威字符串的数据库表 当我查询一些数据时 我得到如下输出 输出与set names latin1 name Kid Interi Bwg Homes If Skadef kring Jangaard Export Nord
  • 尝试在 %AppData% 中执行 .exe 时访问被拒绝

    我正在尝试使用RemoveDrive exe 在这里找到 http www uwe sieber de drivetools e html 在我的 Java 应用程序中 我的 JAR 中有它 我使用以下代码将其提取到临时文件中 但是当我尝试
  • 更改 html5 视频标签的源

    我正在尝试构建一个可以在任何地方使用的视频播放器 到目前为止我会选择