MCPcopy Create free account
hub / github.com/Monibuca/engine / ReadPAT

Function ReadPAT

codec/mpegts/mpegts_pat.go:103–150  ·  view source on GitHub ↗
(r io.Reader)

Source from the content-addressed store, hash-verified

101}
102
103func ReadPAT(r io.Reader) (pat MpegTsPAT, err error) {
104 lr, psi, err := ReadPSI(r, PSI_TYPE_PAT)
105 if err != nil {
106 return
107 }
108
109 pat = psi.Pat
110
111 // N Loop
112 // 一直循环去读4个字节,用lr的原因是确保不会读过头了.
113 for lr.N > 0 {
114
115 // 获取每一个频道的节目信息,保存起来
116 programs := MpegTsPATProgram{}
117
118 programs.ProgramNumber, err = util.ReadByteToUint16(lr, true)
119 if err != nil {
120 return
121 }
122
123 // 如果programNumber为0,则是NetworkPID,否则是ProgramMapPID(13)
124 if programs.ProgramNumber == 0 {
125 programs.NetworkPID, err = util.ReadByteToUint16(lr, true)
126 if err != nil {
127 return
128 }
129
130 programs.NetworkPID = programs.NetworkPID & 0x1fff
131 } else {
132 programs.ProgramMapPID, err = util.ReadByteToUint16(lr, true)
133 if err != nil {
134 return
135 }
136
137 programs.ProgramMapPID = programs.ProgramMapPID & 0x1fff
138 }
139
140 pat.Program = append(pat.Program, programs)
141 }
142 if cr, ok := r.(*util.Crc32Reader); ok {
143 err = cr.ReadCrc32UIntAndCheck()
144 if err != nil {
145 return
146 }
147 }
148
149 return
150}
151
152func WritePAT(w io.Writer, pat MpegTsPAT) (err error) {
153 bw := &bytes.Buffer{}

Callers 2

ReadPATMethod · 0.85
FeedMethod · 0.85

Calls 3

ReadByteToUint16Function · 0.92
ReadPSIFunction · 0.85
ReadCrc32UIntAndCheckMethod · 0.80

Tested by

no test coverage detected