跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

MQTT协议完全指南:从核心概念到实践应用

摘要

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅模式的轻量级消息传输协议,专为物联网(IoT)和机器对机器(M2M)通信而设计。本文将从协议概述、核心架构、工作原理、高级特性、版本演进、应用场景等多个维度,全面系统地介绍MQTT协议,帮助读者建立从基础概念到实践应用的完整知识体系。

一、MQTT协议概述

1.1 什么是MQTT

MQTT是一种发布/订阅模式的消息传输协议,运行于TCP/IP协议栈之上。它的名字来源于“Message Queuing Telemetry Transport”,但随着协议的发展,“消息队列”已不再是核心特征,因此MQTT现在通常被视为一个专有名词,而非缩写。

一句话定义:MQTT是一种专为受限网络环境设计的、轻量级的、基于发布/订阅模式的消息传递协议。

协议定位:

  • OSI模型:应用层协议(第7层)
  • 传输层依赖:TCP(默认端口1883)或TLS(端口8883)
  • 设计目标:低带宽、高延迟、不稳定网络环境下的可靠通信

1.2 起源与发展历程

MQTT的发展历程反映了物联网技术从萌芽到爆发的过程:

时间里程碑事件意义
1999年IBM的Andy Stanford-Clark和Arcom的Arlen Nipper发明MQTT最初用于监控石油管道系统,解决卫星连接高延迟问题
2013年IBM将MQTT 3.1提交给OASIS标准化组织协议进入开放标准化阶段
2014年MQTT 3.1.1成为OASIS正式标准成为物联网事实标准,稳定版本广泛使用至今
2016年MQTT成为ISO/IEC 20922国际标准获得最高级别的标准化认可
2019年MQTT 5.0发布大幅增强功能,支持会话过期、主题别名等高级特性

版本演进关系:

MQTT 3.1 (2013) → MQTT 3.1.1 (2014) → MQTT 5.0 (2019)
     ↓                   ↓                 ↓
   草案版            当前最广泛使用       功能增强版

1.3 设计哲学与核心原则

MQTT的设计遵循以下五大原则:

原则一:轻量高效

  • 协议固定头部仅2字节
  • 最小化网络带宽占用
  • 降低设备功耗和计算资源需求

原则二:简单易实现

  • 只有14种控制报文类型
  • 逻辑清晰,易于嵌入式设备实现
  • 降低物联网开发门槛

原则三:网络适应性强

  • 面向不稳定网络优化
  • 支持自动重连和会话恢复
  • 心跳机制维持长连接

原则四:解耦架构

  • 发布者和订阅者无需知道彼此存在
  • 支持一对多广播
  • 客户端可独立上下线

原则五:灵活可靠

  • 三种QoS等级可选
  • 支持消息持久化
  • 遗嘱消息提供异常通知

二、MQTT核心架构

2.1 架构总览

MQTT采用发布/订阅(Publish/Subscribe) 模式,包含三个核心组件:

2.2 核心组件详解

2.2.1 发布者(Publisher)

定义:向Broker发送消息的客户端。

关键特征:

  • 不需要知道订阅者的存在、数量或位置
  • 指定消息的主题(Topic)即可
  • 可以同时是多个主题的发布者
  • 发布动作独立于订阅状态

典型示例:

{
  "device_type": "温度传感器",
  "publish_topic": "factory/floor1/temperature",
  "message_frequency": "每秒1次",
  "qos": 0,
  "typical_message": "{\"value\":23.5,\"unit\":\"celsius\"}"
}

2.2.2 订阅者(Subscriber)

定义:表达对某些主题感兴趣并接收消息的客户端。

关键特征:

  • 可以同时订阅多个主题
  • 支持使用通配符一次性订阅主题组
  • 每个订阅可以指定独立的QoS等级
  • 订阅操作可以在连接后随时进行

订阅类型:

订阅类型说明示例
精确订阅订阅确定的主题home/livingroom/temperature
单层通配订阅某一层级的任意值home/+/temperature
多层通配订阅某前缀下的所有主题home/#

2.2.3 代理服务器(Broker)

定义:MQTT系统的核心,负责接收、过滤和转发消息。

