DVB-T

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

DVB-T は地上デジタルビデオ放送に使われている国際規格です。DVB-T は様々なハードウェアを使って受信することができますが、この記事では RTL2832U チップセットを搭載した DVB-T USB ドングルだけを扱います (RTL-SDR による安価なソフトウェア無線としても広く使われています)。

ドライバー

使用するメインのドライバーは dvb_usb_rtl28xxu です。最新カーネルに含まれています。ドライバーがロードされていない場合、手動でロードしてください:

# modprobe dvb_usb_rtl28xxu

rtl2832rtl2830 もロードする必要があるかもしれません:

# modprobe rtl2830
# modprobe rtl2832
ノート: RTL-SDR をインストールしている場合、上記のドライバーと衝突するので、ドライバーはブラックリストに入れられます。ドライバーをロードする前にブラックリストに追加されていないか確認して、存在する場合は削除してください。ブラックリストファイルはデフォルトでは /etc/modprobe.d/rtlsdr.conf に存在します。

デバイスを接続すると、dmesg で以下のように確認できるはずです:

[ 4009.326338] usb 7-5: new high-speed USB device number 4 using ehci-pci
[ 4009.466712] usb 7-5: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
[ 4009.531594] usb 7-5: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[ 4009.531613] DVB: registering new adapter (Realtek RTL2832U reference design)
[ 4009.534554] usb 7-5: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[ 4009.534627] r820t 4-001a: creating new instance
[ 4009.546177] r820t 4-001a: Rafael Micro r820t successfully identified
[ 4009.552681] Registered IR keymap rc-empty
[ 4009.552783] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb7/7-5/rc/rc1/input20
[ 4009.552854] rc1: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb7/7-5/rc/rc1
[ 4009.553275] input: MCE IR Keyboard/Mouse (dvb_usb_rtl28xxu) as /devices/virtual/input/input21
[ 4009.554466] rc rc1: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0
[ 4009.554474] usb 7-5: dvb_usb_v2: schedule remote query interval to 400 msecs
[ 4009.565930] usb 7-5: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected
ノート: 上記の例ではドングルには R820T チューナーが搭載されているのが確認できますが、よく使われているチューナーは他にも存在します。また、赤外線センサーデバイスが使える場合、正しく設定すればリモコンで操作することが可能です。詳しくは LIRC を見てください。

さらに、/dev/dvb/adapter0 下でアダプタデバイスが確認できれば問題ありません。カードによっては、様々な理由によって配布されていない追加のファームウェアが必要になります。大抵の場合 dmesg でメッセージが確認できます。お好きな検索エンジンでファイル名を検索して、発見したら、/usr/lib/firmware にファームウェアを保存してください。また、AUR にパッケージが存在することもあります。

ユーティリティ

linuxtv-dvb-appsAUR パッケージに様々な DVB ユーティリティが入っています。

スキャン

w_scanAUR を使うことでチャンネルの自動スキャンが行えます (設定不要)。プログラムをインストールしたら次を実行してください:

# w_scan -ft -c [country_code] > ~/channels.conf

国名コードがわからない場合、以下を実行することでコードのリストを確認できます (場合によっては国名コードは任意です。詳しくは man w_scan を参照):

# w_scan -c "?"

高度なスキャンオプションは DVB-S#チャンネルのスキャンに記載されています。w_scanman ページドキュメント も参照してください。

クライアント

プレイヤーを起動する前あるいは後に、設定ファイルや xset コマンドを使ってビデオや TV の再生中にスクリーンセーバーを無効化する方法を見てください。xscreensaver をインストールしている場合、xset ではなく xscreensaver-command を使ってコマンドラインからスクリーンセーバーを有効化・無効化する必要があります。

VLC

VLC で DVB-T のチャンネルを視聴する場合、プレイリストを生成するのが一番簡単です:

$ w_scan -ft -c [country_code] -L > dvb.xspf
$ vlc dvb.xspf

もしくは、手動で周波数を指定することもできます。以下のコマンドを使用して DVB-T ストリームを表示できます:

$ vlc dvb://frequency=543000000

周波数は Hz 単位でセットします。あなたの地域で送波に使われている基準周波数を指定する必要があります。また、復調方式は自由に指定することができます。dvb の代わりに dvb-tdvb-t2 などが利用可能です。

VLC では様々なコマンドライン引数を使うことができ、例えば、他のプログラムに同調したい場合:

$ vlc dvb://frequency=543000000 :program=3

MPlayer / mpv

DVB をストリーミングするとき、MPlayer (や mpv) は ~/.mplayer/channels.conf にチャンネルの設定ファイルを必要とします。#スキャンの指示に従ってファイルを生成してください。ただし、コマンドで -M フラグを使って MPlayer から利用できるフォーマットで生成するようにしてください。w_scan を使用する場合:

$ w_scan -ft -c [country_code] -M > ~/.mplayer/channels.conf

mpv を使用する場合:

$ w_scan -ft -c [country_code] -M > ~/.config/mpv/channels.conf

