func mdhdRead(fs *Mp4FileSpec, fp *Mp4FilePro, offset int64) error { var err error fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Offset = offset fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. IsFullBox = false err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } size, _, err := fp.Mp4ReadHeader() if err != nil { log.Fatalln(err.Error()) return err } sizeInt := util.Bytes2Int(size) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Size = sizeInt err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } buf, err := fp.Mp4Read(fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance. MdhdAtomInstance.Size) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. AllBytes = buf err = fp.Mp4Seek(offset+8, 0) if err != nil { log.Fatalln(err.Error()) return err } size, err = fp.Mp4Read(1) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Version = uint8(size[0]) size, err = fp.Mp4Read(3) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Flag = util.Byte32Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. CreationTime = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. ModificationTime = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Timescale = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Duration = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Language = util.Byte22Uint16(size, 0) /* size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MdhdAtomInstance. Quality = util.Bytes2Int(size) */ return nil }
func tkhdRead(fs *Mp4FileSpec, fp *Mp4FilePro, offset int64) error { var err error fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Offset = offset fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.IsFullBox = false err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } size, _, err := fp.Mp4ReadHeader() if err != nil { log.Fatalln(err.Error()) return err } sizeInt := util.Bytes2Int(size) fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Size = sizeInt err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } buf, err := fp.Mp4Read(fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Size) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.AllBytes = buf size, err = fp.Mp4Read(1) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Version = uint8(size[0]) size, err = fp.Mp4Read(3) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Flag = util.Byte32Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.CreationTime = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.ModificationTime = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.TrakID = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Reserved1 = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Duration = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(8) if err != nil { log.Fatalln(err.Error()) return err } //fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Reserved2 = //util.Byte82Uint32(size, 0) size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Layer = util.Byte22Uint16(size, 0) size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.AlternateGroup = util.Bytes2Int(size) size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Volume = util.Byte22Uint16(size, 0) size, err = fp.Mp4Read(2) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.Reserved3 = util.Byte22Uint16(size, 0) size, err = fp.Mp4Read(36) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.MatrixStructure = size size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.TrackWidth = util.Byte42Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].TkhdAtomInstance.TrackHeight = util.Byte42Uint32(size, 0) return nil }
func stsdRead(fs *Mp4FileSpec, fp *Mp4FilePro, offset int64) error { var err error fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.Offset = offset fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.IsFullBox = false err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } size, _, err := fp.Mp4ReadHeader() if err != nil { log.Fatalln(err.Error()) return err } sizeInt := util.Bytes2Int(size) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.Size = sizeInt err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } buf, err := fp.Mp4Read(fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.Size) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.AllBytes = buf err = fp.Mp4Seek(offset+8, 0) if err != nil { log.Fatalln(err.Error()) return err } size, err = fp.Mp4Read(1) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.Version = uint8(size[0]) size, err = fp.Mp4Read(3) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.Flag = util.Byte32Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StsdAtomInstance.EntriesNum = util.Byte42Uint32(size, 0) return nil }
func stscRead(fs *Mp4FileSpec, fp *Mp4FilePro, offset int64) error { var err error fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Offset = offset fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.IsFullBox = false err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } size, _, err := fp.Mp4ReadHeader() if err != nil { log.Fatalln(err.Error()) return err } sizeInt := util.Bytes2Int(size) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Size = sizeInt err = fp.Mp4Seek(offset, 0) if err != nil { log.Fatalln(err.Error()) return err } buf, err := fp.Mp4Read(fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Size) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.AllBytes = buf err = fp.Mp4Seek(offset+8, 0) if err != nil { log.Fatalln(err.Error()) return err } size, err = fp.Mp4Read(1) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Version = uint8(size[0]) size, err = fp.Mp4Read(3) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Flag = util.Byte32Uint32(size, 0) size, err = fp.Mp4Read(4) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.EntriesNum = util.Byte42Uint32(size, 0) //log.Println(fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. //StblAtomInstance.StscAtomAtomInstance.EntriesNum) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable = make([]Sample2Chunk, fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.EntriesNum) var i uint32 for i = 0; i < fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.EntriesNum; i++ { buf, err := fp.Mp4Read(12) if err != nil { log.Fatalln(err.Error()) return err } fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable[i] = append(fs.MoovAtomInstance. TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance.StblAtomInstance. StscAtomInstance.Sample2ChunkTable[i], util.Byte42Uint32(buf[0:4], 0)) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable[i] = append(fs.MoovAtomInstance. TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance.StblAtomInstance. StscAtomInstance.Sample2ChunkTable[i], util.Byte42Uint32(buf[4:8], 0)) fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable[i] = append(fs.MoovAtomInstance. TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance.StblAtomInstance. StscAtomInstance.Sample2ChunkTable[i], util.Byte42Uint32(buf[8:12], 0)) /* fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable = append(fs.MoovAtomInstance. TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance.StblAtomInstance. StscAtomAtomInstance.Sample2ChunkTable, fs.MoovAtomInstance.TrakAtomInstance[trakNum].MdiaAtomInstance.MinfAtomInstance. StblAtomInstance.StscAtomInstance.Sample2ChunkTable[i]) */ } return nil }