Foltia with AppleScript

Foltia animelockerのトラブルシューティング

B-CASエラー pcscd

サマリー

推測ですがfoltiaでのB-CASエラー pcscdエラーは B-CASカード本体の熱暴走ではないかと思います。 もともと多チャンネルで複数並列でアクセスする事を想定していないのではないでしょうか?

はじめに

デジタル放送は暗号化されていてそれを復号化するためにB-CASカードが必要になります。どうやって復号化しているのかは私は知りませんが、そういうの研究している人もいらっしゃいますよね。 今回そちら系の話は無しです。

pcscdエラーはB-CASカードおよびカードリーダーのエラー

recpt1のオプションに —b25が付いているとB-CASで復号しているという事になる様です。 PLEXにもB-CASカードリーダが付いてますが、foltiaには対応しておらず、自分たちで用意するしか無いようです。 そしてこの復号に失敗するとpcscd関連のエラーが発生します。 

Feb 16 19:19:08 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:08 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:08 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:08 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:09 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:09 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:10 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:10 foltia pcscd: openct/proto-t1.c:177:t1_transceive() T=1 state machine is DEAD. Reset the card first.
Feb 16 19:19:11 foltia pcscd: openct/proto-t1.c:221:t1_transceive() fatal: transmit/receive failed
Feb 16 19:19:11 foltia pcscd: openct/proto-t1.c:177:t1_transceive() T=1 state machine is DEAD. Reset the card first.

こんな感じですね。

特に177が頻発するとその後は全くカードへのアクセスが出来なくなり、以降の録画はWhiteoutしてしまいます。tsファイルは存在しているので後でデコードし直すことは可能なのだと思うのですが、とても面倒ですしその後のいろいろな制約もあるようで私としてはwhiteoutは撲滅したいです。 

またこの状況から推測すると、録画中結構な頻度でB-CASカードにアクセスしてるという事でしょうね。 1回のデーターは復号のためのKeyぐらいの小さなデーターサイズなのだと思います、番組毎にアクセスしている様子も見られ(pcscdエラーが有った後も録画続いてる記録があったので)、それが多番組同時記録時にpcscdエラーが起こりやすい原因ではないかと考えられます。

Whiteout時の特徴

先ず敵を知りましょう。

誘発状況

チューナー使用数が多いときに多い気がします。 チューナー起動直後とかも多いでしょうか?  しかし全く誘因も無く録画開始後10分とかからエラーが発生し始めて頻発すると言う事もあります。 また一度出始めるとその後カードをリセットするまで止まること無く出続ける事が多いです。 該当する番組録画が終了するとpcscdエラーが停止する場合もあるみたいですが、大半は自然回復は見込めないです、エラーが出なくなってもその後は記録出来ておらずWhiteOutエラーで以後の録画全滅になりがちです。

外部(ハード)からの観察

カードリーダーにはアクセス中はLEDが点滅(ブリンキング)するカードがあります。それで見るとこのエラーが起こってWhiteoutが発生するとその後は録画アクション中LEDが点滅しなくなり、記録されたtsもエンコードされなくなります。 つまりB-CASへのアクセスが止まる事がこのエラーの原因であると推測されます

内部(ソフトウエア)での観察

いちど試しにpcsc_scanを実行した状態で観察したことがあったのですが、Whiteout時にもB-CASカードはきちんとマウントされてました(カード認識が切れることは無いです)。

[foltia@foltia ~]$ pcsc_scan

PC/SC device scanner

V 1.4.25 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>

Compiled with PC/SC lite version: 1.5.2

Using reader plug'n play mechanism

Scanning present readers...

0: Gemplus GemPC Twin (2B4A534F) 00 00

 

Sun Mar  3 09:59:55 2024

Reader 0: Gemplus GemPC Twin (2B4A534F) 00 00

  Card state: Card inserted, Shared Mode, 

  ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99

 

ATR: 3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99

+ TS = 3B --> Direct Convention

+ T0 = F0, Y(1): 1111, K: 0 (historical bytes)

  TA(1) = 12 --> Fi=372, Di=2, 186 cycles/ETU

    21505 bits/s at 4 MHz, fMax for Fi = 5 MHz => 26881 bits/s

  TB(1) = 00 --> VPP is not electrically connected

  TC(1) = FF --> Extra guard time: 255 (special value)

  TD(1) = 91 --> Y(i+1) = 1001, Protocol T = 1 

-----

  TA(2) = 81 --> Protocol to be used in spec mode: T=1 - Unable to change - defined by interface bytes

  TD(2) = B1 --> Y(i+1) = 1011, Protocol T = 1 