mplayer dvb:// を実行して設定をテストしてください。最初のチャンネルが再生されるはずです。再生されない場合、ストリームを受信するために -demuxer lavf-demuxer mpegts を使う必要があります。

設定が上手くいったら次を実行:

$ mplayer dvb://"STREAM NAME"

STREAM NAME はチャンネルの設定ファイルに記載されている適当なチャンネル名に置き換えてください。

ノート: MPlayer は / など Linux の特殊記号を名前に含んでいるチャンネルをコマンドラインから再生することはできません。ただし、~/.mplayer/channels.conf を編集することで手動で名前を変更することができます。

チャンネルセレクタ

以下の lstvAUR スクリプトは ~/.mplayer/channels.conf ファイルからデータを読み込んで、チャンネルの番号付きリストを表示します。スクリプトによって表示された番号をコマンドラインで使うだけで、チャンネルの名前を入力しなくてもチャンネルを視聴することができるようになります。例: lstv 3。スクリプトによって表示されるチャンネル番号はチューニング設定の行番号と対応しています。また、mplayer を起動する前にスクリプトはディスプレイの省電力機能とスクリーンセーバーを無効化して、スクリプトを終了した後に、もういちど有効化します。スクリプトのスクリーンセーバー管理を無効化したいときは MPlayer の前後にある xset ...; を削除してください。

/usr/local/bin/lstv
#!/bin/bash
if [ "$1" ];then
CC='^[0-9]+$';
  if ! [[ "$@" =~ $CC ]];then echo Is not a channel number!;
   else
##
    awk -F':' -v AA="$1" '//{ZZ++;
     if(AA == ZZ)system("xset -dpms s off;mplayer dvb://""\""$1"\";xset +dpms s on")}
     END{if(AA > ZZ)printf "The highest channel number is: "ZZ"\n"}' "$HOME/.mplayer/channels.conf"
##
  fi;
else
awk -F':' '// { ZZ++; printf  ZZ " | " $1 "\n"}' "$HOME/.mplayer/channels.conf"
fi;
ノート:
  • channels.conf ファイルは次のコマンドで作成できます: w_scan -ft -c country_code -C UTF-8 -M -E 0 -O 0 > ~/.mplayer/channels.conf
  • チャンネルのリストが長すぎる場合、lstv | less のようなコマンドを使って / を押してチャンネルの名前を記入することでチャンネル名で検索できます。チャンネルがわかったら q を押して less を終了してから lstvAUR でチャンネル番号を使って下さい。
  • 動画の再生に問題が発生するときは Arch Linux Forum を見てください。
警告: 同じ名前のチャンネルが複数存在する場合、mplayer はリストのどちらか近いほうしか再生しません。

ffmpeg

FFmpeg では DVB-T の MPEG ストリームを入力に指定できますが、tzap が必要になります。

ノート: もっと良い方法を知っている場合は教えて下さい。

まず、w_scan を使って tzap 互換の channels.conf ファイルを生成してください:

$ w_scan -ft -A1 -X > ~/.tzap/channels.conf

そして、次を実行:

$ tzap -r "CHANNEL NAME"

正しく設定されていれば、以下のように出力されます:

$ tzap -r "CHANNEL NAME"
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
reading channels from file '/home/user/.tzap/channels.conf'
Version: 5.10  	 FE_CAN { DVB-T }
tuning to 506000000 Hz
video pid 0x0a21, audio pid 0x0a22
status 00 | signal 0000 | snr 0000 | ber 0000ffff | unc 00007fbd | 
status 1f | signal 0000 | snr 0126 | ber 00000000 | unc 00007fbd | FE_HAS_LOCK
status 1f | signal 0000 | snr 0129 | ber 0000000f | unc 00007fbd | FE_HAS_LOCK
status 1f | signal 0000 | snr 0120 | ber 00000003 | unc 00007fbd | FE_HAS_LOCK
status 1f | signal 0000 | snr 0125 | ber 00000011 | unc 00007fbd | FE_HAS_LOCK
# ....

tzap に関する詳細は zap の wiki ページ を見てください。

tzap でストリームを符号化することで、ffmpeg (やその他のプログラム) から /dev/dvb/adapter0/dvr0 が使えるようになります。

余計なエンコードを行わないで番組をストリームするシンプルなコマンドは以下のようになります:

$ ffmpeg -f mpegts -i /dev/dvb/adapter0/dvr0 out.mp4
ノート: カードにフロントエンドやデマルチプレクサの設定が必要な場合、上記のコマンドは出力を生成しません。

dvbjet

DVB カードは同時に複数のプログラムを受信します。dvbjet コマンドラインツールは周波数を選択して TV カードを選局し、音声と共に完全な MPEG-TS ストリームを保存します。付属の python スクリプトから ffmpeg を起動して抽出などができます。

トラブルシューティング

何か問題が発生した場合、以下のツールを使ってデバッグできます:

  • dvbsnoopAUR はバンド幅・シグナル・フロントエンドなどに関するあらゆるデータを表示することができる上級者向けのツールです。
  • femon -H は信号の状態を表示します。