EITパーサ野を越え山越え

そもそもは、miniDLNAを使ったときに、タイトルにファイル名じゃなくて番組名を表示したいというのが発端。foltiaで録画しているので、DBから番組名を取ってもいいんだけど、foltia経由でない録画ファイルもあるので、その地デジのTS自体に含まれているEITから番組名を引っこ抜いて設定したい。
まずは、少し早送りしたあたりから『現在放映中の番組名』を拾えば簡単だろうと思って、EIT[pf]のpresentを拾おうとしてみたが玉砕。そもそも、PID=0x12、table_id=0x4e、section_number=0x0のデータが含まれていなかったり、ほとんどなかったり。
いろいろ試行錯誤した挙句、下のでだいたい取れるようになった。

  1. ファイルサイズの1/8くらい早送りして、最初のTOTからJST_timeを取得。たいてい、放映開始の30秒前後先に録画開始しているから、番組が始まっているはずのところまで早送りするため。
  2. ファイルの先頭に戻して、PID=0x12, 0x26, 0x27で、table_id=0x4eのEITを取得。そのstart_timeとdurationを見て、最初に取ったJST_timeがその範囲に含まれるなら、このEITの番組名を採用
  3. うまく当てはまらなかったら次を見ていって、最初のTOTまで行ってしまったら失敗

ファイルによっては(局によっては、かも)なかなかこの条件にひっかかるEITが見つからなくて、数秒かかったりする。うー。table_id=0x50-0x5fも使えるかなあ。
前のエントリで書いた、SDTを見てservice_idを考慮する、というのは、さらに面倒で遅くなりそうなのでやめた。「石原知事定例会見」って書いてたら「マクロスF」に脳内変換するから、もういいや…