2011-09-06 7 views
30

フレームを抽出するためのバックエンドコードを必要とせずに、この効果を達成するための簡単な方法があれば、jpgとして保存し、どこかでデータベース化することをお勧めします。動的に最初のフレームをHTML5ビデオのポスターとして使用していますか?

ビデオの最初のフレームがポスターとして表示されるような効果は、ビデオのロードが非常に役立つでしょう(ブラウザがビデオを明らかに再生できる場合にのみ機能します。 poster伝統的に動作しますが、それは問題ではない。

答えて

19

あなたはHTML5ビデオの任意のフレームからポスターを作成できるようになりますPopcorn.capture呼ばPopcorn.jsプラグインがあります。

によって課される制限がありますドメイン間で要求されたリソースのピクセルデータの読み取りを禁止するブラウザ(キャンバスAPIを使用して、フレーム)。ソースビデオは、このアプローチが機能するように要求するスクリプトおよびHTMLページと同じドメインでホストされている必要があります。

このプラグインを使用したポスターを作成するためのコードは非常に簡単です:あなたは、自動的にビデオの最初のフレームをロードするためにビデオ要素にpreload='auto'を設定することができ

// This block of code must be run _after_ the DOM is ready 
// This will capture the frame at the 10th second and create a poster 
var video = Popcorn("#video-id"); 

// Once the video has loaded into memory, we can capture the poster 
video.listen("canplayall", function() { 

    this.currentTime(10).capture(); 

}); 
+0

私は必要なもののように見えます。私はそれを呼び出すたびに 'Uncaught Error:INVALID_STATE_ERR:DOM Exception 11 popcorn.js:389 Popcorn.extend.Popcorn.forEach.ret popcorn.js:389'を取得することはできません。 – Damon

+0

ビデオが読み込まれるのを待っていないようです。上記のコード例を更新して、ポスターを設定するようにしました。 – Rick

+1

ありがとうございました。とにかく私は 'this.capture({at:1})。currentTime(0);'という書類の印象の下で、ポスターを1秒間でつかんでビデオを最初に置くしかし、それは1秒でそれを残す。あなたはそれについて何か経験がありますか? – Damon

6

+0

あらかじめご了承ください。プリロードとは、動画がユーザーの操作なしで自動的にダウンロードされる可能性があることを意味します。デスクトップ上のChrome、Firefox、IEではデフォルトで何が起こるのですか?だからあなたのページのユーザー体験を悪化させないようにしてください。 – Louhike

+1

これはヒントであり、指示ではないため、デスクトップ上のみですが、良い点です。やや古いですが、https://www.stevesouders.com/blog/2013/04/12/html5-video-preload/ –

8

私は最近、デスクトップとモバイルで動作する最近のプロジェクトでこれを行いました。そのトリックはiPhone上で動作するようになっていました。

設定preload=metadataは、デスクトップおよびAndroid搭載端末では動作しますが、iPhoneでは動作しません。

iPhoneの場合、私はautoplayに設定しなければならなかったので、ポスター画像が最初の読み込み時に自動的に表示されるようにしました。 iPhoneはビデオの自動再生を妨げますが、結果としてポスター画像が表示されます。

ここで見つけたPavanの答えを使ってiPhoneのチェックをしなければなりませんでした。 Detect iPhone Browser。次に、デバイスに応じてautoplayの有無にかかわらず、適切なビデオタグを使用します。

var agent = navigator.userAgent; 
var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ; 

$videoTag = ""; 
if(isIphone()) { 
    $videoTag = '<video controls autoplay preload="metadata">'; 
} else { 
    $videoTag = '<video controls preload="metadata">'; 
} 
+1

を参照してください。この回答は、問題が発生する理由と回避策を示しています。iOS 10では、いくつかの条件が満たされている場合、autoplay属性が適用されることに注意してください。だから、実際の自動再生を防ぐために、すぐにビデオを一時停止するように全員に勧めたい。 –

+0

@Alessandroあなたは私たちがiOS 10でこれをどう扱うことができるかをいくつかのコードで表示できますか?ありがとうございます – Mourice

+1

'var video = document.createElement( 'video')のようなものです。 video.controls = true; video.preload = 'metadata'; if(isIphone){video.autoplay = true; video.pause(); } ' –

関連する問題