代码改变世界

[转载]为什么有些MP4文件在Chrome浏览器上播放不了?

2014-12-08 15:05  Benoly  阅读(6769)  评论(0编辑  收藏  举报

http://blog.sina.com.cn/s/blog_6bb7ebcc0101c2ja.html

Chrome浏览器支持HTML5,它支持原生播放部分的MP4格式(不用通过Flash等插件)。

为什么是部分MP4呢?MP4有非常复杂的含义(见http://en.wikipedia.org/wiki/Mp4),普通人对MP4的理解是后缀为.mp4的文件。但MP4本身不是一种简单的视频格式,它是一个包装了视频和音频格式的壳。至于里面的视频和音频使用什么编码格式是可变的。MP4的视频格式可以使用DivX也可使用H264,Chrome只支持H264。

然后,我猜测问题的原因是这样的:Chrome浏览器见到MP4后缀的文件,使用了原生HTML5视频播放起播放,但却发现视频格式无法解码。对于Firefox,它不支持原生播放MP4,于是使用了Flash,绝大部分的视频格式基本都可通过Flash播放。

这篇2011年1月的消息提到Google将放弃对H264的支持:http://www.infoq.com/cn/news/2011/01/chrome-h264。这篇是Google方面的描述:http://blog.chromium.org/2011/01/html-video-codec-support-in-chrome.html。如果Google不再支持在Chrome上原生播放MP4,那么会调用Flash播放器播放,这样反而不会出现有些MP4文件播放不了的问题。

为什么Chrome不支持所有的视频编码格式?绝大部份的视频编码格式都是要付版权费的,Google已经为H264买了单,Firefox没有Google那么有钱不愿意买。
 
下面是各浏览器对HTML5 Video的支持(http://en.wikipedia.org/wiki/Html_video_tag)
BrowserLatest stable release version dateFormats supported by different web browsers
Ogg Theora H.264 VP8 (WebM)
Internet Explorer 9.0.2  (August 11, 2011; 6 months ago) Manual install[note 2] 9.0[23] Manual install[note 3]
Mozilla Firefox[26] 10.0.2  (February 16, 2012; 10 days ago)[27] 3.5[28] Manual install/Microsoft Windows only[note 4] 4.0[30][31]
Google Chrome 17.0.963.56  (February 15, 2012; 11 days ago) 3.0[32][33] Planned for removal[34] 6.0[35][36]
Chromium N/A r18297[37] Manual install[note 5] r47759[39]
Android browser N/A 2.3[40] 3.0[40] 2.3[40]
Safari with Quicktime 5.1.3  (February 1, 2012; 25 days ago) Manual install[note 6] 3.1 Manual install[41]
Opera 11.61  (January 24, 2012; 33 days ago) 10.50[42] No 10.60[43][44]
Konqueror 4.8  (25 January 2012; 32 days ago)[45] 4.4[46] Manual install[note 7] Yes[48]
Epiphany 3.2.2  (16 November 2011; 3 months ago)[49] 2.28[50] Manual install[note 8] Yes[note 8][51]
 

最后,我录制了一段教学视频,指导大家怎样把各种视频转换成兼容性比较好的MP4文件。视频中使用的软件是“格式工厂”(http://www.formatoz.com/CN/index.html),这个软件基本上只是做了一个界面,其核心调用了开源软件FFMPEG。由于它违反了FFMPEG的LGPL许可协议,备受指责。使用Linux的朋友可以直接使用FFMPEG命令进行视频格式转换,命令如下:

ffmpeg -i infile.flv -vcodec libx264 o5.mp4

如果转换出的视频在某些设备还是无法播放,可以试试利用MediaCoder转换兼容性更好的MP4

 

参考:

http://www.w3school.com.cn/tags/av_met_canplaytype.asp
https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element