2016-06-25 8 views
0

DVB TV USBチューナー経由でDVBストリームにアクセスするために、Ubuntu 14.04.4システムにいくつかの(C++)コードを書き始めました。私はlibdvbv5を使用しています。私は地上のフリービューを使って英国にいます。Linux LibdvbV5 EITグラブ - 十分な日数がない

オフエアイベント情報(EIT)を取得しようとしています。サービスID、開始時間、期間、名前、説明などを含むイベントのリストを作成します.3日前までしか取得できないのに対し、他のアプリケーションでは7日前に。

dvbteeやmythtvなどの他のいくつかのプロジェクトを見ていましたが、何が間違っているのか(たくさんのコード)はまだ解決できませんでした。私は日付でフィルターをかけることも、私が見ることもできないことは何もしません。libdvbv5を実行します。

EITプログラムIDは0x12であり、フルスケジュールテーブルIDは0x50(〜0x5f)です。私が言うように、それは間違いなしにすべての情報をつかむが、3日前にのみ、私は確かに利用可能であることを知っている。

私は正しいことをしていると思いますが、間違った場所を探していますか?どんな提案も大歓迎です。自分で答えが見つかり

答えて

1

:TID 0x50を持つ

表は次3+ 0x51というように、最初の3-4日間があります。理論的には0x5fまで上がることができます。利用可能なすべての将来のイベントを取得するには、TID 0x50 + [0x00 ... 0x0f]を使用してプロセスを繰り返すループを繰り返す必要があります。

しかしlibdvbv5ではこれを行うことはできません。descriptors.cにはさまざまなタイプのテーブルのdvb_table_initializers [256]のテーブルがありますが、DVB_TABLE_EIT_SCHEDULE(0x50)のベースのみを初期化します。他のすべてではありません。したがって、他のテーブルは解析されません。私も、私が想定しDVB_TABLE_EIT_SCHEDULE_OTHER、のためにそれをやった

const dvb_table_init_func dvb_table_initializers[256] = { 
[0 ... 255]        = NULL, 
[DVB_TABLE_PAT]       = TABLE_INIT(dvb_table_pat), 
[DVB_TABLE_CAT]       = TABLE_INIT(dvb_table_cat), 
[DVB_TABLE_PMT]       = TABLE_INIT(dvb_table_pmt), 
[DVB_TABLE_NIT]       = TABLE_INIT(dvb_table_nit), 
[DVB_TABLE_SDT]       = TABLE_INIT(dvb_table_sdt), 
[DVB_TABLE_EIT]       = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE]    = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x01]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x02]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x03]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x04]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x05]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x06]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x07]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x08]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x09]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0a]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0b]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0c]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0d]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0e]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE + 0x0f]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER]   = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x01] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x02] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x03] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x04] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x05] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x06] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x07] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x08] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x09] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0a] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0b] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0c] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0d] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0e] = TABLE_INIT(dvb_table_eit), 
[DVB_TABLE_EIT_SCHEDULE_OTHER + 0x0f] = TABLE_INIT(dvb_table_eit), 
[ATSC_TABLE_MGT]      = TABLE_INIT(atsc_table_mgt), 
[ATSC_TABLE_EIT]      = TABLE_INIT(atsc_table_eit), 
[ATSC_TABLE_TVCT]      = TABLE_INIT(atsc_table_vct), 
[ATSC_TABLE_CVCT]      = TABLE_INIT(atsc_table_vct), 
}; 

それを試していないが、正しいです:したがって1は、関連するすべてのTIDを初期化するために、以下に示すようdescriptors.cに変更してlibdvbv5を再構築する必要があります。 DVB_TABLE_EIT_SCHEDULEでも動作するようです。

関連する問題