2020年7月7日火曜日

ラズベリーパイ 録画サーバー

以前購入していたKEIAN製地デジチューナーを使用して、ラズベリーパイ3B+を録画サーバーにしてみたい。
※録画した動画をアップロードするのは犯罪ですのでしてはいけません。
※私的複製であれば、放送波を正規の方法(B-casカード) で復調しているだけで、ダビング10などの暗号化を解除している訳ではないので、現行法上はグレーゾーンの話題です。今後の法改正次第では違法となる可能性があるので、ご注意ください。(法解釈が間違っていたらごめんなさい🙇)


用意するもの
・Raspberry Pi 3B+
KTV-FSUSB2
・recfsusb2n_http_patch2.zip(ダウンロード先:適当な何かの別館にあるダウンロードページ)パスワードは適当な何かの別館内に記載あり
・Mirakurun(使用verは3.1.0)
・Chinachu
・ffmpeg (最新verは4.1.4)


ktvfsusb2v3

◆導入


ターミナル
1$ sudo apt updateおまじない
2$ sudo apt upgrade
3$ sudo apt install libboost-all-devlibboost1.50-allでは上手くいかなかった。
4$ sudo apt install git最新バージョン (1:2.20.1-2+deb10u3)
5$ git clone https://github.com/sh0/recfsusb2nCloning into 'recfsusb2n'...
remote: Enumerating objects: 62, done.
remote: Total 62 (delta 0), reused 0 (delta 0), pack-reused 62
Unpacking objects: 100% (62/62), done.
6$ cd recfsusb2n
7$ mkdir patch
8$ cd patch
9$ mv /home/pi/Downloads/recfsusb2n_http_patch2.zip ./recfsusb2n_http_patch2.zipをDownloadsに保存した場合。
素直にsambaとかでカット&ペーストした方が早い
10$ unzip recfsusb2n_http_patch2.zipzipファイルを解凍
Archive: recfsusb2n_http_patch2.zip
inflating: decoder.h
inflating: tssplitter_lite.cpp
inflating: tssplitter_lite.h
inflating: readme_patch.txt
inflating: Makefile
inflating: fsusb2n.cpp
11$ mv Makefile ../src
$ mv fsusb2n.cpp ../src
$ mv tssplitter_lite.h ../src
$ mv decoder.h ../src
$ mv tssplitter_lite.cpp ../src
5つのファイルをsrcディレクトリに移動
素直にsambaを使おう。
12$ cd ../src
$ nano Makefile
srcディレクトリに移動して、Makefileを編集 4か所
13$ make/usr/bin/ld:-lboost_thread-mtが見つかりませんと出た時は、Makefil15行目の-mtを削除する。
14$ sudo cp recfsusb2n /usr/local/bin/recfsusb2nパスの通ったディレクトリにコピー


/home/pi/fsusb2n/src/Makefile
1# options
2B25 = -DB25
3
4ifdef B25
5B25_PATH = ./arib25
6B25_OBJS = B25Decoder.o
7B25_OBJS_EXT = $(B25_PATH)/arib_std_b25.o $(B25_PATH)/b_cas_card.o $(B25_PATH)/multi2.o $(B25_PATH)/ts_section_parser.o
8endif
9
10CXX = g++
11CXXFLAGS = -O2 -march=native -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(B25)  ”-march=native”を削除
12CC = gcc
13CFLAGS = -O2 -march=native -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(B25)  ※”-march=native”を削除
14OBJS = fsusb2n.o usbops.o em2874-core.o ktv.o IoThread.o tssplitter_lite.o $(B25_OBJS)
15#LIBS = -lpthread -lboost_system -lboost_thread-mt -lboost_filesystem ※"#"と"-mt"を削除
16#LIBS = -lpthread -lboost_thread-mt -lboost_filesystem ※#を追加してコメントアウト
17TARGET = recfsusb2n
18
19all: $(TARGET)
20
21clean:
22rm -f $(OBJS) $(B25_OBJS_EXT) $(TARGET)
23$(TARGET): $(OBJS) $(B25_OBJS_EXT)
24$(CXX) -o $(TARGET) $(OBJS) $(B25_OBJS_EXT) $(LIBS)
25
26depend:
27$(CXX) -MM $(OBJS:.o=.cpp) > Makefile.dep
28
29-include Makefile.dep

◆録画テスト

実際に録画できるか試してみる。

ターミナル
1$ sudo nano /lib/udev/rules.d/89-tuner.rules89-tuner.rulesファイルを新規作成して下の2行を書き込み保存。
2$poweroffシャットダウン

