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

解析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;
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值