转载请注明出处: http://www.cnblogs.com/fangkm/p/3791964.htmlhtml
在PC浏览器中播放视频,大部分视频网站都是采用flash播放器,这多亏了Adobe Flash Player庞大的装机量。但Flash Player对于浏览器来讲就是一个插件,插件内部下载flv流、解析flv视频格式、播放视频等流程与浏览器都没有太大关系。浏览器新标准HTML5中增长了视频支持,如:<video src="movie.ogg"> </video>,video 元素当前支持三种视频格式:Ogg、MPEG 四、WebM。下面分析下Chromium源码中视频的播放流程。web
视频播放流程有点复杂,下面仍是从源头一点一点摸索。当blink遇到<video> tag时,会建立对应的Element对象HTMLVideoElement,一样遇到<audio> tag时会建立HTMLAudioElement对象.(其余tag对应的建立对象请参见core/scripts/make_names.pl脚本生成的HTMLElementFactory.cpp文件)浏览器
HTMLVideoElement和HTMLAudioElement都是从HTMLMediaElement派生,接下来着重分析下ide
HTMLMediaElement类. 该类的结构图以下所示:函数
从结构能够看出,媒体播放逻辑抽象在MediaPlayer接口中, HTMLMediaElement的createMediaPlayer方法调用MediaPlayer的静态方法create来建立MediaPlayer对象,分析一下create的实现,其建立对象的逻辑依赖于由静态方法setMediaEngineCreateFunction网站
来指定,在初始化webkit的时候就经过该方法指定WebMediaPlayerClientImpl::create建立函数,从而最终建立WebMediaPlayerClientImpl对象来实现MediaPlayer接口逻辑。插件
然而WebMediaPlayerClientImpl也只是一层壳,它并无真正的实现媒体相关逻辑,而是转接给WebMediaPlayer接口,相关结构以下:视频
WebMediaPlayerClientImpl经过依赖WebFrameImpl的WebFrameClient成员来建立WebMediaPlayer实现对象,经过WebMediaPlayerClient接口来响应WebMediaPlayer的相关事件, RenderViewImpl最终承接建立WebMediaPlayer的任务,其建立WebMediaPlayerImpl对象,并经过WebMediaPlayerDelegate接口来响应WebMediaPlayerImpl的相关事件。htm
下一篇文章开始分析WebMediaPlayerImpl部分, 这部分才真正开始音视频的相关逻辑。对象