家ではテレビにデジタルチューナーを導入しないと決まっていたので、PCで一応見れるようにとリモートでのリアルタイム視聴を視野に入れていた。http版recpt1を候補にしたが、MythTVでもfuse_b25で対応でき、MythTV Playerでリアルタイム視聴できるとわかったので、元々使っていたMythTVを引き続き使うことにした。視聴と予約録画が同じシステムにあるので、MythTVにはチューナーを効率的に活用できる利点がある。

MythTV+FUSE_b25とepgfillでパッチを当てずに常用できるが、BSが見られないなど色々と不具合があるのでパッチ当てたものを使う。ただし、依存関係やらが面倒なのでMythTVはDeb-Multimediaのものをベースにする。セットアップはPT1/PT2のDVBとMythTV @Wikiを参考にして行った。

パッチの準備

MythTVを修正するためのパッチを用意する。

2011.9.29 追記
ISDB対応パッチとカテゴリ日本語化パッチを分離。パッチの形式を変更して再作成。
2011.9.30 追記
サブタイトルの切り直しパッチを更新。("最終回"や"<新>"などの文字列に対応)
2011.11.17
サブタイトルの切り直しパッチを更新
2011.12.11
サブタイトルの切り直しパッチを更新
2011.4.21
サブタイトルの切り直しパッチを更新
2012.5.19
0.25が最新版になったことの対策と自動アップデート防止を追記

ISDB対応パッチ

番組表取得や全チャンネルのフルスキャンに対応したMythTVのISDB対応版がある。Debian-Multimediaのパッケージをベースにするため、これをそのまま使わずパッチとして利用する。

本家のソースとISDB版のソースを持ってきてパッチを作る。

$ sudo aptitude install git #gitが入っていない場合
$ w3m http://www.mythtv.org/download/mythtv/0.24.1 #本家
$ tar xjf mythtv-0.24.1.tar.bz2
$ git clone git://github.com/fukumen/mythtv.git mythtv #ISDB版
$ mv mythtv/mythtv/ isdb-mythtv
$ diff -urN mythtv-0.24.1 isdb-mythtv > mythtv-isdb.patch

ISDB対応パッチ

カテゴリ日本語化パッチ

ISDB版で取得される番組表はepgdumpとは違い、カテゴリが英語になっているので、日本語に修正する。英語でも問題ないように思えるが、カテゴリが日本語になっていないと番組表の色分けが正常に行われない。

カテゴリ日本語化パッチ

サブタイトルの切り直しパッチ

EITで取得した番組表のタイトルが番組名での録画予約に適さないのでサブタイトルを切り直すようにするパッチ。先頭の識別子と後半部分を切り出してサブタイトルの先頭につける。このパッチの正規表現では後半部分の切り出しが少し過剰になるかもしれない。

サブタイトル切り直しパッチ

サブタイトル切り直しパッチ(2011.11.17版)

サブタイトル切り直しパッチ(2011.12.11版)

サブタイトル切り直しパッチ(2012.4.21版)

BS対応パッチ

ISDB版でもBSには対応していないので無理やり対応させる。このレスを参考にデータベースにアクセスする際にTransportIDも一緒に取ってくる処理とDisEqCの無効化してBSをチューニングする処理を追加した。TSIDをつけてチューニングする処理を追加するだけでチャンネルスキャンで設定することはできない。そのため、データベースを直接操作する必要がある。チャンネル登録用スクリプトを用意したので記事の下の方を参照。

BS対応パッチ

新BS対応パッチ

チューニングバグ修正パッチ

録画に失敗しても再試行しないバグがある。それに対応するパッチがwikiのトラブルシューティングにあるので持ってくる。これを当ててからfuse_b25に異常がない限り録画に失敗することはなくなった。

チューニングパッチ

FFmpegのAAC音声切り替え対応パッチ

MythTVに内蔵しているffmpegをAACの音声切り替えに対応させるパッチ。これもwikiからもらってくる。視聴にMythTV Playerを使っていて音声切り替えでエラーが出るので効果は不明。

2011.11.16追記

Debian-Multimediaのmythtv(0.24.1+fixes20111029以降)にはこのパッチを当てられない。

ffmpegパッチ

ソースのダウンロード