/lib/udev/rules.d/89-tuner.rules
1# FSUSB2N
2SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"

KTV-FSUSB2を接続し、Raspberry Pi 3B+を起動。

$ lsusb
>>ID 0511:0029 N'Able (DataBook) Technologies, Inc.
$ recfsusb2n --b25 --sid hd --wait 100 13 10 test.ts
>>チャンネル 録画時間(秒) ファイル名
/home/pi/test.ts(約18MiB)ができていれば成功。
recfsusb2n ver. 0.9.2
ISDB-T DTV Tuner FSUSB2N
device: "/dev/bus/usb/001/004"
pid = 4677
B25Decoder initialized.


 
チャンネル一覧
東北放送NHKEテレNHK総合宮城テレビ東日本放送仙台放送
191317242821

ハードウェアエンコード

ffmpegのセットアップ
$ sudo apt install ffmpeg インストール済みだった
$ ffmpeg -codecs | grep h264
>> DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m h264_mmal ) (encoders: libx264 libx264rgb h264_omx h264_v4l2m2m h264_vaapi )

$ ffmpeg -i test.ts -codec:v h264_omx -b:v 3000k test.mp4
>>codecにh264_omxを指定することでハードウェアエンコーダを利用してh.264に変換する。-b:v 3000k は映像ビットレートを3000kB/sに指定。>>1.02倍速で変換。


実際に運用するには番組表から予約できないと使えない。
①Mirakurun + chinachu
②Mirakurun + EPGStation
あたりが有名らしい。ただ、チューナーにはPX-S1UDやPT3とかが一般的で、KTV-FSUSB2とかの情報は結構少ない。
今回は①のchinachuを導入してみる。比較的情報量が多いため。EPGStationだと録画後のエンコードまで可能らしい。

Mirakurunの導入

$ sudo apt install build-essential curl git-core vainfo
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
$ sudo apt install nodejs

PM2のインストール
$ sudo apt install npm
※npm(Node Package Manager)Node.jsのパッケージを管理する。
$ sudo npm install pm2 -g
Mirakurun のインストール
$ sudo npm install mirakurun -g --unsafe-perm --production

$ sudo EDITOR="nano" mirakurun config server
※EDITOR=nano といれるとnanoで編集できる。入れないとVim。
server
logLevel: 2
path: /var/run/mirakurun.sock
port: 40772

※コピー&ペーストするとインデントエラーでMirakurunが上手く起動しない。
$ sudo EDITOR="nano" mirakurun config tuners
tuners
- name: FSUSB2N
   types:
     - GR
   command: recfsusb2n -b <channel> - -
   isDisabled: false

$ sudo EDITOR="nano" mirakurun config channels  
channels
- name: NHKEテレ
  type: GR
  channel: '13'
- name: NHK総合
  type: GR
  channel: '17'
- name: TBCテレビ
  type: GR
  channel: '19'
- name: 仙台放送
  type: GR
  channel: '21'
- name: ミヤギテレビ
  type: GR
  channel: '24'
- name: 東日本放送CH
  type: GR
  channel: '28'


Chinachuのインストール

実行ユーザーのvideoグループへの登録

$ sudo gpasswd -a pi video


Gitリポジトリからクローン・インストール
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu/
$ ./chinachu installer
1) Auto (full)   3)Node.js Environment   5)ffmpeg
2)submodule   4)Node.js Modules
what do you install? > 1

※結構時間がかかります。気長に待ちましょう。数時間?

$ cp config.sample.json config.json
$ sudo nano config.json
  "uid": "pi",  ※デフォルトのnullからpi(実行ユーザー名)へ変更。
  "recordedDir" : "./recorded/",録画用ディレクトリ
  "wuiOpenHost": "0.0.0.0" ,  ※wuiHostからwuiOpenHostへ名前変更。

空の設定ファイルを作成
$ echo [] > rules.json

サービスが実行可能か確認。
$ ./chinachu service wui execute
$ ./chinachu service operator execute

※pm2へchinachu-wuiとchinachu-operatorを登録する。
$ sudo pm2 start processes.json
$ sudo pm2 save

[PM2][ERROR] Error: Interpreter .nave/node is NOT AVAILABLE in PATH. (type 'which .nave/node' to double check.)
$ sudo pm2 start processes.jsonとすると、
[PM2][ERROR] Error: Interpreter .nave/node is NOT AVAILABLE in PATH. (type 'which .nave/node' to double check.)とエラーが出て、先に進めなかった。どうやら、chinachu-wuiとchinachu-operatorが起動していないよう。

