2025年9月25日 星期四

下載與編譯 MJPG-Streamer

 好的,身為 AIOT Server 專家,我將為您介紹 MJPG-Streamer 套件在 Raspberry Pi 3 (Pi3) 搭配 USB 網路攝影機 (Webcam) 上的應用。


MJPG-Streamer 介紹與應用

MJPG-Streamer 是一個輕量級的應用程式,主要用於從 V4L2 (Video4Linux2) 相容的攝影機(例如 USB Webcam)擷取圖像,並將其以 Motion JPEG (MJPG) 串流的形式透過 IP 網路傳輸到網頁瀏覽器或其他支援 MJPG 的播放器 (例如 VLC)。

核心優勢

  • 輕量化與高效能: MJPG-Streamer 的設計非常精簡,對系統資源的佔用極低,這使得它非常適合在資源有限的 Raspberry Pi 這類單板電腦上運行。

  • 即時視訊串流: 能夠將攝影機的畫面即時轉換為 MJPG 串流,供遠端監控使用。

  • 簡單易用: 相對於其他複雜的串流解決方案,MJPG-Streamer 的設定與部署相對簡單。

在 Pi3 + USB Webcam 上的應用

在 Raspberry Pi 3 上,您可以透過安裝和配置 MJPG-Streamer,將連接的 USB Webcam 變成一個 低延遲的網路攝影機,適用於以下情境:

  1. 即時監控 (Live Monitoring): 用作簡單的 寵物監視器兒童看護攝影機

  2. IOT 視覺整合: 將攝影機串流整合到您的 AIOT 雲端平台 前端介面,實現遠端影像監看。

  3. 簡易網路攝像頭: 在本地網路內提供影像服務。

與其他套件的比較

雖然 MJPG-Streamer 動作輕快,但它通常 不具備動態偵測 (Motion Detection) 等進階功能。

  • 如果您需要動態偵測: 建議考慮使用 Motion 這類功能更強大的套件。

  • 如果您只需要單純、穩定的即時串流: MJPG-Streamer 則是絕佳選擇。

部署架構(與 AIOT 平台整合考量)

