敝社從以前到現在都是很直覺的用 Windows Solution 來做一些事情。原本我們放在門市,用來播放一些宣傳影片的電子看板,前面的人是用這樣的方式做的:
- 用一台 PC,可能是小筆電或是 Atom 等級的機器,安裝 Windows 作業系統
- 安裝 KMP
- 要播放的影片以及 Playlist 用 Google Drive 同步到各門市的電腦
- 把播放清單檔設定成用 KMP 開啟,然後把播放清單檔案拉到「開始」→「啟動」裡面讓他開機自動執行
- 如果有新播放清單/影片,重開機後 KMP 才會載入新的檔案並開始播放
這樣的做法有幾個討厭的問題:
- 播影片的效率不好,如果丟 MP4、Full HD 格式的影片出去,門市人員常常回報播放起來會掉格,於是就只好再轉一份其他格式的檔案以後再做一次一樣的事情。
- 機器和作業系統的成本高了一點。以及到了中國,因為連不到 Google Drive,所以變成得要手動一台一台上傳、手動一台一台編輯播放清單。
- 用 Teamviewer
這爛東西連到中國的速度非常慢,所以每次在做這個的時候都很想砍人… - 最討厭的就是 Windows 常常會跳出一些有的沒有的視窗要你更新 blahblahblah 的…
綜合以上,有幾個問題需要解決:
- Windows 機器成本較高、難以維護,而且之前的硬體根本播不動 MP4、Full HD 的影片
- 加上中國地區的話,維護既不直覺又麻煩
那麼我就拿 Raspberry Pi 3 + Raspbian 來自幹吧
先入手 Raspberry Pi 3
現在 PCHome 24H 都有賣了,入手難度幾乎等於沒有。
記得還要準備 Micro SD、USB 電源線和變壓器、以及 HDMI 線一條。這樣成本大約一台台幣兩千五左右吧
安裝 Raspbian
直接到 Raspbian 官網下載 image,然後在 OSX 下的作法會是
- 先把 Micro SD 加上轉接卡接到 Mac 上
- 打開 Terminal,執行
diskutil list
,確認你 SD 卡的代號,例如/dev/disk2
- unmount SD 卡,執行
diskutil unmountDisk /dev/disk2
- 把 Raspbian 映像檔寫入 SD 卡,執行
dd bs=1m if=${你的映像檔位置} of=/dev/rdisk2
- 映像檔寫入完記得要再把 SD 卡 unmount 掉:
diskutil unmountDisk /dev/disk2
然後就可以把這張 Micro SD 卡插到 Raspberry Pi 上,接上電源開機了
設定 Raspberry Pi 環境
開機以後,用預設帳號 pi
,密碼 raspberry
登入系統(看你要接鍵盤螢幕,還是直接接網路線用 DHCP 取得 IP 後再 ssh 進去)然後做以下的事:
- 執行
sudo raspi-config
- 先
expand-filesystem
- 然後
Change User Password
Boot Options
進去選擇B1 Console
- 然後選擇
Finish
後根據提示重開機
- 先
- 重開機後設定系統時區
sudo dpkg-reconfigure tzdata
(這邊我用 Asia/Taipei) - 設定鍵盤
sudo dpkg-reconfigure keyboard-configuration
(基本上就都用預設值) - 設定 locales
sudo dpkg-reconfigure locales
(用 en_US.UTF-8) - 更新系統
sudo apt-get update
- 安裝必要軟體
sudo apt-get install omxplayer vim-nox xutils
自動播放影片設計
第一個遇到的問題是原本想用 VLC Player 加上播放清單來播放影片,但是 VLC player 沒有支援 Raspberry Pi GPU 硬體加速,所以根本播不動 Full HD 的 MP4。Google 了一下發現在 Raspberry Pi 上最多人用的是 omxplayer 這支播放軟體,但 omxplay 沒有播放清單功能。所以這是第一個要解決的問題。
第二個是我想要讓灑在外面各門市的 Raspberry Pi 自己來總部拉檔案,我就只需要維護總部裡某個地方的資料,外面的機器就會自動同步。不要再一台一台去處理了。這個我就用 rsync 來做。
自動播放影片作法
- 用
pi
登入 Raspberry Pi,然後執行ssh-keygen
產生一把 ssh 金鑰。這是因為以後我們要用 rsync over ssh 並用 key 來認證(也就是不要打 login 密碼) -
用
ssh-copy-id
把剛剛產生的公開金鑰複製到總部放檔案的帳號,例如[email protected]
(請依照您自己的環境調整)
ssh-copy-id -i /home/pi/.ssh/id_rsa.pub [email protected]
-
在總部的帳號建立一個
pops
資料夾,裡面有一個play.sh
,這是讓 omxplayer 循環播放檔案的 shell script,資料夾裡面再建一個videos
資料夾放影片
所以會有這些東西:/home/pops/ /home/pops/play.sh /home/pops/videos/
-
play.sh
內容如下#!/bin/sh # get rid of the cursor so we don't see it when videos are running setterm -cursor off # set here the path to the directory containing your videos VIDEOPATH="/home/pi/pops/videos" # you can normally leave this alone SERVICE="omxplayer" # now for our infinite loop! while true; do if ps ax | grep -v grep | grep $SERVICE > /dev/null then sleep 1; else for entry in $VIDEOPATH/* do clear # -r for stretched over the entire screen # omxplayer -r $entry > /dev/null omxplayer -b `find $VIDEOPATH -type f | shuf -n 1` > /dev/null done fi done
- 然後就可以用下面的指令(在 Raspberry 上執行)從總部的 video 這個 user 目錄下的
pops
子目錄把影片拉下來。當然也可以依照你想要的時間,寫進 crontab 內排程執行
rsync -avP --progress --delete-after [email protected]:~/pops/ /home/pi pops/
-
再來要讓 Raspberry 開機自動執行 play.sh 播放影片,編輯
/etc/rc.local
,在預設的exit 0
前面加上這一行/home/pi/pops/play.sh &
- 關掉 Raspberry 的螢幕保護程式以及自動電源管理,不然播一播畫面就黑了…
編輯/etc/xdg/lxsession/LXDE-pi/autostart
,把裡面原本的東西 comment 掉,加上這三行(如果沒有進 X 環境的話,這一步應該可以省略)@xset s noblank @xset s off @xset -dpms
- 編輯
/etc/kbd/config
,找出原本下面這兩項設定,都改為 0#BLANK_TIME=30 BLANK_TIME=0 #POWERDOWN_TIME=30 POWERDOWN_TIME=0
- 如果要預先設定 wifi,請編輯
/etc/wpa_supplicant/wpa_supplicant.conf
,格式如下:network={ ssid="my_wifi" psk="abcdefghijklmn" }
-
這樣就大概完成了。重新開機看看影片會不會直接開始自動播放吧。
已知缺點
- 目前設計的架構不能讓各地區播放不同的影片,到時候遇到再看要怎麼處理
- 中國尚未測試,不知道會不會因為連到台灣的速度太慢產生什麼奇怪的問題
- 沒辦法輪撥圖片,需要用 ffmpeg 把圖片轉成影片播放,可參考 這裡
常見問題
- Raspberry Pi 的 HDMI 運作起來怪怪的?
Raspberry Pi 因為要省電的關係,所以 HDMI 有些行為怪怪的。我是透過修改/boot/config.txt
內和 HDMI 相關的設定來解決。可以參考 這裡
版大您好
修改完上述檔案後
無法覆蓋回去 ( 目前放于桌面上 )
請問該如何處理
謝謝您
是不是沒有 sudo?
不太確定你是說那個檔案