ベースにするDebian-Multimediaのソースをダウンロードする。

Debian-Multimediaのリポジトリを追加

$ sudo vi /etc/apt/sources.list.d/debian-multimedia.list
deb http://www.debian-multimedia.org squeeze main non-free
deb-src http://www.debian-multimedia.org sid main

$ sudo aptitude update
$ sudo aptitude install debian-multimedia-keyring
以下の新規パッケージがインストールされます:
  debian-multimedia-keyring
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 18 個。
15.1 kB のアーカイブを取得する必要があります。展開後に 65.5 kB のディスク領域が新たに消費されます。
警告: 以下のパッケージは信頼できないバージョンがインストールされます!

信頼できないパッケージはシステムのセキュリティを危うくする可能性があります。
自分がこのインストールを望んでいると確信できる場合のみ、インストールを先に進め
てください。

  debian-multimedia-keyring

この警告を無視して意地でも先に進みますか?
先に進む場合は "Yes" を、中断する場合は "No" を、入力してください:Yes
$ sudo aptitude update

パッケージのソースをダウンロード

$ apt-get source mythtv #0.25がダウンロードされるため、直接ダウンロード
$ wget ftp://ftp.debian-multimedia.org/pool/main/m/mythtv/{mythtv_0.24.2-0.0squeeze1.dsc,mythtv_0.24.2.orig.tar.gz,mythtv_0.24.2-0.0squeeze1.diff.gz}
$ dpkg-source -x mythtv_0.24.2-0.0squeeze1.dsc

パッケージの構築

構築に必要なパッケージのインストール

$ sudo aptitude install devscripts quilt qt4-qmake libfreetype6-dev libmp3lame-dev libqt4-dev libxxf86vm-dev libxinerama-dev libdirectfb-dev

用意しておいたパッチを当てる

$ cd mythtv-0.24.1+fixes20110828/
$ patch -p1 < ../mythtv-isdb.patch
patching file libs/libmythtv/channelscan/channelscan_sm.cpp
patching file libs/libmythtv/channelscan/frequencytablesetting.cpp
patching file libs/libmythtv/eithelper.cpp
patching file libs/libmythtv/frequencytables.cpp
patching file libs/libmythtv/libmythtv.pro
patching file libs/libmythtv/mpeg/dvbdescriptors.cpp
patching file libs/libmythtv/mpeg/dvbdescriptors.h
patching file libs/libmythtv/mpeg/dvbstreamdata.cpp
patching file libs/libmythtv/mpeg/dvbstreamdata.h
patching file libs/libmythtv/mpeg/dvbtables.cpp
patching file libs/libmythtv/mpeg/dvbtables.h
patching file libs/libmythtv/mpeg/isdb_decode_text.c
patching file libs/libmythtv/mpeg/isdb_decode_text.h
patching file libs/libmythtv/mpeg/mpegdescriptors.cpp
patching file libs/libmythtv/mpeg/mpegdescriptors.h
patching file libs/libmythtv/mpeg/scanstreamdata.cpp
patching file libs/libmythtv/mpeg/scanstreamdata.h
patching file libs/libmythtv/tv_rec.cpp
$ patch -p0 <../mythtv-japanese-cat.patch
patching file libs/libmythtv/mpeg/dvbdescriptors.cpp
$ patch -p0 < ../mythtv-subtitle.patch
patching file libs/libmythtv/eithelper.cpp
$ patch -p1 < ../mythtv-bs.patch
patching file libs/libmythtv/dtvmultiplex.h
patching file libs/libmythtv/dtvmultiplex.cpp
patching file libs/libmythtv/dvbchannel.cpp
$ patch -p2 < ../mythtv-tuning.patch
patching file libs/libmythtv/dvbstreamhandler.cpp
$ patch -p2 < ../mythtv-ffmpeg.patch
patching file external/FFmpeg/libavcodec/aacadtsdec.c
patching file external/FFmpeg/libavcodec/aacdec.c
patching file external/FFmpeg/libavcodec/avcodec.h

リビジョンの修正

$ dch -i #適当に編集して保存

パッケージの構築

$ debuild -us -uc -d

パッケージのインストール