-----

  TA(3) = 7C --> IFSC: 124

  TB(3) = 45 --> Block Waiting Integer: 4 - Character Waiting Integer: 5

  TD(3) = 1F --> Y(i+1) = 0001, Protocol T = 15 - Global interface bytes following 

-----

  TA(4) = 03 --> Clock stop: not supported - Class accepted by the card: (3G) A 5V B 3V 

+ Historical bytes: 

+ TCK = 99 (correct checksum)

 

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):

3B F0 12 00 FF 91 81 B1 7C 45 1F 03 99

Japanese Chijou Digital B-CAS Card (pay TV)

復旧させるには

物理的にカードを抜き差しすると直ります。 USBカードリーダーを抜き差しでもよいですが、B-CASカードを抜き差ししても直りますのでカードリーダーからカードへのアクセス中に問題があってフリーズしてロックがかかっていると推測されます。 またソフトウエアー的にはsuperuser権限で service pcscd restartを実行してやると回復します。 

[root@foltia ~]# service pcscd restart
Stopping PC/SC smart card daemon (pcscd):                  [  OK  ]
Starting PC/SC smart card daemon (pcscd):                  [  OK  ]

カードリーダーの物理的な対策

カードリーダーの接点ノイズかなとも思い、接点復活用のKureのContact splayなんかと使った事もあったのですが、著効した感じは無かったです。 

 

どちらかというと設置場所は窓際とかの温度の低い場所の方が安定していた気がします。 でもファンなどで空冷すると著効するかというとそういうわけでもなかったです。 フェライト磁石で電磁波ノイズの可能性も考慮して装着して見ましたがやはりあまり効果無かったと感じました。

インターネット上での情報

情報を集めてみると、多くの方がB-CASカードの寿命とかカードリーダーの寿命だとおっしゃっておられる方が多く、交換すると直ったという報告をよく聞きます。 しかしこういう報告は交換して上手くいかなかった方の報告はされない傾向があるので、別の理由で同じタイミングで状況が良くなっただけで、観測者の印象によるバイアスが掛かっている可能性もあります。 また論理的に考えて、カード自体が5年10年で寿命が来る様なら、デジタルテレビに突っ込んだまま30年近く動いている我が家の地上波テレビのB-CASは何なのかという話になります。 また電子機器の寿命という仮説は、特に大きな電圧が掛からない(電解コンデンサーとかが入っていない)カードリーダがそれほど簡単に寿命を迎えると考えにくいです。 

ただ私の場合も今回カードリーダを取り替えたらpcscdエラーは激減しました。 しかし原因は寿命では無いと思います。 なぜならば、購入して1ヶ月以内の新品の別のメーカーのカードリーダでpcscdエラーが多発してたからです(後述しますん)。 

おそらく交換してpcscdエラーが消える方は、メーカーや中のチップが違ったり、差し込む本体USBポート位置が変わったり、経年劣化で接点の油膜の酸化による抵抗値の増大が改善されたり。 そういった理由ではないかなと推測されます。 寿命であれば、常に動かなくなるはずで、しばらくは動いているとか、機嫌の良い日があるとか、そういったファジーな表現形はとらないはずなのです。

私の試したCardリーダーとその特徴

Gemalto ICカードリーダ

 

私が今使ってるのはこれです。 ジェムアルト製 会社はフランスですかね? 結構大きなシェアーを持ってるみたいです。 結論を先に挙げとくと、今私のシステムはこれ使ってます。  pcscdエラーは全くないですが、時々Live視聴が立ち上がらずpcscdカードの再起動が発生してます。ライブ視聴が立ち上がらないのはざっくり頻度で言うと1週間に1回ぐらいでしょうか?

アマゾンでスペックを見ると 480MB/sと高速を唄ってますが、B-CASを挿入した状態で lsusb -tで見ると 12MB/s つまりUSB-1規格で認識されてます。 

    |__ Port 3: Dev 33, If 0, Class=scard, Driver=usbfs, 12M

カードリーダーのスペック詐称かとも思うわけですが、B-CAS側のスピード上限かもしれません。 このカードの特徴はかなり風通しが良く、シャーシがカード全体で包んでいない事。 そしてデーターアクセス時にブリンキングしないです。 カード挿入するとLEDが光りますが、アクセス時にブリンキングしない。 これらの観察から、ブリンキングに掛かる基板上のドライバーへの負担や発熱によるサーマルノイズもpscsdエラーの切っ掛けになっているのではないかと推測します。

FOYOU社製ICカードリーダ

