2017-10-10 116 views
2

最新的Safari v11.0无法播放通过JavaScript动态设置的MP4视频。但在Chrome,Edge和FF上运行良好。Safari无法加载MP4视频

我的代码将src元素指向MP4资源这样的:

<video class="replay" autoplay="true" autostart="true" autobuffer="true" playsinline="true" webkit-playsinline="webkit-playsinline" controls="controls" style="" preload="auto" muted="true"> 
    <source src="https://videomail.io/videomail/11e7-ad5a-4b14b680-a354-934ec5b49c33/preview/type/mp4/x-videomail-site-name/videomail.io/videomail.mp4?1507598907103" type="video/mp4"> 
</video> 

的问题是,Safari浏览器突出了这种红色网络选项卡下:

enter image description here

根据要求&回应(右)说它取消了。为什么?

在请求标题下加上我看到:Range bytes=0-1。看起来很奇怪。尽管我蜷缩了这些资源并且看起来不错,但可以完全下载。

尝试了很多不同的更改,都失败了。不知道这是一个nginx问题,在我的JS代码或Safari的东西错误。任何线索都非常受欢迎。

很容易重现:

  1. 在Safari中,转到www.videomail.io
  2. 开始录制视频
  3. 点击预览并没有视频出现(在Chrome正常工作)
+0

Safari浏览器,或者更确切地说,在iOS的一般预计视频的二进制数据,以不被服务作为一个整体文件..它期望它在较小尺寸的,因此,'字节范围= 0-1' 。 –

+0

'video.canPlayType(“video/mp4”)'在'console'登录什么? – guest271314

+0

@ guest271314返回给我一个“也许” –

回答

1

---- FINAL SOLUTION ----

通过在expre中使用以下内容来修正这个问题ss.js控制器代码:

res.sendFile(file, { 
    lastModified: false, 
    acceptRanges: true, 
    cacheControl: false 
    }, function (err) { 
    if (err && err.code !== 'ECONNRESET') { 
     next(err) 
    } 
    }) 
+1

我很想知道你的控制器代码在修复之前的样子。我目前无法尝试使用'fs.createReadStream(filePath).pipe(res)',但没有成功。 Safari v11不喜欢服务的mp4也是同样的问题。 –

+0

修复之前,我只是使用'res.sendFile(file,function(err){...'没有这三个关键标志。 –