$ sudo dpkg -i ../*.deb
$ sudo aptitude hold mythtv #自動アップデートの禁止
$ sudo aptitude install #依存するパッケージのインストール

BSのチャンネル登録スクリプト

データベースを直接操作してチャンネルを登録するスクリプト

#!/bin/sh
DBUSER="mythtv"
DBPASSWORD="password"
DATABASE="mythconverg"

if [ $# -lt 6 ]
then
    echo Usage: channel_add.sh frequency netid tsid pid sourceid chan_num
    exit 1
fi
for num in $@
do
        if [ `echo $num | egrep -c '^[0-9]+$'` -eq 0 ]
        then
                echo Parameter Error
                exit 1
        fi
done

GET_MPLEXID="SELECT \`mplexid\` \
FROM \`dtv_multiplex\` \
WHERE \`sourceid\` =$5 \
AND \`transportid\` =$3 \
AND \`networkid\` =$2 \
AND \`frequency\` =$1"
SET_MPLEXID="INSERT INTO \`dtv_multiplex\` \
(\`sourceid\`, \`transportid\`, \`networkid\`, \`frequency\`,  \`symbolrate\` , \`polarity\` ) \
VALUES ('$5', '$3', '$2', '$1', '27500000', 'h');"

CHANID=`expr $5 \* 1000 + $6`
MPLEXID=`mysql -u $DBUSER -p$DBPASSWORD -e "$GET_MPLEXID" $DATABASE |tail -n1`
if [ -z "$MPLEXID" ]
then
        mysql -u $DBUSER -p$DBPASSWORD -e "$SET_MPLEXID" $DATABASE
        MPLEXID=`mysql -u $DBUSER -p$DBPASSWORD -e "$GET_MPLEXID" $DATABASE |tail -n1`
fi

SET_CHANNEL="INSERT INTO \`channel\` \
( \`chanid\`, \`channum\`, \`sourceid\`, \`mplexid\`, \`serviceid\` ) \
VALUES ('$CHANID', '$6', '$5', '$MPLEXID', '$4' );"

mysql -u $DBUSER -p$DBPASSWORD -e "$SET_CHANNEL" $DATABASE
if [ $? -eq 0 ]
then
        echo "New channel added"
        exit 0
else
        echo "Channel add failed"
        exit 1
fi

ダウンロード

新BS対応パッチ

先頭のデータベース用の変数を環境に合わせて書き換える。使い方は引数を6つ指定するだけ。frequencyはs2scanの結果から、それ以外はTVTestに付いてくるPreset_BS.ch2、Preset_CS.ch2をCSVとして開いて見るとわかりやすい。Preset_BS.ch2(Preset_CS.ch2)のネットワークIDがnetid、TSIDがtsid、サービスIDがpidにあたる。sourceidは衛星側のビデオソースのもの、chan_numは好みのチャンネル番号を指定する。mythtv-setupで他の設定を済ませてからやるといい。 チャンネル登録後はバックエンドを再起動させる。チャンネル名とコールサインは登録されないので、データベースを操作するかmythtv-setupで設定してやる必要がある。追記:登録したチャンネルは番組表の取得も有効にならないので、必要な場合mythtv-setupで"エアガイドを使用する"にチェックする。

#使用例(2012.4.2現在)
#channel_add.sh frequency netid tsid pid sourceid chan_num
#NHK BS1
channel_add.sh 1318000 4 16625 101 2 101
#NHK BSプレミアム
channel_add.sh 1318000 4 16626 103 2 103
#BS日テレ
channel_add.sh 1279640 4 16592 141 2 141
#BS朝日
channel_add.sh 1049480 4 16400 151 2 151
#BS-TBS
channel_add.sh 1049480 4 16401 161 2 161
#BSジャパン
channel_add.sh 1087840 4 16433 171 2 171
#BSフジ・181
channel_add.sh 1279640 4 16593 181 2 181
#WOWOWプライム
channel_add.sh 1087840 4 16432 191 2 191
#WOWOWライブ
channel_add.sh 1126200 4 17488 192 2 192
#WOWOWシネマ
channel_add.sh 1126200 4 17489 193 2 193
#スター・チャンネル1
channel_add.sh 1202920 4 16529 200 2 200
#スター・チャンネル2
channel_add.sh 1164560 4 17520 201 2 201
#スター・チャンネル3
channel_add.sh 1164560 4 17520 201 2 202
#BS11
channel_add.sh 1202920 4 16528 211 2 211
#TwellV
channel_add.sh 1202920 4 16530 222 2 222
#放送大学BS1
channel_add.sh 1241280 4 18098 231 2 231
#放送大学BS2
channel_add.sh 1241280 4 18098 232 2 232
#放送大学BS3
channel_add.sh 1241280 4 18098 233 2 233
#グリーンチャンネル
channel_add.sh 1394720 4 18224 234 2 234
#BSアニマックス
channel_add.sh 1164560 4 18033 236 2 236
#FOXbs238
channel_add.sh 1241280 4 18096 238 2 238
#BSスカパー!
channel_add.sh 1241280 4 18097 241 2 241
#J SPORTS 1
channel_add.sh 1394720 4 18225 242 2 242
#J SPORTS 2
channel_add.sh 1394720 4 18226 243 2 243
#J SPORTS 3
channel_add.sh 1433080 4 18257 244 2 244
#J SPORTS 4
channel_add.sh 1433080 4 18258 245 2 245
#BS釣りビジョン
channel_add.sh 1471440 4 18288 251 2 251
#IMAGICA BS
channel_add.sh 1433080 4 18256 252 2 252
#日本映画専門チャンネル
channel_add.sh 1471440 4 18289 255 2 255
#ディズニーチャンネル
channel_add.sh 1164560 4 18034 256 2 256
#D-Life
channel_add.sh 1471440 4 18290 258 2 258

同じようにCSのチャンネルを登録すればCSも見られるようになる。

CSの視聴はできない可能性が高い。

MythTV Playerを使うときの注意点

CMスキップのダイアログが出て邪魔なので、CMのスキップを切る。

mythtvplayer1

MythTV Playerは複数のビデオソースに対応していないので、地上波を見る時とBSを見る時でそれぞれ使うチューナーのIDを指定する必要がある。さらに、地上波からBSへのチャンネル変更など、ビデオソースが変わる場合は"Release Recoder"ボタンを押して一度チューナーを解放してやる必要がある。

mythtvplayer2

[amazon_tags]

関連記事


9月 10th, 2011

Posted In: ソフトウェア

タグ: , , , , , , , , , ,

12 Comments

  • PT2 より:

    PT2初心者のものです。リモートでのリアルタイム視聴が出来るとのことで、
    MythTVをインストールをFedoraにインストールを試みているのですが、
    分からないことだらけで困りますw

    当サイトを参考にさせていただいているのですが、
    MythTVはDebian-Multimedia版
    はFedoraに対してもインストール出来るものなのでしょうか?
    大変恐縮ですが・・・。FEDORAの場合だとどのような作業が必要になって
    くるか教えていただきたいのです。よろしくお願いいたします。

  • takaaki より:

    Fedoraでの情報は少ないですね。

    Fedoraをあまり使ったことがないので細かいことは分かりませんが、
    Debian-MultimediaはDebianのリポジトリなのでFedoraでは使えません。
    Fedoraなど他のディトリビューションの場合はISDB版にmakeを使ってインストールすることになります。
    ダウンロードとインストール手順はここにあります。 https://github.com/fukumen/mythtv
    使い勝手を良くするためにmakeする前に本記事のパッチを当てておくと良いでしょう。
    ISDB対応パッチは必要ありませんがソース内のmythtv/libs/libmythtv/mpeg/dvbdescriptors.cppの428~439行を
    日本語になるように変更した方がいいです。MythWebの番組表に不都合が出るので。

    MythTV+PT2に関してはこちらが参考になります。
    http://www43.atwiki.jp/mythtv-dvb/

  • PT2 より:

    教えていただきありがとうございます。
    回答を参考に構築させていただきます。

  • y より:

    PT2を手に入れたんやね。mythと連携させてるんかやるなぁ。

  • Wiki管理人 より:

    ご紹介頂いた@Wikiページの管理人です。
    サブタイトル切り直しパッチ素晴しいです!Wikiに掲載しても宜しいでしょうか?
    また、色々知識をお持ちのようなので、もし宜しければWikiに参加して編集をして頂けると有難いです。私のほうは大方情報を出し尽くしてしまい更新が滞っているので。

  • takaaki より:

    いつも参考にさせていただいてます。
    パッチに改善の余地はまだまだありますが、ぜひ掲載いただければと思います。
    ここでもwikiのものを使わせていただいてますし。
    7月にC++もPT2のこともわからないまま始めたばかりですが、なるべく力になれれば思います。

  • シロー より:

    channel_add.shについてお尋ねします。
    先日、channel_add.shを使いBSチャンネルの登録、視聴、番組表取得などは無事出来ました。
    次にCS110度チャンネルも同じように登録してみました。
    例:東映チャンネル) sh channel_add.sh 1693000 7 28768 221 2 221
    mythconverg上に情報が登録しているのを確認後、useonairguideをONにしてmythbackendを再起動しました。
    しかし1時間ほど放置しても番組表はデータが埋まらず、Live TVでの視聴も出来ませんでした。
    CSの場合、BSとは同じ方法では出来ないのでしょうか?

  • takaaki より:

    うちはCSが受信できない古いアンテナなので、よくわかりません。
    ですが、B-CASカードの無料期間を使って、CSチャンネルの視聴・番組表取得ができたのは確認しています。
    (受信状態はアンテナの関係で劣悪)

    また、スクリプトのオプションに間違いはなさそうです。
    ヒントになるかわかりませんが、2点上げておきます。

    • 通常ならそのチャンネルに合わせて録画、視聴すれば番組表は埋まる。
    • 契約していない有料放送では録画、視聴が全くできない。(番組表が影響を受けるか不明)
  • シロー より:

    有料放送が原因か探るため、とりあえずCS無料放送の「C−TBSウェルカム」を登録してみました。
    sh channel_add.sh 2013000 7 29024 160 2 160
    1時間ほど様子をみましたが、状況は変わらずダメな状況・・・。

    そこでtuneコマンドで受信できるか確認するため、tune.cに以下を追加してmakeしました。
    { 13, “C−TBSウェルカム”, 2013000, 0x7160 },

    そして、録画テストしてみます。
    $ ./tune 0 13
    Successfully tuned to C−TBSウェルカム .
    # cat /dev/dvb/adapter0/dvr0 > out.ts

    5分程待って、ctrl+Cで終了。数百MBのファイルが出来上がります。
    そしてb25で復号してみます。
    # b25 out.ts out2.ts
    processing: finish [ 25.45 MB/sec]
    warning – unpurchased ECM is detected
    channel: 293
    unpurchased ECM count: 30
    last ECM error code: 8902
    undecrypted TS packet: 201993
    total TS packet: 202833
    warning – unpurchased ECM is detected
    channel: 301
    unpurchased ECM count: 30
    last ECM error code: 8902
    undecrypted TS packet: 227227
    total TS packet: 228088
    warning – unpurchased ECM is detected
    channel: 325
    unpurchased ECM count: 30
    last ECM error code: 8902
    undecrypted TS packet: 306177
    total TS packet: 307056
    warning – unpurchased ECM is detected
    channel: 343
    unpurchased ECM count: 30
    last ECM error code: 8902
    undecrypted TS packet: 233656
    total TS packet: 234485
    warning – unpurchased ECM is detected
    channel: 351
    unpurchased ECM count: 30
    last ECM error code: 8902
    undecrypted TS packet: 255793
    total TS packet: 256633
    no EMM receiving request

    そして出来上がったout2.tsファイルを再生してみましたが上手くいきません。
    地デジやBSなどでは上記エラーメッセージは出ませんでした。
    原因はMythTVでは無く、別のところにありそうなのでもう少し調べてみます。
    ご迷惑お掛けしました。

  • […] 参考: PT1/PT2のDVBとMythTV @Wiki PT2で地デジ対応MythTVを作る PT2対応のMythTVをビルド […]

  • […] 参考: PT1/PT2のDVBとMythTV @Wiki PT2で地デジ対応MythTVを作る PT2対応のMythTVをビルド […]

  • […] 参考: PT1/PT2のDVBとMythTV@Wiki PT2で地デジ対応MythTVを作る PT2対応のMythTVをビルド […]

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください