chromium audio 实现分析

转载请注明出处:http://blog.csdn.net/typename  powered by [email protected]

前言:

随着HTML5 标准完成制定,最近各种HTML5的猜测声音不断,在此不发表关于HTML5的未来意见,本文关注HTML5的新feature, audio标签。在HTML5中添加了新的标签,开发者可以直接使用audio标签嵌入音频,也可以直接使用video标签直接嵌入视频,其实这个标准在WHATWG早早已经被支持,只不过W3C最近才纳入标准。使用Android平台的WebView来加载HTML5网页游戏的开发者可能遇到在Android 4.4一下系统版本经常是游戏背景音乐失效或者游戏音效失效,经常只能是二者只有其一,这是系统WebView内核的bug,在android 4.4一下系统webview使用webkit内核,webkit内核在实现audio那块存在问题。 在Andorid4.4及其以上游戏音乐就能正常的工作,Android 4.4系统WebView采用Chromium 内核,下面我们来看一下 chromium内核的audio实现。

概览:

在Chromium 当中实现audio 标签主要分为以下几个部分:

(1)chromium 需要实现audio的播放控制,资源获取。

(2)负责音频的解析和编码。

(3)实现HTML与Javascript binding 的audio相关部分,并且渲染audio控制面板,还需要提供相应接口给web去控制播放状态。

Chromium Audio 实现结构

blink 解析网页过程中发现HTML5 audio 标签,会为它创建HTMLAudioElement对象,HTMLAudioElement继承自HTMLMediaElement,在WebCore当中HTMLMediaElement是
audio的一个节点负责连接网页js操作与我们的浏览器平台对接实现的基础单元。它会请求创建media player来执行audio的相关动作,由此创建WebMediaPlayerImpl对象负责管理audio 播放控制。WebMediaPlayerImpl对象当中拥有Pipeline实例, Pipeline来执行audio所有的操作,chromium 中使用FFmpeg 来编码解析Audio数据流,解析之后的数据由AudioRender通过 IPC 传到AudioRendererHost来进行处理,AudioRendererHost则是浏览器的主进程中运行AudioManager来管理数据流,其最
终是通过android.media.AudioManager、android.media.AudioTrack、android.media.AudioRecord来完成对网页Aduio的播放。

Audio 相关代码目录

src/media/base/  对audio 数据流进行封装处理包含audio decoder, renderer, buffer管理等

src/media/audio/ 对audio 的整个播放流程运行就行管理并结合平台对audio 流进行播放处理,在android系统上最后使用android的 AudioManager

src/content/browser/renderer_host/media/   这部分audio相关代码在browser主进程中的 UI 线程进行初始化,但是一些数据操作在IO 线程来完成,这个目录下代码负责维护Audio的整个生命周期与平台硬件的交互。

chromium 为何使用FFmpeg

FFmpeg开源项目在很多视频、音频播放器中又广泛的应用,得益于其支持的多种编码器编码的流格式,而且其解码采用逐帧解码,拥有不错的效率。尽管FFmpeg支持分片解码,但是却又要求是源数据同样也需要分片编码才能支持,chromium利用多核技术,在chromium 当中将FFmpeg作为分流层来实现audio、video解码,使得充分利用多核硬件特性,提升解码速率。

chromium 支持的音频格式

webm,wav,x-wav,ogg,mp3,mp4,x-mp3,x-m4a,ogv,ogm,oga

参考资料:

http://www.chromium.org/audio-video

时间: 2024-10-11 13:34:45

chromium audio 实现分析的相关文章

Audio Policy 分析

http://blog.csdn.net/hgl868/article/details/6888001 上回我们说了AudioFlinger(AF),总感觉代码里边有好多东西没说清楚,心里发毛.就看了看AF的流程,我们敢说自己深入了解了Android系统吗?AudioPolicyService(APS)是个什么东西?为什么要有它的存在?下层的Audio HAL层又是怎么结合到Android中来的?更有甚者,问个实在问题:插入耳机后,声音又怎么从最开始的外放变成从耳机输出了?调节音量的时候到底是调

Chromium多进程机制解析

