「DVB-T」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
|||
(2人の利用者による、間の4版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:マルチメディア]] |
− | [[Category: |
+ | [[Category:TV カード]] |
[[en:DVB-T]] |
[[en:DVB-T]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
− | {{ |
+ | {{Related|DVB-S}} |
{{Related|LIRC}} |
{{Related|LIRC}} |
||
{{Related|RTL-SDR}} |
{{Related|RTL-SDR}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | [ |
+ | [[wikipedia:ja:DVB-T|DVB-T]] は地上デジタルビデオ放送に使われている国際規格です。DVB-T は様々なハードウェアを使って受信することができますが、この記事では RTL2832U チップセットを搭載した DVB-T USB ドングルだけを扱います ([[RTL-SDR]] による安価なソフトウェア無線としても広く使われています)。 |
==ドライバー== |
==ドライバー== |
||
19行目: | 19行目: | ||
# modprobe rtl2832 |
# modprobe rtl2832 |
||
− | {{ |
+ | {{Note|[[RTL-SDR]] をインストールしている場合、上記のドライバーと衝突するので、ドライバーはブラックリストに入れられます。ドライバーをロードする前にブラックリストに追加されていないか確認して、存在する場合は削除してください。ブラックリストファイルはデフォルトでは {{Ic|/etc/modprobe.d/rtlsdr.conf}} に存在します。}} |
デバイスを接続すると、{{Ic|dmesg}} で以下のように確認できるはずです: |
デバイスを接続すると、{{Ic|dmesg}} で以下のように確認できるはずです: |
||
40行目: | 40行目: | ||
{{Note|上記の例ではドングルには R820T チューナーが搭載されているのが確認できますが、よく使われているチューナーは他にも存在します。また、赤外線センサーデバイスが使える場合、正しく設定すればリモコンで操作することが可能です。詳しくは [[LIRC]] を見てください。}} |
{{Note|上記の例ではドングルには R820T チューナーが搭載されているのが確認できますが、よく使われているチューナーは他にも存在します。また、赤外線センサーデバイスが使える場合、正しく設定すればリモコンで操作することが可能です。詳しくは [[LIRC]] を見てください。}} |
||
− | さらに、{{Ic|/dev/dvb/adapter0}} 下でアダプタデバイスが確認できれば問題ありません。 |
+ | さらに、{{Ic|/dev/dvb/adapter0}} 下でアダプタデバイスが確認できれば問題ありません。カードによっては、様々な理由によって配布されていない追加のファームウェアが必要になります。大抵の場合 dmesg でメッセージが確認できます。お好きな検索エンジンでファイル名を検索して、発見したら、{{ic|/usr/lib/firmware}} にファームウェアを保存してください。また、AUR にパッケージが存在することもあります。 |
==ユーティリティ== |
==ユーティリティ== |
||
− | {{ |
+ | {{AUR|linuxtv-dvb-apps}} パッケージに様々な DVB ユーティリティが入っています。 |
===スキャン=== |
===スキャン=== |
||
52行目: | 52行目: | ||
# w_scan -ft -c [country_code] > ~/channels.conf |
# w_scan -ft -c [country_code] > ~/channels.conf |
||
− | 国名コードがわからない場合、以下を実行することでコードのリストを確認できます: |
+ | 国名コードがわからない場合、以下を実行することでコードのリストを確認できます (場合によっては国名コードは任意です。詳しくは {{ic|man w_scan}} を参照): |
− | # w_scan -c ? |
+ | # w_scan -c "?" |
− | 高度なスキャンオプションは [[ |
+ | 高度なスキャンオプションは [[DVB-S#チャンネルのスキャン]]に記載されています。''w_scan'' の [http://dev.man-online.org/man2/w_scan/ man ページ] や [http://linuxtv.org/wiki/index.php/W_scan ドキュメント] も参照してください。 |
==クライアント== |
==クライアント== |
||
63行目: | 63行目: | ||
===VLC=== |
===VLC=== |
||
+ | [[VLC]] で DVB-T のチャンネルを視聴する場合、プレイリストを生成するのが一番簡単です: |
||
− | 以下のコマンドで [[VLC]] を使って DVB-T ストリームを表示できます: |
||
+ | |||
+ | $ w_scan -ft -c [country_code] -L > dvb.xspf |
||
+ | $ vlc dvb.xspf |
||
+ | |||
+ | もしくは、手動で周波数を指定することもできます。以下のコマンドを使用して DVB-T ストリームを表示できます: |
||
$ vlc dvb://frequency=543000000 |
$ vlc dvb://frequency=543000000 |
||
73行目: | 78行目: | ||
$ vlc dvb://frequency=543000000 :program=3 |
$ vlc dvb://frequency=543000000 :program=3 |
||
− | ===MPlayer=== |
+ | ===MPlayer / mpv=== |
− | DVB をストリーミングするとき、MPlayer は {{Ic|~/.mplayer/channels.conf}} にチャンネルの設定ファイルを必要とします。[[#スキャン]]の指示に従ってファイルを生成してください。ただし、コマンドで {{Ic|-M}} フラグを使って MPlayer から利用できるフォーマットで生成するようにしてください。{{Ic|w_scan}} を使用する場合: |
+ | DVB をストリーミングするとき、[[MPlayer]] (や [[mpv]]) は {{Ic|~/.mplayer/channels.conf}} にチャンネルの設定ファイルを必要とします。[[#スキャン]]の指示に従ってファイルを生成してください。ただし、コマンドで {{Ic|-M}} フラグを使って MPlayer から利用できるフォーマットで生成するようにしてください。{{Ic|w_scan}} を使用する場合: |
$ w_scan -ft -c [country_code] -M > ~/.mplayer/channels.conf |
$ w_scan -ft -c [country_code] -M > ~/.mplayer/channels.conf |
||
+ | |||
+ | ''mpv'' を使用する場合: |
||
+ | |||
+ | $ w_scan -ft -c [country_code] -M > ~/.config/mpv/channels.conf |
||
{{ic|mplayer dvb://}} を実行して設定をテストしてください。最初のチャンネルが再生されるはずです。再生されない場合、ストリームを受信するために {{Ic|-demuxer lavf}} や {{Ic|-demuxer mpegts}} を使う必要があります。 |
{{ic|mplayer dvb://}} を実行して設定をテストしてください。最初のチャンネルが再生されるはずです。再生されない場合、ストリームを受信するために {{Ic|-demuxer lavf}} や {{Ic|-demuxer mpegts}} を使う必要があります。 |
||
87行目: | 96行目: | ||
{{Ic|STREAM NAME}} はチャンネルの設定ファイルに記載されている適当なチャンネル名に置き換えてください。 |
{{Ic|STREAM NAME}} はチャンネルの設定ファイルに記載されている適当なチャンネル名に置き換えてください。 |
||
− | {{ |
+ | {{Note|MPlayer は {{ic|/}} など Linux の特殊記号を名前に含んでいるチャンネルをコマンドラインから再生することはできません。ただし、{{ic|~/.mplayer/channels.conf}} を編集することで手動で名前を変更することができます。}} |
==== チャンネルセレクタ ==== |
==== チャンネルセレクタ ==== |
||
110行目: | 119行目: | ||
</nowiki>}} |
</nowiki>}} |
||
− | {{Note|1= |
+ | {{Note|1=<nowiki></nowiki> |
* {{ic|channels.conf}} ファイルは次のコマンドで作成できます: {{ic|w_scan -ft -c ''country_code'' -C UTF-8 -M -E 0 -O 0 > ~/.mplayer/channels.conf}}。 |
* {{ic|channels.conf}} ファイルは次のコマンドで作成できます: {{ic|w_scan -ft -c ''country_code'' -C UTF-8 -M -E 0 -O 0 > ~/.mplayer/channels.conf}}。 |
||
− | * |
+ | * チャンネルのリストが長すぎる場合、{{ic|<nowiki>lstv | less</nowiki>}} のようなコマンドを使って {{ic|/}} を押してチャンネルの名前を記入することでチャンネル名で検索できます。チャンネルがわかったら {{ic|q}} を押して [http://unixhelp.ed.ac.uk/CGI/man-cgi?less less] を終了してから {{AUR|lstv}} でチャンネル番号を使って下さい。 |
* 動画の再生に問題が発生するときは [https://bbs.archlinux.org/viewtopic.php?id=57650 Arch Linux Forum] を見てください。 |
* 動画の再生に問題が発生するときは [https://bbs.archlinux.org/viewtopic.php?id=57650 Arch Linux Forum] を見てください。 |
||
}} |
}} |
||
121行目: | 130行目: | ||
[[FFmpeg]] では DVB-T の MPEG ストリームを入力に指定できますが、{{Ic|tzap}} が必要になります。 |
[[FFmpeg]] では DVB-T の MPEG ストリームを入力に指定できますが、{{Ic|tzap}} が必要になります。 |
||
+ | {{Note|もっと良い方法を知っている場合は教えて下さい。}} |
||
− | {{Note|This might not necessarily be the case, if a better method is known, please update.}} |
||
まず、{{Ic|w_scan}} を使って tzap 互換の {{Ic|channels.conf}} ファイルを生成してください: |
まず、{{Ic|w_scan}} を使って tzap 互換の {{Ic|channels.conf}} ファイルを生成してください: |
||
153行目: | 162行目: | ||
$ ffmpeg -f mpegts -i /dev/dvb/adapter0/dvr0 out.mp4 |
$ ffmpeg -f mpegts -i /dev/dvb/adapter0/dvr0 out.mp4 |
||
+ | |||
+ | {{Note|カードにフロントエンドやデマルチプレクサの設定が必要な場合、上記のコマンドは出力を生成しません。}} |
||
+ | |||
+ | ===dvbjet=== |
||
+ | |||
+ | DVB カードは同時に複数のプログラムを受信します。[https://github.com/lightful/DVBdirect/ dvbjet] コマンドラインツールは周波数を選択して TV カードを選局し、音声と共に完全な MPEG-TS ストリームを保存します。付属の python スクリプトから ffmpeg を起動して抽出などができます。 |
||
==トラブルシューティング== |
==トラブルシューティング== |
2018年1月18日 (木) 22:01時点における最新版
DVB-T は地上デジタルビデオ放送に使われている国際規格です。DVB-T は様々なハードウェアを使って受信することができますが、この記事では RTL2832U チップセットを搭載した DVB-T USB ドングルだけを扱います (RTL-SDR による安価なソフトウェア無線としても広く使われています)。
目次
ドライバー
使用するメインのドライバーは dvb_usb_rtl28xxu
です。最新カーネルに含まれています。ドライバーがロードされていない場合、手動でロードしてください:
# modprobe dvb_usb_rtl28xxu
rtl2832
や rtl2830
もロードする必要があるかもしれません:
# modprobe rtl2830 # modprobe rtl2832
デバイスを接続すると、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
さらに、/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_scan の man ページ や ドキュメント も参照してください。
クライアント
プレイヤーを起動する前あるいは後に、設定ファイルや 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-t
や dvb-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
はチャンネルの設定ファイルに記載されている適当なチャンネル名に置き換えてください。
チャンネルセレクタ
以下の 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;
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
は信号の状態を表示します。