// 从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; }
新闻热点
疑难解答