MP4视频无法在Firefox上的<video>标签中播放,如果直接打开则播放

时间:2015-12-18 15:58:25

标签: html5 firefox video html5-video mp4

我有一个小型家庭服务器,可以托管多个项目,其中包括一些MP4示例视频。

我一直在使用简单的<video>标签来播放视频,它适用于Firefox,Chrome和Internet Explorer。

然而,由于某些未知原因,我的服务器几个月前开始锁定,所以我决定重新安装操作系统。我从硬盘驱动器中抢救了以前的安装,并且我已经重新使用(如果可能)各种组件的配置文件。

一切正常,但现在Firefox在使用<video>标记时拒绝播放MP4视频,只显示No video with supported format and MIME type found消息。直接打开文件(在Firefox中Viev video)可以正常播放视频。

Chrome(最新版本)和Internet Explorer(最新的W7版本,不确定具体数字是什么)工作得很好。

由于我没有更改浏览器,只有服务器软件/配置,我怀疑问题仅在于服务器。

我已经搜索过,我找到了一些建议,比如在Apache的.htaccess文件中添加正确的mime,并检查标题是否有可能的指示。我已经按照每个看起来值得关注的想法,没有对视频进行重新编码,但都没有效果。

更多事实:

  • 我正在使用与崩溃前播放视频相同的浏览器和计算机来尝试播放视频。
  • This video播放得很好,我觉得它和我之间没有任何区别。
  • 以下是我机器上的示例视频:http://silviu.audiozone.ro(斜线)recording.html - 请原谅我使用过的混淆不清。

这是服务器在尝试从视频标记播放文件时返回的标头:

Accept-Ranges: bytes
Connection: Keep-Alive
Content-Length: 17709423
Content-Range: bytes 0-17709422/17709423
Content-Type: video/mp4
Date: Fri, 18 Dec 2015 15:00:20 GMT
Etag: "20081-10e394f-5272d4fd62880;17709423"
Keep-Alive: timeout=5, max=99
Last-Modified: Fri, 18 Dec 2015 14:54:10 GMT
Server: Apache/2.2.22 (Debian)
X-Mod-H264-Streaming: version=2.2.7

这是服务器在尝试直接播放文件时返回的标头(通过访问它的URL):

Accept-Ranges: bytes
Connection: Keep-Alive
Content-Length: 17709423
Content-Type: video/mp4
Date: Fri, 18 Dec 2015 15:45:00 GMT
Etag: "20081-10e394f-5272d4fd62880;17709423"
Keep-Alive: timeout=5, max=100
Last-Modified: Fri, 18 Dec 2015 14:54:10 GMT
Server: Apache/2.2.22 (Debian)
X-Mod-H264-Streaming: version=2.2.7

我认为这里没有任何重大差异。

此外,我发现一个较旧的答案(自2012年12月起)表明由于某些版税问题,Firefox不会在<video>代码中播放MP4文件,但由于视频过去和{{{ 3}}播放得很好,我怀疑情况不再如此。

我不想重新编码我的视频,因为他们过去在Firefox中工作得很好。

3 个答案:

答案 0 :(得分:4)

Firefox告诉您控制台中的错误消息中的问题。这是3GP格式而不是MP4:

  

不支持“video / 3gpp”的HTTP“Content-Type”。加载媒体资源... recording.mp4失败。

您可以使用ffprobe证实这一点。我已经截断了输出。

  Metadata:
    major_brand     : isom
    minor_version   : 0
    compatible_brands: isom3gp4
    creation_time   : 2015-12-18 14:54:58
    location        : +44.4413+026.0771/
    location-eng    : +44.4413+026.0771/
  Duration: 00:00:08.22, start: 0.000000, bitrate: 17235 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 17106 kb/s, 30.05 fps, 30 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2015-12-18 14:54:58
      handler_name    : VideoHandle
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 123 kb/s (default)
    Metadata:
      creation_time   : 2015-12-18 14:54:58
      handler_name    : SoundHandle

重要的部分是compatible_brands: isom3gp4。 3GP与MP4的文件格式类似,因为它们都基于ISO base media format,但它们并不相同。可以同时播放这两者的浏览器和应用程序可能并不介意该文件不是内容类型标题中指定的格式。

认为 Firefox可能已经能够播放这些文件,直到版本41,基于其他提及我看到的相同错误与显然在更新之前播放的文件。所以我敢打赌,这是改变而不是你服务器上的东西。

将视频和音频转换为MP4容器会产生可播放的文件(虽然高比特率和high h.264配置文件不适合网络传送,但这是一个不同的故事。)

ffmpeg -i recording.mp4 -codec copy output.mp4

顺便说一下,当你直接打开文件代表同一浏览器中video元素中的内容时,我不会接受浏览器播放的内容。他们经常表现不同。

答案 1 :(得分:1)

由于Firefox和其他一些浏览器无法播放某些编解码器,因此您必须将视频转换为通用格式,即mp4和ogg。如果每个具有这些格式的视频都有2个副本,则可以在大多数现代浏览器中播放所有视频。

但是您说过您不想重新编码视频,因此您可以自动将其转换。 有一些建议的软件包,例如:

fluent-ffmpeg: https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

ffmpeg.js: https://github.com/Kagami/ffmpeg.js/tree/master

videoconverter: https://www.npmjs.com/package/videoconverter

同时,如果要使用fluent-ffmpeg,则必须在服务器上安装ffmpeg。因此,您可以使用以下软件包之一自动安装ffmpeg:

ffmpeg-installer: https://www.npmjs.com/package/@ffmpeg-installer/ffmpeg

ffmpeg-static: https://github.com/eugeneware/ffmpeg-static

答案 2 :(得分:0)

尝试通过cmd进行转换:

ffmpeg -i origin.mp4 -vcodec libx264 -pix_fmt yuv420p new.mp4

新文件在我的FF上效果很好。