主頁 >  其他 > MQTT協議入門

MQTT協議入門

2021-02-26 12:07:25 其他

目錄

一、前言

二、MQTT協議基本特點:

三、MQTT協議特性

四、MQTT協議通信模型

4.1 Client/Server架構

4.1.1 MQTT Client

4.1.2 MQTT Broker

4.2 發布/訂閱模式

五、MQTT協議格式

六、MQTT協議實作原理

6.1 建立連接

6.2 關閉連接

6.3 發布與訂閱

6.4 Qos

6.4.1 QoS0

6.4.2 QoS1

6.4.3 QoS2

6.5 keepalive與連接保活

6.5.1 keepalive的作用

6.5.2 keepalive特性

6.6 Retained訊息

6.6.1 Retained訊息的作用

6.6.2 Retained訊息特點

6.6.3 Retained訊息和持久會話

6.7 LWT(遺囑)

七、MQTT版本


一、前言

MQTT協議可以說是目前應用最廣的物聯網應用層協議,MQTT解決了物聯網中的一個最基礎問題,即設備和設備、設備和云端服務之間的通信,主要應用場景是可以為大量低功耗、網路環境不可靠的物聯網設備提供通信保障,該文章主要針對初學者的一些疑問進行解釋,比如,你知道為什么QoS2等級的訊息可以保證訊息不會重復接收嗎?為什么說是提供可靠的通信保障?更多協議細節沒有展示,可以參考MQTT中文網,

二、MQTT協議基本特點:

  1. 實作簡單

  2. 提供資料傳輸的QoS

  3. 輕量級、占用帶寬低

  4. 可傳輸任意型別的資料

  5. 可保持的會話(Session)

三、MQTT協議特性

  1. 基于TCP長連接的應用層協議,;

  2. 基于Client/Server架構;

  3. 使用訂閱/發布模式,將訊息的發送方和接收方解耦;

  4. 提供3種訊息的QoS(Quality of Service): 至多一次、最少一次、只有一次;

  5. 收發訊息都是異步的,發送方不需要等待接收方應答;

四、MQTT協議通信模型

4.1 Client/Server架構

完整的MQTT協議包括兩部分,MQTT Client和MQTT Server,其中MQTT Server 也就是Broker;

4.1.1 MQTT Client

只要設備基于MQTT協議連接了MQTT Broker ,就認為這個設備是MQTT Client, MQTT Client 可以單獨作為發布者和訂閱者,也可以同時是發布者和訂閱者,

4.1.2 MQTT Broker

MQTT Broker 是MQTT協議的核心,主要作用是接收發布者的訊息,然后轉發給對應的訂閱者,Broker可以對Clinet接入進行授權,并對Client進行權限控制,常用的C語言撰寫的MQTT Broker 開源庫有Mosquitto,更多可以查看https://github.com/mqtt/mqtt.github.io/wiki/servers,如果學習MQTT需要Broker環境,可以通過這些開源庫自建,也可以用各大云平臺提供的Broker服務,如阿里云、騰訊云,

4.2 發布/訂閱模式

MQTT是通過發布/訂閱模式實作,由于發布方和訂閱方沒有直接聯系,所以需要一個中間方對訊息進行發布和存盤,我們稱這個中間方為Broker,Broker 簡單來說就是基于mqtt協議的server實作(github 上有很多開源實作),連接到Broker的發布方和訂閱方作為Client;

  1. 發布方和訂閱方都建立了到Broker的TCP連接;

  2. 訂閱方告知Broker它要訂閱的Topic;

  3. 發布方將訊息發送到Broker,并指定訊息主題(Topic);

  4. Broker接收到訊息后,檢測哪些訂閱方訂閱了對應的Topic,然后將訊息發送到訂閱方;

  5. 訂閱方從Broker獲取訊息;

  6. 如果某個訂閱方處于離線狀態,Broker可以先保存對應的訊息,當訂閱方下次連接到Broker的時候,再將之前的訊息發送給訂閱方;

