2017-10-10 162 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){...'沒有這三個關鍵標誌。 –