我正在尝试在MP4和WEBM格式中提供HTML5视频。我不能让所有的浏览器都工作:
-
支持WEBM的浏览器(Chrome桌面,Firefox桌面)可以正常播放视频
-
使用MP4的浏览器不工作(IE, Safari, Android)
-
WEBM正在作为
video/webm
. -
MP4作为
video/mp4
使用
最小化JSFiddle at: http://jsfiddle.net/#&togetherjs=5Ql5MmrV4j
浏览器错误:
IE11: 11.0.9600.17126/11.0.9 KB2957689
Error: Unsupported video type of invalid file path
Android浏览器和Chrome浏览器:
没有错误,视频只是拒绝启动
完整性测试-以下三个值相等:
接收文件大小:
curl <video URL> | wc -c
实际文件大小:
stat -c %s <video file>
服务器指定的文件大小:
Content-Length
HTTP头。
有问题的视频之一是:
MP4 : http://hackology.co.uk/wp content/uploads/2014/06/hd720 - 24. - MP4
Content-Type: video/mp4
无法在Chrome/IE11/Chrome Android/Android浏览器中播放
在VLC中播放
FFMPEG编码参数
-an -vcodec libx264 -s hd720 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -movflags faststart
这些都是通过对移动浏览器中MP4编码的最佳方式的深入搜索而收集的。如果我使用
-an -vcodec libx264 -s hd720
,那么该视频也不能在浏览器中工作。WEBM : http://hackology.co.uk/wp content/uploads/2014/06/hd720 - 24. - WEBM
Content-Type: video/webm
在Chrome/Firefox中播放
FFMPEG编码参数
-an -vcodec libvpx -s hd720
相关的HTML(类,海报等删除):
<video preload="metadata" controls="controls">
<source type="video/mp4" src="http://hackology.co.uk/wp-content/uploads/2014/06/hd720-24.mp4">
<source type="video/webm" src="http://hackology.co.uk/wp-content/uploads/2014/06/hd720-24.webm">
</video>
JSFiddle at http://jsfiddle.net/#&togetherjs=5Ql5MmrV4j
似乎没有播放MP4的浏览器完全支持MP4,这对微软和苹果的浏览器来说尤其成问题,因为它们正试图在这种格式周围创造一个版税的天堂/垄断。
我通过使用以下FFMPEG参数重新编码使其工作:
-pix_fmt yuv420p
-preset slow
-profile:v baseline
给出完整的命令行:
ffmpeg
<INPUT DEFINITION> # e.g. -i <FILE>
-an # if you won't want audio, otherwise -acodec libaac -b:a 128k
-s hd720
-vcodec libx264
-b:v BITRATE # e.g. 4M
-vcodec libx264
-pix_fmt yuv420p
-preset slow
-profile:v baseline
-movflags faststart
-y <OUTPUT PATH>
这个问题最终是专有软件供应商没有正确支持他们自己的标准的又一个例子。