截屏流程(CaptureDispatcher.mm)
2017-08-24 15:29:11 0 举报
截屏
作者其他创作
大纲/内容
异步传输视屏流
1、截屏需要考虑地图界面的特殊性:需要在每次渲染结束截屏(_mapSnapshotRenderBlock)如果地图正在刷新,停止原来截屏2、在打电话,app挂起,前后台切换特殊 状态需要特殊的image遮盖车机3、截屏的绘制也分keyboard和普通window4、这里有帧率控制,当帧数过多时,手机端会主动丢帧5、APP在后台则无需截屏
AppDelegate.mm- (void)onHandleHUConfigMessage:(CLMessage *)msg可能会有JPEG截屏初始化消息JPEG截屏的话考虑在- (void)onHandleVideoMessage:(CLMessage *)msg添加JPEG的逻辑
- (void)start
在整个过程开始循环时,还有几个状态对应的方法需要考虑(状态对应于整个流程:截屏,编码,传输 resume/start pause stop)- (void)pause;- (void)resume;- (void)stop;
异步编码
1、这里有心跳包机制,没有image传输时需要使用[CLMessagePackager packHearBeatMessage]2、传输的时候需要保持连接 [[CLConnectManager shareConnectManager] IsConnected]3、老的软编码方式还是新的硬编码方式区别?4、传输的时候会有帧数控制
1、- (void)_doEncode 配置视屏流编码 @synchronized(_snapshots) 获取ScreenCaptureUnit - (void)_startEncode 异步编码 使用dispatch_async(_encodeQueue,block) 开始视屏流编码,每一次结束,block中会调用一次- (void)_doEncode
编码流程也考虑了app特殊状态的问题,作为优化
主线程截屏
detail
flow
JPEG dispatcher
notice
0 条评论
下一页