読者です 読者をやめる 読者になる 読者になる

mimikakimemo

自分用メモ。

LIVA と KTV-FSUSB2 で地デジをみる

鼻毛鯖で使っている USB 地デジチューナー KTV-FSUSB2 を ECS LIVA にくっつけて、視聴・録画を試してみた。OS は Ubuntu 14.04 Desktop。

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

チューナーの接続

以前鼻毛鯖で設定した時と同様。

まず USB に接続していない状態で、使用するユーザーを video グループに追加する。

$ sudo gpasswd -a ユーザー名 video

グループの追加を反映させるため、一度ログアウトしてからログイン。

次に /lib/udev/rules.d/89-tuner.rules を以下の内容で作成。

# FSUSB2N
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0511", ATTRS{idProduct}=="0029", MODE="0664", GROUP="video"

そしてチューナーを接続し、認識されているか確認。

$ lsusb -d 0511:
Bus 002 Device 003: ID 0511:0029 N'Able (DataBook) Technologies, Inc.

recfsusb2n のビルド

以下の記事を参考にした。

ソースのダウンロード

recfsusb2n for linux のソース本体を下のリポジトリから取ってくる。2012年11月26日以降は更新されていない。バージョンは 0.9.2。

次に、下のブログから tssplitter_lite と HTTP サーバを内蔵させるパッチをダウンロード。最新は2012年5月30日の記事のもの。

パッチの適用

パッチのアーカイブ recfsusb2n_http_patch2.zip を展開すると中身は以下のようになっている。

recfsusb2n_http_patch2
├── Makefile
├── decoder.h
├── fsusb2n.cpp
├── readme_patch.txt
├── tssplitter_lite.cpp
└── tssplitter_lite.h

これら中身のファイルをすべて recfsusb2n/src/ 内に(上書き)コピーする。

make

上のリポジトリの状態では cmake を使ってビルドするようになっているが、パッチの中に Makefile がついているので、今回はこれを使う。

自分のLIVA+Ubuntu では、以下のように src/Makefile を1行修正する必要があった(-lboost_thread-mt ではない)。

LIBS   = -lpthread -lboost_system -lboost_thread -lboost_filesystem

書き換えて make すれば、src/ 内に recfsusb2n という実行ファイルができあがる。

$ sudo apt-get install libboost-thread-dev libboost-filesystem-dev
$ cd src
$ make

視聴する

引数なしで実行するとヘルプが表示される。

$ ./recfsusb2n
usage:
./recfsusb2n [--b25] [-v] [--sid n1,n2,...] [--wait n] channel recsec destfile

Remarks:
if rectime  is '-', records indefinitely.
if destfile is '-', stdout is used for output.

http broadcasting mode:
./recfsusb2n --http portnumber [--b25] [-v] [--sid n1,n2,...] [--wait n]

Options:
--b25:              Decrypt using BCAS card
-v:
--sid n1,n2,...:    Specify SID number or keywords(all,hd,sd1,sd2,sd3,1seg,epg) in CSV format
--http portnumber:  Turn on http broadcasting (run as a daemon)
--wait n:           Wait insert before of recording (1=100mSec)

録画テスト

テストのため、TS ファイルを30秒間だけ録画してみる。チャンネルの27はNHK総合(東京)。

$ ./recfsusb2n --b25 -v 27 30 test.ts

test.ts を VLC で再生してみたらちゃんと録画できていた。成功。

確認が終わったら、recfsusb2n をパスの通っているところ(/usr/local/bin)に入れておく。

内蔵 HTTP サーバを使ってテレビを視聴する

--http オプションを指定すると、HTTP サーバとなるデーモンが立ち上がる。

$ recfsusb2n --b25 -v --http 8888
creating a http daemon
recfsusb2n ver. 0.9.2
ISDB-T DTV Tuner FSUSB2N
device: "/dev/bus/usb/001/003"
run as a daemon..
listening at port 8888
pid = 3475

VLC からこれにアクセスすれば、好きなチャンネルの放送を視聴することができる。たとえば、27chなら次のようにする。