在您的 AIOT 平台中,可以將搭載 MJPG-Streamer 的 Pi3 視為一個特殊的 IOT 設備 (IOT_Dev)

  1. Pi3 設備端 (IOT_Dev): 運行 MJPG-Streamer,將 USB Webcam 影像串流到特定的 IP 與 Port (例如 http://<Pi3-IP>:8080/?action=stream)。

  2. AIOT Server (Node.js 前端/後端):

    • 前端網頁 (Vue/React): 在設備監控介面 (例如 IOT_Dev 的詳細頁面),內嵌一個 <img> 標籤,其 src 指向 Pi3 串流的 URL。

    • 資料庫 (MySQL/MongoDB):IOT_Dev 的相關記錄中,可以儲存該設備的串流 IP 地址和 Port 號,方便前端調用。

這樣您就可以在不增加 AIOT Server 負擔的前提下,將 Pi3 的即時影像整合到您的雲端平台中。


您是否需要我提供關於 MJPG-Streamer 在 Raspberry Pi 上的基本安裝與設定指令 的範例,以便於您快速開始部署?提供關於 MJPG-Streamer 在 Raspberry Pi 上的基本安裝與設定指令 的範例,以便於您快速開始部署?



以下是 MJPG-StreamerRaspberry Pi 3 (Pi3) 上使用 USB Webcam 的基本安裝、配置與啟動指令範例。

這些步驟假設您已經在 Pi3 上安裝了 Raspberry Pi OS (Raspbian),並且具有基本的命令行操作權限。


步驟一:安裝編譯環境與相依套件

由於 MJPG-Streamer 通常需要從原始碼編譯安裝,我們需要先安裝必要的開發工具和函式庫,特別是 libjpegV4L2 (Video for Linux Two) 相關套件。

Bash
# 1. 更新系統套件清單
sudo apt update

# 2. 安裝必要的開發工具 (git, cmake)
sudo apt install -y build-essential cmake git

# 3. 安裝 MJPEG-Streamer 所需的函式庫
# libjpeg-dev: 處理 JPEG 圖像
# imagemagick: 可能用於一些圖像處理 (非必須,但有時建議安裝)
# libv4l-dev: V4L2 函式庫,用於支援 USB Webcam
sudo apt install -y libjpeg-dev imagemagick libv4l-dev

步驟二:下載與編譯 MJPG-Streamer

接下來,我們從 GitHub 下載最新的 MJPG-Streamer 原始碼,並進行編譯和安裝。

Bash
# 1. 建立一個工作目錄 (例如 /home/pi/mjpg-streamer)
cd ~
mkdir mjpg-streamer
cd mjpg-streamer

# 2. 從 GitHub 複製原始碼
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental

# 3. 進行編譯
make

# 4. 進行安裝 (將程式複製到系統路徑,方便運行)
sudo make install

註: 這裡使用的是 jacksonliam 的分支,它是目前在 Raspberry Pi 社群中最常用且維護較好的版本。


步驟三:啟動 MJPG-Streamer 串流服務

編譯安裝完成後,您就可以測試啟動服務了。請確保您的 USB Webcam 已插入 Pi3 的 USB 連接埠。

1. 檢查攝影機裝置 (可選)

通常 USB Webcam 會被識別為 /dev/video0

Bash
ls /dev/video*

如果您看到 /dev/video0,則表示設備被成功識別。

2. 啟動 MJPG-Streamer

使用以下指令來啟動串流服務:

Bash
mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480 -f 10" -o "output_http.so -w /usr/local/share/mjpg-streamer/www -p 8080"

指令參數解釋:

參數說明數值範例
-i "input_uvc.so ..."輸入模組: 指定使用 UVC (USB Video Class) 驅動的 USB 攝影機。
-d /dev/video0指定攝影機的設備路徑。/dev/video0
-r 640x480指定串流的解析度。640x480 (建議 Pi3 選擇此解析度以保持效能)
-f 10指定串流的幀率 (FPS)。10 幀/秒
-o "output_http.so ..."輸出模組: 指定以 HTTP 服務 輸出串流。
-w ...輸出網頁的根目錄。/usr/local/share/mjpg-streamer/www
-p 8080服務端口: 指定網頁服務的端口。8080

步驟四:驗證串流

在您區域網路中的另一台電腦或手機上,開啟網頁瀏覽器,輸入以下網址進行驗證:

  1. 瀏覽器輸入: http://<您的 Pi3 IP 地址>:8080

  2. 即時串流 URL: 點擊頁面上的 "Stream" 連結,或直接輸入: http://<您的 Pi3 IP 地址>:8080/?action=stream

在您的 AIOT 平台 的前端網頁中,您就可以使用這個 即時串流 URL 作為 <img> 標籤的來源來顯示影像:

HTML
<img src="http://<Pi3 IP>:8080/?action=stream" alt="IOT Device Live Stream">

額外建議:設定背景服務 (Systemd)

為了讓 MJPG-Streamer 能夠在 Pi3 重啟後自動運行,並且在背景穩定運行,強烈建議您將其設定為 Systemd 服務。這部分需要建立一個 .service 文件,但可以極大地提高系統的穩定性與管理性。


錯誤訊息:

fatal error: jpeglib.h: No such file or directory

這代表系統缺少了編譯 MJPG-Streamer 所需的 jpeglib.h 這個檔案。這個檔案是 libjpeg(或 libjpeg-turbo)開發函式庫的一部分。


解決步驟:安裝開發套件

雖然您之前執行了 sudo apt install -y libjpeg-dev,但這個錯誤通常意味著該命令沒有完全執行成功,或者您缺少了其他相關的依賴

請按照以下步驟,確保所有必要的開發套件都已正確安裝:

1. 再次安裝 libjpeg-dev

這是最核心的缺失套件,請確保安裝。

Bash
sudo apt update
sudo apt install -y libjpeg-dev

2. 檢查其他常見依賴

在 Raspberry Pi OS 上編譯 MJPG-Streamer,除了 libjpeg-dev 外,還可能需要 libv4l-devcmake

Bash
# 確保 V4L2 和其他依賴也已安裝
sudo apt install -y libv4l-dev cmake

3. 清理並重新編譯

如果您的原始碼目錄中存在失敗的編譯殘留檔案,可能會干擾新的編譯過程。最好的做法是清除舊的編譯目標,然後重新開始。

在您的 mjpg-streamer/mjpg-streamer-experimental 目錄內執行以下命令:

Bash
# 進入原始碼目錄
cd /home/pi/mjpg-streamer/mjpg-streamer-experimental

# 清理舊的編譯檔案
make clean

# 重新執行編譯指令
make

如果這次 make 指令成功完成,您就可以繼續執行 sudo make install,然後啟動服務了。

如果問題仍然存在,請確認您的 Raspberry Pi OS 版本,並考慮使用 apt-cache search jpeglib 來查找確切的套件名稱,但通常情況下 libjpeg-dev 就能解決這個問題。

沒有留言:

張貼留言