国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于WebCodecs的網(wǎng)頁端高性能視頻截幀

這篇具有很好參考價值的文章主要介紹了基于WebCodecs的網(wǎng)頁端高性能視頻截幀。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本期作者

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

業(yè)務(wù)介紹

web投稿頁是B站的主要投稿來源,有很多高粉UP主使用web端進行投稿。

封面部分是投稿過程中耗時占比較高的步驟,因此在過去,web投稿頁已上線了自動的封面截取&推薦功能,有效提升了用戶體驗。同時在此過程中有了一定的技術(shù)積累。

自動封面功能依賴于對用戶上傳視頻進行截幀的能力,最簡單的方式是在上傳完成之后由服務(wù)端進行視頻截幀并返回推薦的候選封面,但顯然這一步會有大量的等待時間,因此我們采用的是純前端視頻截幀能力。

實際上在web投稿頁有多處需要截幀的地方:

  • 封面推薦:截取多張低清圖在前端進行AI打分,基于打分結(jié)果截取最多10張高清圖供UP主選擇

  • 封面選幀:對默認推薦的幀不滿意,手動獲取準確時間點的幀畫面

  • 分區(qū)&話題推薦:從視頻中截取多幀,打包上傳至后臺進行分析后返回推薦結(jié)果

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

過去方案

過去web投稿頁采取兩套視頻截幀方案,wasm優(yōu)先,canvas兜底

Video + Canvas

WebAssembly + FFmpeg

流程

  • Video標簽 --> 設(shè)置video時間

  • canvas context 2d, drawImage()直接成圖

FFmpeg API調(diào)用+數(shù)據(jù)傳遞為主

  • 視頻文件解封裝

  • 逐個讀取關(guān)鍵幀圖像數(shù)據(jù)

  • 數(shù)據(jù)層層傳遞

  • web端進行圖像渲染(webgl / canvas)

優(yōu)點

  • 開發(fā)簡單:利用瀏覽器內(nèi)部的視頻播放器能力

  • 視頻支持性好:幾乎支持所有市面上可見的視頻格式(行業(yè)標桿)

缺點

  • 無法進行錯誤處理,有時會黑屏,但不報錯

  • 不同瀏覽器有形態(tài)各異的表現(xiàn),速度和可用性難以保證

  • 播放器本身的緩存或預(yù)加載等機制帶來性能浪費

  • 性能損耗大:相比canvas截幀慢;

  • 內(nèi)存消耗大:早期的wasm功能甚至會導(dǎo)致頁面崩潰;

  • 開發(fā)門檻高,需要了解ffmpeg lib的使用方式,要寫C代碼,需要手動構(gòu)建各類基礎(chǔ)庫

現(xiàn)狀:截幀成功率97%左右,封面推薦耗時(去掉極端數(shù)據(jù))

  • 平均:8.4s

  • 50分位:16s

  • 90分位:19s

WebCodecs是什么

WebCodecs于21年9月份推出,是用于在web頁面上對音視頻進行底層操縱(如編解碼)的API。

WebCodecs是相對底層的API,準確來說是為有音視頻開發(fā)基礎(chǔ)的人準備的,對前端同學來說有一定的門檻。

在使用FFmpeg時可直接調(diào)用包裝好的方法,主要門檻在于wasm環(huán)境的配置和構(gòu)建。而使用WebCodecs時則需要基于編解碼的原理手動實現(xiàn)功能。或許后續(xù)WebCodecs將會推出更加上層的API。

所以在進一步介紹WebCodecs截幀方案之前,我想先介紹一些視頻處理的入門知識,感興趣的可以參考附錄中的鏈接進一步學習。

MP4的入門知識

視頻處理的基本概念

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

編碼/解碼:

  • 視頻的編碼是將原始的圖像信息進行變換壓縮等處理,方便傳輸并保證圖像質(zhì)量。解碼則是將壓縮后的文件還原成視頻需要的一連串圖像

  • 常見的編碼格式:H.265; mpeg4; vp9 ……

封裝/解封裝:

  • 一個視頻文件可能包含多個音頻和視頻流,通過封裝格式將他們聚合在一起,在使用時按照規(guī)則逐步解析

  • 常見的封裝格式:mov,mp4,m4a,3gp,3g2; matroska; flv; avi ……

在這里簡單介紹下.mp4文件常用的h264編碼以及MP4封裝

編碼-幀內(nèi)編碼(以JPEG圖片壓縮算法為例)

利用人眼的生物特性結(jié)合數(shù)學方法進行數(shù)據(jù)壓縮,并確保圖片質(zhì)量。主要步驟:

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

具體流程在這就不展開了,總之,經(jīng)過壓縮后圖片的文件大小將有非常顯著的縮小

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

