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

Function WritePMTPacket

codec/mpegts/mpegts_pmt.go:342–368  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

340// }
341
342func 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}

Callers 1

WritePMTPacketMethod · 0.92

Calls 4

PutBEFunction · 0.92
GetCRC32_2Function · 0.85
WriteMethod · 0.65
WriteToMethod · 0.45

Tested by

no test coverage detected