func WritePMTPacket(w io.Writer, tsHeader []byte, pmt MpegTsPMT) (err error) { if pmt.TableID != TABLE_TSPMS { err = errors.New("PMT table ID error") return } // 将所有要写的数据(PMT),全部放入到buffer中去. // buffer 里面已经写好了整个PMT表(PointerField+PSI+PMT+CRC) bw := &bytes.Buffer{} if err = WritePMT(bw, pmt)
(w io.Writer, videoCodec codec.VideoCodecID, audioCodec codec.AudioCodecID)
| 340 | // } |
| 341 | |
| 342 | func WritePMTPacket(w io.Writer, videoCodec codec.VideoCodecID, audioCodec codec.AudioCodecID) { |
| 343 | w.Write(TSHeader) |
| 344 | crc := make([]byte, 4) |
| 345 | paddingSize := TS_PACKET_SIZE - len(crc) - len(PSI) - len(PMT) - len(TSHeader) - 10 |
| 346 | pmt := net.Buffers{PSI, PMT} |
| 347 | switch videoCodec { |
| 348 | case codec.CodecID_H264: |
| 349 | pmt = append(pmt, h264) |
| 350 | case codec.CodecID_H265: |
| 351 | pmt = append(pmt, h265) |
| 352 | default: |
| 353 | paddingSize += 5 |
| 354 | } |
| 355 | switch audioCodec { |
| 356 | case codec.CodecID_AAC: |
| 357 | pmt = append(pmt, aac) |
| 358 | case codec.CodecID_PCMA: |
| 359 | pmt = append(pmt, pcma) |
| 360 | case codec.CodecID_PCMU: |
| 361 | pmt = append(pmt, pcmu) |
| 362 | default: |
| 363 | paddingSize += 5 |
| 364 | } |
| 365 | util.PutBE(crc, GetCRC32_2(pmt)) |
| 366 | pmt = append(pmt, crc, Stuffing[:paddingSize]) |
| 367 | pmt.WriteTo(w) |
| 368 | } |
no test coverage detected