首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DVB-S中获取EPG

从DVB-S中获取EPG
EN

Stack Overflow用户
提问于 2014-11-20 08:21:42
回答 1查看 1.5K关注 0票数 0

我在试着写EPG抓取器。我在linux下使用libucsi库。我可以从EIT表读取一个TS并解码EPG数据。但这是不完整的,我不知道如何阅读所有必要的TS。

我试着谷歌它,我读了一些文件,但没有成功。有人能帮助我理解,并告诉我如何阅读所有TS完整的EPG?是连续的还是类似的?

谢谢你的帮助。

编辑用于读取数据的函数:

代码语言:javascript
复制
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);
}

我称之为:

代码语言:javascript
复制
#define TS_PACKET_SIZE 188
__u8 pat_data[TS_PACKET_SIZE*10];
readD(dedev, pat_data, sizeof(pat_data) ,PID_EIT);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-28 09:40:58

我怀疑缓冲区大小很差:您似乎已经复制了一段代码来过滤PAT,并将其调整为EIT :如何确保您的部分将适合您的10 TPs pat_data缓冲区?

您应该检查read的返回代码:您可能需要调整缓冲区的大小,或者执行后续调用才能得到全部内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27034819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档