HDMI液晶に映すサイネージをつくる
- HDMIで出力
- 24時間365日動作
- GPIOと連動
ナゼ Rasbperry Pi か
- iPadとか使ってみる
-- 知らない間に止まる! - DVDプレーヤーでいいんじゃない?
-- GPIOでトリガーかけたい - PCでマルチ画面だと?
-- 既存システムはコストが高い。
-- 安定性が・・・
クラスタシステム
- Rasbperry Pi 10台以上
液晶を用意
液晶は中華から密輸
- 資料
- 約1万円でHDMI入力付10.1インチWUXGA(1920×1200)液晶モニタを自作してみた
- http://karinto.in/2014/06/19/lcdmake/
液晶形式
- 資料によると、MIPIとLVDSがあるらしい。
- でも2017年2月時点では、ほとんどEDPだった
- EDPは30ピン
- EDPは何チャンネルか、何ボルトなどのバリエーションもある。
HDMIコントローラ
- 液晶にあわせて密輸します。
- プロファイルを書き込んでから出荷してもらう
- 注文時に、どのモデルを使うよ、と連絡
- LEDバックライトコントローラならば調光出来る
安定性のために
電源回路基板をつける
処理を軽く
- RaspberryPiはH.264動画支援再生がある
- ハードウェア動画再生支援機能を使う
Xを使わない
- コンソール画面で
- フレームバッファモード
- vlcとかもフレームバッファモードがある
コマンドで再生
/opt/vc/src/hello_pi/hello_video/hello_video.bin
がh.264再生
スクリプトでGPIO連動
#!/usr/bin/env python3
import wiringpi2 as w
import time
import os
w.wiringPiSetup()
w.pinMode(0, 0)
w.pullUpDnControl(0, 2)
while 1:
state = w.digitalRead(2)
print (state)
time.sleep(0.1)
if ( 0 == state ):
# os.system("omxplayer /home/pi/hxtree/contents.mp4 -o local")
os.system("/opt/vc/src/hello_pi/hello_video/hello_video.bin /home/pi/hxtree/contents.h264")
time.sleep(30)
無限ループ
用途に応じて書き換えて無限ループするようにもした
/opt/vc/src/hello_pi/hello_video/hello_video_sheemless.bin /home/pi/hxtree/contents.h264
コンテンツ
結構相性がある
avidemuxを使ってH.264を使う
フリーのトランスコーディングソフトとしてavidemuxを
Ubuntu 16.04にインストールして使う。
# apt install avidemux
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ avidemux は、以下によって提供される仮想パッケージです:
avidemux2.6-qt 1:2.6.16-1~getdeb1
avidemux2.6-cli 1:2.6.16-1~getdeb1
インストールするには、明示的にいずれかを選択する必要があります。
E: パッケージ 'avidemux' にはインストール候補がありません
ということで、
apt install avidemux2.6-qt
としてインストールした
映像を作る
avidemuxの変換パラメータ
1. Video Output → Mpeg4 AVC (x264)
2. Video Output → Configure → General → Encoding Mode → Constant Quantiser (Single Pass) → Quantizer → 5に設定 → OK
3. Output Format → Video Only
オーディオ
音声は映像とは別個に再生した。
alsamixerで音量を制御。
amixer cset numid=3 2 でhdmiの指定
だが出なかったので
amixer cset numid=3 1 で内蔵。
音声テスト
aplay /usr/share/sounds/alsa/Rear_Right.wav
でテスト。
ln -s /media/usb/contents.wav contents.wav
としてリンクを作り、
#!/bin/sh
amixer master 100:100 &
amixer pcm 100:100 &
amixer cset numid=3 1 &
while [ 1 ]
do
aplay /home/pi/hxtree/contents.wav
done
# chmod 777 loopaudio.
元VIDEOを加工
ブランクを追加したい
ffmpeg -r 0.1 -i black.jpg video.avi
とすると、10秒が出来たがブランク部分1コマしか無い。
ffmpeg -loop 1 -r 29.98 -i black.jpg -t 10.000 -vcodec libx264 black.avi
でできた。
連結
avidemuxだとうまく連結できなかったので、ffmpegで連結。
これは音声を抜いて連結する方法。
ffmpeg -i 03-003.mp4 -i black.avi -filter_complex "concat=n=2:v=1:a=0" -an output.mp4
一旦コレで作っておいて、avidemuxでh.264に。
細かい設定
起動メッセージが出ないようにする。
# cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait logo.nologo
HDMIでフルスクリーン
hdmi_force_hotplug=1
disable_overscan=1
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
framebuffer_width=1280
framebuffer_height=800
hdmi_group=2
hdmi_mode=28
# USBにコンテンツを置く
ln -s /media/usb/contents.wav contents.wav
としてリンクを作り、
touch loopaudio.sh
chmod 777 loopaudio.sh
vim loopaudio.sh
#!/bin/sh
amixer master 100:100 &
amixer pcm 100:100 &
amixer cset numid=3 1 &
while [ 1 ]
do
aplay /home/pi/hxtree/contents.wav
done
sudo bash
vim /etc/rc.local
/home/pi/hxtree/loopaudio.sh &
を追加
# vim /boot/config.txt
framebuffer_width=1920
framebuffer_height=1080
に変更したよ。
hdmi_group=2
hdmi_mode=28
もコメントアウト。
/etc/kbd/config
BLANK_TIME=30
POWERDOWN_TIME=30
をそれぞれ0に
# 巨大クリスマスができました
<img width="768" alt="IMG_20141107_042622.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/139524/d80a062b-d6bf-c895-7773-ab50f6dda3a9.jpeg">