2014年2月15日 星期六

樹莓派, 手機, 電腦與 Raspberry Pi Camera Module 的串流視訊建立

本篇網頁用到的 Camera 模組套件可至露天賣場訂購:

正確組裝完成圖

NOTE:攝像機非常不喜歡靜電!要從防靜電袋中拿出 Camera Board 組裝前,一定要記得先將自己放電先 ( 例如:摸一下水龍頭或身體與地表接觸 ) ! 
Please note that the camera can be damaged by static electricity. Before removing the camera from its grey anti-static bag, please make sure you have discharged yourself by touching an earthed object (e.g. a radiator or water tap). )

這篇網頁不說明 Raspberry Pi Camera Module ( 網頁中簡稱 (官方) 攝像機 ) 軟體安裝和裝設的方法,如果還未完成這部分的話,請先到官方網站去看攝像機安裝說明影片影像和啟用說明。



下面列出官方攝像機網站與使用說明書的連結網址:
  • Raspberry Pi Camera ( Web, 英文 )
  • 官方網站關於攝像機模組的硬體安裝與軟體設置的影片與文字說明,主要主題有:
    • 如何安裝攝像機
    • 裡面有影片可以看。

    • 如何在 Raspbian 作業系統啟用攝像機的支援
      最近 ( wheezy-raspbian-2013-02-09 之後 ) 的作業系統裡面已經有選項可以選用,因此只要進入 raspi-config 選單中 "Enable Camera" 就可以了,網頁中有選單結圖可以做參考。

      若您的作業系統是舊版的,就請先更新與升級作業系統,之後再進入選單就會有啟用攝像機的選項出現了。

    • 如何使用樹莓派的攝像機軟體
    • raspividraspistill 這兩個攝像機命令列指令 (前者是攝影指令;後者是照相紙令) 的使用範例,但沒有詳細的指令參數說明,這兩個指令的參數說明請尤其他提供的連結下載資料。

    • 如何串流傳送攝像機影片到網路上
    • 官網寫的一大堆指令範例要做串流,又要安裝軟體的,如果各位看得懂,就看官網中的,不然就看這網頁中的視訊串流建立的介紹說明。

  • RaspiCam Documentation (odt, PDF, December 7th 2013)
  • 官方攝像機最新說明文件 ( odt 是原始檔案;PDF 是 odt 的轉檔 )
    但這份文件主要著重在軟體指令的說明,重點是在第五頁之後的 raspistill, raspivid, raspiyuv 三個命令列指令的相關參數的說明,還有第十六頁的指令使用範例,都比上、下兩個文件清楚。

  • Unofficial guide to getting up and running with the Raspberry Pi Camera (PDF, 英文)
  • 這份是針對舊版的 wheezy-raspbian 作業系統設置官方攝像機的軟體應設定說明,雖然新版的用不到所有的東西,但是也是有一些東西可供參考

  • OV5647 5-megapixel product brief - OmniVision ( PDF, 英文 )
  • 官方攝像機 Image Sensor 的簡介


如果您想學影像處理,或是對硬體控制有興趣,使用樹莓派以及專用攝像機的組合是一個可作為起步的套件組合。接著,我們就進入此篇網頁的重點:樹莓派官方攝像機怎麼串流視訊資料到:
  1. 樹莓派主機  -- 使用 PiVision
  2. PiVision 是一個使用 GUI 來調整官方攝像機在攝影、照相時的參數的圖型介面程式。

  3. Android 手機、平板 兩個可觀看樹莓派攝像機的 APP,必須要先在手機做安裝。
    • 使用 RaspiCAM Remote
    • 強力推薦安裝這個樹莓派官方攝像機  APP,可直接拍照或是錄影存到手機上,重點是:不需要在樹莓派主機安裝任何程式就可使用手機操作,讚吧!!

    • 使用 MX Player
    • MX Player 是個撥放影片的 Android APP,但是它可以用來撥放串流檔案,也就是要用它來接收由樹莓派傳送出來的攝像機串流影片。

  4. Windows(8) 作業系統
  5. Windows作業系統 ( 我使用 Win8 ) 是作為串流影片的接收端,但是不只一個地方可以做串流影片的接收,在這部分我會展示一次使用兩個軟體來做。 

新版的 wheezy-raspbian 裡已經預先安裝了官方攝像機的相關驅動與軟體,所以如果你(妳)使用的作業系統是舊的,先檢查一下 /opt/vc/bin 下有無 raspivid raspistill 兩個執行檔,確認是否之前已經對系統做過更新與升級到支援官方攝像機;沒有的話就參照上方所提供的檔案一步一步操作吧。沒完成之前不要往下看!


