Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

recisdb で B25 デコードを行うと、ファイルサイズが arib-b25-stream-test を使用した時と比べて若干減る #42

Closed
tsukumijima opened this issue Jun 29, 2023 · 5 comments · Fixed by #66
Labels
help wanted Extra attention is needed

Comments

@tsukumijima
Copy link
Collaborator

tsukumijima commented Jun 29, 2023

再生そのものは問題ないし番組情報も取れているが、arib-b25-stream-test だとスクランブル前の TS よりもファイルサイズが若干減ってしまう。(10秒間録画した TS で 6MB ほどもの差がある)
本来であれば、スクランブル前の TS とスクランブル後の TS のファイルサイズは完全に一致するはず。
何かしらのデータが抜け落ちているとしか考えられないのだが…。

@tsukumijima
Copy link
Collaborator Author

ちなみに B25 デコードに関しては、recpt1 側で他にも下記 Issue が上がっていて、既知の問題が多いことで知られている。

arib-b25-stream-test が主流なのも、recpt1 --b25 よりも安定動作するとされているため。

もし recpt1 を参考に実装したなら、下記のバグも再現しないかしっかりテストする必要があると思う。

@tsukumijima
Copy link
Collaborator Author

tsukumijima commented Jun 30, 2023

image

別の TS ファイル (30分あって 3GB 程度の TS ファイル) を試しにデコードしてみたところ、ファイルサイズ差が数百B程度で収まっていました。
もしかすると、放送局ごとに減る量に差があるのかもしれません。
なお、x64 環境 (SSD, HDD) と arm64 環境 (NanoPi R6S: eMMC) では減った後のファイルサイズが共通だったため、ディスクやアーキテクチャに依存する問題ではないと考えられます。

@kazuki0824 kazuki0824 added the help wanted Extra attention is needed label Jun 30, 2023
@tsukumijima
Copy link
Collaborator Author

原因がわかりました!

結論から述べると、recisdb decode でのデコード処理が、libaribb25 に含まれる b25 コマンドで -s 1 オプションを使った際同様、TS ストリーム内に含まれる NULL パケットを除去するようになっているからでした。

スクリーンショット 2023-08-10 082856
スクリーンショット 2023-08-10 082928

  • recisdb decode
  • b25 -s 0
  • b25 -s 1

の3パターンで試してみましたが、b25 -s 0 (-s 0 は何も引数を設定しなかった場合のデフォルトでもある) のファイルサイズは、デコード前の TS ファイルと完全に一致しました。
また、recisdb decodeb25 -s 1 でデコードされた TS ファイルはファイルサイズも MD5 ハッシュも同一でした。
このことから、b25recisdb decode で動作に違いはないと思われます。

通常 B25 デコードしたデータは元 TS と同一のファイルサイズになるはずなのでデータが不可逆的に失われていないか心配していましたが、その心配は不要そうです。

@tsukumijima
Copy link
Collaborator Author

image

https://www.marumo.ne.jp/db2008_3.htm

放送波では常に一定の帯域で放送する必要があるので、NULL パケットは確か帯域を完全に埋めきれなかった際にパディングとして挿入するもののはずです。つまり置いといてもサイズの無駄なので、削除しておくに越したことはないでしょう(おそらくは)。

とはいえ、将来的にはオプションとして用意しておいてもいいとは思います(上記事情を鑑みると、その際もデフォルトは NULL パケット削除の挙動の方が良さそう)。

@kazuki0824
Copy link
Owner

kazuki0824 commented Aug 10, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants