瀏覽器

淺談 Web EME API

淺談 Web EME API

什麼是 EME? EME 是簡稱,全名 Encrypted Media Extensions (加密媒體擴充 API),它現在是瀏覽器標準內建的 Web API,讓瀏覽器可以播放受 DRM 保護的影片。使用它的核心目標是讓 HTML5 <video> 支援加密內容,並確保只有合法授權的使用者能夠解碼和播放影片。 要注意的是: EME 不負責解密影片,它只是 API,提供 Interface 與電腦底層 DRM 系統溝通的機制。 為什麼需要 EME? 早年大多數的線上影音網站使用 Flash 或 Silverlight 來播放影片(這些技術也有實作 DRM 的保護機制,例如 Flash 的 Flash Media Rights Management、
SimonAllen
iOS Safari 播放器全螢幕強制進入原生播放器

iOS Safari 播放器全螢幕強制進入原生播放器

系統限制 Web 工程師在做影音播放器功能時,容易遇到在 iOS Safari 播放器點擊全螢幕,會進入 Safari 原生播放器的議題。當影片進入全螢幕模式後,會使用 iOS 原生的影片播放器介面,因此無法客製化全螢幕的 UI 介面。 Windows Browser (ex: Chrome) Mac Safari iOS Safari Android Browser (ex: Chrome) 非全螢幕 顯示客製化 UI 顯示客製化 UI 顯示客製化 UI 顯示客製化 UI 全螢幕 顯示客製化 UI 顯示客製化 UI 強制切入原生播放器 顯示客製化 UI 此功能導致影響 廣告造成體驗不佳 目前觀察到播放中出現廣告時,會從全螢幕原生播放器「
SimonAllen
瀏覽器影音限制:自動播放與靜音

瀏覽器影音限制:自動播放與靜音

為什麼網頁自動播放需要靜音? 自動播放的聲音可能會影響使用者的瀏覽體驗。舉例來說,各位早期網路世代的使用者,一定都被打開某些網站跳出 Jumpscare 嚇過,輕一點則是剛打開網頁,被背景播放的奇怪音樂震撼到,為了避免這種嚇到使用者的行為,現代瀏覽器(如 Chrome、Firefox 和 Safari)已預設禁止未靜音的影音檔自動播放。 請參考 https://developer.chrome.com/blog/autoplay?hl=zh-tw 上面這篇是最重要的,建議先看過再往下看。 Chrome 自動播放政策 * 一律允許靜音自動播放。 * 僅在下列情況下,系統允許使用有聲音自動播放影片的情況: * 使用者已與此 domain 網域互動 (點擊、輕觸、滑動..etc)。 * 當使用者在電腦上的媒體參與度指數門檻時超過了門檻,代表使用者先前已播放有聲影片。 * 使用者已將網站新增至行動裝置主畫面,或在電腦上安裝 PWA。 * 熱門影格可以將自動播放權限委派給自己的 iframe,以便自動播放有聲的功能。 最重要的是這個: * 使用者已與此
SimonAllen
改善網站效能:將 icon 轉為 font 字型

改善網站效能:將 icon 轉為 font 字型

現代網站設計中充滿了各式各樣的 icon,若是自有品牌或產品,設計師更常會為了強化視覺一致性而客製一整套的 icon 圖示。 而從我們工程師的角度來看,icon 本質上就是一種圖片,既然是圖片的一種形式,當 icon 使用量一多,自然就會牽涉到與圖片相同的效能問題。為什麼 icon 太多會影響效能? 為什麼 icon 太多會影響效能? 通常 icon 是以圖片檔案(例如: SVG 或 PNG )呈現,若網站載入時每個 icon 圖示都會觸發一個 HTTP Request,不僅延長載入時間,一次大量圖片載入會增加 Render 渲染時間或主執行緒負擔。 別忘了,Client Browser 的 JavaScript 執行是單執行緒,無論是同步或非同步操作,本質上都還是在爭奪主執行緒資源。如果沒有另外開啟 Web Worker,圖片的下載、解析與渲染過程都會壓在主執行緒上,
SimonAllen
自 Chrome 109 版本開始靜音影片在切換分頁會被暫停..?

自 Chrome 109 版本開始靜音影片在切換分頁會被暫停..?

這是一篇隨手紀錄,大概在 1/30 收到回報。 若進入播放頁是預設靜音 + 自動播放時,切換到其他瀏覽器 tabs 分頁一段時間再切回來,會發現原本播放頁的影片是被暫停又重新播放的。 但是..但是瀏覽器的行為原本不是這樣啊!!! 排查過程 測試影片平台 * 公司平台任何一部影片 * Youtube 平台任何一部影片 錯誤複現 * 使用 Chrome 進入目前的播放頁 * 或是把有播放器自動播放且靜音的網頁作為該網站的首次進入點(ex:Youtube 播放頁)也就是初次打開網站即遇見播放器,即可複現此一情境。 排查方向 瀏覽器 核心版本 影片平台 是否複現(暫停影片) Chrome Chromium 109 Youtube 是 Brave Chromium 108 Youtube 否 Edge Chromium 108 Youtube 否 Firefox
SimonAllen

關於 Chrome User-Agent Reduction

前陣子在處理公司應 Chrome User-Agent Reduction Plan 政策,盤點可能受影響之程式碼,這裡也記錄一下 User-Agent Reduction 這件事: 先說結論:User-Agent Reduction 旨在減少 user-agent 字串多餘資訊(或多餘的次版號)單純拿 user-agent 字串判斷的程式碼頂多 match 不到而已,應不至於造成 JS 扔出錯誤 以 https://developer.chrome.com/docs/privacy-sandbox/user-agent/#why-do-we-need-reduced-ua-and-ua-ch 內容來看: The reduced User-Agent includes the browser's brand and a significant version, where
SimonAllen
錯誤處理:開發 Client 別忘了實作 Error View 錯誤畫面

錯誤處理:開發 Client 別忘了實作 Error View 錯誤畫面

在 Web 前端中,若 JS Runtime 發生錯誤(例如存取 undefined 的屬性),頁面往往會直接變成一片空白,沒有任何提示,讓使用者以為網頁整個掛了。 雖然這對效能沒有幫助,但對使用者體驗來說卻非常關鍵。很多 Web 網站並未針對錯誤做處理。 常見情境 當 Web JS 拋出錯誤或後端 API 欄位漏給資訊,JavaScript 取用 response 不存在的物件 null 、undefined下另個不存在的值,就會拋出錯誤,若是沒實作 try-catch 或拋出的錯誤在元件樹層層傳遞都沒被接住,瀏覽器就會一片空白。 這在產品開發上是不太能接受的,通常會有個「something went wrong」的錯誤畫面,提醒使用者網頁壞囉。 例如 2020年 youtube 有爆掉過一次,大家就看猴子一個下午。 面對預料外的錯誤,Client
SimonAllen