HTML5视频:ffmpeg编码的MP4不能在任何浏览器中播放(虽然在VLC中播放)



我正在尝试在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>

这个问题最终是专有软件供应商没有正确支持他们自己的标准的又一个例子。