アナログTVのSmartTV化からの続きの投稿です。
1.MPEGライセンス設定(/boot/config.txt)
※RasPi4からは、MPEGハードエンコーダが不要になり、別建てで記事をポストします。
http://www.raspberrypi.com/mpeg-2-license-key/
/boot/config.txtの編集
decode_MPG2は、一度本体のotp45番地に書き込まれれば、不要になります。
追加:
decode_MPG2=0xxxxxxxxx
変更:
framebuffer_width=1440
framebuffer_height=1080
2.HDUSチューナーの登録
(PX-S1UDチューナーの場合は、コメント投稿を参照)
sudo apt-get install git make g++ libusb-dev libboost-dev \
pkg-config libglib2.0-dev libpcsclite-dev \
libboost-filesystem-dev libboost-thread-dev
git clone git://github.com/stz2012/recfriio.git
cd recfriio/recfriior5

PLEX PX-S1UDV2.0
・Makefileを変更する
TSSL = -DTSSL ⇒ コメント化
gccコンパイルオプション追加
-march=armv7-a -mtune=cortex-a9 -mfpu=neon
LIBSに-lboost_systemを追加。0924版では、-lboost-thread-mtの-mtを削除
・Udp.cpp 変更
以下の行が無ければ追加
#include <unistd.h>
・コンパイル作業
make -j 4
cd ../as11loader
make -j 4
cd ..
sudo cp recfriior5/recfriio arib25/b25 as11loader/as11loader /usr/local/bin
・HDUS関係ファイル置き場から
SKNET_AS11Loader.sysを入手して/usr/local/binに複写
sudo gpasswd -a www-data video
sudo touch /var/lock/friiodetect
sudo chmod 664 /var/lock/friiodetect
sudo chown www-data:video /var/lock/friiodetect
・/etc/udev/rules.d/10-local.rulesに以下の記述を追加
# HDUS
SUBSYSTEM=="usb", ACTION=="add", \
ATTRS{idVendor}=="1738", ATTRS{idProduct}=="5211", \
RUN+="/bin/sh -c 'cd /usr/local/bin;./as11loader'"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", \
ATTRS{idVendor}=="3275", ATTRS{idProduct}=="6051", \
MODE="0664", GROUP="video"
sudo /etc/init.d/udev restart
3.ICカードのドライバをインストール
DNI SCR80の場合は、ミニBCASカードも可。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install pcscd pcsc-tools libpcsclite-dev

