2014年8月27日水曜日

Chinachu + BonDriverProxy + TVTest によるリアルタイム視聴&録画機能

目的

  • Linux(CentOS or Debian)でPT3運用を行いたい
  • Chinachuを利用したルール予約&同時録画機能
  • TVTestでリアルタイム視聴を可能とする

注意事項

  1. Linuxサーバの構築および運用が可能な方を前提にしております
  2. サーバ側ではB25/MULTI2 復号を省略しています
    理由:ストリーミング再生する性能もないため、B25復号が不要(あとは実装できなかった)
    * 追記:sample.cppにb25デコードパッチを適用するとB25復号が可能となりました
  3. 当方の環境は名古屋/BS,CS無しのため、chinachuのチャンネル設定は都度変更してください
    ただしCSの場合sampleがsid指定出来ないため、視聴可否は確認できておりません
  4. ChinachuではEPG取得時に設定された全てのチューナーが利用されます
    よってTVTest視聴中に突然チャンネルが変更される場合があります

    * 追記:Chinachu config.json "noEpg: true"指定にてEPGスキャン除外が出来るようになりました

構築のポイント

  • ChinachuもBonDriverProxyを利用しTVTestとの競合時には録画を優先させ,
    BonDriverProxy_Linuxに添付されているsampleを利用し録画させる
  • BonDriver_LinuxPTの設定にてTVTest用とChinachu用のチャンネル設定を定義しておく

構築環境

root@tvsv:~# uname -a
Linux tvsv 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux
root@tvsv:~# cat /etc/debian_version
7.6
root@tvsv:~#


必要構成

ここではBonDriverProxy_LinuxおよびChinachuの環境について説明する

BonDriverProxy_Linux

  • gitより取得後make実施
    ビルドするものは下記4つ
    1. BonDriverProxy(Proxy本体)
    2. BonDriver_Linux(PT3ドライバ)
    3. BonDriver_Proxy(クライアントモジュール)
    4. sample(BonDriver対応プログラム)
  • 当方の環境では/usr/local/BDPL/に各ファイルを設置
    PT3 1枚の場合は下記のファイル構成となるはず
    root@tvsv:~# tree /usr/local/BDPL/
    ├── BonDriverProxy                   //Proxy本体
    ├── BonDriver_LinuxPT3-S0.so         //PT3ドライバ
    ├── BonDriver_LinuxPT3-S0.so.conf    //PT3ドライバ設定
    ├── BonDriver_LinuxPT3-S1.so         //PT3ドライバ
    ├── BonDriver_LinuxPT3-S1.so.conf    //PT3ドライバ設定
    ├── BonDriver_LinuxPT3-T0.so         //PT3ドライバ
    ├── BonDriver_LinuxPT3-T0.so.conf    //PT3ドライバ設定
    ├── BonDriver_LinuxPT3-T1.so         //PT3ドライバ
    ├── BonDriver_LinuxPT3-T1.so.conf    //PT3ドライバ設定
    ├── BonDriver_ProxyPT3-S0.so         //クライアントモジュール
    ├── BonDriver_ProxyPT3-S0.so.conf    //クライアントモジュール設定
    ├── BonDriver_ProxyPT3-S1.so         //クライアントモジュール
    ├── BonDriver_ProxyPT3-S1.so.conf    //クライアントモジュール設定
    ├── BonDriver_ProxyPT3-T0.so         //クライアントモジュール
    ├── BonDriver_ProxyPT3-T0.so.conf    //クライアントモジュール設定
    ├── BonDriver_ProxyPT3-T1.so         //クライアントモジュール
    ├── BonDriver_ProxyPT3-T1.so.conf    //クライアントモジュール設定
    └── sample                           //BonDriver対応プログラム(BonDriverProxy_Linuxソース添付)
    
    
  • PT3ドライバ設定をS0,S1/T0,T1毎に作成
    下記は参考までにT0のファイルとなる
    ポイントは
    • #DEVICEを実devに修正する
    • チャンネル設定を[0始まりのBonDriverProxy用]と[実chと合わせたchinachu用]の2つを定義
    • 実際はTAB区切りとなるため注意
    root@tvsv:~# cat /usr/local/BDPL/BonDriver_LinuxPT3-T0.so.conf
    #DEVICE=/dev/pt3video3
    #USELNB=0
    #USESERVICEID=0
    ; 名称, BonDriverとしてのチャンネル番号, 周波数テーブル番号, スロット番号/加算する周波数
    ; 記述はタブ区切り
    
    #ISDB_T
    # 正規Ch
    東海テレビ      21      71      0
    NHK教育 13      63      0
    NHK総合 20      70      0
    中京テレビ      19      69      0
    中部日本放送    18      68      0
    め~てれ        22      72      0
    テレビ愛知      23      73      0
    三重テレビ      27      77      0
    
    # BonDriverProxy用(TVTest)
    東海テレビ      0       71      0
    NHK教育 1       63      0
    NHK総合 2       70      0
    中京テレビ      3       69      0
    中部日本放送    4       68      0
    め~てれ        5       72      0
    テレビ愛知      6       73      0
    三重テレビ      7       77      0
    
    
  • クライアントモジュール設定をS0,S1/T0,T1毎に作成
    下記は参考までにT0のファイルとなる
    ポイントは
    • ADDRESS=127.0.0.1にてローカルのBonDriverProxyを参照
    • BONDRIVERでBonDriver_Linux**の実ファイルを指定
    • CHANNEL_LOCK=1とし、Chinachuに優先権を持たせる
    root@tvsv:~# cat /usr/local/BDPL/BonDriver_ProxyPT3-T0.so.conf
    [OPTION]
    ADDRESS=127.0.0.1
    PORT=1192
    BONDRIVER=/usr/local/BDPL/BonDriver_LinuxPT3-T0.so
    CHANNEL_LOCK=1
    CONNECT_TIMEOUT=5
    USE_MAGICPACKET=0
    
    [MAGICPACKET]
    TARGET_ADDRESS=127.0.0.1
    TARGET_PORT=1192
    TARGET_MACADDRESS=AA-BB-CC-DD-EE-FF
    
    [SYSTEM]
    PACKET_FIFO_SIZE=16
    TS_FIFO_SIZE=32
    TSPACKET_BUFSIZE=192512
    

