自從購買 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相關視覺分析的東西加上來。



創作者介紹
創作者 CuteParrot 的頭像
CuteParrot

馴龍窩

CuteParrot 發表在 痞客邦 留言(0) 人氣(47)