主流浏览器上HTML5多媒体播放器的实现

通用浏览器内核介绍

浏览器内核

主要浏览器实现

其他实现(部分双内核)

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


结束!

猜你喜欢

转载自blog.csdn.net/tugouxp/article/details/115715845