Overwatch Highlights

Introduction

A highlight video file generated by Overwatch contains a structure with useful information about the recorded highlight. Anything I have discovered about this structure yet is documented in this file.

Location

The structure is located in the last 315 byte of the MP4 video file. It consists of multiple Base64 encoded strings. This documents only deals with one of those: It start at byte 95 of the previously described buffer and has a length of 128 bytes. The charset encoding the string is UTF-16 with little-endian byte order (StandardCharsets.UTF_16LE in Java). Therefore the string consists of only 64 characters, but has a length of 128 bytes. Before applying the structure described here to it, it obviously has to be decoded using Base64.

Structure

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000 Map             Hero            
00000010 Skin                            
00000020                 Type              

Note

Every short (values consisting of 2 bytes) is in little-endian byte order. You could of course also interpret them as big-endian (as long as you always interpret them as big-endian), but as the values are always lower in little-endian byte order, I’ve chosen little-endian.

Warning

There are many bytes of which I haven’t discovered a use yet. Some of these seem to be constant and some change sometimes.

Values

Possible values for fields shown in the table above are defined in the following Java enumerations:

Field Java enumeration
Map de.jcm.overwatch.highlight.Map
Hero de.jcm.overwatch.highlight.Hero
Type de.jcm.overwatch.highlight.HighlightType
Skin Values for skins are not discovered yet.

Warning

Since the whole program is still WIP some enumerations are still incomplete and/or missing. Those have an id of -1 in Java enumerations.

Note

On first sight it looked like the hero IDs would be ascending by the time the heros where added. But that doesn’t seem to be true for every hero: e.g. Tracer is first hero according to Overwatch Wiki, but has ID 2. Also Orisa(318) was added before Doomfist(303), but has higher ID.

Tip

The Java enumerations contain more information than just the id. If you are searching only for the id (short/byte value in structure) simply look at the first constructor argument.

Note

I’m working on completing them, but I sadly don’t have enough different highlights. Threfore I’d be very thankful for people sending me the last bytes of their highlights together with a short description of it. contributing