自從購買 arduino uno Q之後,可以玩的東西就變得很多了
今天在產線看到其他部門在架設AI 檢測,好奇與之詢問相關架設相關問題
他有提到可以將 linux上的 usb camera鏡頭拍攝到的影像,利用 UDP 方式傳送到其他電腦,之後解碼就可以顯示
想說,能不能在家裡玩玩看,反正硬體相關設備我都有
於是,有了想法,就可以開始把玩
----硬體環境----
1.arduino uno Q一台,跑 Linux Debian 作業系統
採用 SBC(signal board computer) mode,接 type C 擴充埠
有接周邊 usb camera , mouse, keyboard , HDMI輸出
2.widows 11 PC一台, RTX4060顯卡(負責 decode)
3.以上裝置都是在 同一個網路環境 192.168.50.X
arduino Q ip為192.168.50.60
windows 11 ip為 192.168.50.78
以下就Arduino Q上面與windows 11上面要安裝與設定做說明
--Arduino Q 端--
terminal下執行以下指令 ,記得 要將 udpsink host後面的IP改成你目的端的 ip
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! videoconvert ! video/x-raw,format=I420 ! x264enc tune=zerolatency speed-preset=ultrafast ! rtph264pay config-interval=1 pt=96 ! udpsink host=192.168.50.78 port=5000
順利執行後會出現以下畫面
--windows 11端--
因為預設winodws11 沒有安裝 gst-launch-1.0
所以要至以下網址下載安裝
https://gstreamer.freedesktop.org/download/#windows
MSVC 64-bit (VS 2019, Release CRT)檔案下載
https://gstreamer.freedesktop.org/data/pkg/windows/1.26.9/msvc/gstreamer-1.0-msvc-x86_64-1.26.9.msi
預設安裝路徑為 c:\Program Files\gstreamer\1.0\msvc_x86_64\bin\
並加上環境變數 ->系統變數 > path
c:\Program Files\gstreamer\1.0\msvc_x86_64\bin\
之後再windows cmd視窗下,執行以下指定
gst-launch-1.0 udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpjitterbuffer latency=0 ! rtph264depay ! h264parse ! nvh264dec ! videoconvert ! autovideosink sync=false
順利執行就會看到類似以下的視窗
等待一下,就可以看到從 arduino Q上面傳過來的 usb camera影像
如果有遇到問題,可以在 windows 11下先用此指定看看能否能 dump到資料
--for test on windows 11 side--
gst-launch-1.0 -v udpsrc port=5000 num-buffers=10 ! fakesink dump=true
以下是 gemini相關提供的解釋
--
為什麼這組指令能 Work?(技術複盤)
強制格式 format=I420 (關鍵修復點)
之前的報錯是因為 Linux 端預設輸出了 YUV 4:4:4 (高保真) 格式。
絕大多數硬體解碼器 (包含您的 RTX 4060 nvh264dec) 和 Windows D3D 渲染器都只支援 YUV 4:2:0 (即 I420 或 NV12)。
加上 ! video/x-raw,format=I420 ! 強制轉檔後,硬體終於看得懂資料了。
極致低延遲設定
Linux 端: tune=zerolatency (關閉 B-frame,只送 I/P frame) + speed-preset=ultrafast (犧牲壓縮率換取速度)。
Windows 端: rtpjitterbuffer latency=0 (不緩衝,收到封包直接解) + sync=false (不等待時間戳記同步)。
這組合是目前 GStreamer 能做到的最低延遲配置 (通常在 100ms 以內)。
硬體加速
Windows 端成功使用了 nvh264dec,這讓您的 CPU 佔用率應該非常低,完全由顯卡負責解碼。
--
關於 gstreamer, gst-launch-1.0 要來找一個時間,詢問gemini老師,吸收一些 gstreamer與 gst-launch-1.0相關知識了。
UDP傳送檔案成功,又學到一些些新技能了。在此作紀錄。
將下來預計研究如何將AI相關視覺分析的東西加上來。

