通用浏览器内核介绍
浏览器内核 |
主要浏览器实现 |
其他实现(部分双内核) |
WebKit2/WebKit |
Apple Safari |
midori,QQ浏览器(极速模式),遨游,搜狗,opera |
Gecko |
Mozilla FireFox |
netscape, waterfox |
Blink |
Google Chromium and Chrome |
Opera,360浏览器,猎豹浏览器,opera |
Trident |
MS Internet Explorer(IE) |
世界之窗(theworld),360浏览器,猎豹浏览器,百度浏览器,QQ浏览器(普通模式),遨游,搜狗 |
edgehtml/chromium |
MS edge browser (前期edgehtml后续使用chromium内核) |
windows 10 |
这里面opera浏览器比较特殊,它最初是自己的Presto内核,后来是Webkit,现在是Blink内核, 虽然google Blink内核是它的upstream,但是opera并不开源,所以网上也下载不到它的源代码。
开源浏览器内核-多媒体后端
浏览器内核 |
多媒体后端框架 |
实现方案 |
其它 |
状态 |
blink |
ffmpeg |
ffmpeg软解(默认_ ffmpeg+gpu(nv,amd,intel) ffmpeg+omxil(树莓派) |
nvidia gpu:支持cuda加速 intel gpu:支持vaapi加速 树莓派:ffmpeg + mmal |
未实现 |
webkitgtk |
gstreamer + OmxIL or libav |
软件解码方案:gst + libav 硬件解码方案:gst + omxil |
硬件方案通过omxil对接 cedarc vpu driver |
已实现 已验证 |
gecko |
ffmpeg Omx(DL,IL) |
最新版本全部使用 ffmpeg方案 |
/ |
未实现 |
chromium/chrome | ffmpeg | ffmpeg + VPU加速 | / | / |
其中树莓派上mmal实际上是针对BCM vpu openmaxil实现的一层瘦封装.
FFMPEG硬件加速方案
VA-API: Video Acceleration API (VA-API) 实现库参考libva,vendor: intel
DxVA:DirectX Video Acceleration, Vendor: microsoft.
VDPAU:Video Decode and Presentation API for Unix,Vendor: NVIDIA, 实现库参考:libvdpau,DPAU被认为在X窗口系统下等同于Windows下的DxVA。
NVDEC/NVENC: NVIDIA Decoder/NVIDIA Encoder. Vendor: Nvidia.
mediacodec:MediaCodec是一个Codec,通过硬件加速解码和编码。它为芯片厂商和应用开发者搭建了一个统一接口。MediaCodec几乎是所有安卓播放器硬解的标配,MediaCodec是一个统一API,支持不同编码格式,在创建MediaCodec的时候需要根据视频编码选择合适的解码器。这是通过MediaCodec.createByCodecName
完成的,然而不同厂商提供的解码器名称有所不同,编写通用播放器的时候,无法预见。所以Android API中提供了一个MediaCodecList用于枚举设备支持的编解码器的名字、能力,以查找合适的编解码器。
红米六为例,它使用MTK芯片,其中以OMX.MTK打头的OMX Component是硬解器,而以OMX.google打头的都是软解器。
displayDecoders: OMX.google.aac.decoder
displayDecoders: OMX.MTK.AUDIO.DECODER.ALAC
displayDecoders: OMX.MTK.AUDIO.DECODER.RAW
displayDecoders: OMX.MTK.VIDEO.DECODER.AVC
displayDecoders: OMX.google.h264.decoder
displayDecoders: OMX.MTK.VIDEO.DECODER.HEVC
displayDecoders: OMX.google.hevc.decoder
displayDecoders: OMX.MTK.VIDEO.DECODER.VP9
displayDecoders: OMX.google.vp9.decoder
以播放器xine为例,它使用了vdpau库进行解码加速.
树莓派硬件加速方案-基于openmax
树莓派mmal解码器基于 博通 videocore GPU核心,在openmax il层之上加入一层封装,转换成ffmpeg avcodec解码器结构体,我们可以参考其架构实现。
mmaldec.c中的实现:
ffmmal_xxx之下的API是闭源的,所以在FFMPEG中看不到。
下图是当前多媒体领域的公开API标准以及系统、硬件支持情况:
FFMPEG对这些编解码API标准的实现情况如下:
信息来源:http://trac.ffmpeg.org/wiki/HWAccelIntro