Пытаюсь написать граббер EPG. Я использую библиотеку libucsi
под linux. Я могу прочитать один TS из таблицы EIT
и расшифровать данные EPG. Но он неполный и я не умею читать все необходимые ТЗ.
Я пытался погуглить и прочитал кое-какую документацию, но безуспешно. Может ли кто-нибудь помочь мне понять и сказать мне, как прочитать все TS для полного EPG? Имеет ли EIT какой-то идентификатор непрерывности или что-то в этом роде?
Спасибо за помощь.
Функция [EDIT] для чтения данных:
void readD(char * dedev, __u8 * data, int size_data ,int pid)
{
int defd;
if ((defd = open(dedev, O_RDWR | O_LARGEFILE )) < 0)
{
perror("opening demux failed");
return 0;
}
#define TS_BUF_SIZE (256 * 1024)
long dmx_buffer_size = TS_BUF_SIZE;
if( ioctl(defd,DMX_SET_BUFFER_SIZE,dmx_buffer_size) < 0)
{
perror("set demux filter failed");
return 0;
}
struct dmx_sct_filter_params sctFilterParams;
memset(&sctFilterParams, 0, sizeof(struct dmx_sct_filter_params));
sctFilterParams.pid=pid;
sctFilterParams.timeout=10000; //10s
sctFilterParams.flags=DMX_IMMEDIATE_START|DMX_CHECK_CRC;
if( ioctl(defd,DMX_SET_FILTER,&sctFilterParams) < 0)
{
perror("set demux filter failed");
return 0;
}
read(defd,data,size_data);
close(defd);
}
и я называю это:
#define TS_PACKET_SIZE 188
__u8 pat_data[TS_PACKET_SIZE*10];
readD(dedev, pat_data, sizeof(pat_data) ,PID_EIT);
SDT
, чтобы получить некоторую информацию об услуге (имя, провайдер, статус скремблирования и т. д.). - person n0p   schedule 24.11.2014