??

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

原圖大?。?620*1080*3/1024/1204 = 4.25MB ----> 編碼后大?。?56KB

PS:效果僅供參考,兩者皆為經(jīng)過JPEG壓縮的圖片,只不過壓縮比不同

編碼-幀間編碼

盡管經(jīng)過幀內(nèi)編碼的壓縮,圖片已經(jīng)有了很明顯的體積減少,但存儲視頻的每一幀是依然是很不明智的行為。因此需要幀間編碼。

通常有兩種方式進行幀間編碼:動態(tài)補償+幀間差異

動態(tài)補償

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

通常,兩個連續(xù)的幀之間是存在相同部分的,只是位置發(fā)生了變化因此可以通過存儲 塊的索引 + 偏移量(向量)以減少存儲體積

幀間差異

僅有動態(tài)補償還不夠還原每一幀的畫面,還需要通過兩幀之間的diff幀來輔助還原

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

diff幀的畫面通常信息量比較低,因此通過幀內(nèi)壓縮會獲得很高的壓縮比

使用這兩種方法,結(jié)合上一幀參考幀,便可以獲得當前幀了

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

不同的幀類型

對應(yīng)的,產(chǎn)生了三種幀類型

I 幀:俗稱的關(guān)鍵幀,僅使用了幀內(nèi)編碼,可以被獨立還原為圖像

P幀:幀的圖像還原依賴前一幀的解碼結(jié)果

B幀:幀的圖像還原依賴前一幀與后一幀的解碼結(jié)果

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

幀的展示順序與解碼順序可能是不一樣的

封裝

MP4封裝文件基本結(jié)構(gòu):所有數(shù)據(jù)存放在box中

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

WebCodecs截幀方案

設(shè)想一個問題:只使用一個編程語言的基本API,如何最高效地獲取一個.mp4文件中的某一個時間點所在的圖像?

在了解了上面的基本知識后,我們可以分4步解決這個問題:

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

不同于播放器:截幀不需要預(yù)解碼緩存等步驟。為了保證性能,需要多少數(shù)據(jù)拿多少,拿多少處理多少,避免多余的文件讀取和解析造成性能和內(nèi)存的浪費。

?元數(shù)據(jù)讀取&解析

1. 讀取文件頭部8byte的數(shù)據(jù),按照box的header規(guī)則逐個獲取各box的位置以及大小

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

PS:moov可能在文件的末尾,順序不固定

2. 將moov box所在文件塊切片,提供給解封裝器解析,獲取到:

  • 該視頻的詳細編碼參數(shù)

  • 所有幀的索引信息

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

尋幀

策略:幀的時間戳并不是連續(xù)的的 → 某個時間點對應(yīng)的幀可能并不存在 → 使用距離最近的幀

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

獲取到最近的關(guān)鍵幀和非關(guān)鍵幀之后,則要根據(jù)截幀的需求提供不同的文件塊給解碼器解碼

只提供關(guān)鍵幀速度更快,適合精度不高的場景(封面推薦),準確截幀適合精度要求高的場景(封面選幀)

整體過程

由于解封裝器(mp4box.js)和解碼器(WebCodecs-VideoDecoder)本身為流式設(shè)計,優(yōu)先服務(wù)于流式的應(yīng)用場景(如直播視頻流,點播視頻流,需要通過網(wǎng)絡(luò)請求分塊獲取到文件內(nèi)容)。而視頻截幀是一個本地場景,已經(jīng)有了完整的文件。且視頻截幀的API最好是類似同步的方式,在一個方法調(diào)用中完成所有的幀截取,并一起返回。

因此設(shè)計了通過事件拋出以及定時器機制以達到對內(nèi)部流式依賴庫的包裝。

同時將計算密集的解封裝、解碼、渲染工作擋在獨立的web worker中執(zhí)行,確保宿主頁面運行流暢不受影響。

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

性能分析

本地測試:

測試機上模擬了web投稿頁場景,對WebCodecs / WebAssembly / Canvas 三種截幀方式的性能進行了測試。

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

測試樣本:720p視頻2個,1080p視頻3個,2k視頻1個,4k視頻3個

測試環(huán)境:2020 M1 MacBook pro, 公司測試windows本(i5-1135G7 1.38~2.40GHz)

測試方式:在不同測試機上對每個視頻跑三次測試用例,共81次

測試用例:模擬web投稿頁截幀流程,數(shù)量,分辨率保持相同

實際場景中:視頻的編碼,分辨率,壓制參數(shù)等都會對截幀性能有影響,在這里以分辨率進行粗略的分類

線上數(shù)據(jù):

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

基于WebCodecs的網(wǎng)頁端高性能視頻截幀,音視頻,前端

