2017-10-10 11 views
2

最新のSafari v11.0は、JavaScript経由で動的に設定されたMP4でビデオを再生できません。しかし、それはChrome、Edge、FFでうまくいきます。SafariがMP4ビデオをロードできない

enter image description here

要求の下で:

<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は、[ネットワーク]タブの下に赤でこれを強調していることである:

私のコードは、そのようなMP4リソースを指し示すsrc要素を設定し、 &レスポンス(右側)はキャンセルされたと言います。どうして?

プラスリクエストヘッダーの下に表示されます。Range bytes=0-1奇妙に思える。私はそのリソースをうっすらと見えますが、完全にダウンロードできます。

多くの異なる変更を試みましたが、すべて失敗します。それがnginxの問題、私のJSコードのバグ、またはSafariのものかどうかはわかりません。どんな手がかりも大歓迎です。

再現することが非常に簡単:Safariでは

  1. www.videomail.io
  2. スタートプレビュー上のビデオ
  3. をクリックしていないビデオを録画する(Chromeで正常に動作します)立ち上がるに行く
+0

Safari、または一般的にiOSでは、ビデオのバイナリデータがファイル全体として配信されないと予想しています。サイズが小さいため、「Range bytes = 0-1」 。 –

+0

'video.canPlayType(" video/mp4 ")'は 'console'でログに記録されますか? – guest271314

+0

@ guest271314私に「多分」返す –

答えて

1

----最終的な解決策----

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){...')を使っていました。 –

関連する問題