SurfaceFlinger对Miracast的支持

2019-11-28 14:11:35 admin 18

SurfaceFlinger对Miracast的支持

MediaPlayerService及相关模块:因为Miracast本身就涉及到RTP/RTSP及相应的编解码技术。

Miracast

SurfaceFlinger及相关模块:SurfaceF丨inger的作用是将各层UI数据泡屏并投递到显示设备中去S示。现在,SurfaceFlinger支持多个显示设备,而支持Miracast的远端设备也作为一个独立的显示设备存在于系统中。

VWndowManagerService及相关模块:WindowManagerService用子管理系统中各个UI层的位置和尿性。由于并非所杳的UI层都会通过Miracast投递到远端设备上,例如手机中的视频可投递到远端设备上去显示,但假如在播放过程中,突然弹出一个密码输入框(可能是某个后台应用程序发起的),则这个密码输入框就不能投递到远端设备上去显示。所以,WindowManagcrService也需要修改以适设Miracast的需要。

Disp丨ayManagerScrvice及相关模块:DisplayManagerScrvice服务适Android4.2新增的,用于转理系统中所有的Display设备。

Miracast投屏技术


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前的集中处理。


如果您有什么需求,可以通过以下式联系我们!