关于Chromium IPC多进程分析的文章很多了,这篇尝试以浅显的方式解释Chromium多进程机制,解析IPC内部运作的基本机制. Chromium如何保证多进程的性能 对于一个多进程应用,其核心要解决的是并发的问题.因为底层IPC机制的原因,其中一条路径又进一步演变为并发网络通信问题,两个面: 线程/进程 和 网络. 在Chromium中, 主要运用了以下关键技术: Unix Domain Socket (POSIX下使用的IPC机制) libevent (轻型事件驱动的网络库,用于监听I

Chromium源码--视频播放流程分析(拨开云雾)

转载请注明出处: http://www.cnblogs.com/fangkm/p/3791964.html 在PC浏览器中播放视频,大部分视频网站都是采用flash播放器,这多亏了Adobe Flash Player庞大的装机量.但Flash Player对于浏览器来说就是一个插件,插件内部下载flv流.解析flv视频格式.播放视频等流程与浏览器都没有太大关系.浏览器新标准HTML5中增加了视频支持,如:<video src="movie.ogg"> </video&

Chromium多线程模型设计和实现分析

Chromium除了远近闻名的多进程架构之外,它的多线程模型也相当引人注目的.Chromium的多进程架构是为了解决网页的稳定性问题,而多线程模型则是为了解决网页的卡顿问题.为了达到这个目的,Chromium的多线程模型是基于异步通信的.也就是说,一个线程请求另外一个线程执行一个任务的时候,不需要等待该任务完成就可以去做其它事情,从而避免了卡顿.本文就分析Chromium的多线程模型的设计和实现. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! <Andr

Chromium多线程通信的Closure机制分析

为了充分利用CPU多核特性,Chromium在启动时会创建很多线程,来负责执行不同的操作.这样就涉及到了多线程通信问题.Chromium为每一个线程都创建了一个消息队列.当一个线程需要另一个线程执行某一操作时,就向该线程的消息队列发送一个Closure.这个Closure最终在目标线程中得到执行.这种基于Closure的多线程通信方式在Chromium中使用得很普通,因此本文就对它的实现进行分析. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Closu

chromium for android v34 2dcanvas硬件渲染实现分析

这篇接着上一篇2dcanvas硬件绘制,分析保存绘制结果的texture被合成到on screen framebuffer上的过程. 1.webkit为canvas元素相应的render树节点RenderHTMLCanvas, 创建RenderLayer的步骤例如以下: RenderLayerModelObject::createLayer()调用 RenderLayer::insertOnlyThisLayer()将创建完 的RenderLayer增加到renderlayer tree中. 2

Chromium硬件加速渲染的GPU数据上传机制分析

在Chromium中,WebGL端.Render端和Browser端通过命令缓冲区将GPU命令发送给GPU进程执行.GPU命令携带的简单参数也通过命令缓冲区发送给GPU进程,但是复杂参数,例如纹理数据,有可能太大以致命令缓冲区无法容纳,因此需要通过其它机制传递给GPU进程.本文接下来就主要以纹理数据上传为例,分析WebGL端.Render端和Browser端将GPU命令数据传递给GPU进程的机制. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! WebGL

Chromium和WebKit的智能指针实现原理分析

C++不像Java一样,由虚拟机负责对象分配和释放.也就是说,开发人员使用C++编写代码时,要自己负责对象分配和释放.WebKit和Chromium都是使用C++开发的,因此它们也面临上述问题.在解决对象释放问题时,要做到在对象不需要时自动释放,因为手动释放会带来忘记释放或者释放后又继续使用的隐患.智能指针是实现对象自动释放的有效技术手段.本文就分析Chromium和WebKit的智能指针的实现. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在现实中,

Chromium on Android: Android L平台上WebView的变化及其对浏览器厂商的影响分析

摘要:Android L平台在图形渲染方面有一项重要的改进,它引入了一个专门的线程用于执行渲染工作,UI线程负责生成的显示列表(DisplayList),渲染线程负责重放(playback)这个显示列表绘制最终的内容,因此Chromium WebView在图形栈的实现方面也作了相应的调整,以支持Android L系统上新的渲染线程模型.本文将深度分析Chromium WebView的渲染流水线是如何无缝整合到Android L系统的渲染模型中,以及对目前市场主流浏览器厂商将会产生什么样影响等问题