mpegtsmux shouldn't write HDMV registration information
File gst/mpegtsmux/tsmux/tsmuxstream.c
line 791:
https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/blob/master/gst/mpegtsmux/tsmux/tsmuxstream.c#L791
/* FIXME : Not sure about this additional_identification_info */
guint8 add_info[] = { 0xFF, 0x1B, 0x44, 0x3F };
descriptor = gst_mpegts_descriptor_from_registration ("HDMV",
add_info, 4);
g_ptr_array_add (pmt_stream->descriptors, descriptor);
Quoting my colleague Devin Heitmueller:
HDMV is specifically the registration descriptor used for Blu-Ray read-only media.
Registration descriptors are intended to inform the downstream decoder that a stream conforms to some specification. Standards bodies such as DVB, ATSC, SCTE, or the Blu-Ray Disc Association may require either the transport stream or specific elementary streams be marked to indicate conformance to their standards, as the standards body may require a more strict interpretation of the original H.264 or ISO 13818 specification.
Determining the specifics of what the Blu-Ray Disc Association requires in order to have a conformant stream would require access to their non-public specifications. As neither ATSC nor DVB require a registration descriptor on their video elementary streams, and we intend to make no claim to conform to the Blu-Ray standard, the descriptor should be removed from transport streams we create.
According to the SMPTE registration authority (https://smpte-ra.org/registered-mpeg-ts-ids), the HDMV registration descriptor:
This RID is used for identification of the stream which conforms to the specification of "System Description Blu-ray Disc Read-Only Format part 3 Audio Visual Basic Specifications"
There are other cases where we will need to insert registration descriptors, such as streams which conform to the SCTE-35 or SMPTE 2038 standards. However neither of those have the registration descriptor specified for the video
I looked into fixing it and thought about maybe enabling it only for m2ts mode. So basically the GstMpegTsMux
class is the one that knows whether we have m2ts-mode
enabled. Then it creates BaseTsMux
, which then creates TsMux
, which then creates a TsMuxStream
, and that's where I need to know that mode. I then looked even further in the code and noticed the ATSC version, which is creating a subclass, overriding create_ts_mux
, which overrides create_new_stream
, which overrides gst_atsc_mux_stream_get_es_descrs
and that's how it works there. So I don't see any other way around this other than creating a whole new subclass to deprecate m2ts-mode
and breaking API.