$ vlc http://localhost:8888/27

なお、あらかじめ以下のようなテキストファイルを tv.m3u などとして作成しておき、これを VLC にプレイリストとして読み込ませれば、GUI からのチャンネル変更が容易になる。

#EXTM3U
#EXTINF:0,NHK 総合
http://localhost:8888/27
#EXTINF:0,NHK Eテレ
http://localhost:8888/26
#EXTINF:0,日本テレビ
http://localhost:8888/25
#EXTINF:0,テレビ朝日
http://localhost:8888/24
#EXTINF:0,TBS
http://localhost:8888/22
#EXTINF:0,テレビ東京
http://localhost:8888/23
#EXTINF:0,フジテレビ
http://localhost:8888/21
#EXTINF:0,東京MX
http://localhost:8888/20
#EXTINF:0,放送大学
http://localhost:8888/28


というわけで、LIVA でも普通に地デジの試聴ができた。次は録画予約システム Chinachu を導入してみたい。

Ubuntu 14.04 on LIVA の環境整備

昨日(下の記事)のつづき。

デスクトップ版 Ubuntu を入れたので一応 GUI でも使えるが、普段は SSH でログインして CUI で使おうかと考えている。LAN は有線。

ログインシェルを zsh にする

$ sudo apt-get install zsh
…
$ zsh --version
zsh 5.0.2 (x86_64-pc-linux-gnu)
$ which zsh
/usr/bin/zsh
$ chsh
パスワード:
mashabow のログインシェルを変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        ログインシェル [/bin/bash]: /usr/bin/zsh

一旦ログアウトしてからログインすると zsh の初期設定が始まる。

This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~).  This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function being run again.

(1)  Continue to the main menu.

(2)  Populate your ~/.zshrc with the configuration recommended
     by the system administrator and exit (you will need to edit
     the file by hand, if so desired).

--- Type one of the keys in parentheses --- 0

とりあえず 0 で抜ける。そのあと、他のマシンで使っている .zshrc を持ってきた。

mosh のインストール

$ sudo apt-get install mosh
$ mosh --version
mosh 1.2.4a
Copyright 2012 Keith Winstein 
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

インストール後、ufw の設定を追加し、mosh への通信ができるようにする。

$ sudo ufw app info mosh
プロファイル: mosh
タイトル: Mosh (mobile shell)
Description: Mobile shell that supports roaming and intelligent local echo

Port:
  60000:61000/udp
$ sudo ufw allow mosh
ルールを追加しました
ルールを追加しました (v6)

他のマシンから mosh でログインできることを確認して完了。

普段使うツールいろいろ

apt-get で入れる。順不同。

  • emacs
  • lv
  • git
  • tmux
  • silversearcher-ag
  • tree
  • build-essential
  • source-highlight

今は録画に 鼻毛鯖+epgrec+KTV-FSUSB2 を使っているが、近いうちに LIVA+Chinachu+KTV-FSUSB2 に移行してみたい。

ECS LIVA を買って Ubuntu 14.04 を入れた

常時稼動用に使えるかなーと思って ECS LIVA-B3-2G-32G を買ってみた。ドスパラで税込17,980円。

Live USB を作る

Ubuntu 14.04 Desktop の日本語 Remix をダウンロードして、UNetbootin で Live USB を作る。このとき、USB メモリは FAT でフォーマットしておく。

LIVA に Ubuntu をインストールする

LIVA にディスプレイと電源をつなぎ、USB 3.0 のポートに Live USB を、USB 2.0 のポートにマウス+キーボードを挿す(こういうとき Logicool の Unifying はラク)。電源ボタンを押すと GRUB が立ち上がるので、Ubuntu のインストールを行う。設定はデフォルトのまま。インストール先は /dev/mmcblk0 になる。

不要なパッケージの削除

ソフトウェアセンターからてきとうに削除。

デフォルトで作成されるディレクトリ名を英語に

「ダウンロード」→「Downloads」など。下のコマンドを実行してログインし直す。

$ LANG=C xdg-user-dirs-gtk-update

