1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TS 録画ファイルを B25 デコードする

Last updated at Posted at 2023-02-18

「PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい」
https://qiita.com/nanbuwks/items/640ee4405e1fdd2ca497

にて TV 録画管理を mirakurun-epgstation に移行してから半年。

大体は調子がいいのですが、BCAS カードが時々認識しなくなります。以前 Windows10 + EDCB で動かしていたときも同様に BCAS カードが認識しなくなるときがあるけど、年に 1 回か 2 回だったのに比べると頻度が多い感じ。

結果、視聴できないファイルができてしまいます。
image.png
さて、どうしようかな?

今回は、カードが読めなくなる問題は別に解決するとして、B25 スクランブルがかかったファイルのリカバリーを考えます。

仕組みと作戦

日本の TV 放送は B-CAS カードを使って、B25デコードをします。

STD-B25 規格

「標準規格概要(STD-B25)|一般社団法人 電波産業会」
https://www.arib.or.jp/kikaku/kikaku_hoso/desc/std-b25.html
こちらによると、

ECM
Entitlement Control Message
 デスクランブルを行う際に用いる関連情報のうちの番組情報、鍵情報(スクランブル鍵)及びデスクランブル機能の制御(有効化/無効化)情報。共通情報と呼ばれる。

MULTI2
 省令告示で定められたスクランブルの方式。

とあります。

B-CASカード

写真は B-CAS カードとカードリーダー。

image.png

B-CAS カードは BS CONDITIONAL ACCESS SYSTEMS ということらしいです。デスクランブルに使う鍵が B-CAS カードに入っていて、それを使ってカードリーダーで何かをしているのかな?

mirakurun-epgstation

mirakurun-epgstation においては、Mirakurun でチューナーにアクセスし、epgstation が予約管理、ファイル管理、録画取得などを行います。ここで B25デコードは Mirakurun 中で行っています。

リカバリーを別PCで行う

サーバはカードを管理する pcsc サービスが Mirakurun で専有しています。録画したものは epgstation にあるので、これを B25デコードするには Mirakurun に渡さなければなりません。ちょっとめんどくさそうなので、別 PC に B-CAS カードとカードリーダーをつなげて、該当ファイルのスクランブル解除をすることにします。

環境

  • Ubuntu 22.04 LTS
  • AMD Ryzen 5 5600G

比較環境

  • Windows10

VLC で再生?

再生ができない問題、
デコードできてなくてもVLCなどで再生できればいい。

という話もあるが、Linux上の 3.0.16 Windows 上の3.0.17 両方とも再生できなかった。

image.png

Windows で TVTest

比較のために TVTest をインストール。

https://github.com/tsukumijima/DTV-Built より、TVTest-0.10.0-220711.zip をダウンロード。
この Zip ではTvTestVideoDecoder が同梱されている

解凍して filter-install.jse をダブルクリックしてインストール。管理者権限の起動を特に指定していなくても管理者権限で設定される。

設定で B25 デコード設定を以下のように行う。

image.png

プラグインの TvtPlay を選択すると

image.png

ファイル選択ができるようになる

image.png

視聴できました。

image.png

Ubuntu でデコードする

こちらを導入します。

事前準備

$ sudo apt install cmake libpcsclite1 libpcsclite-dev pkg-config

既に色々インストールしているデスクトップなので、もしかしたら他にも必要なものがあったかも知れません。

レポジトリをクローン

$ git clone https://github.com/tsukumijima/libaribb25.git

$ cd libaribb25/

ビルドします。

$ cmake -B build
$ cd build
$ make

あっさりメイクできました。
インストールします。