五、MQTT協議格式

MQTT協議使用二進制資料包,包含三個部分,分別是固定頭,可變頭、訊息體;

  • 固定頭:存在于所有的MQTT資料包中,長度是2~5位元組,包括3部分內容,資料包型別(4bit),標識位(4bit),資料包剩余長度大小(1~4Byte),具體含義參考MQTT協議

  • 可變頭:部分MQTT資料包包含

  • 訊息體:部分MQTT資料包包含

MQTT協議中,固定頭中的資料包剩余長度大小包括可變頭和訊息體長度,剩余長度可用1~4Byte表示,4Byte最大可表示256MB(0xFFFFFF7F),有些資料包沒有可變頭和訊息體,比如PINGREQ資料包只有2Byte,由此可以計算MQTT資料包的最大值和最小值

  • 最大值:256MB+5Byte,其中256MB是剩余長度最大值,包括可變頭和訊息體;5Byte是固定頭,資料包型別(4bit),標識位(4bit),資料包剩余長度大小(4Byte);

  • 最小值:2Byte,比如PINGREQ資料包,只有固定頭,沒有可變頭,訊息體;

六、MQTT協議實作原理

6.1 建立連接

Client在可以發布和訂閱訊息之前,必須先連接到Broker,這個連接不僅僅是建立TCP連接,也包括應用層建立連接,MQTT建立連接流程如下:

  • Client向Broker發送CONNECT資料包;

  • Broker收到CONNECT資料包后,如果允許接入則回復回傳碼為0的CONNACK資料包,如果拒絕接入,則回復回傳碼非0的CONNACK資料包,回傳碼表示失敗原因;

6.2 關閉連接

關閉連接可以由Client或Broker任意一方發起,也有第3種情況會關閉連接,就是心跳超時,不同的關閉流程也有區別:

  • Client端關閉連接:Client向Broker發送DISCONNECT資料包,不用等待Broker回復DISCONNECT資料包,Broker不會回復,發完就可以關閉底層的TCP連接;之所以要在斷開TCP連接前發送與Broker沒有互動的資料包,是為了讓Broker識別是正常的斷開的連接,Broker會丟棄當前連接的遺愿訊息,否則會識別為非正常連接,不會丟掉當前連接的醫院訊息;

  • Broker端關閉連接:不需要發送任何MQTT資料包,直接關閉底層TCP連接

  • keepalive超時:MQTT協議規定Broker沒有收到Client的DISCONNECT資料包之前都應該保持連接,但是如果Broker在keepalive的時間間隔里,沒有收到Client的任何資料包時就會主動關閉連接,這個keepalive 的數值是Client在發起連接時資料包種指定的;

6.3 發布與訂閱

發布與訂閱的概念想必大家都很了解,具體互動的協議資料包可查看MQTT協議,介紹幾個關鍵特性:

  • 支持接收離線訊息:MQTT支持訂閱者接受離線訊息,但并不意味著離線狀態下可以接收訊息,意思是如果發布者在訂閱者處于離線狀態下時向Broker發布了訊息,訂閱了對應Topic的訂閱者再次連接到Broker后會收到發布方在其離線期間發布訊息,接收離線訊息的要求是需要Client使用持久會話,且發布時的QoS不小于1;

  • 主題通配符:發布和訂閱的訊息主題可以使用通配符,通配符的主要作用是指定訊息主題名稱的層級,有一個特殊情況,取消訂閱時通配符不起作用,取消訂閱的主題名稱必須每個字都和訂閱時指定的主題名稱相同;

6.4 Qos