DNI SCR80
NTT-com CLOUD2700
次の問い合わせが出たならば、
Configuration file `/etc/libccid_Info.plist’
The default action is to keep your current version.
*** libccid_Info.plist (Y/I/N/O/D/Z) [default=N] ?
ここでNにしておいて、後で次のファイルを追加する。
NTTのカードリーダーの認識追加
/etc/libccid_Info.plistの編集
ifVendorID以下から最終まで、次のソースで置換する。
<key>ifdVendorID</key>
<array>
<string>0x04E6</string>
<string>0x04E6</string>
<string>0x0BDA</string>
</array>
<key>ifdProductID</key>
<array>
<string>0x511A</string>
<string>0x5810</string>
<string>0x0169</string>
</array>
<key>ifdFriendlyName</key>
<array>
<string>SCM Microsystems Inc. SCR 3310 NTTcom</string>
<string>NTTcom CLOUD2700</string>
<string>DNI ele SCR80</string>
</array>
<key>Copyright</key>
<string>This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.</string>
ここで再起動し、ログインする。
pcsc_scanの実行
Japanese Chijou Digital B-CAS Card (pay TV)が表示されればOK
Ctrl+Cで終了。
4.Mplayerのインストール
最終的にomxplayerの動画再生支援機構を使ったのですが・・
主音声選択の時は、Mplayerを使っています。
sudo apt-get install mplayer alsa-base alsa-utils \
pulseaudio mpg123
・マルチスレッド化で加速
mkdir ~/.mplayer
vi ~/.mplayer/config
# Write your default config options here!
lavdopts=threads=4
・audio moduleのカーネルへの追加(su -後)jessieでは不要
modprobe snd_bcm2835
echo ‘snd_bcm2835’ >> /etc/modules
・asound.conf の書き込み
vi /etc/asound.conf
pcm.!default {
type hw
card 0
}
ctl.!default {
type hw
card 0
}
・audio without ALSA の設定方法
amixer cset numid=3 1 #Analog
amixer cset numid=3 2 #HDMI
5.TV起動のShellスクリプト(TV.sh)
動画再生支援機構を使って、完璧に表示(CPU負荷率:12~13%)。
さらに、二か国語の時、主音声・副音声を選択出来るようにする。
NHKの多重音声にも対応しました。
なお、初期設定として次の二つが存在することを前提としています。
echo export AOUT=local >.aout
echo export BILING=yes >.biling
TV.sh
#!/bin/bash
source ~/.aout
if [ "$AOUT" != "local" ]; then
vol=200
geo="318x72+0+0"
DOUT="both --display 5 --win 0,0,1920,1058"
else
vol=200
geo="132x29+0+0"
DOUT="local --display 4 --win 0,0,800,458"
fi
CH=$1
CHN=$2
export DISPLAY=:0.0
TARGET="recdvb|mplayer"
pkill -9 "${TARGET}"
source ~/.biling
[ -p /tmp/mpegpipe ] || mkfifo /tmp/mpegpipe # 名前付きパイプを作る
xset -display :0.0 dpms 0 0 0 -dpms s off
while :;do
if [ "$BILING" = "yes" ]; then
sleep 1;recdvb --b25 --strip ${CH} - /tmp/mpegpipe &
xterm -title $CHN -geometry ${geo} -xrm \
'XTerm*VT100.translations: #override \
<key>0xFF51: string(j) \
<key>0xFF53: string(k) \
<key>0x1008FF11: string(-) \
<key>0x1008FF13: string(+) \
<key>0x1008FF14: string(p)'\
-e "omxplayer --live --vol -${vol} -o ${DOUT} /tmp/mpegpipe"
elif [ "$BILING" = "sel" ]; then
sleep 1;recdvb --b25 --strip --http 8080 ${CH} &
(echo switch_audio -2\n >/tmp/mpegpipe) &
mplayer -vo x11 -ao alsa -forceidx -mc 0 -framedrop -nocache -input conf=TVinput.conf\
-fs -x 1440 -y 1080 -delay 0.5 -af volume=18 -input file=/tmp/mpegpipe http://localhost:8080/${CH}/
fi
if [ ! -p /tmp/mpegpipe ]; then
break
fi
NCH=`cat tmp_file`
if [ "$NCH" != "" ];then
CH=`echo $NCH | cut -c 1-2`
CHN=`echo $NCH | cut -c 3-`
fi
done
xset -display :0.0 dpms 600 600 600 s on
pkill -9 "${TARGET}"
xrefresh # 画面を戻す
【追記】omxplayer動作中はopenboxがキー入力をネグレクトするため、xtermをインストールし、ついでに、KBのV+,V-も有効にして、配下でomxplayerを動作させている。
AOUTはデスクトップ・アイコンで選択した値。
-geometry 132×29+0+0及び –win 0,0,800,458
の指定は、専用7’LCDのときのみ。
専用LCDのとき、KBをやめ全てタッチパネル
操作にする方法は、コメント投稿を参照する。
~/.mplayer/TVinput.conf の4行を次のように変更した。
RIGHT balance +1
LEFT balance -1
DOWN switch_angle
UP switch_audio
↑で音声トラック、↓で映像トラックを選択、多重音声の時←で日本語、→で外国語
・地デジ・チャンネル表
http://www.maspro.co.jp/contact/channel.pdf#page=4
・Shellスクリプトの呼び出し
sh -c ‘TV.sh nn 放送局名’ ← nn:チャンネル番号
6.ホーム画面の作り方
http://www.mztn.org/rpi/rpi35.html#i7

SmartTVのホーム画面
sudo apt-get install lxshortcut xterm
lxshortcut –display=:0.0 -o myapp.desktop
【例】
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=TV視聴(NHK)
Name[ja_JP]=TV視聴(NHK)
Icon=screensaver
Exec=sh -c '~/TV.sh 27 NHK総合'
Comment[ja_JP]=NHK
StartupNotify=true
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=RCA音声
Name[ja_JP]=RCA音声
Icon=qjackctl
Exec=sh -c 'amixer cset numid=3 2;echo export AOUT=hdmi > ~/.aout;cp ~/sout2.* ~/De*/sout1.desktop'
Comment[ja_JP]=
StartupNotify=true
【番外編】
・YouTube閲覧のPiTVの操作をTVと共通にする。
RaspberryPiTV/node_modules/omxcontrol/index.js を編集
exec('omxplayer -o hdmi "'+fn+'"' < '+pipe,function(error, stdout, stderr) {^M
console.log(stdout);^M
});^M
exec('echo . > '+pipe);^M
}^M
};^M
を次のように変更する。
exec('source ~/.aout;vol=2000;if [ \"$AOUT\" = local ]; then vol=200;fi;xterm -fullscreen -xrm '+
'\"XTerm*VT100.translations: #override\\n<key>0x1008FF11:string(-)\\n<key>0x1008FF13:string(+)\\n<key>0x1008FF14:string(p)\"'+
' -e omxplayer --win 0,0,800,458 -o ${AOUT} --vol -${vol} "'+fn+'"',function(error, stdout, stderr) {
console.log(stdout);
});
// exec('echo . > '+pipe);
}
};
・PiTVの起動シェル
#!/bin/bash
source ~/.aout
node /home/pi/RaspberryPiTV/app.js
sleep 1
chromium-browser --kiosk http://localhost:8080/remote
・インターネットラジオRazikoの音声ボリューム操作をTVと共通にする。
raziko.shを編集
rtmpdump -v \
-r ${url_parts[0]} \
--app ${url_parts[1]} \
--playpath ${url_parts[2]} \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live\
| mplayer -
を次のように変更する。
[ -p /tmp/mpegpipe ] || mkfifo /tmp/mpegpipe # 名前付きパイプを作る
rtmpdump -v \
-r ${url_parts[0]} \
--app ${url_parts[1]} \
--playpath ${url_parts[2]} \
-W $playerurl \
-C S:"" -C S:"" -C S:"" -C S:$authtoken \
--live -o /tmp/mpegpipe & \
xterm -bg skyblue -xrm \
'XTerm*VT100.translations: #override \
<key>0x1008FF11: string(-) \
<key>0x1008FF13: string(+) \
<key>0x1008FF14: string(p)'\
-e "omxplayer --live --vol -1400 --audio_queue 2 -o ${AOUT} /tmp/mpegpipe"
・録画用USBメモリやSDカードのマウント自動化
/etc/udev/rules.d/11-media-by-label-auto-mount.rulesに以下を書く
KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_auto_mount_end"
# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
# Get a label if present, otherwise specify one
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"
# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"
# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/%E{dir_name}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/%E{dir_name}"
# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l /media/%E{dir_name}", RUN+="/bin/rmdir /media/%E{dir_name}"
# Exit
LABEL="media_by_label_auto_mount_end"