** 測試環境說明 **

在進行之前,說明一下樹莓派的周邊與系統簡單設定。在網頁中所出現的資料,都是在這條件上完成的,若是你(妳)的設置不一樣有可能會造成不一樣的結果。
  • 樹莓派作業系統:2014-01-07-Wheezy-Rraspbian ( 全新安裝 )
    無超頻與變更記憶體分割,延伸磁區、開啟 SSH、設置時區與鍵盤系統,相關基本作業系統環境設置可參考 "[PiFace Digital 首部曲] 樹莓派作業系統 (2013-02-09-wheezy-raspbian) 之環境設定"

  • 攝像機:Raspberry Pi Camera Module ( 樹莓派攝像機 )

  • 記憶卡:8G MicroSD ( + 轉卡 ), Class 4 ( 賣場套件使用的卡 )

  • 鍵盤滑鼠:ione SCORPIUS P6 ( USB 介面, 鍵盤滑鼠一體整合 )

  • 螢幕:ViewSonic VA2037m-LED
    樹莓派使用 HDMI 轉 VGA 轉接頭轉接到螢幕

  • 電源:樹莓派電源組合 ( USB (5V, 1000 mA) + MicroUSB 轉接線 )
  • 電流輸出至少 1000mA,並依照外接設備增加電流輸出量。

  • 網路:

  • 其他
    • PC 作業系統: Windows 8

    • 手機:Android, Sony Xperia P, LT22i



軟體安裝:
在這篇網頁中,需要用到幾個軟體,包括樹莓派、Android 手機或平板和 Windows 作業系統都各有軟體需要下載或安裝,裝不裝可以在看過全文之後再決定也可以。


**樹莓派官方攝像機啟用與 Pi Vision 安裝:

樹莓派的官方攝像機在使用時有預覽的功能 ( Preview ),但一定要接機子上面的視訊輸出才會正常動作,不然是看不到預覽的影像的 (使用 VNC 連過去也是看不到的)。所以在繼續之前接上 HDMI線,或 HDMI 轉 VGA 轉接器,或接 AV Out 到螢幕上。

作業系統:2014-01-07-Wheezy-Raspbian 全新安裝 ( 預設狀態,不修改任何 raspi-config 下任何系統參數),但必須 "Enable Camera" 和啟用 "8 Advanced Option / A4 SSH" 這兩個選項,其餘的預設就好 ( 或自己再去設定,不過建議完成所有測試之後再做,避免其他因素影響測試結果 )。

ps. "8 Advanced Option / A3 Memory Split" 已預設 GPU 分割為 128MB,除非你(妳)知道自己在做什麼,不然先不要改。
2014-01-07-wheezy-raspbian, raspi-config, "Enable Camera"
2014-01-07-wheezy-raspbian, raspi-config, 啟用 "A4 SSH"

在樹莓派的桌面上打開瀏覽器輸入 Pi Vision 網址,在網站中點擊 Downalod下載 Pi Vision 的壓縮檔 ( PiVision_RPi.tar.gz ) 直接存到 /home/pi 目錄下

Pi Vision 網站:http://wp.me/P2IUMh-gc
 到 Pi Vision 官方網站下載檔案

接著繼續在桌面打開 LXTerminal ( 終端機 ) 輸入下面指令解開下載的壓縮檔。解開的壓縮檔是一個執行檔,但權限不對需要修改為可執行的檔案
pi@raspberrypi ~ $ tar -zxvf PiVision_RPi.tar.gz
PiVision_RPi/rpiCC
PiVision_RPi/
pi@raspberrypi ~ $ cd PiVision_RPi/
pi@raspberrypi ~/PiVision_RPi $ ls -l
total 17084
-rw-r--r-- 1 pi pi 17490013 May 30  2013 rpiCC
pi@raspberrypi ~/PiVision_RPi $ file rpiCC
rpiCC: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped
pi@raspberrypi ~/PiVision_RPi $ ls -l
total 17084
-rw-r--r-- 1 pi pi 17490013 May 30  2013 rpiCC
pi@raspberrypi ~/PiVision_RPi $ chmod 755 rpiCC
pi@raspberrypi ~/PiVision_RPi $ ls -l
total 17084
-rwxr-xr-x 1 pi pi 17490013 May 30  2013 rpiCC
pi@raspberrypi ~/PiVision_RPi $