MQTT協議設計初衷是提供一套保證訊息穩定傳輸的機制,用于網路帶寬窄,信號不穩定環境下的資料傳輸,這套機制包括訊息應答,存盤和重傳,在這套機制下提供了三種不同層次的QoS(Quality of Service),QoS是Sender和Receiver之間達成的協議,而不是Publisher和Subscriber之間達成的協議,也就是Publisher和Broker之間的QoS,Subscriber和Broker之間的QoS ,兩者是沒有直接關系的,

  • QoS0:至多一次

  • QoS1:至少一次

  • QoS2:確保只有一次

以上是3種QoS服務層次,很多初學者在學習MQTT初期可能不太明白實作原理,尤其是QoS2如何確保只發送一次的,其實從MQTT協議本身來分析是很好理解的;

6.4.1 QoS0

Qos0是最簡單的一個訊息質量服務等級,Sender向Receiver發送含訊息資料的PUBLISH資料包,然后不管結果如何,直接丟棄已發送的PUBLISH資料包,所以Receiver最多收到一次,

6.4.2 QoS1

為了保證Receiver至少收到一次訊息,QoS1增加了應答機制;Sender向Receiver發送一個帶有訊息資料的PUBLISH資料包,并把這個資料包保存在本地,Receiver收到后會回傳一個PUBACK資料包,PUBACK資料包的可變頭中有一個和PUBLISH資料包相同的包標識,Sender收到PUBACK后根據包標識(Packet Identifier)找到本地保存的資料包并丟棄,發送完成,

如果Sender發送PUBLISH資料包后一定時間內沒收到PUBACK資料包,就會把PUBLISH資料包中的DUP標識置1(表示資料包是重發)重新發送,重復以上步驟,直到收到PUBACK,所以如果因為網路延遲等原因導致超時時間內Receiver沒有收到PUBLISH資料包或PUBACK沒發出去,就會導致Receiver收到多次,

6.4.3 QoS2

QoS2不僅要保證Receiver能收到Sender發送的資料包,而且不能重復,即只能收到一次,所以重傳和應答機制更加復雜;在3種服務等級中,QoS2是開銷最大的,速度最慢的,當然也是最安全的,

QoS2用2套請求/應答流程,也就是一個4段的握手來保證Receiver只收到一次Sender發送的訊息,

1)Sender發送QoS值為2的PUBLISH資料包,假設資料包中包含Packet Identifier(包標識)為P,并在本地保存PUBLISH資料包;

2)Receiver收到PUBLISH資料包后,在本地保存PUBLISH資料包的Packet Identifier 為P,并回復Sender一個PUBREC資料包,PUBREC包含Packet Identifier為P,但是沒有訊息體;

3)Sender收到PUBREC后就可以丟掉Packet Identifier為P的PUBLISH資料包,同時保存PUBREC資料包到本地,并回復Receiver一個PUBREL資料包,PUBREL資料包中的Packet Identifier為P,沒有訊息體;如果Sender超時時間內沒有收到PUBREC資料包,會把PUBLISH中的DUP標識 設為1,重新發送PUBLISH資料包;

4)當Receiver收到PUBREL資料包時,可以丟掉保存在本地的 Packet Identifier P,并回復Sender一個PUBCOMP資料包,PUBCOMP資料包可變頭中的Packet Identifier為P,沒有訊息體,

5)當Sender收到PUBCOMP資料包,資料包傳輸完成,丟掉本地的PUBREC資料包,如果Sender在超時時間內沒有收到PUBCOMP資料包,就會重復發PUBREL資料包;

以上就是完成一個QoS2等級資料包的流程,至少要發送4個資料包,但是有同學在第3步發現,當Sender沒有收到Receiver的PUBREC資料包時,仍然會出現PUBLISH資料包重復發送的情況,那么怎么保證Receiver只收到一次的呢?

原因就是Receiver收到PUBLISH資料包時,不是立即投遞給協議上層,而是在本地做持久化將訊息保存起來,等收到PUBREL資料包后才將訊息投遞給協議上層,然后把本地保存的Packet Identifier P洗掉,由于PUBREL資料包中沒有Packet Identifier P,所以即使PUBCOMP沒有發送成功導致PUBREL重發,Receiver也只需要回復PUBCOMP,不用重復投遞PUBLISH資料包到協議上層;

