Chrom{e,ium}{,OS}中的硬件視頻加速
全書地址
Chromium中文文檔 for https://www.chromium.org/developers/design-documents
持續更新ing,歡迎star
gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//
github地址: https://github.com/ahangchen/Chromium_doc_zh
Ami Fischman <[email protected]>
Status as of 2014/06/06: Up-to-date
(可以得到更多的細節)
介紹
視頻解碼(e.g. Youtube點播)和編碼(e.g. 視頻聊天應用)是現代網絡中最複雜的計算操作之一。將這些操作從運行在通常目的的CPU移動到指定的硬件塊意味着更低的電力消耗,更長的電池壽命,更高的質量(e.g. HD而非SD),更好的交互表現(因爲CPU可以被其他需要做的事情佔滿)。
設計
media::VideoDecodeAccelerator (VDA) 和 media::VideoEncodeAccelerator (VEA) (有他們對應的客戶端子類)是Chrome中所有視頻硬件加速的中心接口。每個硬件加速的消費者實現相關的客戶端接口,調用一個相關的V[DE]A對象。
通常這些類想要編碼或解碼存在於渲染器進程中的視頻(e.g.<video>播放器,或者WebRTC的視頻解編碼器),被使用的硬件在渲染器進程內是不可訪問的,所以IPC被用於連接渲染器<->GPU進程。
實現細節
加速API的主要使用者是:<video>管道(在web上展示媒體信息),WebRTC(使得web上脫離插件的實時視頻聊天變得可能),Pepper API(爲pepper插件比如Adobe Flash提供硬件加速)。
實現硬件加速API與操作系統相關(有時候也與硬件平臺相關),因爲操作系統和驅動/硬件表示層提供了極度不同的各種選項。
(沒有畫出的部分: 過時的基於OpenMAX-IL的OVDA, 以及不會啓動的MacVDA).
當前狀態
新的設備層出不窮,所以這個列表很可能已經過時了,但在2014年六月上旬,已有的(公開)支持包括:
解碼
- Windows: 從Windows 7開始, h.264的硬件加速解碼被用於DXVAVDA.
- CrOS/Intel (一切過去的Mario/Alex/ZGB): h.264的硬件加速解碼被用於VAVDA
- CrOS/ARM: V4L2VDA可以使用h.264和VP8的硬件加速解碼
- Android: 在N10, N5,和一些S4, 以及一些其他設備上, VP8的硬件加速解碼可用。(注意在Android上這是用於WebRTC,因爲沒有PPAPI,並且<video>標籤使用平臺自己的播放器)
Encode
- CrOS/ARM: V4L2VEA可以使用h.264的硬件加速編碼(任何地方),以及VP8(2014年的設備)
- Android: N5上可以使用VP8硬件加速編碼
結果
一般來說,從CPU去掉編解碼,轉到指定的硬件上,根據平臺/工作負載等的不同,可以延長電池10%-25%的壽命。一些數據例子可以在這裏看:
公開: 133827#c27, 219957#c16
google內部: summary slide deck, CrOS/ARM-1, CrOS/ARM-2