我想知道是否有任何直接的方式來實現這種效果,而不需要後端代碼來提取框架,將其保存爲jpg和數據庫它的某個地方。動態使用第一幀作爲HTML5視頻中的海報?
當視頻加載時,視頻的第一幀剛剛顯示爲海報會產生很大的幫助(這隻有在瀏覽器能夠明顯播放視頻時才起作用,這可能與如何有所不同poster
傳統的作品,但是這不是一個問題。
我想知道是否有任何直接的方式來實現這種效果,而不需要後端代碼來提取框架,將其保存爲jpg和數據庫它的某個地方。動態使用第一幀作爲HTML5視頻中的海報?
當視頻加載時,視頻的第一幀剛剛顯示爲海報會產生很大的幫助(這隻有在瀏覽器能夠明顯播放視頻時才起作用,這可能與如何有所不同poster
傳統的作品,但是這不是一個問題。
有一個Popcorn.js插件叫做Popcorn.capture這將允許您從您的HTML5視頻的任意幀創建海報。
有一個由強加的限制瀏覽器禁止讀取跨域請求的資源的像素數據(使用畫布API記錄a的當前值)幀)。源視頻必須與腳本和html頁面託管在相同的域上,該頁面要求此方法起作用。
創建一個使用這個插件海報的代碼非常簡單:
// 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();
});
您可以將視頻元素上設置preload='auto'
自動加載視頻的第一幀。
只是一個建議的話:預加載意味着視頻可能會自動下載而無需用戶操作。這是默認情況下Chrome,Firefox和IE在桌面上發生的情況。所以請確保它不會惡化您的網頁上的用戶體驗。 – Louhike
好點,雖然這只是在桌面上的情況,因爲這是一個提示,而不是指令。有點過時,但請參閱https://www.stevesouders.com/blog/2013/04/12/html5-video-preload/ –
我最近爲一個最近在桌面和移動設備上工作的項目做了這個。訣竅是讓它在iPhone上運行。
設置preload=metadata
適用於桌面和Android設備,但不適用於iPhone。
對於iPhone手機,我必須將其設置爲autoplay
,以便海報圖像在初始加載時自動顯示。 iPhone會阻止視頻自動播放,但海報圖像顯示爲結果。
我不得不使用帕萬的答案在這裏找到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">';
}
該答案解釋了問題發生的原因並提供解決方法。請記住,在iOS 10中,如果滿足一些條件,則可以遵守autoplay屬性。所以我建議大家立即暫停視頻以防止實際的自動播放。 –
@Alessandro你可以展示一些代碼,我們可以如何處理這在ios 10這將是非常感謝 – Mourice
東西像'var video = document.createElement('video'); video.controls = true; video.preload ='元數據'; if(isIphone){video.autoplay = true; video.pause(); }' –
看起來像我需要的東西。無法讓爆米花本身工作,不幸的是..獲取'未捕獲的錯誤:INVALID_STATE_ERR:DOM異常11 popcorn.js:389 Popcorn.extend.Popcorn.forEach.ret popcorn.js:389'只要我叫它。 – Damon
看起來您並未等待視頻加載。我更新了上面的代碼示例,然後設置海報。 – Rick
謝謝..得到它的工作。無論如何,大多數情況下......我受到文檔「this.capture({at:1})」currentTime(0)的印象:'會從1秒鐘內抓住一張海報,然後將視頻放到開頭,但它在1秒內就會離開它。你有什麼經驗嗎? – Damon