Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 为什么赢了';t不带扩展名的Safari播放文件在<;视频>;?_Video_Safari_Mp4 - Fatal编程技术网

Video 为什么赢了';t不带扩展名的Safari播放文件在<;视频>;?

Video 为什么赢了';t不带扩展名的Safari播放文件在<;视频>;?,video,safari,mp4,Video,Safari,Mp4,我有文件名为52bbb58c,没有文件扩展名,它是mp4视频 当我尝试将其添加为属性类型(video/mp4)为&的时,它不会播放 这适用于Chrome和Firefox。如何修复Safari?在其他地方详细研究了这个问题后(见下面的链接),我认为最可能的原因是Chrome和IE假设HTML中的“type=video/mp4”信息是正确的,因此以这种方式解释服务器返回的内容,而Safari则查看响应中的内容类型以做出决定 换句话说,Chrome将返回的文件作为视频播放,即使来自服务器的HTTP响应

我有文件名为52bbb58c,没有文件扩展名,它是mp4视频

当我尝试将其添加为属性类型(video/mp4)为
&
时,它不会播放


这适用于Chrome和Firefox。如何修复Safari?

在其他地方详细研究了这个问题后(见下面的链接),我认为最可能的原因是Chrome和IE假设HTML中的“type=video/mp4”信息是正确的,因此以这种方式解释服务器返回的内容,而Safari则查看响应中的内容类型以做出决定

换句话说,Chrome将返回的文件作为视频播放,即使来自服务器的HTTP响应的标题是“Content-Type:application/octet-stream”,而不是“Content-Type:video/mp4”

您可以通过查看示例的响应头,查看内容类型是否设置为“application/octet stream”,而不是“video/mp4”,来检查这一点


相关回答:

我遇到过类似的问题。在我的例子中,它在Chrome和Firefox上运行良好,或者在我为文件添加扩展名时运行良好。如果我正确地更改mime类型,它仍然无法通过

实际上,我有一个服务器,我们部署了返回响应头,如下所示

HTTP/1.1 206 Partial Content
Date: Mon, 05 Mar 2018 08:33:49 GMT
Server: gunicorn/19.7.1
X-Powered-By: Express
content-type: video/mp4
accept-ranges: bytes
content-length: 2
content-range: bytes 0-1/37475549
Cache-Control: public, max-age=0
Connection: keep-alive
响应头本身肯定是正确的

但是,服务器实际返回的大小与
内容长度
内容范围
之间存在差异。所以到目前为止,它工作得很好,因为我解决了这个问题。如果您与我处于相同的情况,则会使用
curl--0-1范围
复制该错误

它会这样说
错误18:传输关闭,未完成的读取数据剩余

因此,答案是正确确认服务器返回的值

参考文献


Safari在播放视频和音频等流媒体时非常挑剔。它有以下要求

  • 承载介质的服务器/应用程序必须支持字节范围。Safari将尝试下载2个字节以确定媒体长度,然后根据文件大小将媒体分为一个或多个块进行下载。如果你把所有的数据都发送给它,那就不好了
  • 从媒体服务器返回的内容范围必须包括媒体总大小的数字,而不仅仅是“*”
  • 媒体URL必须具有与媒体类型匹配的后缀。就像IE一样:正确使用mime类型是徒劳的,因为Safari不会遵守这里的规则,它会忽略mime类型
请注意,Safari不会告诉您问题所在,如果播放失败,只会出现媒体错误,没有进一步的信息

对于mpeg 4视频/h.264,后缀.mp4起作用 对于mpeg 4音频/aac,后缀.aac起作用

如果你是一名狩猎爱好者,请考虑修理这些东西。


这是在Safari 11.1.2上测试的。实际上,Safari浏览器并不支持所有MP4格式的视频

MP4只是一种文件格式,而不是视频编解码器类型

您可以使用ffmpeg获取视频的信息

对我来说,我发现Safari可以播放以下视频编解码器的MP4视频:

ffmpeg -i demo3.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo3.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
    description     : Codec by Bilibili XCode Worker v4.7.18(fixed_gap:False)
  Duration: 00:00:54.44, start: 0.000000, bitrate: 772 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 852x480 [SAR 640:639 DAR 16:9], 635 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified
您应该注意到关键字
视频:h264(高)
对于无法在Safari上播放的视频:

ffmpeg -i demo3_mask.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'demo3_mask.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:54.33, start: 0.000000, bitrate: 630 kb/s
    Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 852x480, 627 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
关键字是
视频:h264(高4:4:4预测)
。至于编解码器类型,您可以参考或

如果是这种情况,可以使用以下命令使用ffmpeg转换视频编解码器类型:

ffmpeg -i demo3_mask.mp4 -vf "scale=2*trunc(iw/2):-2,setsar=1" -profile:v high -pix_fmt yuv420p out2.mp4
您可以查看新视频的信息:

ffmpeg -i out2.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out2.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.20.100
  Duration: 00:00:54.33, start: 0.000000, bitrate: 221 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 852x480 [SAR 1:1 DAR 71:40], 218 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
At least one output file must be specified

希望有帮助。

我的视频API内容类型已经是video/mp4,但是这些视频没有在Safari/MacOs中播放。@SibeeshVenu-看看David最近的回答。它有更多的最新信息和更多的细节,可能会帮助你。如果不是的话,那么最好打开一个问题,如果可能的话,包括一个链接到一个不会播放的示例视频。