我的文件名为52bbb58c,没有文件扩展名,而且是mp4视频。
当我尝试将&<source>
添加到具有属性类型(video / mp4)的<video>
时,它无法播放。
适用于Chrome和Firefox。如何为Safari修复它?
答案 0 :(得分:2)
在其他地方详细查看此问题后(请参阅下面的链接)我认为最可能的原因是Chrome和IE认为&#39; type = video / mp4&#39; HTML中的信息是正确的,因此以这种方式解释从服务器返回的内容,而Safari查看响应中的内容类型以做出决定。
换句话说,Chrome会将返回的文件作为视频播放,即使来自服务器的HTTP响应有一个标题为“Content-Type:application / octet-stream&#39;而不是&#39;内容类型:视频/ mp4&#39;。
您可以通过查看示例的响应标头并查看内容类型是否设置为&#39; application / octet-stream&#39;来检查此问题。而不是&#39;视频/ mp4&#39;。
答案 1 :(得分:2)
在播放流媒体(例如视频和音频)时,Safari非常挑剔。它具有以下要求
请注意,如果Safari播放失败,它不会告诉您问题出在哪里,只是出现了媒体错误,没有更多信息。
对于mpeg 4视频/ h.264,后缀.mp4有效 对于mpeg 4音频/ aac,后缀.aac有效
如果您是Safari开发人员,请考虑修复这些问题。
这已在Safari 11.1.2上进行了测试
答案 2 :(得分:0)
我遇到过类似的问题。就我而言,它适用于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
响应标题本身肯定是正确的。
但是,我们的服务器实际返回的大小与content-length
和content-range
之间存在差异。到目前为止,它运作良好,因为我修复了它。如果您处于我的相同情况,则会使用curl --range 0-1 <target URL>
复制该错误。
会像这样说error 18: transfer closed with outstanding read data remaining
所以答案是确认服务器正确返回的值。
curl error 18 - transfer closed with outstanding read data remaining
Does iPhone/iPad Safari require 'Accept-Ranges' header for video?
https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
https://github.com/w3c/web-platform-tests/blob/master/fetch/http-cache/partial.html
答案 3 :(得分:0)
实际上,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
您应该注意到关键字 Video: h264(High)
。
并且由于该视频无法在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
关键字是Video: h264(High 4:4:4 Predictive)
。至于编解码器类型,您可以参考wiki或here。
如果这是您的情况,则可以使用以下命令使用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
希望获得帮助。