QoS2服務等級實作原理可以查看這篇博客,寫的很詳盡:https://blog.csdn.net/zerooffdate/article/details/78950907

6.5 keepalive與連接保活

6.5.1 keepalive的作用

在實際使用MQTT協議時,無論是Broker還是Client都需要及時感知到MQTT是否斷開;MQTT是基于TCP協議的應用層協議,理論上TCP斷開時會通知上層應用,但是TCP協議有個半打開連接的問題,這種狀態下,一段的TCP連接已經失效,但是另一端并不知情,需要很長時間才能感知到對端連接已經斷開;因此僅僅依賴TCP層的連接狀態監測是不夠的,于是MQTT設計了一套keepalive機制,

MQTT協議約定:在1.5*keepalive時間間隔內,如果Broker沒有收到來自Client的任何資料包,Broker就認為和Client的連接斷開;同理Client在這個時間間隔內沒有收到Broker的任何資料包,Client也會認為他和Broker的連接斷開;

MQTT協議設計了一對PINGREQ/PINGRESP資料包,當Broker和Client之間沒有任何資料互動時,可以通過這對資料包滿足keepalive的約定和網路狀態監測;

6.5.2 keepalive特性

  • 如果一個Keepalive時間間隔內,Client和Broker有過資料包傳輸,Client就沒有必要再使用PINGREQ資料包了;

  • Keepalive的值時有Client在發送CONNECT資料包時指定,不同的Client可以指定不同的值;

  • Keepalive的最大值是18時12分15秒

  • Keepalive 的值為0時代表不使用Keepalive機制

6.6 Retained訊息

6.6.1 Retained訊息的作用

會有這樣一種場景,Publisher發布了一個訊息后,Subscriber訂閱了這個主題,那么這個 Subscriber就不會收到在它訂閱之前Publisher發布的訊息, Retained訊息就是為了解決這個問題,Retained訊息是指在PUBLISH資料包中將Retained標識設為1的訊息,Broker收到這樣的PUBLISH資料包后,將會為該主題保存這個訊息,當一個新的訂閱者訂閱該主題時,Broker會將這個訊息發送給訂閱者,

6.6.2 Retained訊息特點

  • 一個Topic只有一個Retained訊息,發布新的Retained訊息將覆寫舊的Retained訊息;

  • 如果訂閱者使用通配符訂閱主題,會收到所有匹配主題的Retained訊息;

  • 只有新的訂閱者會收到Retained訊息,如果訂閱者重復訂閱一個主題,會被當做新的訂閱者收到Retained訊息;

  • 向主題發布一個payload長度為0的Retained訊息就可以洗掉這個主題的Retained訊息;

6.6.3 Retained訊息和持久會話

兩者沒有關系,Retained訊息是Broker為每一個主題單獨存盤的,而持久會話是Broker為每一個Client單獨存盤的;

6.7 LWT(遺囑)

LWT全稱為Last Will and Testament,也就是遺愿,包括遺愿主題,遺愿QoS,遺愿訊息等,具體見MQTT協議,遺愿具有以下特點:

  • 遺愿的相關設定是建立連接時,在CONNECT資料包里面指定的;

  • 遺愿用于非正常斷開連接的情況,當Broker檢測到Client非正常的斷開連接時,就會向Client的遺愿主題發布一條訊息;

  • Client發布DISCONNECT資料包斷開連接,屬于正常斷開,不會觸發LWT機制,而且Broker會丟掉Client連接時指定的LWT引數

七、MQTT版本

以上都是基于MQTT 3.1.1, MQTT 5.0更多內容參考官方檔案,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263905.html

標籤:其他

上一篇:HaaS EDU場景式應用學習 - 陀螺儀小球

下一篇:大資料實時分析利器ClickHouse實戰

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more