シンボリックリンクがなかったため(又は無効なリンク)のようで、
$ sudo ln -s /usr/bin/node /home/pi/chinachu/.nave/node
$ sudo ln -s /usr/bin/npm /home/pi/chinachu/.nave/npm
とすることで、無事正常に起動した。

ブラウザで http://IPAddress:20772 と入力すると、chinachuで番組表からの予約が可能。

2020年7月6日月曜日

RaspberryOS 導入ガイド

何度もraspbianのセッティングをするのに、毎回いろいろなページを見ながら操作するのが面倒なので、自分が必要そうなものを、備忘録的に記載。

1.Raspberry Pi OS(32-bit)with desktop(https://www.raspberrypi.org/downloads/raspberry-pi-os/)をダウンロード。
2.SDカードをメインPCにつなげて、「SD Card Formatter」でフォーマットして、「Win32Diskimager」で書き込む。
3.SDカードのbootフォルダ内に "ssh" というからのファイルを作成。拡張子なし。
4.ラズベリーパイにSDカードをセットして電源ON。
5.SSH接続するため、メインPCで「teraterm」を起動。ショートカットのリンク先を
"C:\Program Files (x86)\teraterm\ttermpro.exe" raspberrypi /auto=password /user=pi /passwd=raspberry
としてとしておくと、毎回ユーザー名とパスワードを入力しないで良いので便利。ホスト名は"raspberrypi"でOK。

6.$ sudo raspi-configで設定変更。(必要最小限)

1 Change User Passwordでパスワードを変更。
新しいパスワード:●●(表示されない)
新しいパスワードを再入力してください:上と同じパスワード(表示されない)
passwd: パスワードは正しく更新されました

4 Localisation Optionsで以下の3点を変更。

I1 Change Locale          Set up language and regional settings to match your location
en_GB.UTF-8 UTF-8はデフォルトで選択されているので、ja_JP.UTF-8 UTF-8を追加で選択。カーソルを合わせてスペースキーで選択*となる。エンターキーを押すと、
”Debianの多くのパッケージは、ロケールを使用して、ユーザーに適切な言語でテキストを表示します。生成されたロケールからシステムのデフォルトロケールを選択できます。
 これにより、システム全体のデフォルト言語が選択されます。このシステムがマルチユーザーシステムであり、すべてのユーザーがデフォルトの言語を話すことができない場合、問題が発生します。
システム環境のデフォルトのロケール:None C.UTF-8 en_GB.UTF-8 ja_JP.UTF-8
ja_JP.UTF-8を選択。
I2 Change Time Zone       Set up time zone to match your location
Asia → Tokyo を選択。
I4 Change WLAN Country    Set the legal channels used in your country
JP Japanを選択。

5 Interfacing OptionsでVNCを有効化。
P3 VNC      Enable/Disable graphical remote access to your Pi using RealVNC
→Would you like the VNC Server to be enabled? →はい


7.日本語入力の有効化
$ sudo apt install fcitx-mozc


8.Sambaのインストール
$ sudo apt install samba
インストール途中でSamba サーバおよびユーティリティというのが出る。
あなたのコンピュータがネットワーク上の DHCP サーバから IP アドレス情報を取得しているのであれば、DHCP サーバはネットワーク上にある WINS サーバ (NetBIOS ネームサーバ) についての情報を提供することもできます。DHCP で提供される WINS 設定は /var/lib/samba/dhcp.conf から自動的に読み込まれるため、smb.conf ファイルを変更する必要があります。この機能を使うためには、dhcp-client パッケージがインストールされている必要があります。 DHCP から WINS 設定を使うよう smb.conf を変更しすか。
 <はい>/<いいえ>
>はいを選択
$ sudo nano /etc/samba/smb.conf
文末に以下の5行を追加
----------------------------------------------
[pi]
path = /home/pi
read only = No
guest ok = Yes
force user = pi

[USB-HDD]
path = /media/pi/HD-ADU3
read only = No
guest ok = Yes
force user = pi
----------------------------------------------
$ sudo service smbd restart
$ sudo systemctl enable smbd

9.FTPのインストール別ページ

10.USB-HDDの自動スピンダウン別ページ

11.KUMAN5インチラズベリーパイ用モニタの設定(別ページ
12.デジタルフォトフレームの導入別ページ

13.録画サーバーの導入 (別ページ)(未作成)