2012-03-06 73 views
0

我的意思是所有的视频应用程序都支持你已经在你的操作系统中安装的任何编解码器。为什么浏览器的标签行为不同并且不支持已经存在于操作系统中的编解码器?为什么浏览器有自己的编解码器,而不是支持操作系统中已经存在的所有编解码器?

我认为浏览器可以对某些编解码器(他们希望在任何地方工作)具有本机支持,但也可以支持来自OS的编解码器。他们不是吗?如果是这样,为什么? 谢谢

我只是检查Google Chrome的源代码(或者我应该说Chromium),它使用FFmpeg库来播放视频。几乎所有在Linux上使用的视频应用程序都可以使用这个库,它可以比喻所有的视频格式。所以,现在看来,这很容易支持任何编解码器,但谷歌只列举其中一些:看到http://src.chromium.org/svn/trunk/src/media/ffmpeg/ffmpeg_common.cc

+0

也许你在“编解码器”和“插件”(允许浏览器播放媒体的软件模块)之间感到困惑?这不是一个真正的编程问题。 – Kaz 2012-03-06 22:53:41

+0

所以说,问题是,为什么给定的媒体插件不支持像媒体播放器应用程序那样的一组编解码器呢? – Kaz 2012-03-06 22:55:24

+0

我的意思是支持

回答

0

功能VideoCodecToCodecID我相信这与正在申请专利的一些编码算法,并要求浏览器制造商支付版税办使用它们。

您可以在您的老式<中嵌入Windows Media Player > HTML标记的原因是您正在从Windows Media Player中加载可使用所有编解码器的ActiveX组件。浏览器制造商(Mozilla,Google)不支付任何版税,因为它们可以阻止任何ActiveX,而不仅仅是WMP。

此外,有些令人讨厌的公司如Apple不支持免版税格式X,Y,Z,因为他们不想更改其现有的代码库。

HTML5的三种主要格式是Ogg,H.264和WebM。不幸的是,没有一个格式上的所有主流浏览器(MSIE,火狐,Chrome,Safari浏览器),因此该解决方案的工作原理是:在所有三种格式

  • 制作视频
  • 使用HTML5视频的<source>元素输入所有三个在hTML5元素中
  • 让浏览器决定使用哪一个。这是自动发生的。

下面是一个例子:

<video id="intro"> 
    <source src="intro.ogm" /> 
    <source src="intro.webm" /> 
    <source src="intro.mkv" /> 
</video> 

如果您导出视频,这些格式是不可能的,我相信你应该坚持'01”好闪:P。

+0

我认为浏览器可能只附带一些基本的编解码器来解决专利问题,然后在操作系统上继续传输。即已获得专利的编解码器已经存在于您的系统中,现在他们如何到达目标的问题现在无关紧要(可能与您付费的其他应用程序或视频播放器有关)。 – 2012-03-07 00:46:28

+0

正如我刚刚添加到我原来的问题,谷歌浏览器使用支持所有这些编解码器,但Chrome浏览器白名单,其中一些:(这看起来像他们在那里的编解码器,但禁用。 – 2012-03-07 00:50:47

1

因为不同的操作系统支持完全不同的编解码器,这需要浏览器提供自己的实现。

作为示例,请考虑Windows XP。它有可怕的编解码器支持。基本上,它支持WMV9/VC-1以及无人关心的低级编解码器。它不支持MPEG2,MPEG4,H.264等,这就解释了为什么我们数以百万计的人无法弄清楚它是如何让它播放DVD的。原因是MSFT不想支付版税;一些豆制品商清楚地认为,投入开发专有编解码器(因此VC-1)的钱比向MPEG-LA支付版税更明智。我相信这个数学是有道理的,但除此之外,这是无稽之谈。

与OSX对比:苹果授权的MPEG2(以及后来的H.264)使其客户可以更轻松地播放此视频内容。它花费了他们的钱,但没有人试图弄清楚如何播放DVD。如果他们允许底层操作系统指定支持哪些编解码器,那么他们将得到明显不同的支持,具体取决于浏览器安装在哪个平台上。这只是一种糟糕的用户体验。所以大多数浏览器都采用内置的基本编解码器支持。

不幸的是,这很糟糕。因为浏览器似乎无法决定他们是否会支持H.264或WebM,这会让程序员不用桨就把它们弄糟。好吧。有些东西永远不会改变。