首页 > 学院 > 开发设计 > 正文

MPEG-2 TS学习(七)tsfilter源码阅读(4)解析PAT

2019-11-06 09:29:48
字体:
来源:转载
供稿:网友

解析PAT

从TS包中读取PAT

	// 从TS包中读取PAT    friend PAT& Operator<<(PAT& pat, Packet& packet)    {        const char* payload;		// 获取TS的载荷        packet.getPayload(payload);		// 强制转换        pat = *reinterPRet_cast<const PAT*> (payload);		// 如果table的id是0x00,那就是PAT        if (pat.table_id == TABLE_ID_PAT)        {            pat.good = true;        }        return pat;    }

从PAT中得到program

program的定义

	// 节目    class Program    {    public:        inline uint16_t getPid()        {            return (pid1 << 8) | pid2;        }        inline uint16_t getProgramNumber()        {            return htons(program_number);        }    private:        uint16_t program_number; // 节目号码        uint8_t pid1 :5;  // PID,用于指明该节目在哪个TS包        uint8_t unused :3;        uint8_t pid2;    };

获取program

	// 返回PAT中的节目    std::vector<PAT::Program> getPrograms() const    {        std::vector<PAT::Program> programs;		// 在PAT的头部和crc之间存放了program的信息        for (const uint8_t* off = data; off < data + getSectionLength()                - sizeof(CRC32) - (data - §ion_length2); off                += sizeof(Program))        {			// 强制转换            Program program = *reinterpret_cast<const Program*> (off);			            programs.push_back(program);        }        return programs;    }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表