地デジ/BS/CS放送8CH復調BOX
はじめに
最近、高性能のMiniPCが安価に販売されるようになりました。
そこで、MiniPCにUSB接続し、地デジ/BS/CS放送を8CH復調できる復調BOXを製作しました。実際は、PLEXのPX-MLT8PEを外付けBOX化しています。
MiniPC+iSCSIとの組み合わせにより、 foltia ANIME LOCKER録画サーバを構築したり、MiniPCだけと組み合わせIPTV再送信装置を構築したりできます。
構成概要
PLEXのPX-MLT8PEは、PC内蔵型のカードですが、PCI-Expressバスは+3.3V給電のみに使用され、実際のホストインタフェースはUSB接続となています。そのため、マイニング用PCI-Expressライザーカードを利用・給電を行えば、基本的にUSBのみコネクタを用意すれば、容易に外付けBOX化できます。
+3.3V給電能力に関する注意事項
問題点
ただし、ライザーカードの+3.3V給電回路をそのまま利用した場合、アプリケーションより6CH以上を起動すると、ドライバが落ちる現象が発生しました。当初、ホストのUSBインタフェースの問題を疑いましたが、PX-MLT8PEの外付け化を検討されていらっしゃる方がおられ、+3.3V給電の能力不足が指摘されていました。また、5chにて、PX-MLT8PEの起動CH数と+3.3V電流容量の関係を調査されている方がおられます。そのため、+3.3Vの電源をオシロで観測しながら8CHを起動すると、起動後しばらくすると電源が1.3V程度にドロップすることが確認されました、(その後、ドライバが開放されると+3.3Vに復旧します。)
原因
ライザカードの給電回路は、+12Vを一旦、8PinSOPのスイッチング電源ICで降圧、その後、3端子レギュレータ(ドロッパ)により+3.3Vを作成しています。そのため、PCI-Expressバスの最大給電能力の3Aを保証できず、3A近くの電流が流れると、3端子レギュレータにサーマルプロテクションがかかり、電圧が低下してしまします。
対策
ライザカードの給電回路をあきらめ、外部の+12V->+3.3V降圧コンバータから給電を受けるよう変更します。外部の降圧コンバータとの接続は4Pin IDE給電コネクタを利用、+5Vのコンタクトが未接続になっているので、+3.3V接続用に利用します。
降圧コンバータはAmazonで販売されているものを使用しました。
出力にはスイッチングノイズがそこそこ乗っていますが、フレッツ・テレビを利用していますので強電界地域並みの出力が得られている関係で特に問題はありませんでした。受信環境によっては、何らかの対策が必要になるかもしれません。
BOX内レイアウト
ケースは、株式会社タカチ電機工業さんのコーナーガード付フリーサイズアルミボックスを利用しています。このケースはmm単位でサイズをオーダでき、価格も手頃です。サイズは150mm(H) x 70mm(W) x 180mm(D)(ALGF150-70-180K15B)です。
このBOX内に以下の様にFAN、ライザカード、チューナーカード、降圧コンバータ、スイッチコネクタ等を配置しています。
また、接続に関しては、すべてフロントからのアクセスとしています。
製作のポイント
USBケーブルの加工
USBケーブルもAmazonで入手しました。
対向のコネクタは、通常のマザーボード接続用のコネクタですので、PX-MLT8PEに合わせて、PHコネクタに換装します。
電源系統
電源系統は、既設のコネクタを最大限利用し、以下の様に配線しています。
ソフトウェア
以降はLinux(RHEL系)ベースでのIP出力復調器に仕立てる方法について、簡単に記します。
ドライバ
「px4_drv - Unofficial Linux / Windows (WinUSB) driver for PLEX PX4/PX5/PX-MLT series ISDB-T/S receivers」をそのまま利用します。DKMSを利用し、インストールします。
ライブ送出ツール
録画サーバの定番「recpt1」を変更し、ライブ送出ツールを作成しました。recpt1には、UDP送信機能がありますが、ライブ送出ツールとしては以下の問題があります。
VFS(read()/write())を使用したUDP送信は性能が悪く、パケットロスが激しい
RTPをサポートしていない
大量のバッファにより遅延が大きい
マルチキャストの送信インタフェースが指定できない
そこで、IPv6 対応(getaddrinfo())、性能改善(sendto())、送信インタフェース指定(setsockopt(IP_MULTICAST_IF))のためのパッチを作成しました。
以下の様に 従来のrecpt1に[--rtp dst_addr:dst_port@if,src_addr:src_port]、[--chank size] 、[--tick clock]の指定が追加されています。
なお、B-CASの復号化との同時指定は不可です。
なお、RTPパケットのペイロードサイズは7TS固定にします。
recpt1 [--b25 [--round N] [--strip] [--EMM]] [--device devicefile] [--lnb voltage]
[--sid SID1,SID2]
[--udp [--addr hostname --port portnumber]]
[--http portnumber]
[--rtp dst_addr:dst_port@if,src_addr:src_port]
[--chank size] [--tick clock]
channel rectime destfile
Remarks:
if rectime is '-', records indefinitely.
if destfile is '-', stdout is used for output.
Options:
--b25: Decrypt using BCAS card
--round N: Specify round number
--strip: Strip null stream
--EMM: Instruct EMM operation
--udp: Turn on udp broadcasting
--addr hostname: Hostname or address to connect
--port portnumber: Port number to connect
--http portnumber: Turn on http broadcasting (run as a daemon)
--rtp dst_addr:dst_port@if,src_addr:src_port
Turn on rtp sending
--device devicefile: Specify devicefile to use
--lnb voltage: Specify LNB voltage (0, 11, 15)
--sid SID1,SID2,...: Specify SID number in CSV format (101,102,...)
--help: Show this help
--version: Show version
--list: Show channel list
--chank size: Set rtp chank size (Defaut: 188 * 14 )
--tick clock: Set RTP Timestamp tick (Default: 90kHz)パッチファイル
recpt1へのパッチファイルは以下からダウンロード可能です。
動作確認
8CHを起動し、24時間ストリームのドロップをRTPのS/NおよびMPEG2-TSのCC(continuity counter)をチェック、ドロップがないことを認しました。
# ps -aef | grep recpt1 | grep -v grep
root 8959 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.1:29000@enp2s0,192.168.10.212:39000 --device /dev/pxmlt8video0 27 - --chank 1316 --tick 90000
root 8960 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.2:29010@enp2s0,192.168.10.212:39010 --device /dev/pxmlt8video1 26 - --chank 1316 --tick 90000
root 8961 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.3:29020@enp2s0,192.168.10.212:39020 --device /dev/pxmlt8video2 18 - --chank 1316 --tick 90000
root 8962 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.4:29030@enp2s0,192.168.10.212:39030 --device /dev/pxmlt8video3 25 - --chank 1316 --tick 90000
root 8963 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.5:29040@enp2s0,192.168.10.212:39040 --device /dev/pxmlt8video4 24 - --chank 1316 --tick 90000
root 8964 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.6:29050@enp2s0,192.168.10.212:39050 --device /dev/pxmlt8video5 22 - --chank 1316 --tick 90000
root 8965 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.7:29060@enp2s0,192.168.10.212:39060 --device /dev/pxmlt8video6 23 - --chank 1316 --tick 90000
root 8966 1 9 22:36 pts/0 00:00:02 /opt/recpt1/recpt1/recpt1 --rtp 239.192.0.8:29070@enp2s0,192.168.10.212:39070 --device /dev/pxmlt8video7 21 - --chank 1316 --tick 90000
## rtp_checker enp2s0 239.192.0.8 29070
Statistics: Received = 524161440, Lost = 0, Loss Rate = 0.00 % 1.86Gb 3.73Gb 5.59Gb 7.45Gb 9.31Gb
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
192.168.10.212 => 239.192.0.1 29.6Mb 29.5Mb 28.6Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.5 29.6Mb 29.4Mb 28.6Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.2 29.6Mb 29.4Mb 28.6Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.4 29.5Mb 29.4Mb 28.6Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.3 29.4Mb 29.4Mb 28.5Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.8 29.4Mb 29.4Mb 28.5Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.6 29.4Mb 29.4Mb 28.5Mb
<= 0b 0b 0b
192.168.10.212 => 239.192.0.7 29.4Mb 29.4Mb 28.5Mb
<= 0b 0b 0b
fd00:0:0:10::212 => ff38::1 0b 68.2Kb 48.7Kb
<= 0b 0b 0b
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TX: cum: 400MB peak: 238Mb rates: 236Mb 235Mb 229Mb
RX: 0B 0b 0b 0b 0b
TOTAL: 400MB 238Mb 236Mb 235Mb 229Mbおわりに
初めての投稿になりましたが、ご参考になれば幸いです。


コメント