func (s *MpegTsStream) TestWrite(fileName string) error { if fileName != "" { file, err := os.Create(fileName) if err != nil { panic(err) } defer file.Close() patTsHeader := []byte{0x47, 0x40, 0x00, 0x10} if err := WritePATPacket(file, patTsHeader, *s.pat); err != nil { panic(
(packet *MpegTsPacket, pr io.Reader)
| 495 | //} |
| 496 | |
| 497 | func (s *MpegTsStream) ReadPAT(packet *MpegTsPacket, pr io.Reader) (err error) { |
| 498 | // 首先找到PID==0x00的TS包(PAT) |
| 499 | if PID_PAT == packet.Header.Pid { |
| 500 | if len(packet.Payload) == 188 { |
| 501 | pr = &util.Crc32Reader{R: pr, Crc32: 0xffffffff} |
| 502 | } |
| 503 | // Header + PSI + Paylod |
| 504 | s.PAT, err = ReadPAT(pr) |
| 505 | } |
| 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表 |