核心职责:

  1. 连接管理:接受客户端连接,维护会话状态
  2. 消息接收:接收发布者发送的消息
  3. 主题匹配:根据主题匹配算法找到订阅者
  4. 消息转发:将消息发送给所有匹配的订阅者
  5. 状态维护:持久化会话、保留消息等
  6. QoS保障:实现QoS 1和QoS 2的确认机制

常见Broker产品对比:

Broker语言特点适用场景
MosquittoC轻量、资源占用小嵌入式、边缘计算
EMQXErlang高并发、集群能力强大规模物联网平台
VerneMQErlang高性能、可扩展电信级部署
HiveMQJava企业级功能丰富商业应用

2.3 发布/订阅模型的优势

与传统的请求/响应模型(如HTTP)相比,发布/订阅模型具有以下优势:

维度发布/订阅(MQTT)请求/响应(HTTP)
解耦方式空间、时间、同步三重解耦紧密耦合
通信方向双向异步单向同步
扩展性增加订阅者不影响发布者增加客户端需要服务器适配
实时性推送式,实时性好轮询式,有延迟
设备适配适合低功耗设备相对消耗资源

第三部分:主题系统(Topic)

3.1 主题基本概念

主题是MQTT中消息的分类标签,Broker根据主题决定将消息转发给哪些订阅者。

核心特征:

  • UTF-8编码字符串
  • 使用斜杠(/)作为层级分隔符
  • 区分大小写
  • 可以包含空格和特殊字符(除通配符外)

主题层级示例:

# 简单主题
temperature

# 两级结构
home/temperature
car/speed

# 多级结构
company/factory/floor/machine/sensor
telemetry/device_001/2024/01/15

3.2 主题命名最佳实践

推荐命名模式:

场景推荐命名示例
按地理位置<地区>/<场所>/<设备>/<数据类型>beijing/factory/robot1/temperature
按设备类型<设备类型>/<设备ID>/<属性>sensor/temp_001/value
按业务领域<业务>/<子系统>/<事件>logistics/vehicle/location
按消息类型<类型>/<子类型>/<标识>command/light/on