Chinachu

  • インストールについては公式wikiを参考
    https://github.com/kanreisa/Chinachu/wiki/Installation
    Debianなら特に苦労せずインストールができるはず
  • config.jsonを修正
    1. 録画対象となるチャンネルの定義(地上波は名古屋市内設定)
    2. BonDriverProxy_sampleを利用して録画を行うよう、commandを変更
      * チューナー数に合わせて増減および、利用するBonDriver_ProxyPT3-**.soを変更すること
    3. TVTestで視聴するチューナーに対してnoEpg:trueオプションを付け,EPGスキャンにてチャンネルが変更されないようにする
      ここではS1/T1とした
    {
      "recordedDir" : "./recorded/",
      "temporaryDir": "/tmp/",
    
      "wuiUsers": [
        "akari:bakuhatsu"
      ],
    
      "wuiPort"        : 10772,
      "wuiHost"        : "::",
      "wuiTlsKeyPath"  : null,
      "wuiTlsCertPath" : null,
      "wuiOpenServer"  : false,
      "wuiOpenPort"    : 20772,
      "wuiPreviewer"   : true,
      "wuiStreamer"    : true,
      "wuiFiler"       : true,
      "wuiConfigurator": true,
    
      "recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<tuner>]<title>.m2ts",
    
      "tuners": [
        {
          "name"        : "PT3-S0",
          "isScrambling": false,
          "types"       : [ "BS", "CS" ],
          "command"     : "/usr/local/BDPL/sample -b /usr/local/BDPL/BonDriver_ProxyPT3-S0.so -s 0 -c <channel>"
        },
        {
          "name"        : "PT3-S1",
          "isScrambling": false,
          "types"       : [ "BS", "CS" ],
          "command"     : "/usr/local/BDPL/sample -b /usr/local/BDPL/BonDriver_ProxyPT3-S1.so -s 0 -c <channel>",
          "noEpg"       : true
        },
        {
          "name"        : "PT3-T0",
          "isScrambling": false,
          "types"       : [ "GR" ],
          "command"     : "/usr/local/BDPL/sample -b /usr/local/BDPL/BonDriver_ProxyPT3-T0.so -s 0 -c <channel>"
        },
        {
          "name"        : "PT3-T1",
          "isScrambling": false,
          "types"       : [ "GR" ],
          "command"     : "/usr/local/BDPL/sample -b /usr/local/BDPL/BonDriver_ProxyPT3-T1.so -s 0 -c <channel>",
          "noEpg"       : true
        }
      ],
    
      "channels": [
        { "type": "GR", "channel": "21" },
        { "type": "GR", "channel": "13" },
        { "type": "GR", "channel": "20" },
        { "type": "GR", "channel": "19" },
        { "type": "GR", "channel": "18" },
        { "type": "GR", "channel": "22" },
        { "type": "GR", "channel": "23" },
        { "type": "GR", "channel": "27" },
    
        { "type": "BS", "channel": "101" },
        { "type": "BS", "channel": "102" },
        { "type": "BS", "channel": "103" },
        { "type": "BS", "channel": "141" },
        { "type": "BS", "channel": "151" },
        { "type": "BS", "channel": "161" },
        { "type": "BS", "channel": "171" },
        { "type": "BS", "channel": "181" },
        { "type": "BS", "channel": "191" },
        { "type": "BS", "channel": "192" },
        { "type": "BS", "channel": "193" },
        { "type": "BS", "channel": "200" },
        { "type": "BS", "channel": "211" },
        { "type": "BS", "channel": "222" }
      ]
    }
    

1 件のコメント :

G2 さんのコメント...

Patch
https://gist.github.com/deadbeef2/055dcfb4164ad81811e2