Chromium站點上有個大致的框圖。描寫敘述了Chromium的video在各個平台 - 包含Android - 上是怎樣使用硬件資源來做視頻編解碼加速的:
而依據Android Kitkat上的Chromium代碼分析,HTML5 video播放硬件加速,終於是使用MediaCodec.java來利用本地native的硬件資源來做video視頻播放加速的。
Chromium的MediaPlayer或稱MediaFramework,
首先是HTMLMediaElement調用一個MediaPlayer;
接着MediaPlayer調用一個WebMediaPlayerClientImpl,后者再調用一個WebMediaPlayerImpl;
而WebMediaPlayerImpl終於調用Pipeline來表示播放的視音頻A/V的Pipeline。
Chromium的MediaPlayer / MediaFramework的大致框圖例如以下:
Pipeline里面實際包括demuxer, decoder, renderer。decoder的實現既有FFmpeg的實現,也有Google的libvpx的實現。還有平台相關的硬件加速的實現GpuVideoDecoder。
在Android Kitkat上,則是通過VideoDecodeAccelerator / AndroidVideoDecodeAccelerator調用MediaCodec來實現的。
大致框圖例如以下(僅僅畫decoder):
參考:
https://docs.google.com/document/d/1LUXNNv1CXkuQRj_2Qg79WUsPDLKfOUboi1IWfX2dyQE/preview#