完成上面的指令輸入之後,在目錄 ~/PiVision/ 就可得到 rpiCC 可執行檔。想研究原始碼的話,就再繼續輸入下面指令下載原始碼
pi@raspberrypi ~/PiVision_RPi $ cd
pi@raspberrypi ~ $ git clone git://github.com/local-vision/Pi-Vision
Cloning into 'Pi-Vision'...
remote: Reusing existing pack: 213, done.
remote: Total 213 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (213/213), 30.52 MiB | 2.91 MiB/s, done.
Resolving deltas: 100% (101/101), done.
Checking out files: 100% (53/53), done.
pi@raspberrypi ~ $ ls -l

drwxr-xr-x 2 pi   pi       4096 Jan  8 06:09 Desktop
-rw-r--r-- 1 pi   pi       5781 Feb  3  2013 ocr_pi.png
drwxr-xr-x 6 pi   pi       4096 Feb 12 13:16 Pi-Vision
drwxr-xr-x 2 pi   pi       4096 Feb 12 14:22 PiVision_RPi
drwxrwxr-x 2 pi   pi       4096 Mar 10  2013 python_games
drwxr-xr-x 2 pi   pi       4096 Feb 12 12:38 temp
pi@raspberrypi ~ $

下載完成之後,就會在家目錄中產生一個 Pi-Vision 的資料夾,rpiCC 的原始碼就在裡面。

好了!進入到 PiVision_RPi 目錄中執行 rpiCC,就會在桌面出現 Pi Vision 的圖形介面程式
pi@raspberrypi ~ $ cd PiVision_RPi/
pi@raspberrypi ~/PiVision_RPi $ ./rpiCC &
pi@raspberrypi ~/PiVision_RPi $

Pi Vision GUI 在桌面的中間靠右下的地方,直接按下 "Test Camera Preview" 按鈕就會在桌面的左上方看到攝像機現在看到的影像。
2014-01-07-Wheezy-Raspbian, Pi Vision GUI
2014-01-07-Wheezy-Raspbian, Pi Vision GUI

Pi Vision GUI 提供了拍照 ( Photo )、攝影 ( Video ) 和攝像機拍照攝影時的可調參數設定 ( Settings ) 介面選項,在開發或是撰寫影像處理程式時,無非提供了可馬上得知參數單獨或是混合使用時的即時反饋。
Pi Vision GUI
Pi Vision GUI

Note:在測試環境中的說明,可以知道樹莓派外接了 USB 整合式鍵盤滑鼠和 HDMI 轉 VGA 轉接頭,因此在預覽很大的影像時,螢幕會突然熄滅再開啟,但是設定小一點時就沒有這問題,因此若是有這問題的話,有三個解決的方法:
  1. 不使用外接螢幕 ( HDMI 和 AV Out 都不要接東西 ) 。
  2. 設定小一點的預覽影像。
  3. 更換能輸出大一點輸出電流的電源供應器。
依我的情況,若是要以最大的影像做預覽輸出,1200 mA 以上的電源供應器就可以了。


** 樹莓派中安裝 VLC Media PLayer:

VLC Medial Player 除了用來撥放影片之外,可用來做為將樹莓派攝像機的影像資料傳送到網路的軟體,所以輸入下面指令安裝 VLC:

pi@raspberrypi ~ $
pi@raspberrypi ~ $ pi@raspberrypi ~ $ sudo apt-get update && sudo apt-get install vlc
pi@raspberrypi ~ $


** Android 手機、平板 APP 安裝:

在 PC 或是 Android 裝置上開啟瀏覽器或是進入到 Google Play 安奘兩個建議的 APP:
Google Play - MX Player 下載頁面, from: Google play
Google Play - RaspiCam Remote 下載頁面, from: Google play

Note: 如果你(妳)是使用蘋果裝置,RaspiCam Remote 就不用裝了!另外的 MX Player 可以找支援 rtsp 的撥放器下載使用即可,但就不保證一定可以用!


** Windows 下載可攜板 mplayer 與 VLC :

下載網址如下:
  • VLC Media Player下載頁執行檔7zip可攜板zip可攜板 )
    上面提供的檔案是 win32 版本的,如果你(妳)的作業系統是 win95/98/me 或是 win64 的,請點及下載頁連結點選適當的檔案下載。
    網頁撰寫時最新的版本是:2.1.3 ( 2014/02/14 )

  • mplayer ( 下載頁 )
    請直接上下載頁下載最新版本的 mplayer,檔案名稱應該會是:
    mplayer-svn-xxxxx.7z,xxxxx 代表版本號碼,網頁撰寫時版本為:r36350 (2014/02/14) 

