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


轉載請注明出處: http://www.cnblogs.com/fangkm/p/3791964.html

在PC瀏覽器中播放視頻,大部分視頻網站都是采用flash播放器,這多虧了Adobe Flash Player龐大的裝機量。但Flash Player對於瀏覽器來說就是一個插件,插件內部下載flv流、解析flv視頻格式、播放視頻等流程與瀏覽器都沒有太大關系。瀏覽器新標准HTML5中增加了視頻支持,如:<video src="movie.ogg"> </video>,video 元素當前支持三種視頻格式:Ogg、MPEG 4、WebM。下面分析下Chromium源碼中視頻的播放流程。

視頻播放流程有點復雜,下面還是從源頭一點一點摸索。當blink遇到<video> tag時,會創建對應的Element對象HTMLVideoElement,同樣遇到<audio> tag時會創建HTMLAudioElement對象.(其他tag對應的創建對象請參見core/scripts/make_names.pl腳本生成的HTMLElementFactory.cpp文件)

HTMLVideoElement和HTMLAudioElement都是從HTMLMediaElement派生,接下來着重分析下

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的相關事件。

下一篇文章開始分析WebMediaPlayerImpl部分, 這部分才真正開始音視頻的相關邏輯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM