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

Method ReadMP4Data

publisher-mp4.go:18–62  ·  view source on GitHub ↗

Start reading the MP4 file

(source io.ReadSeeker)

Source from the content-addressed store, hash-verified

16
17// Start reading the MP4 file
18func (p *MP4Publisher) ReadMP4Data(source io.ReadSeeker) error {
19 defer p.Stop()
20 p.MovDemuxer = mp4.CreateMp4Demuxer(source)
21 if tracks, err := p.ReadHead(); err != nil {
22 if err == io.EOF {
23 p.Info("Reached end of MP4 file")
24 return nil
25 }
26 p.Error("Error reading MP4 header", zap.Error(err))
27 return err
28 } else {
29 info := p.GetMp4Info()
30 p.Info("MP4 info", zap.Any("info", info))
31 for _, t := range tracks {
32 p.Info("MP4 track", zap.Any("track", t))
33 switch t.Cid {
34 case mp4.MP4_CODEC_H264:
35 p.VideoTrack = track.NewH264(p)
36 case mp4.MP4_CODEC_H265:
37 p.VideoTrack = track.NewH265(p)
38 case mp4.MP4_CODEC_AAC:
39 p.AudioTrack = track.NewAAC(p)
40 case mp4.MP4_CODEC_G711A:
41 p.AudioTrack = track.NewG711(p, true)
42 case mp4.MP4_CODEC_G711U:
43 p.AudioTrack = track.NewG711(p, false)
44 }
45 }
46 for {
47 pkg, err := p.ReadPacket()
48 if err != nil {
49 p.Error("Error reading MP4 packet", zap.Error(err))
50 return err
51 }
52 switch pkg.Cid {
53 case mp4.MP4_CODEC_H264, mp4.MP4_CODEC_H265:
54 p.VideoTrack.WriteAnnexB(uint32(pkg.Pts*90), uint32(pkg.Dts*90), pkg.Data)
55 case mp4.MP4_CODEC_AAC:
56 p.AudioTrack.WriteADTS(uint32(pkg.Pts*90), util.Buffer(pkg.Data))
57 case mp4.MP4_CODEC_G711A, mp4.MP4_CODEC_G711U:
58 p.AudioTrack.WriteRawBytes(uint32(pkg.Pts*90), util.Buffer(pkg.Data))
59 }
60 }
61 }
62}

Callers 1

API_replay_mp4Method · 0.95

Calls 11

NewH264Function · 0.92
NewH265Function · 0.92
NewAACFunction · 0.92
NewG711Function · 0.92
BufferTypeAlias · 0.92
StopMethod · 0.65
InfoMethod · 0.65
ErrorMethod · 0.65
WriteAnnexBMethod · 0.65
WriteADTSMethod · 0.65
WriteRawBytesMethod · 0.65

Tested by

no test coverage detected