您的位置:首页 > 其它

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

2017-02-26 21:39 525 查看

解析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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: