Chromium源碼--視頻播放流程分析(撥開雲霧)

轉載請註明出處: 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部分, 這部分才真正開始音視頻的相關邏輯。對象

相關文章
相關標籤/搜索