精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于WebCodecs的網頁端高性能視頻截幀

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

業務介紹

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

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

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

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

  • 封面推薦:截取多張低清圖在前端進行AI打分,基于打分結果截取最多10張高清圖供UP主選擇
  • 封面選幀:對默認推薦的幀不滿意,手動獲取準確時間點的幀畫面
  • 分區&話題推薦:從視頻中截取多幀,打包上傳至后臺進行分析后返回推薦結果

圖片圖片

圖片圖片

過去方案

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


Video + Canvas

WebAssembly + FFmpeg

流程

  • Video標簽 --> 設置video時間
  • canvas context 2d, drawImage()直接成圖

FFmpeg API調用+數據傳遞為主

  • 視頻文件解封裝
  • 逐個讀取關鍵幀圖像數據
  • 數據層層傳遞
  • web端進行圖像渲染(webgl / canvas)

優點

  • 開發簡單:利用瀏覽器內部的視頻播放器能力
  • 視頻支持性好:幾乎支持所有市面上可見的視頻格式(行業標桿)

缺點

  • 無法進行錯誤處理,有時會黑屏,但不報錯
  • 不同瀏覽器有形態各異的表現,速度和可用性難以保證
  • 播放器本身的緩存或預加載等機制帶來性能浪費
  • 性能損耗大:相比canvas截幀慢;
  • 內存消耗大:早期的wasm功能甚至會導致頁面崩潰;
  • 開發門檻高,需要了解ffmpeg lib的使用方式,要寫C代碼,需要手動構建各類基礎庫

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

  • 平均:8.4s
  • 50分位:16s
  • 90分位:19s

WebCodecs是什么

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

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

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

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

MP4的入門知識

視頻處理的基本概念

圖片圖片

編碼/解碼:

  • 視頻的編碼是將原始的圖像信息進行變換壓縮等處理,方便傳輸并保證圖像質量。解碼則是將壓縮后的文件還原成視頻需要的一連串圖像
  • 常見的編碼格式:H.265; mpeg4; vp9 ……

封裝/解封裝:

  • 一個視頻文件可能包含多個音頻和視頻流,通過封裝格式將他們聚合在一起,在使用時按照規則逐步解析
  • 常見的封裝格式:mov,mp4,m4a,3gp,3g2; matroska; flv; avi ……

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

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

利用人眼的生物特性結合數學方法進行數據壓縮,并確保圖片質量。主要步驟:

圖片圖片

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

圖片圖片

??

圖片圖片

原圖大小:1620*1080*3/1024/1204 = 4.25MB ----> 編碼后大小:856KB

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

編碼-幀間編碼

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

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

動態補償

圖片圖片

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

幀間差異

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

圖片圖片

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

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

圖片圖片

不同的幀類型

對應的,產生了三種幀類型

I 幀:俗稱的關鍵幀,僅使用了幀內編碼,可以被獨立還原為圖像

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

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

圖片圖片

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

封裝

MP4封裝文件基本結構:所有數據存放在box中

圖片圖片

WebCodecs截幀方案

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

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

圖片圖片

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

 元數據讀取&解析

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

圖片圖片

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

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

  • 該視頻的詳細編碼參數
  • 所有幀的索引信息

圖片圖片

尋幀

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

圖片圖片

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

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

整體過程

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

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

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

圖片

性能分析

本地測試:

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

圖片圖片

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

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

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

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

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

線上數據:

圖片圖片

圖片圖片

總結:

  • 隨著視頻規格的提升,webcodecs的截幀速度為wasm和canvas的 2.5~5 倍
  • 提前 3~13s 完成頁面所需的截幀任務,用戶能夠更快的看到推薦結果
  • 在內存消耗上有一定的降低

WebCodecs截幀方案的優點&缺點

優點

  • 速度很快,受視頻規格影響小
  • 讀取文件少
  • 內存占用有一定降低,且表現穩定

缺點

  • 依賴解封裝器的實現,當前使用了mp4box.js作為解封裝器,約能覆蓋95%的視頻
  • 目前僅mp4和webm的解封裝器較完善
  • WebCodecs瀏覽器支持性一般,當前為85%左右

規劃

  • 作為web投稿頁首選截幀方式,根據線上表現做進一步優化
  • 其他封裝格式的視頻支持:支持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

本期作者

張鋒嗶哩嗶哩資深開發工程師張鋒嗶哩嗶哩資深開發工程師




責任編輯:武曉燕 來源: 嗶哩嗶哩技術
相關推薦

