Mar 2026【隨筆】Clone a Meta Ray-ban Display glasses application|藍芽 L2CAP CoC 極致低延遲架構優化:實現 720p 智慧眼鏡流暢串流 👓(LIVE DEMO)

圖片
最近在做一些實驗性質的東西,記得去年短暫玩過 2023 年底上市的第二代 Ray-Ban Meta 智能眼鏡,雖然它主要還是依賴智慧型手機作為算力中心,但我們對它所使用的串流技術很感興趣,因為聽說他們是用藍芽做串流。 去年曾經有同事隨口問我:「我們的眼鏡做到跟他們一樣你覺得有可能嗎?」,因為我知道我們的硬體規格跟人家的相比並非等號,加上當時有其他事情在搞,所以隨口開玩笑回說:“可是聽說 Meta 有200個人在搞那個眼鏡捏(雖然不知道他們負責搞應用的有幾人),啊我如果一個人可以幹贏他們200人,那我還在這幹嘛???(笑)” 也記得更久以前,當我們還在研究那個眼鏡時,常聽到像是:『 他們不知道用了什麼黑科技 』,這類沒有建設性、不應該從 RD 嘴裡說出來的話,而我也是不以為然。坦白講,以前每次只要聽到某SW嘴砲經理(暫且以H君稱之),沒事就把『 黑科技 』三個字掛在嘴上,當做無知的遮羞布,我就會感到倒胃口!同樣身為RD,我只覺得  Shame on you!(打嘴炮、作秀搶風頭、噁心帶風向、搞政治操作、把別人做事的成果搶去幫自己抬轎、有鍋直接推給下屬扛、散佈同事私生活謠言,還有職場霸凌,這些你他媽都頂級專業戶,除此之外沒啥洨用了!) 一件理論上可以做到的事情,外行人的認知被信息差,不懂加上沒實作能力去驗證,就什麼都變成黑科技了(多黑?比巴西黑鮑魚還黑嗎?)。反重力技術說不定也非啥黑科技,只是政府不讓你普通老百姓了解罷了。 Ray-ban Meta 的黑科技,講白了就是人家拉個百人團隊在搞那支眼鏡,然後把軟體技能和硬體規格點滿,再加上極致優化後的成果罷了! 當時知道 Ray-Ban Meta 的智慧眼鏡有塞入一個強大的 WiFi 6 晶片在裡面,一開始我猜測會不會有可能是透過 WiFi P2P 或 WiFi SoftAP 的方式去做串流(確實 Meta 的智能眼鏡,在同步媒體時,會強制要求開啟手機的 WiFi 開關,所以媒體同步應該是靠 WiFi 通道做的),而去年初我也快速做了一個WiFi Direct 架構來做 POC,確實傳輸效率非常快,幾百 MB 的大檔幾乎秒級傳完,從眼鏡端將媒體串流到手機端更是不用說的順暢,而且當時我們的媒體串流還是以未經編碼的方式傳透過 Socket 直接傳輸的(這表示傳輸時所需的頻寬會更大,功耗據說也較大)。 後來因為 ...

Java Database Connectivity (JDBC) - com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying except

前陣子在處理某人丟給我要我修改的一支 Java Server Page 程式,花了一些時間安裝配置好JSP的執行環境和開發環境後,開啟網頁要測試關鍵字搜尋時卻顯示一片空白,但 Tomcat 好像無法跟 Rails 的 Mongrel Server 一樣可以從 Terminal 即時瀏覽輸出訊息,所以只好去查看/var/log/tomcat6/catalina.out記錄檔,之後找到如下的錯誤訊息:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.ConnectException
MESSAGE: Connection refused

STACKTRACE:

java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at java.net.Socket.(Socket.java:392)
at java.net.Socket.(Socket.java:235)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:173)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:267)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2739)
at com.mysql.jdbc.Connection.(Connection.java:1553)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:620)
at java.sql.DriverManager.getConnection(DriverManager.java:222)
at foo.retrieve.caluQueryM(retrieve.java:76)
at foo.retrieve.(retrieve.java:34)
at org.apache.jsp.showDocFeature_jsp._jspService(showDocFeature_jsp.java:100)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:636)


** END NESTED EXCEPTION **

從log file的輸出看來,這個錯誤明顯是Java程序没有連接上MySQL資料庫,導致無法進行任何與資料庫相關的操作。因此這個錯誤本質上是一個網路的問題。大致瀏覽了一下程式碼,發現它是採用TCP/IP的方式去連接MySQL:

String sDriver = "com.mysql.jdbc.Driver";
String sCon = "jdbc:mysql://localhost:3306/" + myprojectuser=root&password=123321&useUnicode=true&characterEncoding=big5";

最後我從Oracle論壇上面找到了一個相似的討論串,終於得到了頭緒,問題就出在MySQL設置檔裡有個選項skip-networking,而我以往習慣會將它設置為ON(因為在開發Ruby on Rails應用程式時根本不會遇到這種問題),因為這個設置,因此使得這支JSP程式無法透過TCP/IP去連接MySQL。解決方法只要將/etc/mysql/my.cnf設置檔中的skip-networking這個選項註解掉或移除就行了,同時我也將skip-name-resolve的選項給註解掉,最後重新啟動MySQL和Tomcat就搞定了!

Development Environment:Linux Ubuntu 10.04 + MySQL 5.1.46 Community Server + JDK 6.0 + MySQL Connector 5.1.6 with "com.mysql.jdbc.Driver" class + Apache2 + Tomcat6


熱門文章

2019, July 7~8【中國山東】老司機帶你攀登72位古代帝王曾登臨朝拜,以五嶽獨尊名揚天下的泰山(歷史典故+遊覽路線+遊記+照片)

【美國加州】此生必去超美風景!加州一號公路自駕遊~Half Moon Bay、17 Mile Drive、Bixby Greek Bridge、Big Sur、McWay Falls、Elephant Seal Rookery

Mar 2026【隨筆】Clone a Meta Ray-ban Display glasses application|藍芽 L2CAP CoC 極致低延遲架構優化:實現 720p 智慧眼鏡流暢串流 👓(LIVE DEMO)

台中【馨苑小料理】西區店|巷弄裡的人氣台菜店|米其林必比登推薦美食|提供合菜、個人套餐

Aug 2026【新北三峽】鳶尾山、鳶山、鳶山彩壁、五十分山環狀健行(環台北天際線第九段)

Aug 2026【南投信義】從郡大林道 19K 造訪郡大神木群(鄉山神木群)

2019 Aug 16~18【福建南平】中國世界遺產~福建武夷山遊記。登天遊峰、臨九曲溪、品大紅袍

日本の登山の歷史

Dec 2024【苗栗泰安】水雲餐廳溫泉民宿♨️🥢⛰️|水雲三星之橫龍山~騰龍山健行|台中西嶼龍新鮮海鮮古早味餐廳

【南投信義】丹大林道與消失的省道台16線|可徒步深入中央山脈的經典長程林道

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *