SurfaceFlinger對Miracast的支持
SurfaceFlinger對Miracast的支持
MediaPlayerService及相關模塊:因為Miracast本身就涉及到RTP/RTSP及相應的編解碼技術。

SurfaceFlinger及相關模塊:SurfaceF丨inger的作用是將各層UI數據泡屏并投遞到顯示設備中去S示。現在,SurfaceFlinger支持多個顯示設備,而支持Miracast的遠端設備也作為一個獨立的顯示設備存在于系統中。
VWndowManagerService及相關模塊:WindowManagerService用子管理系統中各個UI層的位置和尿性。由于并非所杳的UI層都會通過Miracast投遞到遠端設備上,例如手機中的視頻可投遞到遠端設備上去顯示,但假如在播放過程中,突然彈出一個密碼輸入框(可能是某個后臺應用程序發起的),則這個密碼輸入框就不能投遞到遠端設備上去顯示。所以,WindowManagcrService也需要修改以適設Miracast的需要。
Disp丨ayManagerScrvice及相關模塊:DisplayManagerScrvice服務適Android4.2新增的,用于轉理系統中所有的Display設備。

SurfaceFlinger對Miracast的支持
相比前面的版本,Android4.2中SurfaceFlingcr的最大變化就是培加了一個名為DisplayDcvice的抽象層。Surface系統定義了一個DisplayType的枚舉,其中有代表手機屏幕的D1SPLAY_PR1MARY和代表HDM丨等外接設備的DISPLAY_EXTERNAU比較有意思的是,作為Wi>FiDisplay,它的設備類型是DISPLAY_VlRnJAL。
SurfaceFlinger類,其內部有—個名為mDisplays的變量,它保存了系統中當前所有的設備(DisplayDevicc)。另外,SurfaceFlinger通過mCurrcmState和mDrawingStatc來控制顯示層的狀態。
其中,mDrawingState用來控制當前正在繪制的顯示層的狀態。mOurcmState表木當前所有顯示層的狀態。有這兩種State顯示層的原因是不論是Miracast還是HDMI設備,其在系統中存在的時間是不確定的。

例如用戶可以隨時選擇連接一個MiracasiM示設備。為了不破壞當前正在顯示的內容,這個新顯示設備的一些位息將保存到CurremState中。等到SurfaceFlingerK前的集中處理。
