| 506 | return |
| 507 | } |
| 508 | func (s *MpegTsStream) ReadPMT(packet *MpegTsPacket, pr io.Reader) (err error) { |
| 509 | // 在读取PAT中已经将所有频道节目信息(PMT_PID)保存了起来 |
| 510 | // 接着读取所有TS包里面的PID,找出PID==PMT_PID的TS包,就是PMT表 |
| 511 | for _, v := range s.PAT.Program { |
| 512 | if v.ProgramMapPID == packet.Header.Pid { |
| 513 | if len(packet.Payload) == 188 { |
| 514 | pr = &util.Crc32Reader{R: pr, Crc32: 0xffffffff} |
| 515 | } |
| 516 | // Header + PSI + Paylod |
| 517 | s.PMT, err = ReadPMT(pr) |
| 518 | } |
| 519 | } |
| 520 | return |
| 521 | } |
| 522 | func (s *MpegTsStream) Feed(ts io.Reader) (err error) { |
| 523 | var reader bytes.Reader |
| 524 | var lr io.LimitedReader |