下載之後請先解壓縮並記住解壓縮的地方。


軟體測試與攝像機視訊串流檔建立:

現在你(妳)如果跟我一樣不太喜歡接一大堆東西在樹莓派上面,留下電源、記憶卡和網路線就好,其他的都可以拔掉了!因為我們接下來都會使用 SSH 連線到樹莓派,只要下指令就可以了。

ps. 因為接下來我們會使用到 SSH 連線,如果電腦中沒有這軟體可以用的話,利用一下網頁右上角的搜尋功能,在部落格中搜尋與 SSH 相關的文章,裡面有軟體可以用!

現在,手機、樹莓派和 Windows 系統都已經裝好要用的軟體與套件,可以開始動手玩了!

ps. Pi Vision 已經在上面安裝說明過了,下面就不再贅述!


**  樹莓派攝像機影像至手機 -- 使用 RaspiCam Remote:

在手機桌面或是軟體裡面尋找 RaspiCam Remote 並點擊打開
RaspiCam Remote 圖示
RaspiCam Remote 圖示

每次打開軟體視窗會出現上一次與樹莓派連線的資料,如果要每次打開 RaspiCam Remote 自動連線上樹莓派,在 Auto connect on startup 前面的方框點擊一下,變成打勾圖示就可以了。

按一下 Connect 按鈕,開始與樹莓派連線
RaspiCam Remote 設定畫面
RaspiCam Remote 設定畫面

我事先找了一張紙並寫上 ruten.protes 在上面,因為沒有特別作調整以及拍攝環境不是很亮,所以拍出來的照片暗暗的。但這不影響我們的目的,因為重點不是在拍攝影片或是照片,是要能在遠端即時看到攝像機的影像。
RaspCam Remote 主畫面
RaspCam Remote 主畫面

主畫面下方有四個按鈕,由左至右為"設定"、"連續模式"、"拍照"、"存檔"。

開啟"連續模式"之後,就會看到影像。按下"設定"按鈕,就會出現很多影像處理的參數和設定選單,隨便點幾個看看,可看到相對應的影像變化。

按下"拍照",就會出現一張靜止的影像,若要儲存這張影像就按下"存檔",檔案會儲存到手機拍照目錄下的 Camera 中,以我的手機為例就是儲存到 /storage/sdcard0/DCIM/Camera 中。
RaspiCam Remote 設定畫面
RaspiCam Remote 設定畫面

RaspiCam Remote 操作上非常簡單與方便,而且不需要額外在樹莓派中安裝任何軟體,非常適合樹莓派官方攝像機的操作。

ps. RaspiCam Remote 現在不只支援樹莓派官方攝像機,也支援一般 USB Camera 。


** 接收由樹莓派攝像機傳送出來的串流影片:

要接收由樹莓派攝像機傳送出來的串流影片,必須先在樹莓派裡建立影片資料的串流再由網路傳送出來,只要接收端能夠接收與解讀這串流格式即可 ( 但是還是有很難開啟這串流的軟體 )。如果在\使用的時候遇到問題,建議換個軟體試試會比較快!

由樹莓派建立的串流格式是 rtsp,所以只要接收端能夠解讀這格式就能夠讀取,不一定要跟我用一樣,只要能夠正確執行就好。

使用 SSH 連線至樹莓派 ( 或直接在樹莓派 ) 終端機模式下輸入下面指令:
pi@raspberrypi ~ $
pi@raspberrypi ~ $ raspivid -o - -t 0 -w 300 -h 200 -n | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264
... << 以下省略 >> ...

實際指令執行如下圖所示,大約幾秒鐘的時間!
建立樹莓派攝像機影像串流
建立樹莓派攝像機影像串流

指令順利執行之後,串流輸出端已經建立完成,現在只要開啟支援 rtsp ( 上面指令建立 rtsp 串流 ) 的接收端軟體,就可以觀看影片了。

指令我們在網頁最後再做說明。下面我們要在 Android 手機以及 Windows 作業系統接收這串流的影片,也就是看網路影片!

-- Android 手機

在手機桌面或是軟體裡面尋找 MX Player 並點擊打開
MX Player 圖示

按下手機的選單圖示開啟 MX Player 的選單,選擇"網路串流",並在其中輸入:

