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 }