Linuxの自宅サーバをテレビ化して家中どこでもテレビが見れる環境を作ろう(1)

やわなべです。

自宅にあるテレビ、シャープのアクオスの液晶がイカれてて、30分に1回はブラックアウト、映像の停止、反転、全面真っ赤になるなどの不具合が生じます。もっともウチはBSやCSが入らないし、録画用のHDDレコーダも1年前に捨ててしまってるんで、テレビを見るのは1週間にせいぜい1時間、大河ドラマくらいだったんですよね。

なので「真田丸」が終わったこのタイミングで、以前建てたlinuxの自宅サーバをテレビ化して、アクオス捨ててしまおうかと思い立ちました。

スポンサーリンク

その前に、ゴールのイメージ

具体的な説明に入る前に、本エントリーで目指すゴールを整理しておきましょう。

ss54157.png

「DS57U」ってのが以前建てたLinuxの完全静音サーバーです。Ubuntu系のMint Linuxが動いてます。立てたときの話はこちら。

過去記事 ベアボーンPC Shuttle DS57Uを使って、はじめてのLinuxおうちサーバー計画 (1)計画編

これに、地デジの同軸ケーブルからデータを受信する口を作ります。ご存知の通り、地デジはB-CASカードでコピーガードの暗号を解除しないといけないので、カードリーダーでB-CASカードを認識するようにもします。

recdvbってのが中心となるチューナーソフトです。処理の流れはこう。

① 同軸ケーブルからの映像データを受信
② B-CASを読み取り、B25のライブラリを使って暗号化データを復号
③ ストレージ内に映像データを保存、もしくはHTTPでストリーミング配信
④ 配信されるテレビ映像を、自宅ネットワーク内の各デバイスで視聴

今回購入したもの

今回この環境構築のために買ったものは2つ。

Linuxで同軸ケーブルから地デジデータを受信するためのチューナー。本格的な録画サーバーだと、チューナーが4つとか8つとか付いたボードを買うんでしょうけど、DS57Uにはそんなスロットもマシンパワーもないんで、USBドングル型のこれをチョイス。

PLEXの「PX-S1UD」。4500円くらい。Linuxでの動作事例もネットに豊富にあるんでその点でも安心です。

そしてこちら。B-CASカードをLinuxが読めるようにするカードリーダー。こちらも実績豊富な「SCR3310」をチョイス、2000円。

P1040843.JPG

DS57Uに接続した図。両方とも上下裏返ってるのでわかりにくいですが、本体下に刺さってるのが同軸ケーブルにつないだPX-S1UD。その上がB−CASカード挿入済みのSCR3310です。

PX-S1UD / SCR3310の認識

PX-S1UDをLinuxで利用可能にするためにはメーカー配布のファームウェアが必要とのこと。が、製品同梱のCD-ROMにも、PLEX公式サイトでもWindows用のドライバしかありません。下のサイトを参考にダウンロードし、/lib/firmware以下にコピーしました。

参考 Raspberry Pi録画サーバをつくる(2) – lablus.com

カードリーダを利用させるにはPC/SC (Personal Computer/Smart Card)まわりのパッケージインストールが必要です。

参考 Raspberry Pi + PX-S1UD V2.0で地デジ予約録画環境(TS抜き): EeePCの軌跡

上の事例を見ながら、MintのパッケージマネージャでPCSCまわりのパッケージ(pcsc-tools、libpcsclite1、libpcsclite-dev)をインストール。pcsc_scanというコマンドができるので、B-CASを入れたカードリーダをUSBに指した状態でコマンドを叩きます。

> pcsc_scan
Japanese Chijou Digital B-CAS Card (pay TV)

みたいな表示が出れば、B-CASカードを認識してると考えてOK。

recdbvのインストール

続いて一番肝心なチューナーソフト、PX-S1UDにも対応した最新版の「recdbv」をインストールします。個人が作成・無料で配布されています。作者サイトはこちら。

参考 recdvb(PX-BCUD対応版)のインストール « » Sat’s space

同サイトからソースコードをダウンロードし、さっそくコンパイル….といきたいところですが、その前に、

libarib25のインストール

B-CASのデコードをする「libarib25」というライブラリをインストールします。このライブラリを使用するオプション付きでrecdbvをコンパイルすると、映像データ受信と同時にB-CASデコード、という処理が可能になるんですよね。

参考 stz2012/libarib25: Linux用ARIB STD-B25ライブラリ

上のサイトから、ソースを持ってきてコンパイル。私の環境では別途cmakeとかg++といったパッケージが追加で必要でした。インストールが完了すると「/usr/local/lib」以下に「libarib25.so」というファイルが作成されます。

recdbvのコンパイル

このlibarib25を使う「–enable-b25」というオプションつきで、recdvbをコンパイルします。完了すると、「/usr/local/bin」以下にrecdvb、recdvbctl、recdvbchksigといったコマンドが作成されます。

動作確認

実際にコマンドを叩いて映像データが取得できるかやってみます。recdvbのコマンド書式は「recdvb –help」で確認できます。

recdvb –b25 –strip 24 10 test.m2ts

上のコマンドの意味は、「チャンネル番号24番から10秒間データを受信し、b25ライブラリを使って同時デコードしたものを test.m2tsというファイルに保存せよ」というもの。チャンネル番号は住んでる地域ごとに違うので、マスプロアンテナのサイトで確認します。ここ大阪では24番チャンネルはNHK総合チャンネルです。

参考 地デジ・地上デジタル放送向けチャンネル一覧表 – マスプロ電工|MASPRO

できたファイルをMacに転送します。デフォルトではファイルをダブルクリックすると、QuickTimePlayerが起動するかもですが、m2ts形式の動画再生には対応してないんで、あとでも使うVLC MediaPlayerをインストールします。

参考 VideoLAN – オープンソースのビデオフレームワークであるVLCメディアプレイヤーの公式ホームページ

ss43524.png

ちゃんと録画できてました。動いてるみたいですね。画質もよく、むしろうちのアクオスよりキレイなくらい。

次回、ストリーミングでテレビをリアルタイム視聴する

ちなみに10秒の録画データのサイズは17MB弱でした。単純計算すると、1分で100MB、1時間で6GBくらいの容量が必要です。こんなことならもっと大きいSSD積んどきゃよかった。

あと、実はサーバ構築の際にも問題になったんですが、ウチの自宅は間取り的に有線LANの口と同軸ケーブルの口が離れてます。

最初はDS57uを無線LANのネットワークにぶら下げて構築しようとしたんですが、無線経由だとネットワークが遅すぎてリアルタイム視聴の実用には耐えないことがわかったんですよね。そこで。

P1040841.JPG

10mくらいのLANケーブルを買ってきて部屋の敷居に沿ってはわせ、同軸ケーブルの届く範囲まで有線LANを引っ張ることでDS57Uをテレビ近くに移動させました。

というわけで次回は録画でなくHTTPストリーミングの環境を構築していきます。