0
EPG 그래버를 쓰려고합니다. 나는 리눅스에서 libucsi
라이브러리를 사용한다. 나는 EIT
테이블에서 하나의 TS를 읽고 EPG 데이터를 디코딩 할 수있다. 하지만 그것은 불완전하고 필요한 모든 TS를 읽는 법을 모르겠습니다.DVB-S에서 EPG 받기
Google에서 시도했지만 일부 문서는 읽었지만 성공하지 못했습니다. 누군가 나를 이해하는 데 도움이 될 수 있으며, 완전한 TSG를위한 모든 TS를 읽는 방법을 알려줄 수 있습니까? EIT에 연속성 ID가 있습니까?
도움 주셔서 감사합니다.
[편집] 읽기 데이터 기능 :
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);
"불완전"이란 무엇을 의미합니까? EPG에 누락 된 부분은 무엇입니까? 또한 서비스 (이름, 공급자, 스크램블링 상태 등)에 대한 정보를 얻기 위해'SDT '를 걸러 낼 수도 있습니다. – Coconop
@ 코코프 예 5의 경우 이벤트는 거의 없지만 완전한 xmltv 파일을 작성해야합니다 . 내 프로그램을 실행할 때마다 매번 다른 이벤트가 반환됩니다. – Alrick
TS 파일입니까 라이브 소스입니까? 실시간으로 서비스가 추가/제거되므로 다른 결과를 얻는 것이 정상입니다. EIT를 어떻게 필터링하는지 보여줄 수 있습니까? – Coconop