video-streaminghttp-live-streamingmpeg-dashhevcfmp4

What HEVC codec tag to use with fMP4, hvc1 or hev1?


How does one choose the correct codec tag to use (hvc1 or hev1) when muxing HEVC video into fragmented MP4 for streaming with MPEG-DASH/HLS?

I reckon there's a slight difference in muxing depending on the tag according to ISO/IEC FDIS 14496-15:

When the sample entry name is 'hvc1', the default and mandatory value of array_completeness is 1 for arrays of all types of parameter sets, and 0 for all other arrays. When the sample entry name is 'hev1', the default value of array_completeness is 0 for all arrays.

Is there anything else apart from this?

Why are there two tags and what is the criteria to choose between the two?

Side note: Apple prefers hvc1 according to their HLS Authoring spec for some reason.


Solution

  • 'hvc1' stores all parameter sets inside the MP4 container below the sample description boxes. 'hev1' stores all parameter sets in band (inside the HEVC stream).

    The parameter sets are essentially mandatory metadata necessary to decode the streams.

    So you have two slightly different ways of muxing HEVC into MP4.

    I'd choose based on the play out and transport scenario.

    Your player or your transport specification may require one or the other.