MPEG-2 TS学习(七)tsfilter源码阅读(4)解析PAT
2017-02-26 21:39
525 查看
解析PAT
从TS包中读取PAT
// 从TS包中读取PATfriend 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;
}
相关文章推荐
- MPEG-2 TS学习(六)tsfilter源码阅读(3)TS的解析流程
- MPEG-2 TS学习(八)tsfilter源码阅读(5)解析PMT
- MPEG-2 TS学习(五)tsfilter源码阅读(2)TS的数据结构
- MPEG-2 TS学习(四)tsfilter源码阅读(1)概述
- MPEG-2 TS学习(七)tsfilter源码阅读(4)读取TS包
- MPEG-2 TS学习(九)tsfilter源码阅读(6)解析音视频数据
- MP4学习(八)ts-mp4源码阅读(6)tkhd box的解析
- MP4学习(六)ts-mp4源码阅读(4)moov box的解析
- MP4学习(五)ts-mp4源码阅读(3)ftyp box的解析
- MP4学习(九)ts-mp4源码阅读(7)mdia box的解析
- MP4学习(十)ts-mp4源码阅读(8)其他box的解析
- MP4学习(七)ts-mp4源码阅读(5)mvhd box的解析
- MP4学习(四)ts-mp4源码阅读(2)MP4的解析流程
- MP4学习(七)ts-mp4源码阅读(5)trak box的解析
- spark SQL源码阅读002——sql.core包核心类——002执行SQL语法2次解析SQL词(analyse)
- 对一个现成的ts进行pat和pmt表的解析,并提取视频保存到文件中
- libdvbpsi源码分析(四)PAT表解析/重建
- spring源码阅读(1)bean解析
- Spring源码阅读-- 解析自定义命名空间的标签
- (十一)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【上】