見出し画像

【LowCodeでつくる】Raspberry PiとDocker + EPGStation + mirakurunで地デジサーバ構築

※Twitterのフォロワーさんのご要望により、noteにもQiitaと同じ内容を投稿しました。Qiitaはこちら

TL;DR

地デジサーバ構築の手法はたくさんありますが、バージョンが古かったりしてうまく稼働しないことが多かったので現時点で安定運用できている方法をここに残しておきます。

用意するもの(必須)

・ RaspberryPi 4 (手元にあるのはRAM2GBモデルですが、個人的には4GBや8GBを推奨します)

・ PX-S1UD(USB接続型地デジアンテナ

・アンテナケーブル
・B-CASカード
・SCM3310/v2.0(B-CASカード読み込み用)

・外付けHDD(録画用)

用意するもの(任意)

・アンテナ分配器(アンテナ端子が1つしかない場合に使用します)

構築手順

基本的には酢ろぐ!さんの記事(https://blog.ch3cooh.jp/entry/2021/04/06/200732) の通りにコマンドを叩いてセットアップすれば問題ありません。RaspberryPiでハードウェアエンコーディングを利用してリアルタイム視聴を有効化する設定については記載がないため、この記事で紹介します。

リアルタイム視聴の設定

まず、以下のコマンドを叩いて、apt で ffmpeg をインストールします。

$ sudo apt -y install ffmpeg

次に、

/data/docker-mirakurun-EPGStation/epgStation/config/config.yml

のファイルの

- stream:
    live:
        ts:
            mp4:

- name: h264_omx
                 cmd:
                     "%FFMPEG% -re -i pipe:0 -threads 0 -c:a copy -bsf:a aac_adtstoasc -c:v h264_omx -vb 3000k -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1"                     

を追加するとH.264によるリアルタイム視聴が有効になり、EPGStation上で選べるようになります。

VSCodeを利用している場合はSSHクライアント(左下のボタンが緑色になっているあれ)の利用がおすすめです。
最終的にはh264_omxの追加後、以下のようになっていればOKです。

stream:
   live:
       ts:
           m2ts:
               - name: 720p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 192k -ac 2
                     -c:v libx264 -vf yadif,scale=-2:720 -b:v 3000k -preset veryfast -y -f mpegts pipe:1'
               - name: 480p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 128k -ac 2
                     -c:v libx264 -vf yadif,scale=-2:480 -b:v 1500k -preset veryfast -y -f mpegts pipe:1'
               - name: 無変換
           webm:
               - name: 720p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 3 -c:a libvorbis -ar 48000 -b:a 192k -ac
                     2 -c:v libvpx-vp9 -vf yadif,scale=-2:720 -b:v 3000k -deadline realtime -speed 4 -cpu-used -8 -y -f
                     webm pipe:1'
               - name: 480p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 2 -c:a libvorbis -ar 48000 -b:a 128k -ac
                     2 -c:v libvpx-vp9 -vf yadif,scale=-2:480 -b:v 1500k -deadline realtime -speed 4 -cpu-used -8 -y -f
                     webm pipe:1'
           mp4:
               - name: 720p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 192k -ac 2
                     -c:v libx264 -vf yadif,scale=-2:720 -b:v 3000k -profile:v baseline -preset veryfast -tune
                     fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4
                     pipe:1'
               - name: 480p
                 cmd:
                     '%FFMPEG% -re -dual_mono_mode main -i pipe:0 -sn -threads 0 -c:a aac -ar 48000 -b:a 128k -ac 2
                     -c:v libx264 -vf yadif,scale=-2:480 -b:v 1500k -profile:v baseline -preset veryfast -tune
                     fastdecode,zerolatency -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4
                     pipe:1'
               - name: h264_omx
                 cmd:
                     "%FFMPEG% -re -i pipe:0 -threads 0 -c:a copy -bsf:a aac_adtstoasc -c:v h264_omx -vb 3000k -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1"

エンコード時間の短縮設定(主に録画用)

/data/docker-mirakurun-EPGStation/epgStation/config/enc.js

のファイルを次のように手直しします。

// 14 行目あたりの codec を h264_omx に変更
// const codec = 'libx264';
const codec = 'h264_omx';
// 40 行目あたり、その他設定の直前にビットレートの指定を追加
Array.prototype.push.apply(args, ['-b:v', '3000k']);

・設定が完了したらRaspberryPiを再起動してしばらく待ちましょう。
・しばらく待ってから、http://<ラズパイのローカルIP>:8888 にアクセスしてEPGStationが起動できるか確認しましょう。
・正常に起動したら、左上の「三」から「放映中」を選び、チャンネルを選ぶと、「WebM」「720p」それぞれのプルダウンがあるウィンドウが表示されます。
・「WebM」のプルダウンで「MP4」を選ぶと、「720p」のプルダウンで「h264_omx」が選べるようになっていればOKです。

⚠️iPhoneのブラウザはリアルタイム視聴非対応です。ご了承ください。

この記事が気に入ったらサポートをしてみませんか?