八股 8.28
1.什么是 Cyber RT?
- 组件机制(Component对算法模块进行封装)
通信机制(Node节点,Reader/Writer)
插件(cyber_recorder/cyber_monitor)
2.MQTT协议
- 应用层协议
- 相比与HTTP协议:
- 轻量级与低开销,适合资源受限的设备,如传感器(报文头部较小,包含报文类型+服务质量QoS)
- 通信模式不同: MQTT(长连接)是发布/订阅;HTTP是请求/响应
- 发布/订阅模型(Pub/Sub)
- 发布者(Publisher):向某主题(Topic)发送消息。
- 订阅者(Subscriber):订阅某主题,接收相关消息。
- 代理(Broker):中间人,负责接收、过滤和转发消息。
- 支持不同服务质量(QoS)等级
- QoS 0:消息最多发送一次,发布者发送后不关心是否成功送达。(消息可能丢失)
- QoS 1:保证消息至少送达一次,但可能重复(可能重复)。
- QoS 2:确保消息 不丢失、不重复,传递“正好一次”(确保不重复也不丢失)。
- 相比与HTTP协议:
3.发布/订阅与请求/响应的区别
请求/响应: 客户端主动发起请求,服务器接收并返回响应。
- 同步性:请求发出后等待结果,典型例子是 HTTP。
- 一对一通信:请求方和响应方直接通信。
- 短连接/无状态:HTTP 通常是一次性事务
发布/订阅: 消息生产者(Publisher)发布消息到某个“主题”(Topic),消息消费者(Subscriber)只要订阅了该主题,就能收到消息。
- 异步性:发布者不关心谁在接收,订阅者也不直接请求。
- 一对多通信:一个消息可被多个订阅者接收。
- 解耦:发布者与订阅者不直接耦合,通过 消息中间件/Broker 转发。
4.MQTT的broker对消息的转发
- 存储消息:
- QoS > 0: Broker 会临时缓存消息直到确认完成
- QoS 0: 立即转发给匹配的订阅者,不做确认,也不缓存
注:若订阅者 QoS < 发布者 QoS,则以 订阅者 QoS 为准。
- 主题匹配: Broker 维护一个 订阅表,记录哪些客户端订阅了哪些主题。
5.介绍一下cyber::Reader
订阅消息通道: 每个消息在 Cyber RT 中通过 Channel传递,Reader 就是某个模块用来“订阅”消息的对象。
解码消息内容:底层消息通常用 Protobuf 定义格式。Reader 能自动解析收到的二进制流,转成对应的 Protobuf 对象。
触发回调: 当有新消息到来时,Reader 会执行用户注册的回调函数。
注:Reader也提供主动轮询来获取消息的方法。
6.时间线为什么要用protobuf定义?
- 相比与Json,解析速度更快,相比于文本,不用手写解析器
- 可以实现二进制与文本的无缝切换
- 相比于json更加安全,会进行数据类型检查
- Cyber RT 的消息机制就是基于 Protobuf 的,统一格式能直接借用已有工具链(Writer/Reader、日志工具等)
7.RTPS协议
Cyber RT借助 RTPS 作为底层消息传输机制来实现跨进程、跨机器的分布式通信。
工作流程:
节点启动:Cyber RT 节点 → 创建 RTPS Participant。
自动发现:通过多播广播 → 发现同一 Domain 的其他 Participant。
Endpoint 注册:Writer 和 Reader 通告自己 → 建立 Topic 映射。
数据传输:Writer 发送 DATA → Reader 接收 → 可根据 QoS 确保可靠性。
心跳与重传:Writer 周期发送 HEARTBEAT → Reader 若发现丢包,回复 ACKNACK → Writer 重传。
RTPS协议和MQTT协议的区别:RTPS 更适合本地局域网内的实时分布式通信,而 MQTT 更适合跨互联网的轻量级物联网应用。
注:RTPS协议可以通过缓存来实现可靠性:
Writer 侧缓存 = 便于重传(数据丢包时能重新发)。
Reader 侧缓存 = 防止上层应用消费不及时时丢失数据。
8.视频压缩
压缩的原始数据采用YUV格式:
Y :亮度(人眼对亮度比颜色更敏感,所以 Y 分量保留较高分辨率)
UV: 色度(人眼对颜色细节不如亮度敏感,所以 U、V 分量可以降低分辨率(采样),常见的有 4:2:0、4:2:2、4:4:4。)
视频压缩原理:
- 空间冗余:相邻像素之间存在相关性
- 时间冗余:前后帧图像之间存在相关性
- 视觉冗余:人眼对于某些细节不敏感(有损压缩)
- 编码冗余:哈夫曼编码(出现次数多的像素,用少的位数来编码)
解码顺序:I、P、B
显示顺序:I、B、P
注:B帧位于I帧和P帧之间会延迟编码
GOP: 两个 I 帧之间的帧数。
GOP 间隔大(I帧少)的影响
压缩率更高
- I帧体积大,占用码率多。
- 减少 I 帧 → 更多 P/B 帧 → 平均码率下降 → 更高压缩比。
随机访问不方便
- 视频播放器需要从 I 帧开始解码。
- GOP 太长 → 跳转到任意时间点时,必须先找到最近 I 帧 → 延迟增加。
误差累积
- P/B 帧是基于前帧预测的。
- GOP 太长 → 预测链条长 → 误差容易累积 → 视频容易出现马赛克或画质下降。
- 特别在网络传输丢包时,长 GOP 更容易造成严重图像损坏。
GOP 太长 → P/B 帧依赖链长 → 解码延迟大。