rtsp://192.168.11.12:8554

其中,192.168.11.12 是樹莓派主機的 IP 位址;8554 是 Port 號碼,設定在剛剛建立串流的指令中。
MX Player - "網路串流"設定視窗
MX Player - "網路串流"設定視窗

輸入完成之後,按下"確定",就能看到影像了!
MX Player 播放由樹莓派傳過來的攝像機影像

影像看到了!現在可以換到 Windows OS 了嗎 ?

-- Windows (8) 作業系統

在桌面開啟一個 "命令提示字元" 視窗。還記得我們下載了兩個可攜板的軟體嗎?其中 mplayer 是一個要在命令列輸入指令的軟體,而 VLC Media Player 可以直接點擊開啟。

VLC 目錄裡點擊 vcl.exe 開啟 VCL Media Play ( 媒體撥放器 ),點選 "媒體 / 開啟網路串流..." 開啟輸入視窗
VCL Medial Player - 開啟網路串流...
VCL Medial Player - 開啟網路串流...

在"網路"頁面中,輸入網址 rtsp://192.168.11.12:8554 再按下"播放"按鈕,開啟網路串流
"網路串流"輸入畫面

成功在 VLC Medial Player 開啟網路串流之後,在命令提示字元視窗裡輸入下面指令格式開啟 mplayer

[Path to mplayer.exe]\mplayer.exe rtsp://192.168.11.12:8554/ 

例如:
c:\portables\mplayer-svn-36251\mplayer.exe rtsp://192.168.11.12:8554/

成功之後就會出現 mplayer 的視窗。

如下圖就是同時執行 VLC Media Player 和 mplayer 的擷取畫面。若是手機上的 MX Player 還未關閉的話就是同時兩個地方三個軟體觀看樹莓派傳送的串流影片 ^_^
Windows 系統, mplayer 和 VLC media player 同時開啟同一串流影像
Windows 系統, mplayer 和 VLC media player 同時開啟同一串流影像

所以一旦在樹莓派中建立串流輸出之後,只要接收端軟體可以正確解碼,就可以同時在不同地方開啟這串流影片,而且幾乎是即時的 ( 這跟串流輸出設定、網路品質... 等因素有關 ) !

Note :rtsp 很適合用在區域網路上,但要經由路由器出去到外面網路有一點難度;要克服這問題,可以使用 VLC 將串流組態成 HTTP 格式,但這種方式比較耗 CPU 資源,有時也會丟失影像,但這方式很容易在路由器做 port forward。


總結:

總體來說,使用上因為有官方與其他第三方的軟體配合,文件與資源很多,遇到問題時也可以馬上找到問題點,入門與自學上非常方便!

希望上面的介紹能夠讓處在猶豫邊緣的你(妳),提供一個做為要不要入手樹莓派攝像機的選擇參考!


** 指令 ( raspivid, cvlc, mplayer ) 簡單說明

這裡只簡單說明在本網頁所使用的指令格式,至於完整的指令說明請閱讀下面提供的超連結:

在上節中,樹莓派開啟串流檔的指令,同一個指令時為兩個指令的輸入:

raspivid -o - -t 0 -w 300 -h 200 -n | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}' :demux=h264

其中,
raspivid 指令用來抓取影像
  • -o -:將影像資料輸出到 stdout
  • -t 0:-t 後面接的是開啟後多久抓取影像的時間 (單位 ms);沒有設定就是預設時間 5 秒;設為 0 是為連續模式直到使用者按下 "Ctrl + C"
  • -w 300 -h 200:設定影像大小 ( w: 寬度 ( 64 - 1920 );h:高度 ( 64 - 1028 )。這邊的設定會影響網路傳輸速度,建議先設小再慢慢放大避免室這邊造成其他問題,另外也要考慮 -n ( nopreview, 預覽功能 )。
  • -n:不預覽。建議建立串流時使用這個選項,不加上有可能會影響樹莓派處理速度以及造成串流失敗。
cvlc ( Console  VLC Player) 指令用來處理攝像機的串流

  • -vvv:從哪裡取得串流資料,這邊是指 /dev/stdin
  • --sout:指定參數要輸出到哪裡去。這參數後面接的格式很多樣,要看上面所提供的資料並消化一下!


2 則留言:

  1. 講得很仔細,很清楚,感謝您的說明!

    回覆刪除
  2. 很詳細的說明,照著做就可以點起來了,謝謝 !!

    回覆刪除