1、一点背景知识
1.1 RFB协议
RFB ( Remote Frame Buffer 远程帧缓冲) 协议是一个用于远程访问图形用户界面的简单协议。由于 RFB 协议工作在帧缓冲层,因此它适用于所有的窗口系统和应用程序,如 Windows 3.1/95/NT 和 Macintosh 等。
RFB协议最显著的特点在于,它只负责从帧缓冲区中获取显示更新及Server端和Client端的数据交互,使客户机处理的任务尽可能减少。RFB协议对于客户端是无状态的。
1.2 VNC协议
VNC(Virtual Network Computing)是基于RFB(Remote Frame Buffer)协议进行通信,是一个基于平台无关的简单显示协议的超级瘦客户系统。VNC viewer就是实现VNC协议一个常用的软件。
1.3 H264
H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H264常用于视频编码,有关H264的介绍网络上比较好的博客有雷神的这个专栏。
1.4 H264编码流对RFB封装的实现
H264能实现对RFB封装的是基于H264的分层结构和RFB的可扩展性。具体做法是在系统服务器端初始化时扩展自己的编码方式到RFB支持的编码列表中,然后将RFB协议的FrameBufferUpdate消息头和待编码矩形结构信息添加到H264编码流之前。
2、具体实现
2.1 UML图
给出一张核心类关系图
![类UML图](https://i-blog.csdnimg.cn/blog_migrate/f0cff8a850bd73ca55b85351914109b0.png)
2.2 时序图
2.3 一些说明
对初级socket编程来说,我们通常创建好socket就可以开始收发数据了。在本文中,一个socket被抽象成多路connection,一路connection里面分了许多channel,如:KeyChannel、MouseChannel等等。在协议设计的时候,就需要把每一路channel占用第几字节到第几字节定义好,服务器和客户端根据这个定义来组包和解包。由于编码的底层基于boost库里的TCP实现,所以仍然是对TCP协议的封装。