$ sudo make install
Consolidate compiler generated dependencies of target aribb1-objlib
[ 22%] Built target aribb1-objlib
[ 27%] Built target aribb1-static
[ 31%] Built target aribb1-shared
Consolidate compiler generated dependencies of target b1
[ 40%] Built target b1
Consolidate compiler generated dependencies of target arib-b1-stream-test
[ 50%] Built target arib-b1-stream-test
Consolidate compiler generated dependencies of target aribb25-objlib
[ 72%] Built target aribb25-objlib
[ 77%] Built target aribb25-static
[ 81%] Built target aribb25-shared
Consolidate compiler generated dependencies of target b25
[ 90%] Built target b25
Consolidate compiler generated dependencies of target arib-b25-stream-test
[100%] Built target arib-b25-stream-test
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/bin/b1
-- Set runtime path of "/usr/local/bin/b1" to ""
-- Installing: /usr/local/bin/arib-b1-stream-test
-- Set runtime path of "/usr/local/bin/arib-b1-stream-test" to ""
-- Installing: /usr/local/lib/libaribb1.a
-- Installing: /usr/local/lib/libaribb1.so.0.2.7
-- Installing: /usr/local/lib/libaribb1.so.0
-- Installing: /usr/local/lib/libaribb1.so
-- Installing: /usr/local/include/aribb1/arib_std_b25.h
-- Installing: /usr/local/include/aribb1/b_cas_card.h
-- Installing: /usr/local/include/aribb1/multi2.h
-- Installing: /usr/local/include/aribb1/ts_section_parser.h
-- Installing: /usr/local/include/aribb1/portable.h
-- Installing: /usr/local/lib/pkgconfig/libaribb1.pc
-- Running: ldconfig
-- Installing: /usr/local/bin/b25
-- Set runtime path of "/usr/local/bin/b25" to ""
-- Installing: /usr/local/bin/arib-b25-stream-test
-- Set runtime path of "/usr/local/bin/arib-b25-stream-test" to ""
-- Installing: /usr/local/lib/libaribb25.a
-- Installing: /usr/local/lib/libaribb25.so.0.2.7
-- Installing: /usr/local/lib/libaribb25.so.0
-- Installing: /usr/local/lib/libaribb25.so
-- Installing: /usr/local/include/aribb25/arib_std_b25.h
-- Installing: /usr/local/include/aribb25/b_cas_card.h
-- Installing: /usr/local/include/aribb25/multi2.h
-- Installing: /usr/local/include/aribb25/ts_section_parser.h
-- Installing: /usr/local/include/aribb25/portable.h
-- Installing: /usr/local/lib/pkgconfig/libaribb25.pc
-- Running: ldconfig


試してみる

$ arib-b25-stream-test < ../../../Desktop/2023年02月12日09時00分00秒-日曜討論 与野党に 問う 子ども・防衛費・多様性.m2ts > test.ts
error - failed on B_CAS_CARD::init() : code=-3

エラーが出ました。

「Linux下PT2的使用 - 数字生活」
https://sites.google.com/site/btvnlue/toolusage/pt2tvrec/linuxpt2dvb
によると、

解决: 重新b25编译,需要libpcsclite
b25执行时需要pcscd - IC卡daemon

ということで、 pcscd をインストールします。

$ sudo apt install pcscd

サービス起動します。インストール時にサービス起動していたかも?


$ sudo /etc/init.d/pcscd start

もしかしたら、 pcscd があれば VLC も動いたのかな? と思いましたが、この後試してみたけれどもやっぱり B25 スクランブルされたファイルは表示できませんでした。

なにはともあれこれで atrib-b25-stream-test は動くようになりました。


$ arib-b25-stream-test < 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m2ts > 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decodeb25.m2ts
processing: finish  [  6.59 MB/sec]
no EMM receiving request

5G程度が 100秒ぐらいでデコードできました。
変換結果、サイズは変わらないのですね。


$ ls -al 2023年02月12日09時00分00秒*
-rw-rw-r-- 1 nanbuwks nanbuwks 4978581220  2月 12 10:00 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m2ts
-rw-rw-r-- 1 nanbuwks nanbuwks 4978581220  2月 18 16:21 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decodeb25.m2ts

VLCで視聴できました。

image.png

これを使って

失敗したのをチェックしたいと考えていましたが、変換も早いしこれだと失敗判定せずに、mp4 などへのトランスコーディングといっしょに常に B25してもいいかも知れません。

一度デコードしたものをもう一度デコードもできるみたいです。


$ arib-b25-stream-test <  2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decodeb25.m2ts > 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decode3.m2ts
processing: finish  [  7.76 MB/sec]
no EMM receiving request
$ md5sum 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性*
796ec353673a5332114bb73f46c7f792  2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m2ts
78d1c422571dff219e7f5b9d6d2a2dcd  2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decode3.m2ts
78d1c422571dff219e7f5b9d6d2a2dcd  2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性decodeb25.m2ts
 


EPGStation 上の B25 デコードされていない録画データの扱い

EPGStation 上から録画ファイルが B25 デコードされているかどうかはメニューや APIからは取得できない感じ? せいぜいサムネイルが空白になっているぐらいかな。
しかしながら B25 スクランブルがかかっている状態だと、EPGStation から H.264 などへ変換ができません。「エンコード」から以下のように指定すると

image.png

数分この画面のままで変化せずにエンコード処理が終了しました。

image.png

生成された mp4 ファイルはサイズが 0 です。


$ ls -alh 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m*
-rw-r--r-- 1 root video 4.7G  2月 12 10:00 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m2ts
-rw-r--r-- 1 root video    0  2月 18 19:37 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.mp4

「元ファイルを削除する」を指定して処理させると

image.png

元ファイルが失われ、サイズ 0 の mp4 ファイルだけが残りました。

$ ls -alh 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.m*
-rw-r--r-- 1 root video 0  2月 18 19:37 2023年02月12日09時00分00秒-日曜討論 与野党に問う 子ども・防衛費・多様性.mp4

B25 デコードミスをうっかり気づかずに元ファイル削除つきエンコード処理したりしてしまうと、録画ファイルが失われてしまいます。

対策は考え中です。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?