關(guān)于網(wǎng)頁 硬解 軟解 H264 HEVC 和你電腦起飛了那點(diǎn)事…
雖然我群里天天在炸這點(diǎn)事最近。我覺得你們也不是很急著我發(fā)這玩意。發(fā)了其實(shí)也沒啥人看。呵呵…但還是說說吧。手機(jī)寫的 盡量說清楚。
首先 先來介紹最原始的方式…Video標(biāo)簽。
就HTML里寫一個(gè)標(biāo)簽video 告訴它你的視頻地址就能播放了~是不是很神奇?但是有一些限制:
1.不是所有的封裝格式都支持。比如HLS FLV就不支持
2. 不是所有的編碼格式都支持。比如HEVC就不支持。
視頻的播放其實(shí)就?解封裝 解碼 然后就是一幀一幀的圖像再按時(shí)間展現(xiàn)。就這么點(diǎn)事兒…其中解封裝CPU占用率低 解碼CPU/GPU占用率高。
這就產(chǎn)生了第二種方式:
JS解封裝,重新封裝成瀏覽器可識(shí)別的封裝格。比如著名的HLS.js flv.js 或是之前在熊貓寫的Mccree(當(dāng)時(shí)因?yàn)橐獮橹辈プ鎏厥獾膸?以及在裸H264流層搞了點(diǎn)事情。所以重寫了)或者在頭條寫的xgplayer(也是為了搞事情)都屬于這一類。但是這樣一來 解碼仍然是交給瀏覽器的。仍然面臨第二個(gè)問題。
不是所有的編碼格式都支持!
然后衍生出了第三種方案。第二種方式解出來的HEVC裸流不再進(jìn)行重封裝。也不給瀏覽器解嗎了。C寫的解碼器庫打包成webassambly 也就是wasm文件。解碼,然后webgl 播放。至于這兩層代碼…xgplayer 和mccree都是開源的。找不著私我。
然后引入了新的問題。
1.wasm是沙盒環(huán)境 用不了顯卡的解碼器(別跟我說OpenGL。顯卡圖形和圖像就不在一個(gè)模塊,我說的是解碼器)所以只能軟解。
2.wasm和JS數(shù)據(jù)交互是打包時(shí)分配的固定內(nèi)存。也就是一旦用了。內(nèi)存占用,你設(shè)置的內(nèi)存大小打底。打包時(shí)候設(shè)置大了內(nèi)存占用怎么優(yōu)化都別想下來。設(shè)置小了,一旦JS取數(shù)據(jù)不及時(shí)就崩盤。分辨率高的…你敢設(shè)置小么?
總結(jié)一下

1 H264一般是瀏覽器解碼。默認(rèn)狀態(tài)下硬解碼(GPU運(yùn)算)強(qiáng)行關(guān)閉硬解碼會(huì)軟解。
2 HEVC web端只能用wasm軟解。沒其他辦法。
3 H264如果電腦起飛 可以考慮更新瀏覽器版本或換一個(gè)。實(shí)在不行換電腦。
4 HEVC解碼電腦起飛特別正常。但是可以催促平臺(tái)優(yōu)化解碼器的代碼。因?yàn)榻獯a器是平臺(tái)寫的。(向官方反饋,不負(fù)責(zé)傳話)
最后
群:711929228
答案自己百度一下。