It is fairly straight forward: the gist of it that each atom contains size (4byte long int) and type (4byte long string) at the beginning of atom. The file starts with an atom. I iterate through atoms intil I hit 'moov' type of atom.
The 'moov' contains a special non standard 'gps ' sub-atom. To get to sub-atom 'gps ' I simply iterate through sub-atoms inside of 'moov' (with offset of 8bytes for header).
The 'gps ' contains simple look up table made up of 8byte rows, that point to the 'free' atoms that contains the actual GPS data.
The first row is version/metadata/notsure, I skip that.
The following rows consist of 4byte address (absolute) and 4byte size (0x1000), these point to the GPS data in the file.
The structure of the GPS data atom (the 'free' atoms mentioned above) is following:
hour,minute,second,year,month,day,active,latitude_b,longitude_b,unknown2,latitude,longitude,speed = struct.unpack_from('<IIIIIIssssfff',data, 48)
For those unfamiliar with python struct:
I = int
s = is string (size 1, in this case)
f = float
I hope that helps
.
Sergei.