2016-11-27 10 views
1

AppleがMacBook、iPhone、最近ではMacBook Pro product pageの最近使用している機能と同様の機能を実装しようとしています。スクロールでビデオをスクラブする(apple.com esque) - ひどくつぶやく

MBP製品ページをチェックすると、スクロールするときに画面とタッチバーがアニメーション表示されます。それは本質的にビデオです。

これを採用することで、ビデオがぼやけているようです。私の場合は4つのビデオがありますが、1つのビデオに切り分けるとより効果的ですが、まだ100%ではありません。

私は、それがより良く流れるようにここに適用できるどの方法/戦術が好奇妙なのですか?

動画ファイルをブロブとして保存する方が効果的でしょうか? ビデオをシリーズの画像に変換する方が良いですか?

Demo

ここに問題のコード:

// select video element 
var vid0 = document.getElementById('v0'); 
var vid1 = document.getElementById('v1'); 
var vid2 = document.getElementById('v2'); 
var vid3 = document.getElementById('v3'); 
var windowheight = $(window).height()-20; 

var scrollpos = window.pageYOffset/400; 
var targetscrollpos = scrollpos; 
var accel = 0; 

// ---- Values you can tweak: ---- 
var accelamount = 0.1; //How fast the video will try to catch up with the target position. 1 = instantaneous, 0 = do nothing. 

// pause video on load 
vid0.pause(); 
vid1.pause(); 
vid2.pause(); 
vid3.pause(); 

window.onscroll = function(){ 
    targetscrollpos = window.pageYOffset/400; 
}; 


setInterval(function(){ 
    scrollpos += (targetscrollpos - scrollpos)*accelamount; 

    //update video playback 
    vid0.currentTime = scrollpos; 
    vid0.pause(); 

    vid1.currentTime = scrollpos; 
    vid1.pause(); 

    vid2.currentTime = scrollpos; 
    vid2.pause(); 

    vid3.currentTime = scrollpos; 
    vid3.pause(); 

}, 40); 

答えて

1

MP4/H.264は、スクラブのための最高の形式ではありません - それは主にストリーミング前向き線形再生のために設計されています。 Appleのページでは、一部のMP4ビデオを使用していますが、ビューではトリガされたリニア再生にのみ使用され、スクラブでは再生されません。

その他のサポートされているビデオ形式(f.ex. OGV、webm)を試してみて、最初のオプションとして<sources>...</sources>セクションの順序で提供して、動画がランダム再生をサポートしているかどうかを確認できます。キャッシング戦略はどのような場合でも遅延とロードに影響します。 Media Source Extensions APIを使用すると、より低レベルでキャッシングをよりよく制御できます。

また、クライアントウィンドウ内の可視部分を使用してビデオを制御して、一時停止または再生をトリガーすることもできます。 This answerを利用することができます。このような場合は、Intersection Observer APIという新しいAPIがあります(poly-fillが存在します)。

スプライトシートおよび/またはJPEGスチルに変換することは実行可能な選択肢です(ソニーは少なくとも1つのウェブプレゼンテーションでスクロールを使用してこれを行いました)。もちろん、ローディング戦略(プリロード/バッファリングと考える)にもっと注意を払う必要があるので、ロードするすべてのフレームを待つのではなく、できるだけ早く表示することが必要です。

+1

非常に有益な回答です、ありがとうございます!私はnpmを介して少しスクリプトを見つけました。また、ビデオをブロブにロードします。キーフレームのフレーム距離を '1'に設定すると、スクラブできるようになります。しかし、それは少しファイルサイズを増加させます。私はファンがたくさんスピードアップすることに気づいた(Safariはうまくいき、ChromeとFXはそうではない)。私が作ったデモ(http://output.jsbin.com/lewizuyamo/1)を見ると、2本のビデオしかなく、最終製品のビデオは5-6本です。これを念頭に置いて、ファンのスピードアップを図るために最適化することも可能だと思いますか? – INT

+0

今のところ、JPEG静止画に傾いています(サイズが大きすぎるとiOS上でSafariがクラッシュするため、スプライトは実行可能ではないと思わないでください)。しかし、それはファイルサイズのプレミアムを伴います。私はCPU負荷やファンのスピードアップに関するビデオよりも優れた性能を発揮するかどうか疑問に思う。 – INT

+0

@INTビデオの処理がこの多くの要素でかなり重いので疑問だ。 )。負荷を軽減するためにビデオのあらゆる種類の最適化を行うことができます(私は[この回答]でいくつかのヒントを与えました(https://stackoverflow.com/questions/40359750/html5-video-and-canvas-cpu-optimization/40398424 #40398424) - 最も関連性の高い部分は最後の2つです。Safariはhwデコードを利用するためにおそらくサブシステムとうまく統合されますが、クロムはffmpegに依存します。ブロブとしてロードすることは素晴らしいです、それはより多くのメモリを消費しますが、即座に利用できます。 [...] – K3N

関連する問題