为啥需要 <video> 或 <audio>?

Posted

技术标签:

【中文标题】为啥需要 <video> 或 <audio>?【英文标题】:Why is there a need for <video> or <audio>?为什么需要 <video> 或 <audio>? 【发布时间】:2010-10-05 07:02:08 【问题描述】:

html5 带来或将带来&lt;video&gt;&lt;audio&gt; 标签等。自从我听说了他们,尤其是在阅读了 Why do we have an img element? 尤其是 Jay C. Weber's message back from 1993 之后,我想知道:为什么?

HTML 有一个通用的媒体包含方法已经有一段时间了。如果作者愿意,它支持回退到其他格式和文本,现在它们被不必要地复制到另外两个特殊用途的标签中,每个标签都用于一种媒体。

对我来说,&lt;video&gt;&lt;audio&gt; 都只是伪装的 &lt;object&gt;s - 还是我在这里遗漏了一些他们都支持而 &lt;object&gt; 不支持的非常重要的东西?

我的困惑源于以下问题:给定一个 sn-p 作为这个:

<video id="movie"   preload controls>
  <source src="pr6.mp4" />
  <source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"' />
  <source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"' />
  <object>
     ... fallback to Flash object
  </object>
</video>

不能写成类似于

<object   data='pr6.mp4'>
  <object   data='pr6.webm' type='video/webm; codecs="vp8, vorbis"'>
    <object   data="pr6.ogv" type='video/ogg; codecs="theora, vorbis"'>
      <object>
        ... fallback to Flash object
      </object>
    </object>
  </object>
</object>

preloadcontrols 可以作为 &lt;param&gt; 元素给出,我现在不太确定如何处理 id 属性。

还有什么可以阻止浏览器供应商仅使用正确的 MIME 类型和编解码器来呈现视频和音频内容,而不是将它们交给插件?

【问题讨论】:

哦,全能的随机投票者。祝福我,你为什么认为这个问题不清楚或难以理解。我知道,我对语言和技术的掌握很差。尽管如此,我还是在努力用文字来解决问题。不过,你一个都没给我。 【参考方案1】:

&lt;video&gt;&lt;audio&gt; 标签不是&lt;object&gt; 伪装的。请参阅this excellent explanation 的新标签。简而言之,HTML-5 浏览器正在公开它们对音频和视频的原生支持。他们将播放他们已知的视频源,或回退到好的旧 Flash,如下所示:

<video id="movie"   preload controls>
  <source src="pr6.mp4" />
  <source src="pr6.webm" type='video/webm; codecs="vp8, vorbis"' />
  <source src="pr6.ogv" type='video/ogg; codecs="theora, vorbis"' />
  <object>
     ... fallback to Flash object
  </object>
</video>

编辑:MIME 类型可以说明一切,但只有在您请求文件之后。 &lt;object&gt; 不利于 HTML 分析和语义。 JS 知道 MIME 类型吗?

【讨论】:

没有什么说&lt;object&gt; 不能表示本机浏览器实现。例如。通过&lt;object&gt; 嵌入图像时,也不会提示您下载插件。 好的,如果我做对了,唯一的区别是对编解码器的明确支持,也许还有脚本接口(尽管我不完全确定&lt;object&gt; 会阻止后者)。 没有什么也说 我用你的代码嵌套的&lt;object&gt; 的(希望)几乎正确的变体编辑了这个问题。我可以看到简化的语法。但是考虑到 HTML 大部分时间的外观(并且考虑到它大部分时间都是生成的而不是手写的),我认为这不是一个特别有力的论点。根据我从规范中收集到的信息,如果您针对特定的非本地呈现内容的方式,您只需要 GUID。 HTML 清晰是一件好事 (tm),对 W3C 来说当然是宝贵的 :) 此外,使用 您会丢失页面语义。想象一下,您需要在页面上查找所有视频和/或音频?在这种情况下,对象是痛苦的。【参考方案2】:

我只想指出,您还可以从使用视频/音频元素中获得一些好处,例如获得免费控件来擦洗、暂停/播放、能够指定循环和播放速率等属性。

您还可以使用 javascript 获取它的句柄并访问该元素的 API。

【讨论】:

那又怎样?您可以从object 获得相同的信息;标记只是不同。但是感谢您在这里重申我的观点:-)【参考方案3】:

你可能会问为什么会有所有&lt;p&gt;&lt;div&gt;&lt;span&gt;&lt;b&gt;&lt;strong&gt;&lt;i&gt;&lt;blockquote&gt;等标签,而它们基本上都是反正一样。这正是 W3C 的想法。世界其他地方不应该理解它 - 无论如何,它们远远超出了我们凡人。

【讨论】:

divp 是构造较大文本体的两个不同层次,strongem 是不同层次的强调。 bi 已被 CSS 淘汰。不过,它们大多具有遗留影响,实际上,我认为专门针对媒体的包容性是一个截然不同的主题。尤其是考虑到已经存在的通用解决方案(您在此处提到的任何元素都不是这种情况)。 @Joey - 所有这些元素在功能上都是相同的。唯一的区别是它们应用了不同的样式,但是通过一些 CSS,您可以使一个看起来像另一个。对于&lt;b&gt;&lt;strong&gt;,您甚至不必这样做。这是同一件事,有两个不同的名字。发明以使 html 标记看起来更漂亮。 嗯,它们在语义上是不同的——请注意,具有敏锐视力的查看器、完美的浏览器和广泛接受的排版规则并不是 HTML 的唯一消费者。同意,从这个角度来看,区分“媒体,一般”(object)、“媒体、图像”(img)、“媒体、音频”(audio)和“媒体、视频”(video)。但是,这已经是 MIME 类型可以单独说明的内容了。它不是偶然以image/audio/video/ 开头的......

以上是关于为啥需要 <video> 或 <audio>?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Safari 不能播放 <video> 中没有扩展名的文件?

为啥 Chrome浏览器用<video>播放视频没有画面就只有声音,IE就可以。

在 <video> 或 <img> 上模拟 background-size:cover

Video.js 控件显示奇怪,为啥?

为啥HTML5不需要任何浏览器插件就可以播放音视频?原理是啥?

阅读 vector<Mat> 或 Video ? (Opencv 和 C++)