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

Sil*_*u G 5 html video firefox mp4 html5-video

我有一个小型的家庭服务器,里面有几个项目,其中有几个 MP4 示例视频。

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

但是,由于某种未知原因,几个月前我的服务器开始锁定,因此我决定重新安装操作系统。我已经从硬盘驱动器中恢复了以前的安装,并且我已经(在可能的情况下)重新使用了各种组件的配置文件。

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

Chrome(最新版本)和 Internet Explorer(最新 W7 版本,不确定确切数字是多少)工作正常。

由于我没有更改浏览器,而只是更改了服务器软件/配置,因此我怀疑问题仅出在服务器上。

我四处搜索,发现了一些建议,例如将正确的 mime 添加到 Apache 的 .htaccess 文件中,并检查标头以获取可能的指示。我遵循了每一个似乎值得遵循的想法,除了重新编码视频,但没有一个奏效。

更多事实:

  • 我正在使用在崩溃前播放视频的同一浏览器和机器现在尝试播放视频。
  • 这个视频播放得很好,我看不出它和我的有什么区别。
  • 这是我机器上的示例视频:http : //silviu.audiozone.ro(斜线)recording.html - 请原谅我使用的糟糕的混淆。

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

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
Run Code Online (Sandbox Code Playgroud)

这是服务器在尝试直接播放文件时返回的标头(通过访问它的 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
Run Code Online (Sandbox Code Playgroud)

我在这里没有看到任何重大差异。

此外,我发现了一个较旧的答案(从 2012 年 12 月开始),该答案表明<video>由于某些版税问题,Firefox 不会在标签中播放 MP4 文件,但由于用于播放的视频HTML5 视频示例播放得很好,我怀疑这情况不再如此。

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

mis*_*ben 6

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
Run Code Online (Sandbox Code Playgroud)

重要的部分是compatible_brands: isom3gp4。3GP 是一种类似于 MP4 的文件格式,因为它们都基于ISO 基本媒体格式,但它们并不相同。可以同时播放的浏览器和应用程序可能不介意文件不是内容类型标头中指定的格式。

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

将视频和音频转换到 MP4 容器中会产生一个可播放的文件(尽管高比特率和highh.264 配置文件并不适合网络传输,但这是另一回事)。

ffmpeg -i recording.mp4 -codec copy output.mp4
Run Code Online (Sandbox Code Playgroud)

顺便说一句,当您直接打开文件时,我不会将浏览器播放的video内容作为同一浏览器中元素中内容的代表。他们的行为常常不同。