l3tnun / EPGStation

Mirakurun を使用した録画管理ソフト
https://twitter.com/l3tnun
MIT License
566 stars 151 forks source link

延長情報の入った一部の番組が表示されない #681

Closed nanamaki closed 6 months ago

nanamaki commented 6 months ago

環境

Issue

mirakcで確実に番組情報がとれているもののうち、延長情報の入った一部の番組が表示されないことがありました。 event-31233.json 添付ファイルは、mirakcのAPI(GET /api/programs)から取得した番組情報のうち、EPGStationの番組表に取り込めなかった番組のうちの1つのJSONデータになります。 直前まで利用していたMirakurunでも、.relatedItems[] .networkId の要素が無いくらいで殆ど同じものでしたので、恐らくMirakurunを利用する環境でもこの番組は取り込めていないと思われます。

.relatedItems[] 要素があって .relatedItems[].type = 'relay' なイベントだけの番組はメインの番組情報として取り込まれないことはソースから何となく読み取れたのですが、どのようなロジックにすれば正しく番組を取り込めるのかいまいち綺麗なイメージが分からなかったので、取り急ぎ事象だけご報告します。

l3tnun commented 6 months ago

報告ありがとうございます。 BS/CS環境を手放してしまい検証できないのですが、 mirakc と Mirakurun で relatedItems の挙動が違うんですかね...

525 の問題があり、https://github.com/Chinachu/Mirakurun/issues/103#issuecomment-902809844 にて

根本的には shared になっているイベントグループの予約が重複しないように、録画ソフト側で対応が必要です。

とあり、当時挙動を確認した限りでは Mirakurun においては以下の判定で問題ありませんでしたが、 mirakc では挙動が異なるのかもしれません。 https://github.com/l3tnun/EPGStation/blob/fd8f3c87d6d49ada9066e2acbeb65c26d27ec0d2/src/model/epgUpdater/EPGUpdateManageModel.ts#L125-L153

l3tnun commented 6 months ago

fix-681 ブランチにてご報告していただいた json の状況の場合おいて、メインの番組情報として取り扱うようにする修正を入れてみました。 私の環境で確認ができないため、しばらく動作確認していただけると助かります。 問題が解決していれば master へ反映したいと思います。

nanamaki commented 6 months ago

該当ブランチでビルドして起動してみました。 少なくとも本日5/13 12:00までの番組情報で、報告した番組は番組表に乗り、それ以外に入れ替え前後で減ったor増えた番組情報もない感じです。

5/15 にBS日テレで同じように番組表に乗らなかった番組があり、これが重複なく録画できるか、ほかの録画にも重複がないか、様子を見てみたいと思います。

l3tnun commented 6 months ago

早急な確認ありがとうございます。

5/15 にBS日テレで同じように番組表に乗らなかった番組があり、これが重複なく録画できるか、ほかの録画にも重複がないか、様子を見てみたいと思います。

お手数ですがよろしくお願いします。

nanamaki commented 6 months ago

5/15 にBS日テレで同じように番組表に乗らなかった番組があり、これが重複なく録画できるか、ほかの録画にも重複がないか、様子を見てみたいと思います。

18:00 からの野球中継でしたが、正常録画できました。 他の入れ替え前では番組表に乗らなかったものも全て乗ってます。 この期間に地上波16/BS2/CS1番組を録画しましたが、重複なく正常録画できました。 恐らく問題ないと思います。

よろしくお願いします。

l3tnun commented 6 months ago

確認ありがとうございました。助かりました。 問題なさそうですので、マージして v2.9.1 としてリリースいたします。

l3tnun commented 6 months ago

リリース完了したので閉じます。

nanamaki commented 6 months ago

ご対応ありがとうございました。

masnagam commented 6 months ago

mirakcの実装に誤りがあれば修正しようと思い,mirakc/Mirakurun/EPGStationの実装を確認しました.

実際に現象を確認したわけではないので,確証はありませんが,恐らくMirakurunは同一event_idのデータをマージするためだと思います. https://github.com/Chinachu/Mirakurun/blob/31b22cc83cb2166c117a2fba8f2499d467750dc8/src/Mirakurun/EPG.ts#L219

ここで既にデータがあれば,既存データを更新しているのが分かります.mirakcではこのような情報のマージは行っていません.単純に上書きしています. https://github.com/mirakc/mirakc/blob/5d929c2f6ba85950bdfd6277f565e0ef09316a7a/mirakc-core/src/epg/mod.rs#L1141

また,Mirakurunは同一network_idのEPG情報をまとめて集めます.そのため,BSなどではEPG情報の収集に使用したTSストリームのサービスに依存し,他サービスのEPG情報の一部が欠落します(ExtendedEventDescriptorなど).mirakcはサービスごとにEPG情報を集めるため,このような欠落は生じませんが,EPG情報収集にかかる時間がMirakurunよりも長くなります.

私は放送局が使用している運用規定の詳細を把握していないため,どのような実装が正しいのか判断する材料を持っていません.もしこのように実装するのが正しいという資料や指摘があるなら,それに従いmirakcを修正します.

l3tnun commented 6 months ago

@masnagam わざわざ調査ありがとうございます。EPGStation側の実装が雑である事が原因ですので、mirakcはそのままで問題ないかと思います。