命名规范建议:

  • ✅ 使用有意义的英文单词或缩写
  • ✅ 保持层级深度一致(建议3-5层)
  • ❌ 避免在主题中使用特殊字符(+、#、$)
  • ❌ 避免使用空格和中文字符
  • ❌ 避免以斜杠开头或结尾
  • ❌ 避免使用过长的主题字符串

3.3 通配符机制

3.3.1 单层通配符(+)

作用:匹配当前层级的任意一个值。

规则:

  • 只能匹配一个层级
  • 可以出现任意次数
  • 不能匹配空层级

匹配示例:

订阅主题匹配的主题不匹配的主题
home/+/temperaturehome/kitchen/temperature
home/bedroom/temperature
home/temperature(层级不足)
home/kitchen/fridge/temperature(层级过多)
home/+/temperature/high(层级过多)
+/+/statusdevice/sensor1/status
room/livingroom/status
device/status(层级不足)
+/kitchen/temphome/kitchen/temp
office/kitchen/temp
kitchen/temp(层级不足)

3.3.2 多层通配符(#)

作用:匹配当前层级及之后的所有层级。

规则:

  • 必须放在主题末尾
  • 可以单独作为主题(#匹配所有主题)
  • 匹配零个或多个层级

匹配示例:

订阅主题匹配的主题不匹配的主题
home/#home/kitchen
home/kitchen/temperature
home/bedroom/light/status
home/(仅前缀)
house/kitchen(前缀不匹配)
home(缺少斜杠,但某些实现会匹配)
sensors/+/data/#sensors/temp/data/value
sensors/humidity/data/2024/01
sensors/temp/data(匹配,但注意单层也会被#覆盖)

3.3.3 通配符使用注意事项

  1. 发布限制:客户端不能使用通配符发布消息
  2. 性能影响:通配符订阅会增加Broker的主题匹配开销
  3. 安全性:#订阅可能泄露所有消息,需谨慎授予此权限
  4. $SYS主题:以$开头的系统主题通常不支持通配符(具体取决于Broker实现)

3.4 系统主题($SYS)

以$SYS开头的主题是Broker内部保留的系统监控主题。

常用$SYS主题:

主题数据类型说明
$SYS/broker/versionstringBroker版本信息
$SYS/broker/uptimestring运行时间
$SYS/broker/clients/connectedinteger当前连接数
$SYS/broker/clients/totalinteger总客户端数
$SYS/broker/messages/receivedinteger接收消息总数
$SYS/broker/messages/sentinteger发送消息总数
$SYS/broker/subscriptions/countinteger有效订阅数

第四部分:服务质量等级(QoS)

4.1 QoS概述

MQTT的QoS(Quality of Service,服务质量)定义了消息传递的可靠性等级。它是在发布者和Broker之间以及Broker和订阅者之间独立协商的。

重要理解:

  • QoS是发布/订阅之间逐段协商的
  • 发布时的QoS和订阅时的QoS会取最小值作为最终服务质量
  • 最终QoS = min(发布QoS, 订阅QoS)

4.2 QoS 0:至多一次

工作原理:

发布者 ──── PUBLISH ────→ Broker ──── PUBLISH ────→ 订阅者
            (无确认,无重传)                 (无确认,无重传)

特点:

  • 消息最多发送一次
  • 不保证送达,不要求确认
  • 消息可能丢失
  • 不会重复

适用场景:

  • 传感器数据上报(温度、湿度、光照)
  • 高频非关键数据
  • 可容忍一定丢失的业务

示例:

# 发布QoS 0消息
mosquitto_pub -t "sensor/temperature" -m "23.5" -q 0

4.3 QoS 1:至少一次

工作原理:

发布者 ──── PUBLISH ────→ Broker
发布者 ←─── PUBACK ──── Broker
        (收到确认前会重传)

特点:

  • 消息至少送达一次
  • 发送者存储消息直到收到确认
  • 可能重复送达
  • 接收方需处理重复消息

消息重复场景:

  1. 发送方未收到PUBACK,重发PUBLISH
  2. 实际消息已送达,确认丢失
  3. 接收方收到重复消息

适用场景:

  • 智能家居控制命令
  • 报警通知
  • 可容忍重复的业务

示例:

# 发布QoS 1消息
mosquitto_pub -t "command/light" -m "on" -q 1

4.4 QoS 2:只有一次

工作原理(四步握手):

发布者 ──── PUBLISH ────→ Broker
发布者 ←─── PUBREC ──── Broker  (已接收)
发布者 ──── PUBREL ────→ Broker  (释放消息)
发布者 ←─── PUBCOMP ─── Broker  (完成)

特点:

  • 消息精确送达一次
  • 最高可靠性
  • 最大开销
  • 需要Broker维护消息状态

适用场景:

  • 金融交易指令
  • 计费系统
  • 关键控制命令
  • 任何不允许丢失或重复的业务

示例:

# 发布QoS 2消息
mosquitto_pub -t "payment/confirm" -m "txn_12345" -q 2

4.5 QoS选择决策树

是否需要可靠送达?
├── 不需要 → QoS 0
└── 需要
    ├── 是否可以容忍消息重复?
    │   ├── 可以 → QoS 1
    │   └── 不可以 → QoS 2
    └──

最终QoS = min(发布者QoS, 订阅者QoS)

示例:
发布QoS=2,订阅QoS=1 → 最终QoS=1

4.6 QoS与其他机制的关系

特性QoS 0QoS 1QoS 2
消息确认无PUBACKPUBREC/PUBREL/PUBCOMP
消息存储不存储存储到确认存储到完成
消息ID不需要需要需要
重复消息不可能可能不可能
性能开销最低中等最高
适用消息量大量中等少量

第五部分:MQTT高级特性

5.1 保留消息(Retained Message)

定义:Broker为每个主题存储最新的消息,新订阅者连接后立即收到该消息。

工作机制:

1. 发布者发送保留消息(设置retain标志)
   mosquitto_pub -t "room/temp" -m "23.5" -r

2. Broker存储该消息

3. 新订阅者订阅该主题
   mosquitto_sub -t "room/temp"

4. 新订阅者立即收到"23.5"(无需等待下一次更新)

应用场景:

  • 设备最新状态(温度、开关状态)
  • 系统配置参数
  • 设备在线状态

清除保留消息:

# 发送空消息,retain标志为true
mosquitto_pub -t "room/temp" -m "" -r

5.2 遗嘱消息(Last Will and Testament)

定义:客户端异常断开时,Broker自动发布预先设定的消息。

工作机制:

客户端正常连接时:
   CONNECT报文包含Will Topic、Will Message、Will QoS、Will Retain

┌─────────────────────────────────────────┐
│ 正常断开(发送DISCONNECT)               │
│ → 遗嘱消息被丢弃                         │
└─────────────────────────────────────────┘

┌─────────────────────────────────────────┐
│ 异常断开(网络中断、心跳超时、设备故障)   │
│ → Broker发布遗嘱消息到Will Topic         │
│ → 其他客户端收到设备离线通知              │
└─────────────────────────────────────────┘

应用场景:

  • 设备离线告警
  • 自动化故障转移
  • 设备状态监控

示例:

# Python Paho MQTT客户端设置遗嘱
client.will_set("device/status", "offline", qos=1, retain=True)
client.connect("broker.example.com", 1883)

5.3 持久会话(Persistent Session)

定义:Broker为客户端保存会话状态,断线重连后自动恢复。

会话状态包含:

  • 客户端的订阅信息
  • 未确认的QoS 1和QoS 2消息
  • 客户端尚未接收的消息

Clean Session标志:

Clean Session会话行为状态保留适用场景
true每次连接建立新会话不保留临时连接、发布后即断开的设备
false会话持久化保留订阅和未确认消息需要持续接收消息的设备

MQTT 5.0改进:

  • 用Clean Start替代Clean Session
  • 新增Session Expiry Interval:精确控制会话过期时间
  • 支持Session Expiry Interval=0:会话立即过期

5.4 心跳机制(Keep Alive)

定义:客户端定期发送PINGREQ报文,维持连接并检测存活状态。

工作流程:

1. 客户端在CONNECT报文中指定Keep Alive时间(秒)
2. 客户端在1.5倍Keep Alive时间内未发送报文时,发送PINGREQ
3. Broker收到PINGREQ后回复PINGRESP
4. 如果Broker在1.5倍Keep Alive时间内未收到任何报文(包括PINGREQ),则断开连接

Keep Alive选择建议:

网络环境建议Keep Alive原因
固定网络300秒网络稳定,降低心跳频率
WiFi60秒平衡检测灵敏度和功耗
4G/5G60秒移动网络可能有NAT超时
NB-IoT300秒+低功耗设计,延长电池寿命

5.5 MQTT 5.0新增特性

5.5.1 用户属性(User Properties)

允许在报文中添加自定义键值对,类似HTTP头部。

{
  "message": {
    "payload": "temperature:23.5",
    "user-properties": {
      "device-id": "sensor_001",
      "data-type": "temperature",
      "priority": "high"
    }
  }
}

用途:

  • 传递元数据
  • 消息追踪
  • 自定义路由

5.5.2 主题别名(Topic Alias)

用整数代替主题字符串,减少网络开销。

首次发送:主题="home/kitchen/temperature", 消息内容
Broker分配别名=1

后续消息:主题别名=1, 消息内容(节省主题字符串传输)

优势:

  • 减少带宽占用
  • 适合高频重复主题的消息

5.5.3 消息过期(Message Expiry)

设置消息的有效期,过期后Broker不转发。

{
  "message": {
    "payload": "alert: temperature high",
    "message-expiry-interval": 30  // 30秒后过期
  }
}

应用场景:

  • 实时告警(过期无用)
  • 时效性数据

5.5.4 请求/响应模式(Request/Response)

在发布/订阅基础上增加请求/响应模式。

请求者:发布到"request/topic",指定响应主题"response/topic"
响应者:订阅"request/topic",处理后发布到响应主题

新增字段:

  • Response Topic:响应应发送到的主题
  • Correlation Data:关联请求和响应的数据

5.5.5 共享订阅(Shared Subscription)

允许多个客户端共享同一订阅,实现负载均衡。

传统订阅:每个消息发送给所有订阅者
共享订阅:消息轮询(或哈希)分配给一个订阅者

订阅语法:$share/<组名>/<主题过滤器>
示例:$share/group1/home/#

用途:

  • 消息队列模式
  • 水平扩展消费者

5.5.6 原因码(Reason Codes)

更详细的返回码,帮助调试。

原因码含义
0x80不支持的协议版本
0x81客户端标识符无效
0x82服务不可用
0x83用户名或密码错误
0x84未授权

第六部分:MQTT协议报文

6.1 报文结构

每个MQTT报文由三部分组成:

┌────────────────────────────────────────────┐
│ 固定头部 (Fixed Header)                                                              │ 
│ ├── 报文类型 (4位)                                                                │
│ ├── 标志位 (4位)                                                                  │
│ └── 剩余长度 (1-4字节)                                                            │
├────────────────────────────────────────────┤
│ 可变头部 (Variable Header)                                                           │
│ └── 具体取决于报文类型                                                            │
├────────────────────────────────────────────┤
│ 有效载荷 (Payload)                                                                   │
│ └── 实际数据内容                                                                  │
└────────────────────────────────────────────┘

6.2 控制报文类型

类型值方向说明
CONNECT1Client → Broker发起连接请求
CONNACK2Broker → Client连接确认
PUBLISH3双向发布消息
PUBACK4双向QoS 1确认
PUBREC5双向QoS 2接收
PUBREL6双向QoS 2释放
PUBCOMP7双向QoS 2完成
SUBSCRIBE8Client → Broker订阅主题
SUBACK9Broker → Client订阅确认
UNSUBSCRIBE10Client → Broker取消订阅
UNSUBACK11Broker → Client取消订阅确认
PINGREQ12Client → Broker心跳请求
PINGRESP13Broker → Client心跳响应
DISCONNECT14Client → Broker断开连接

6.3 典型会话流程

Client                                    Broker
   |                                         |
   |------------ CONNECT ------------------>|
   |<----------- CONNACK -------------------|
   |                                         |
   |------------ SUBSCRIBE (topic) --------->|
   |<----------- SUBACK --------------------|
   |                                         |
   |------------ PUBLISH (topic, msg) ------>|
   |<----------- PUBACK (QoS 1) ------------|
   |                                         |
   |  (Broker转发消息给订阅者)                |
   |                                         |
   |------------ PINGREQ ------------------->|
   |<----------- PINGRESP -------------------|
   |                                         |
   |------------ DISCONNECT ---------------->|
   |                                         |

第七部分:传输层与安全

7.1 协议栈

MQTT可以运行在多种传输层协议之上:

协议URI前缀默认端口加密适用场景
TCPmqtt://1883否内网、调试
TLSmqtts://8883单向/双向公网、生产环境
WebSocketws://8083否浏览器
WebSocket Securewss://8084是Web安全接入

7.2 安全机制

7.2.1 认证(Authentication)

匿名认证:允许无凭证连接(仅限安全网络)

用户名/密码:

  • 传输层加密(TLS)时必须使用
  • 密码在网络上加密传输

证书认证:

  • 客户端证书验证
  • 支持双向TLS
  • 最高安全级别

7.2.2 授权(Authorization)

基于ACL(Access Control List)控制主题访问权限:

# ACL示例
user alice
topic read home/livingroom/temp
topic write home/livingroom/light

user bob
topic read home/#
topic write home/bedroom/+

client device_001
topic write sensors/+/data

7.2.3 传输加密(TLS)

TLS配置示例(Mosquitto):
listener 8883
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
cafile /etc/mosquitto/certs/ca.crt
require_certificate true
tls_version tlsv1.2

第八部分:MQTT vs HTTP

8.1 协议特性对比

对比维度MQTTHTTP
协议模式发布/订阅(异步)请求/响应(同步)
头部开销最小2字节通常几百字节
连接方式长连接(持久化)短连接(每次新建)
通信方向双向、异步单向、同步
实时推送原生支持需要轮询或WebSocket
消息确认内置(QoS 1/2)依赖应用层
状态管理Broker维护会话无状态或Cookie/Session
设备资源低相对较高
功耗低高
防火墙端口1883/8883需开放80/443通常已开放
调试工具较少丰富(浏览器、curl等)

8.2 适用场景对比

场景推荐协议原因
物联网设备数据上报MQTT低功耗、长连接
实时推送通知MQTT双向、低延迟
浏览器前端HTTP/WebSocket浏览器原生支持
REST APIHTTP请求/响应匹配
文件传输HTTP分块传输、断点续传
聊天系统MQTT发布/订阅天然适合
微服务通信HTTP/gRPC服务治理成熟

第九部分:应用场景与选型建议

9.1 典型应用场景

9.1.1 物联网(IoT)

设备类型:传感器、执行器、网关

消息特征:

  • 小消息(几十到几百字节)
  • 高频上报(每秒到每小时)
  • 低功耗要求

典型架构:

传感器 → MQTT Broker → 数据平台 → 应用

9.1.2 工业自动化

应用:生产线监控、设备控制、预测性维护

要求:

  • 高可靠性(QoS 1/2)
  • 低延迟(毫秒级)
  • 确定性通信

9.1.3 智能家居

设备:灯泡、插座、传感器、摄像头

特点:

  • 设备类型多样
  • 控制指令实时性要求高
  • 状态同步

9.1.4 车联网(V2X)

应用:车辆状态上报、远程控制、OTA升级

特殊要求:

  • 移动网络适应性
  • 断线重连快速
  • 安全性要求高

9.1.5 移动消息推送

替代传统推送:

  • 降低功耗(相对于HTTP轮询)
  • 实时性好
  • 支持离线消息

9.2 选型决策树

是否需要发布/订阅模型?
├── 否 → 考虑HTTP/CoAP
└── 是
    ├── 设备资源是否受限?
    │   ├── 是 → MQTT(Mosquitto轻量级)
    │   └── 否
    │       ├── 并发量 < 10k → Mosquitto
    │       ├── 并发量 10k-100k → EMQX/VerneMQ
    │       └── 并发量 > 100k → EMQX集群/HiveMQ
    └──

是否需要MQTT 5.0特性?
├── 是 → 选择支持5.0的Broker(EMQX等)
└── 否 → Mosquitto 2.x足够

是否需要企业级支持?
├── 是 → HiveMQ商业版
└── 否 → 开源方案

9.3 性能参考数据

单节点Mosquitto性能(典型配置):

指标数值
最大连接数10,000 – 50,000
消息吞吐量50,000 – 200,000 msg/s
延迟(P99)< 10ms
内存占用(10k连接)~500MB

实际性能取决于:

  • 硬件配置(CPU、内存、网卡)
  • 消息大小
  • QoS等级
  • 主题复杂程度
  • 持久化配置

结语

MQTT凭借其轻量、高效、灵活的特性,已成为物联网和机器通信的事实标准。本文全面介绍了MQTT协议的各个方面:

  1. 核心概念:理解了发布/订阅模型、代理架构、主题系统
  2. 服务质量:掌握了三种QoS等级的原理和选择方法
  3. 高级特性:了解了保留消息、遗嘱消息、持久会话等实用功能
  4. 版本演进:对比了MQTT 3.1.1和5.0的差异
  5. 安全机制:认识了认证、授权、加密的完整体系
  6. 应用场景:明确了不同场景下的协议选型

无论你是刚开始接触MQTT的初学者,还是希望深入了解协议细节的开发者,本文提供的知识体系都能帮助你更好地应用MQTT技术。

延伸学习建议:

  • 阅读MQTT 5.0规范(OASIS官方文档)
  • 动手实践:使用Mosquitto搭建MQTT服务器
  • 研究特定Broker的集群方案
  • 学习MQTT与Sparkplug、OPC UA等工业协议的集成

MQTT生态仍在快速发展,建议持续关注协议标准的更新和Broker产品的新特性,以应对不断变化的物联网需求。

作者

老丹

关注我
其他文章
上一个

ICO文件格式完全解析

下一个

usbutils:Linux下USB设备查看与调试的完整指南

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

搜索

近期文章

  • Bash命令行参数完全指南 2026年6月17日
  • Bash 数组完全指南:从设计思想到实战应用 2026年6月16日
  • Bash 变量内容操作完全指南 2026年6月16日
  • usbutils:Linux下USB设备查看与调试的完整指南 2026年6月16日
  • MQTT协议完全指南:从核心概念到实践应用 2026年6月16日
  • ICO文件格式完全解析 2026年6月15日

文章分类

  • C/C++开发 (10)
  • Linux工具包 (6)
  • Linux服务配置 (7)
  • Shell脚本 (3)
  • 计算机理论 (9)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号