これは少し前に使ってたやつです。 FOYOU社です。 これは短時間だときちんと動きますが、時間経過で高率にpcscdエラーを吐いてWhiteoutします。 ざっくり言うと一晩で2−3回毎日です。

カード自体のデザインはなかなかよく、アクセス時にLEDがブリンキングしてくれるので、カードにちゃんとアクセスしていると言う安心感はあります。 アマゾンでも最新式で高速アクセスと書いてあるように、なんか良さそうです。 lsusb -tで見ると 480Mb/s つまりUSB-2で認識されていて確かに高速。

    |__ Port 3: Dev 50, If 0, Class=scard, Driver=usbfs, 480M
    |__ Port 3: Dev 50, If 1, Class=stor., Driver=usb-storage, 480M

気になるのは2個認識されてますね。 メモリーカードみたいなのを突っ込んだ場合への対応なんでしょうか? あるいはそういうオプションを積んだ別の機器と共通の基板を使っているのかもしれませんね。(https://www.amazon.co.jp/dp/B0CBTW7WP4とか)

でも実際にはあまり良くなかったです。 購入して1ヶ月も経ってないけど良くないので経年劣化では無いです。 カード2個買いましたが、二つとも同じだったので個体差という可能性も低いでしょう。

これは推測になりますが、私が所持しているB-CASにアクセスするには480Mb/sは早すぎて、B-CASカード側が追いつかないという可能性が考えられます。 普通の個人IDカードとかなら良いのかもしれませんが、B-CASで多チャンネル、の復号要請のために集中して高頻度にアクセスすることでB-CAS側がスタックしたのかな。 検証するとすると例えばカードリーダーより上位で減速させると上手く動作するのかもしれません。 たとえば、キーボード接続の専用のポートなどはUSB-1に限定されていたりするPCがあったりしますよね。 あとはわざと低速のUSBハブとかを間に挟むとか、こういったカードでも上手く動作するのかとても興味はありますが、すぐに実験出来る良い環境がないのでやりませんが、興味のある方はどうぞやってみてください。

あとはLEDのブリンキング操作による基板の発熱や情報処理に掛かる負担、ケースが閉鎖型なので放熱に難がある可能性。 シャーシー自体は風を当てれば冷えますが、B-CAS本体が熱を持つと閉鎖型のケースは放熱が上手くいかない可能性があると思います。 特に接点は抵抗が高くなりがちで、そういった部分で熱が発生するとブラウン運動による分子の振動がノイズ振幅を増加させてしまった可能性も考えられます。 

IODATA社 ICカードリーダ

IOデーター社のカードリーダーは国産という安心感がありますが、残念ながらB-CASには対応してなかったです。

NTT社 ICカードリーダ

NTTのかなり古いリーダーですね。 これ確か使えなかったとおもいます。B-CAS対応してなかったと思います。 

SCM Microsystems ICカードリーダ

これはインターネットの情報でよく見かけますね。 これはちゃんとB-CASに対応していました。 こいつは実はカードを上向きに挿したら良いのか下向きに挿したら良いのかとても悩ましいです。 アクセス時にLEDがブリンキングします。 カードの刺さる幅が狭く、B-CASが半分以上露出します。 もしかしたらカード自体の放熱には悪く無いのかもしれません。 こちらはFOYOUほどじゃないですが、時々pcscdエラーを吐いてWhiteoutを起こします。 ざっくりと頻度でいうと3日に1回ほど。

lsusb -tで確認すると

    |__ Port 3: Dev 53, If 0, Class=scard, Driver=usbfs, 12M

つまりこいつも12Mb/sで認識されているようです。 どうやらこの12Mでの接続がfoltiaで利用するB-CASカードリーダーにとっては大事みたいですね。

ほかのカードはどうなのか?

おそらくほかのカードリーダーも使える物があるんだと思いますが、先ずは差し込んでみてlsusb -tでリーダーへの接続スピードを確認して見るのも良いかもしれませんね。 データ転送スピードは早ければ良いって考えますが、このfoltiaに関しては当てはまらないみたいです。 あとアクセス時にLEDがブリンキングしてかっこ良いし解りやすいですが、逆にそれが不必要に発熱やドライバーチップへの負担を来してエラーを頻発してしまうという事なのかもしれません。 普通に確定申告に使うぐらいなら、おかしいなって刺し直せばすみますが、録画サーバーはそうはいきませんので、堅実なやつの方が良いんでしょうかね。

 

アップルスクリプト行く前にこれ書いとかなくちゃいけなかったわ・・。