以前購入していた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)
◆導入
ターミナル |
1 | $ sudo apt update | おまじない |
2 | $ sudo apt upgrade |
3 | $ sudo apt install libboost-all-dev | libboost1.50-allでは上手くいかなかった。 |
4 | $ sudo apt install git | 最新バージョン (1:2.20.1-2+deb10u3) |
5 | $ git clone https://github.com/sh0/recfsusb2n | Cloning 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.zip | zipファイルを解凍
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 |
2 | B25 = -DB25 |
3 | |
4 | ifdef B25 |
5 | B25_PATH = ./arib25 |
6 | B25_OBJS = B25Decoder.o |
7 | B25_OBJS_EXT = $(B25_PATH)/arib_std_b25.o $(B25_PATH)/b_cas_card.o $(B25_PATH)/multi2.o $(B25_PATH)/ts_section_parser.o |
8 | endif |
9 | |
10 | CXX = g++ |
11 | CXXFLAGS = -O2 -march=native -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(B25) ※”-march=native”を削除 |
12 | CC = gcc |
13 | CFLAGS = -O2 -march=native -g -Wall -pthread -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 $(B25) ※”-march=native”を削除 |
14 | OBJS = 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 ※#を追加してコメントアウト |
17 | TARGET = recfsusb2n |
18 | |
19 | all: $(TARGET) |
20 | |
21 | clean: |
22 | rm -f $(OBJS) $(B25_OBJS_EXT) $(TARGET) |
23 | $(TARGET): $(OBJS) $(B25_OBJS_EXT) |
24 | $(CXX) -o $(TARGET) $(OBJS) $(B25_OBJS_EXT) $(LIBS) |
25 | |
26 | depend: |
27 | $(CXX) -MM $(OBJS:.o=.cpp) > Makefile.dep |
28 | |
29 | -include Makefile.dep |
◆録画テスト
実際に録画できるか試してみる。
ターミナル |
1 | $ sudo nano /lib/udev/rules.d/89-tuner.rules | 89-tuner.rulesファイルを新規作成して下の2行を書き込み保存。 |
2 | $poweroff | シャットダウン |
/lib/udev/rules.d/89-tuner.rules |
1 | # FSUSB2N |
2 | SUBSYSTEM=="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総合 | 宮城テレビ | 東日本放送 | 仙台放送 |
19 | 13 | 17 | 24 | 28 | 21 |
ハードウェアエンコード
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で番組表からの予約が可能。