總結(jié):

  • 隨著視頻規(guī)格的提升,webcodecs的截幀速度為wasm和canvas的 2.5~5 倍

  • 提前 3~13s 完成頁面所需的截幀任務(wù),用戶能夠更快的看到推薦結(jié)果

  • 在內(nèi)存消耗上有一定的降低

WebCodecs截幀方案的優(yōu)點&缺點

優(yōu)點

  • 速度很快,受視頻規(guī)格影響小

  • 讀取文件少

  • 內(nèi)存占用有一定降低,且表現(xiàn)穩(wěn)定

缺點

  • 依賴解封裝器的實現(xiàn),當前使用了mp4box.js作為解封裝器,約能覆蓋95%的視頻

  • 目前僅mp4和webm的解封裝器較完善

  • WebCodecs瀏覽器支持性一般,當前為85%左右

規(guī)劃

  • 作為web投稿頁首選截幀方式,根據(jù)線上表現(xiàn)做進一步優(yōu)化

  • 其他封裝格式的視頻支持:支持webm封裝格式(已支持,且開源了mkv demuxer)

  • 開源

附錄

jpeg壓縮算法介紹:

  • 我站:https://www.bilibili.com/video/BV1TZ4y1S7iG

  • 知乎:影像算法解析——JPEG 壓縮算法 - 知乎(https://zhuanlan.zhihu.com/p/40356456)

視頻編碼介紹:https://www.youtube.com/watch?v=QoZ8pccsYo4

不同的幀類型:I, P, and B-frames - Differences and Use Cases Made Easy - OTTVerse(https://ottverse.com/i-p-b-frames-idr-keyframes-differences-usecases)

codec string的含義([avc1.4d0033]代表什么):Codecs in common media types - Web media technologies | MDN(https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter#using_the_codecs_parameter)

MP4封裝類型介紹:mp4封裝格式各box類型講解及IBP幀計算 - 知乎(https://zhuanlan.zhihu.com/p/457888765)

在線MP4解析工具:Online Mp4 Parser(https://www.onlinemp4parser.com/)

WebCodecs官方說明:WebCodecs(https://w3c.github.io/webcodecs/#videodecoder-interface)

WebCodecs代碼示例:https://github.com/w3c/webcodecs文章來源地址http://www.zghlxwxcb.cn/news/detail-833233.html

到了這里,關(guān)于基于WebCodecs的網(wǎng)頁端高性能視頻截幀的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于高性能計算環(huán)境的HPC算力編程模式

    摘要 【目的】 隨著云計算、大數(shù)據(jù)、人工智能等技術(shù)的興起和廣泛應(yīng)用,促進了基于多元算力的融合計算發(fā)展。在國家“東數(shù)西算”戰(zhàn)略的指引下,充分發(fā)揮HPC算力優(yōu)勢,提供新型HPC算力編程模式,是新一代計算基礎(chǔ)設(shè)施可編程能力的重要變革。 【方法】 分析了高性能計算環(huán)境

    2024年02月02日
    瀏覽(19)
  • 字節(jié)跳動開源 Shmipc:基于共享內(nèi)存的高性能 IPC

    字節(jié)跳動開源 Shmipc:基于共享內(nèi)存的高性能 IPC

    動手點關(guān)注 干貨不迷路 CloudWeGo - Shmipc?是字節(jié)跳動服務(wù)框架團隊研發(fā)的 高性能進程間通訊庫 ,它基于 共享內(nèi)存 構(gòu)建,具有 零拷貝 的特點,同時它引入的同步機制具有 批量收割 IO 的能力,相對于其他進程間通訊方式能明顯提升性能。在字節(jié)內(nèi)部,Shmipc 應(yīng)用于 Service Mesh 場

    2023年04月08日
    瀏覽(27)
  • 基于Springboot3+微服務(wù)實現(xiàn)12306高性能售票系統(tǒng)

    基于Springboot3+微服務(wù)實現(xiàn)12306高性能售票系統(tǒng)

    ??博主介紹:全網(wǎng)CSDN特邀作者、博客專家、CSDN新星計劃導(dǎo)師、全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質(zhì)作者。 專注于Java、小程序技術(shù)領(lǐng)域和畢業(yè)項目實戰(zhàn)?? ?Java、SSM+Vue、SpringBoot+Vue、NodeJS+Vue、微信小程序、Python、大數(shù)據(jù)、安卓。 你想要的我

    2024年02月20日
    瀏覽(100)
  • 基于lvs+keepalived+nginx的web高性能集群項目

    基于lvs+keepalived+nginx的web高性能集群項目

    模擬企業(yè)里的web項目需求,最終目的是構(gòu)建一個高性能高可用的web集群系統(tǒng)。部署lvs負載均衡系統(tǒng)和keepalived高可用軟件,后端使用nginx做web服務(wù)器,同時搭建內(nèi)部的一套基于prometheus的監(jiān)控系統(tǒng)。使用ansible實現(xiàn)整個集群系統(tǒng)的自動化運維工作。 ceotos7 nginx1.25.3 node_exporter-1.4.0

    2024年02月20日
    瀏覽(18)
  • 網(wǎng)易NDH基于Impala的高性能SQL引擎建設(shè)實踐

    網(wǎng)易NDH基于Impala的高性能SQL引擎建設(shè)實踐

    導(dǎo)讀:本文將從四個方面來進行介紹。首先是分析在網(wǎng)易NDH中使用 Impala 過程遇到的一些痛點;第二個部分是基于這些痛點問題,我們提出了建設(shè)高性能SQL引擎的方案,以及這些方案是基于什么原則來創(chuàng)建的;第三個是基于這些原則,我們做了哪些的優(yōu)化實踐的嘗試;最后會

    2024年02月09日
    瀏覽(28)
  • 高性能計算實驗——矩陣乘法基于MPI的并行實現(xiàn)及優(yōu)化

    高性能計算實驗——矩陣乘法基于MPI的并行實現(xiàn)及優(yōu)化

    熟練掌握MPI編程方法,并將通用矩陣乘法轉(zhuǎn)為MPI并行實現(xiàn),進一步加深MPI的使用與理解。 進一步熟悉MPI矩陣乘法的實現(xiàn),學習MPI點對點通信與集合通信的異同點和各自的優(yōu)缺點,學會比較二者的性能以及各自使用的情形。 學習如何將自己編寫的代碼改造為標準庫函數(shù),供其

    2024年02月03日
    瀏覽(31)
  • 基于 Redis 實現(xiàn)高性能、低延遲的延時消息的方案演進

    基于 Redis 實現(xiàn)高性能、低延遲的延時消息的方案演進

    ??歡迎來系統(tǒng)設(shè)計專欄:基于 Redis 實現(xiàn)高性能、低延遲的延時消息的方案演進 ??其他專欄:java面試?數(shù)據(jù)結(jié)構(gòu)?源碼解讀?故障分析 ??作者簡介:大家好,我是小徐?? ??博客首頁:CSDN主頁 小徐的博客 ??每日一句: 好學而不勤非真好學者 ?? 歡迎大家關(guān)注! ?? 隨著

    2024年01月22日
    瀏覽(21)
  • 基于k8s的高性能高可用的web集群

    基于k8s的高性能高可用的web集群

    模擬公司里的k8s生產(chǎn)環(huán)境,部署web,MySQL,nfs,harbor,Prometheus,Jenkins等應(yīng)用,構(gòu)建一個高性能高可用的web集群 CentOS7,k8s,docker,Prometheus,nfs,jumpserver,harbor,ansible,Jenkins等 k8s-master:192.168.121.101 k8s-node1:192.168.121.102 k8s-node2:192.168.121.103 nfs:192.168.121.104 harbor:192.168.121

    2024年04月28日
    瀏覽(26)
  • 【大數(shù)據(jù)】Doris:基于 MPP 架構(gòu)的高性能實時分析型數(shù)據(jù)庫

    【大數(shù)據(jù)】Doris:基于 MPP 架構(gòu)的高性能實時分析型數(shù)據(jù)庫

    Apache Doris 是一個基于 MPP ( Massively Parallel Processing , 大規(guī)模并行處理 )架構(gòu)的高性能、實時的分析型數(shù)據(jù)庫,以極速易用的特點被人們所熟知,僅需亞秒級響應(yīng)時間即可返回海量數(shù)據(jù)下的查詢結(jié)果,不僅可以支持高并發(fā)的點查詢場景,也能支持高吞吐的復(fù)雜分析場景?;?/p>

    2024年02月11日
    瀏覽(26)
  • OpenResty安裝-(基于Nginx的高性能Web平臺,可在Nginx端編碼業(yè)務(wù))

    OpenResty安裝-(基于Nginx的高性能Web平臺,可在Nginx端編碼業(yè)務(wù))

    首先你的Linux虛擬機必須聯(lián)網(wǎng) 首先要安裝OpenResty的依賴開發(fā)庫,執(zhí)行命令: 你可以在你的 CentOS 系統(tǒng)中添加 openresty 倉庫,這樣就可以便于未來安裝或更新我們的軟件包(通過 yum check-update 命令)。運行下面的命令就可以添加我們的倉庫: 如果提示說命令不存在,則運行:

    2024年02月07日
    瀏覽(53)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包