2011-12-15 13:28:57

2024-04-28 10:17:30

gnetGo語言

2025-10-14 08:52:11

2015-06-01 07:02:12

云集群高性能計算

2022-01-29 14:09:45

編程語言PythonTaichi

2022-01-04 18:41:36

移動

2011-12-20 16:57:32

Blue Coat高性能CacheFlo網絡視頻

2023-04-07 12:30:04

開源ShmipcIPC

2025-02-05 12:09:12

2014-06-25 10:43:43

華為

2023-09-22 11:48:37

2009-11-16 19:11:29

HPCxeon高性能計算

2017-07-03 09:05:17

高性能視頻調度

2023-09-04 08:32:43

web開發圖像

2013-09-25 17:31:08

Storwize V5虛擬化存儲

2017-07-20 09:36:39

高性能存儲Z-NAND

2021-08-13 09:06:52

Go高性能優化

2014-11-25 10:03:42

JavaScript

2012-12-17 13:51:22

Web前端JavaScriptJS

2019-10-17 09:23:49

Kafka高性能架構
點贊
收藏

51CTO技術棧公眾號

午夜欧美不卡精品aaaaa| 欧美一区二区三区视频免费| 欧美资源一区| 国产成人精品无码播放| av在线免费播放网站| 久久se精品一区精品二区| 欧美精品在线网站| 波多野结衣a v在线| 日本免费一区二区三区等视频| 亚洲一区二区影院| 欧美另类视频在线| 国产wwwwwww| 久久久国产精品一区二区中文| www.亚洲男人天堂| 无码精品一区二区三区在线播放| jizz欧美| 欧美日韩亚洲网| 欧美精品一区二区性色a+v| 色噜噜在线播放| 狠狠色狠狠色综合日日91app| 91av在线不卡| 日韩影院一区二区| 国产91精品对白在线播放| 精品乱人伦小说| 少妇一级淫免费放| 台湾佬中文娱乐网欧美电影| 亚洲欧美电影院| 日韩不卡av| 污污网站免费在线观看| 国产精品一区二区三区99| 国产精品极品在线| 五月婷婷视频在线| 在线不卡视频| 色综合男人天堂| 国产3级在线观看| 精品国产欧美日韩| 精品视频在线观看日韩| 永久免费未满蜜桃| 亚洲国产欧美国产第一区| 欧美三级在线看| 亚洲国产精品毛片av不卡在线| av在线网页| 一区二区欧美国产| 午夜久久久久久久久久久| 日本中文在线观看| 中文字幕欧美三区| 图片区小说区区亚洲五月| 成人毛片在线精品国产| 国产成人精品免费| 91久久精品一区二区别| 在线免费一级片| 日韩av在线播放中文字幕| 日韩av电影在线网| 成年人免费高清视频| 亚洲精选91| 国产91成人在在线播放| 色婷婷av国产精品| 久久精品五月| 国产97免费视| 亚洲精品国产精品乱码视色| 日韩成人精品视频| 国产精品视频中文字幕91| 影音先锋黄色网址| 国精品**一区二区三区在线蜜桃| 成人激情视频在线| 久久精品波多野结衣| 国产精品va| 亚洲精品电影网在线观看| 国产精品一区二区在线免费观看| 北条麻妃一区二区三区在线观看| 欧美精品一区二| aaaaa一级片| 欧美禁忌电影网| 色av吧综合网| 欧美日韩精品亚洲精品| 亚洲第一黄色| 国产99在线|中文| 在线观看免费中文字幕| 国产v日产∨综合v精品视频| 国产综合精品一区二区三区| 国产在线高清| 亚洲欧美偷拍三级| 欧美精品一区二区三区三州| 亚洲成人短视频| 欧美精品1区2区| 99re这里只有| 青青草原综合久久大伊人精品 | 不卡中文一二三区| 日韩视频永久免费观看| 精品一区在线视频| 日韩专区欧美专区| 2014国产精品| 青青青免费视频在线2| 中文字幕一区二区三区蜜月| 官网99热精品| 久草福利在线| 一区二区三区丝袜| 亚洲成熟丰满熟妇高潮xxxxx| 小说区图片区亚洲| 亚洲国产精品久久久久| 亚洲高潮女人毛茸茸| 欧美久久视频| 国产精品久久久久免费a∨| 亚洲国产精品久久久久久久 | 日韩一区二区三免费高清| 北岛玲一区二区| 羞羞答答成人影院www| 亚洲嫩模很污视频| 国精品无码一区二区三区| 亚洲在线国产日韩欧美| 成人免费直播live| 免费毛片在线| 亚洲国产精品久久不卡毛片| 日韩一区二区三区久久| 香蕉久久夜色精品国产更新时间| 久久视频在线直播| 波多野结衣小视频| 99久久99久久综合| 久久av高潮av| 99亚洲男女激情在线观看| 亚洲日本成人网| 国产无精乱码一区二区三区| 国产一区二区三区综合| 日韩精品久久久免费观看 | 999国产精品| 国产成人精品久久二区二区| 午夜精品久久久久久久第一页按摩 | 日韩午夜电影在线观看| 欧美另类69xxxx| 男女av一区三区二区色多| 国模精品娜娜一二三区| 日本aa在线| 91精品久久久久久久91蜜桃| 人妻aⅴ无码一区二区三区| 在线视频亚洲| 久久本道综合色狠狠五月| 波多野结衣在线观看| 欧美一区二区三区四区高清| 99久久久无码国产精品不卡| 青青草国产成人av片免费| 日本午夜精品一区二区三区| 亚洲欧美小说色综合小说一区| 精品av久久707| 精品午夜福利视频| 国产suv一区二区三区88区| 成人高清dvd| xxxx日韩| 91成人性视频| 你懂的在线播放| 日本高清不卡视频| 超碰97av在线| 韩日欧美一区二区三区| 国产系列第一页| 精品中文在线| 欧美激情视频一区二区| 日本人妻丰满熟妇久久久久久| 亚洲国产精品一区二区久久恐怖片 | 黄页免费在线观看视频| 中文字幕在线直播| 亚洲嫩模很污视频| 中文字幕免费在线看| 国产精品视频yy9299一区| 中国黄色片一级| 欧美福利视频| 黑人另类av| 欧美日韩视频免费观看| 日韩在线视频网站| 午夜精品一二三区| 精品福利视频导航| 在线观看国产精品一区| 精品亚洲国内自在自线福利| 免费看日b视频| 色老板在线视频一区二区| 国产aⅴ夜夜欢一区二区三区 | 性欧美暴力猛交69hd| 视频一区二区三区国产| 欧美日韩情趣电影| 蜜桃av免费观看| 国产aⅴ综合色| 色综合av综合无码综合网站| 人人狠狠综合久久亚洲婷| 91精品入口蜜桃| 一个人www视频在线免费观看| 一色桃子一区二区| 丰满少妇在线观看bd| 欧美在线免费播放| 欧美黄色免费看| 国产亚洲成aⅴ人片在线观看| 在线免费黄色网| 国产日韩视频| 在线码字幕一区| 青青草这里只有精品| 国产精品一区二区在线| 黄色羞羞视频在线观看| 国产亚洲成av人片在线观看桃| 国产美女主播在线观看| 日韩欧美在线第一页| 免费高清在线观看电视| 久久精品一区二区三区不卡牛牛| 佐山爱在线视频| 日本aⅴ免费视频一区二区三区| 欧美一级中文字幕| 日韩精品欧美激情一区二区| 国产精品对白刺激久久久| 激情小说亚洲| 欧美一区二区大胆人体摄影专业网站| 久久精品视频观看| 亚洲欧洲在线免费| 日本免费网站在线观看| 日韩亚洲欧美一区| 这里只有久久精品视频| 欧美日韩国产影院| 妺妺窝人体色www在线下载| 欧美激情综合网| 亚洲狠狠婷婷综合久久久久图片| 国产精品一区二区91| 婷婷免费在线观看| 久久婷婷久久| 黄色一级视频片| 欧美三级网页| 老司机午夜网站| 日韩国产一区二区三区| 欧美日产一区二区三区在线观看| 国产欧美三级电影| caoporen国产精品| 国产精品va视频| 国产男女猛烈无遮挡91| 黄瓜视频成人app免费| 51午夜精品视频| 涩涩视频网站在线观看| 高清欧美性猛交xxxx| 日韩特级毛片| 欧美激情精品久久久久| √天堂8在线网| 久久综合九色九九| 国产精品久久久久久福利| 色偷偷亚洲男人天堂| av二区在线| 色妞在线综合亚洲欧美| 激情综合闲人网| 亚洲天堂男人天堂| 毛片免费在线播放| 亚洲午夜小视频| yourporn在线观看视频| 中文字幕精品—区二区| a天堂中文在线| 日韩中文字幕亚洲| av毛片在线看| 欧美激情视频三区| 欧亚在线中文字幕免费| 欧美专区日韩视频| 粉嫩一区二区三区| 国产精品色午夜在线观看| 久久xxx视频| 成人xxxxx| 久久天堂久久| 国产综合欧美在线看| 嫩草一区二区三区| 亚洲国产日韩美| 亚洲国产精品成人| 精品少妇人欧美激情在线观看| 激情视频一区二区三区| 欧美亚洲另类色图| 日本伊人午夜精品| 中文字幕视频三区| 成人精品在线视频观看| 蜜桃传媒一区二区亚洲av| 国产亚洲综合性久久久影院| 国产日产在线观看| 亚洲一区二区三区四区五区中文 | 欧洲精品视频在线观看| 在线观看日批视频| 精品日韩99亚洲| 毛片网站在线观看| 久久精品国产成人精品| 搞黄网站在线看| 国产成人精品久久久| 四虎国产精品成人免费影视| 成人一区二区在线| 国产成人一区| 一本色道久久88亚洲精品综合| 亚洲精选国产| 亚洲一区精品视频在线观看| 成人成人成人在线视频| 欧美午夜激情影院| 亚洲一区在线视频| 成人a v视频| 日韩三级中文字幕| 可以在线观看的黄色| 两个人的视频www国产精品| 美女91在线看| 成人亚洲激情网| 日韩理论电影中文字幕| 99精品一级欧美片免费播放| 亚洲欧美日韩国产综合精品二区| 久久黄色片网站| 久久嫩草精品久久久精品一| 三级av在线免费观看| 日本精品一区二区三区高清 | 精品国产av 无码一区二区三区 | 男生裸体视频网站| 亚洲嫩草精品久久| 欧美日韩a v| 亚洲护士老师的毛茸茸最新章节 | 97精品视频在线播放| 欧美啪啪网站| 欧洲精品久久| 亚洲天堂黄色| 免费欧美一级片| 国产精品午夜免费| 在线精品免费视| 精品国产在天天线2019| 日本最黄一级片免费在线| 日本三级韩国三级久久| 超碰地址久久| 日本丰满大乳奶| 另类综合日韩欧美亚洲| xxxx日本免费| 亚洲1区2区3区视频| 国产av无码专区亚洲a∨毛片| 中文字幕欧美专区| 日韩三级影视| 久久伊人一区| 日韩视频二区| 亚洲少妇一区二区三区| 亚洲激情五月婷婷| 国产免费av电影| 久久精品成人欧美大片| 国产精品99| 日韩中文一区| 秋霞午夜av一区二区三区| 丰满大乳奶做爰ⅹxx视频| 亚洲第一狼人社区| 午夜精品久久久久久久爽 | 亚洲美女中文字幕| 国产资源在线观看入口av| 国产高清精品一区| 国产精品vip| 黄色激情在线观看| 亚洲国产精品久久不卡毛片| 开心激情综合网| 久久频这里精品99香蕉| www.久久东京| 黄色免费视频大全| 2021国产精品久久精品| 成人免费毛片视频| 尤物精品国产第一福利三区| free欧美| 亚洲a∨一区二区三区| 久久国产夜色精品鲁鲁99| 香蕉成人在线视频| 欧美一区二区在线免费播放| 污污在线观看| 国产欧美日本在线| 性色一区二区| 五月婷六月丁香| 9191久久久久久久久久久| 少妇视频在线| 国产综合色一区二区三区| 久久精品国语| 特黄一区二区三区| 欧美一级欧美三级| gogo久久| 日韩高清国产精品| 韩国成人在线视频| 久草视频手机在线观看| 日韩av中文在线| jizz欧美| 久无码久无码av无码| 久久综合九色综合97婷婷女人| 精品国产www| 久久99久久久久久久噜噜| 欧美jizz19性欧美| 日本熟妇人妻中出| 亚洲视频在线一区观看| 色wwwwww| 国产在线精品自拍| 亚洲国产免费看| av网在线播放| 精品捆绑美女sm三区| 日本成人片在线| 老司机午夜免费福利视频| av在线不卡观看免费观看| 中文字幕在线网站| 国产做受69高潮| 日本一区二区在线看| 日本成人在线免费| 色天天综合久久久久综合片| 最新黄网在线观看| 欧美人与物videos另类| 国产伦精品一区二区三区在线观看 | 自拍偷拍欧美| a级在线观看视频| 欧美一级精品大片| 欧美专区福利免费| 免费在线看黄色片| 中文字幕高清一区| 五月天婷婷视频| 91gao视频| 美女视频一区在线观看|