diff --git a/lib/codecs/h264.js b/lib/codecs/h264.js index 47ff1915..fce99156 100644 --- a/lib/codecs/h264.js +++ b/lib/codecs/h264.js @@ -158,6 +158,59 @@ PROFILES_WITH_OPTIONAL_SPS_DATA = { 134: true }; +function getNalUnitType(nalUnitTypeCode){ + switch (nalUnitTypeCode) { + case 0x01: + return 'slice_layer_without_partitioning_rbsp'; + case 0x02: + return 'slice_data_partition_a_layer_rbsp'; + case 0x03: + return 'slice_data_partition_b_layer_rbsp'; + case 0x04: + return 'slice_data_partition_b_layer_rbsp'; + case 0x05: + return 'slice_layer_without_partitioning_rbsp_idr'; + case 0x06: + return 'sei_rbsp'; + case 0x07: + return 'seq_parameter_set_rbsp'; + case 0x08: + return 'pic_parameter_set_rbsp'; + case 0x09: + return 'access_unit_delimiter_rbsp'; + case 0x0a: + return 'end_of_seq_rbsp'; + case 0x0b: + return 'end_of_stream_rbsp'; + case 0x0c: + return 'filler_data_rbsp'; + case 0x0d: + return 'seq_parameter_set_extension_rbsp'; + case 0x0e: + return 'prefix_nal_unit_rbsp'; + case 0x0f: + return 'subset_seq_parameter_set_rbsp'; + case 0x10: + return 'depth_parameter_set_rbsp'; + case 0x11: + return 'reserved'; + case 0x12: + return 'reserved'; + case 0x13: + return 'slice_layer_without_partitioning_rbsp'; + case 0x14: + return 'slice_layer_extension_rbsp'; + case 0x15: + return 'slice_layer_extension_rbsp'; + case 0x16: + return 'reserved'; + case 0x17: + return 'reserved'; + default: + return null; + } +} + /** * Accepts input from a ElementaryStream and produces H.264 NAL unit data * events. @@ -216,26 +269,17 @@ H264Stream = function() { data: data, nalUnitTypeCode: data[0] & 0x1f }; + + event.nalUnitType = getNalUnitType(event.nalUnitTypeCode) switch (event.nalUnitTypeCode) { - case 0x05: - event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr'; - break; case 0x06: - event.nalUnitType = 'sei_rbsp'; event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1)); break; case 0x07: - event.nalUnitType = 'seq_parameter_set_rbsp'; event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1)); event.config = readSequenceParameterSet(event.escapedRBSP); break; - case 0x08: - event.nalUnitType = 'pic_parameter_set_rbsp'; - break; - case 0x09: - event.nalUnitType = 'access_unit_delimiter_rbsp'; - break; default: break; }