Ctrl と Caps Lock を入れ替える

$ dconf write /org/gnome/settings-daemon/plugins/keyboard/active true
$ dconf write /org/gnome/desktop/input-sources/xkb-options "['ctrl:swapcaps']"

一旦ログアウトしてログインし直す。

SSHでログインできるようにする


とりあえず今日のところはこれまで。普通のデスクトップPCだと思って使ってしまうとちょっと重いが、別にデスクトップ作業をばんばんやりたいわけではないので、これで十分。

iiyama のディスプレイを修理に出した

昨年1月に iiyama のディスプレイを購入した。

可もなく不可もなくといった感じで使っていたが、今年の夏ごろから調子が悪くなることがあった。症状としては、電源を入れた際に画面が乱れたままになる、青成分が抜けた表示になる、など。調子が悪い場合でも何度か電源を ON/OFF すれば直っていたため、しばらく様子を見ていたが、そのうち電源自体が入らなくなってしまった。

3年間のメーカー保証がついていたので、iiyama に電話で問い合わせてみることに。担当者に症状とシリアルナンバーを伝えたところ、修理で対応してもらうことになった。保証があるので費用は無料だが、その前に、故障したディスプレイをこちらから発払いで送る必要がある。

ディスプレイ購入時の箱を捨ててしまったと告げたところ、では梱包用の箱を送りますとのことで、数日して大きな段ボール箱が届いた。中には梱包材(クッション)が詰め込まれており、これにそのままディスプレイを入れて修理工場へ送り返せば良い。箱や梱包材を用意してくれる点は非常に楽でよかった。送料は東京→長野で1,580円。

故障したディスプレイを送った後、1週間弱で修理されて戻ってきた。同封の修理完了報告書によればメイン基板が故障していたらしく、これの交換を行なったとのこと。修理後は不具合もなく、めでたしめでたし。

Grunt を使う

Node.js のインストール

$ sudo add-apt-repository ppa:chris-lea/node.js
$ sudo apt-get update
$ sudo apt-get install nodejs
$ node -v
v0.10.15

Grunt のインストール

$ sudo npm install -g grunt-cli
…
/usr/bin/grunt -> /usr/lib/node_modules/grunt-cli/bin/grunt
grunt-cli@0.1.9 /usr/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)

作業ディレクトリに package.json を作る。

$ cd 作業ディレクトリ
$ npm init
(てきとうに入力)

ここに Grunt と、使いたい Grunt プラグインをインストール。

$ npm install grunt --save-dev
…
grunt@0.4.1 node_modules/grunt
├── which@1.0.5
├── dateformat@1.0.2-1.2.3
├── colors@0.6.1
├── hooker@0.2.3
├── async@0.1.22
├── eventemitter2@0.4.12
├── coffee-script@1.3.3
├── underscore.string@2.2.1
├── iconv-lite@0.2.11
├── lodash@0.9.2
├── findup-sync@0.1.2 (lodash@1.0.1)
├── nopt@1.0.10 (abbrev@1.0.4)
├── glob@3.1.21 (inherits@1.0.0, graceful-fs@1.2.3)
├── minimatch@0.2.12 (sigmund@1.0.0, lru-cache@2.3.0)
├── rimraf@2.0.3 (graceful-fs@1.1.14)
└── js-yaml@2.0.5 (esprima@1.0.3, argparse@0.1.15)
$ npm install --save-dev grunt-contrib-concat grunt-contrib-uglify
…
grunt-contrib-concat@0.3.0 node_modules/grunt-contrib-concat

grunt-contrib-uglify@0.2.2 node_modules/grunt-contrib-uglify
├── grunt-lib-contrib@0.6.1 (zlib-browserify@0.0.1)
└── uglify-js@2.3.6 (async@0.2.9, source-map@0.1.27, optimist@0.3.7)

package.json の devDependencies に情報が追加されているのがわかる。

  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-uglify": "~0.2.2"
  }

Grunt を使う

やりたいことは Gruntfile.js というファイルを作ってそこに書く。

$ grunt タスク名

とするとそのタスクが実行される。