| 187 | } |
| 188 | |
| 189 | func WritePATPacket(w io.Writer, tsHeader []byte, pat MpegTsPAT) (err error) { |
| 190 | if pat.TableID != TABLE_PAS { |
| 191 | err = errors.New("PAT table ID error") |
| 192 | return |
| 193 | } |
| 194 | |
| 195 | // 将所有要写的数据(PAT),全部放入到buffer中去. |
| 196 | // buffer 里面已经写好了整个pat表(PointerField+PSI+PAT+CRC) |
| 197 | bw := &bytes.Buffer{} |
| 198 | if err = WritePAT(bw, pat); err != nil { |
| 199 | return |
| 200 | } |
| 201 | |
| 202 | // TODO:如果Pat.Program里面包含的信息很大,大于188? |
| 203 | stuffingBytes := util.GetFillBytes(0xff, TS_PACKET_SIZE-4-bw.Len()) |
| 204 | |
| 205 | // PATPacket = TsHeader + PAT + Stuffing Bytes |
| 206 | var PATPacket []byte |
| 207 | PATPacket = append(PATPacket, tsHeader...) |
| 208 | PATPacket = append(PATPacket, bw.Bytes()...) |
| 209 | PATPacket = append(PATPacket, stuffingBytes...) |
| 210 | |
| 211 | fmt.Println("-------------------------") |
| 212 | fmt.Println("Write PAT :", PATPacket) |
| 213 | fmt.Println("-------------------------") |
| 214 | |
| 215 | // 写PAT负载 |
| 216 | if _, err = w.Write(PATPacket); err != nil { |
| 217 | return |
| 218 | } |
| 219 | |
| 220 | return |
| 221 | } |
| 222 | |
| 223 | func WriteDefaultPATPacket(w io.Writer) (err error) { |
| 224 | _, err = w.Write(DefaultPATPacket) |