Base MPEG-TS sections

## Base MPEG-TS sections Base MPEG-TS sections — Sections for ITU H.222.0 | ISO/IEC 13818-1 |

## Synopsis

    #include <gst/mpegts/mpegts.h>

    #define             GST_MPEGTS_SECTION_TYPE             (section)
    struct              GstMpegTsSection;
    enum                GstMpegTsSectionTableID;
    enum                GstMpegTsSectionType;
    GstMessage *        gst_message_new_mpegts_section      (GstObject *parent,
                                                             GstMpegTsSection *section);
    GstMpegTsSection *  gst_message_parse_mpegts_section    (GstMessage *message);
    GstMpegTsSection *  gst_mpegts_section_new              (guint16 pid,
                                                             guint8 *data,
                                                             gsize data_size);
    #define             gst_mpegts_section_ref              (section)
    #define             gst_mpegts_section_unref            (section)

    struct              GstMpegTsPatProgram;
    GPtrArray *         gst_mpegts_section_get_pat          (GstMpegTsSection *section);

    struct              GstMpegTsPMT;
    struct              GstMpegTsPMTStream;
    enum                GstMpegTsStreamType;
    const GstMpegTsPMT * gst_mpegts_section_get_pmt         (GstMpegTsSection *section);

    GPtrArray *         gst_mpegts_section_get_tsdt         (GstMpegTsSection *section);

    GPtrArray *         gst_mpegts_section_get_cat          (GstMpegTsSection *section);

## Object Hierarchy

      GBoxed
       +----GstMpegTsSection

      GEnum
       +----GstMpegTsSectionTableID

      GEnum
       +----GstMpegTsSectionType

      GEnum
       +----GstMpegTsStreamType

## Description

For more details, refer to the ITU H.222.0 or ISO/IEC 13818-1 specifications and other specifications mentionned in the documentation.

## Details

### GST_MPEGTS_SECTION_TYPE()

    #define GST_MPEGTS_SECTION_TYPE(section) (GST_MPEGTS_SECTION (section)->section_type)

### struct GstMpegTsSection

    struct GstMpegTsSection {
      GstMpegTsSectionType   section_type;

      guint16       pid;
      guint8        table_id;

      guint16       subtable_extension;
      guint8        version_number;

      gboolean      current_next_indicator;

      guint8        section_number;
      guint8        last_section_number;

      guint32       crc;
    };

Mpeg-TS Section Information (SI) (ISO/IEC 13818-1)

GstMpegTsSectionType `section_type`; | The type of section
guint16 `pid`; | The pid on which this section was found
guint8 `table_id`; | The table id of this section
guint16 `subtable_extension`; | This meaning differs per section. See the documentation of the parsed section type for the meaning of this field
guint8 `version_number`; | Version of the section.
gboolean `current_next_indicator`; | Applies to current/next stream or not
guint8 `section_number`; | Number of the section (if multiple)
guint8 `last_section_number`; | Number of the last expected section (if multiple)
guint32 `crc`; | CRC

### enum GstMpegTsSectionTableID

    typedef enum {
      /* ITU H.222.0 / IEC 13818-1 */
      GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION		= 0x00,
      GST_MTS_TABLE_ID_CONDITIONAL_ACCESS		= 0x01,
      GST_MTS_TABLE_ID_TS_PROGRAM_MAP		= 0x02,
      GST_MTS_TABLE_ID_TS_DESCRIPTION		= 0x03,
      GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION = 0x04,
      GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR = 0x05,
      GST_MTS_TABLE_ID_METADATA			= 0x06,
      GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION = 0x07,

      /* 0x08 - 0x39 : ITU H.222.0 | ISO/IEC 13818-1 reserved */

      /* IEC 13818-6 (DSM-CC) */
      GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA = 0x3A,
      GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES			= 0x3B,
      GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES = 0x3C,
      GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS		= 0x3D,
      GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA			= 0x3E,
      GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS		= 0x3F,

      /* Unset */
      GST_MTS_TABLE_ID_UNSET = 0xFF
    } GstMpegTsSectionTableID;

Values for a GstMpegTsSection table_id

These are the registered ITU H.222.0 | ISO/IEC 13818-1 table_id variants.

see also GstMpegTsSectionATSCTableID and GstMpegTsSectionDVBTableID.

`GST_MTS_TABLE_ID_PROGRAM_ASSOCIATION` |
`GST_MTS_TABLE_ID_CONDITIONAL_ACCESS` |
`GST_MTS_TABLE_ID_TS_PROGRAM_MAP` |
`GST_MTS_TABLE_ID_TS_DESCRIPTION` |
`GST_MTS_TABLE_ID_14496_SCENE_DESCRIPTION` |
`GST_MTS_TABLE_ID_14496_OBJET_DESCRIPTOR` |
`GST_MTS_TABLE_ID_METADATA` |
`GST_MTS_TABLE_ID_IPMP_CONTROL_INFORMATION` |
`GST_MTS_TABLE_ID_DSM_CC_MULTIPROTO_ENCAPSULATED_DATA` |
`GST_MTS_TABLE_ID_DSM_CC_U_N_MESSAGES` |
`GST_MTS_TABLE_ID_DSM_CC_DOWNLOAD_DATA_MESSAGES` |
`GST_MTS_TABLE_ID_DSM_CC_STREAM_DESCRIPTORS` |
`GST_MTS_TABLE_ID_DSM_CC_PRIVATE_DATA` |
`GST_MTS_TABLE_ID_DSM_CC_ADDRESSABLE_SECTIONS` |
`GST_MTS_TABLE_ID_UNSET` |

### enum GstMpegTsSectionType

    typedef enum {
      GST_MPEGTS_SECTION_UNKNOWN           = 0,
      GST_MPEGTS_SECTION_PAT,
      GST_MPEGTS_SECTION_PMT,
      GST_MPEGTS_SECTION_CAT,
      GST_MPEGTS_SECTION_TSDT,
      GST_MPEGTS_SECTION_EIT,
      GST_MPEGTS_SECTION_NIT,
      GST_MPEGTS_SECTION_BAT,
      GST_MPEGTS_SECTION_SDT,
      GST_MPEGTS_SECTION_TDT,
      GST_MPEGTS_SECTION_TOT
    } GstMpegTsSectionType;

Types of GstMpegTsSection that the library handles.

`GST_MPEGTS_SECTION_UNKNOWN` | Unknown section type
`GST_MPEGTS_SECTION_PAT` | Program Association Table (ISO/IEC 13818-1)
`GST_MPEGTS_SECTION_PMT` | Program Map Table (ISO/IEC 13818-1)
`GST_MPEGTS_SECTION_CAT` | Conditional Access Table (ISO/IEC 13818-1)
`GST_MPEGTS_SECTION_TSDT` | Transport Stream Description Table (ISO/IEC 13818-1)
`GST_MPEGTS_SECTION_EIT` | Event Information Table (EN 300 468)
`GST_MPEGTS_SECTION_NIT` | Network Information Table (ISO/IEC 13818-1 / EN 300 468)
`GST_MPEGTS_SECTION_BAT` | Bouquet Association Table ((EN 300 468)
`GST_MPEGTS_SECTION_SDT` | Service Description Table (EN 300 468)
`GST_MPEGTS_SECTION_TDT` | Time and Date Table (EN 300 468)
`GST_MPEGTS_SECTION_TOT` | Time Offset Table (EN 300 468)

### gst_message_new_mpegts_section ()

    GstMessage *        gst_message_new_mpegts_section      (GstObject *parent,
                                                             GstMpegTsSection *section);

Creates a new GstMessage for a `GstMpegTsSection`.

`parent` : | The creator of the message. [transfer none]
`section` : | The GstMpegTsSection to put in a message. [transfer none]
Returns : | The new GstMessage to be posted, or `NULL` if the section is not valid. [transfer full]

### gst_message_parse_mpegts_section ()

    GstMpegTsSection *  gst_message_parse_mpegts_section    (GstMessage *message);

Returns the GstMpegTsSection contained in a message.

`message` : | a GstMessage
Returns : | the contained GstMpegTsSection, or `NULL`. [transfer full]

### gst_mpegts_section_new ()

    GstMpegTsSection *  gst_mpegts_section_new              (guint16 pid,
                                                             guint8 *data,
                                                             gsize data_size);

Creates a new GstMpegTsSection from the provided `data`.

Note: Ensuring `data` is big enough to contain the full section is the responsibility of the caller. If it is not big enough, `NULL` will be returned.

Note: it is the responsibility of the caller to ensure `data` does point to the beginning of the section.

`pid` : | the PID to which this section belongs
`data` : | a pointer to the beginning of the section (i.e. the first byte should contain the table_id field). [transfer full]
`data_size` : | size of the `data` argument.
Returns : | A new GstMpegTsSection if the data was valid, else `NULL`. [transfer full]

### gst_mpegts_section_ref()

    #define gst_mpegts_section_ref(section)   ((GstMpegTsSection*) gst_mini_object_ref (GST_MINI_OBJECT_CAST (section)))

### gst_mpegts_section_unref()

    #define gst_mpegts_section_unref(section) (gst_mini_object_unref (GST_MINI_OBJECT_CAST (section)))

### struct GstMpegTsPatProgram

    struct GstMpegTsPatProgram {
      guint16 program_number;
      guint16 network_or_program_map_PID;
    };

A program entry from a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).

guint16 `program_number`; | the program number
guint16 `network_or_program_map_PID`; | the network of program map PID

### gst_mpegts_section_get_pat ()

    GPtrArray *         gst_mpegts_section_get_pat          (GstMpegTsSection *section);

Parses a Program Association Table (ITU H.222.0, ISO/IEC 13818-1).

Returns the array of GstMpegTsPatProgram contained in the section.

Note: The PAT "transport_id" field corresponds to the "subtable_extension" field of the provided `section`.

`section` : | a GstMpegTsSection of type `GST_MPEGTS_SECTION_PAT`
Returns : | The GstMpegTsPatProgram contained in the section, or `NULL` if an error happened. Release with g_ptr_array_unref when done. [transfer container][element-type GstMpegTsPatProgram]

### struct GstMpegTsPMT

    struct GstMpegTsPMT {
      guint16    pcr_pid;

      GPtrArray    *descriptors;
      GPtrArray *streams;
    };

Program Map Table (ISO/IEC 13818-1).

The program_number is contained in the subtable_extension field of the container GstMpegTsSection.

guint16 `pcr_pid`; | PID of the stream containing PCR
GPtrArray *`descriptors`; | array of GstMpegTsDescriptor. [element-type GstMpegTsDescriptor]
GPtrArray *`streams`; | Array of GstMpegTsPMTStream. [element-type GstMpegTsPMTStream]

### struct GstMpegTsPMTStream

    struct GstMpegTsPMTStream {
      guint8      stream_type;
      guint16     pid;

      GPtrArray     *descriptors;
    };

An individual stream definition.

guint8 `stream_type`; | the type of stream. See GstMpegTsStreamType
guint16 `pid`; | the PID of the stream
GPtrArray *`descriptors`; | the descriptors of the stream. [element-type GstMpegTsDescriptor]

### enum GstMpegTsStreamType

    typedef enum {
      GST_MPEG_TS_STREAM_TYPE_RESERVED_00                  = 0x00,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG1                  = 0x01,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG2                  = 0x02,
      GST_MPEG_TS_STREAM_TYPE_AUDIO_MPEG1                  = 0x03,
      GST_MPEG_TS_STREAM_TYPE_AUDIO_MPEG2                  = 0x04,
      GST_MPEG_TS_STREAM_TYPE_PRIVATE_SECTIONS             = 0x05,
      GST_MPEG_TS_STREAM_TYPE_PRIVATE_PES_PACKETS          = 0x06,
      GST_MPEG_TS_STREAM_TYPE_MHEG                         = 0x07,
      GST_MPEG_TS_STREAM_TYPE_DSM_CC                       = 0x08,
      GST_MPEG_TS_STREAM_TYPE_H_222_1                      = 0x09,
      GST_MPEG_TS_STREAM_TYPE_DSMCC_A                      = 0x0a,
      GST_MPEG_TS_STREAM_TYPE_DSMCC_B                      = 0x0b,
      GST_MPEG_TS_STREAM_TYPE_DSMCC_C                      = 0x0c,
      GST_MPEG_TS_STREAM_TYPE_DSMCC_D                      = 0x0d,
      GST_MPEG_TS_STREAM_TYPE_AUXILIARY                    = 0x0e,
      GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_ADTS               = 0x0f,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG4                  = 0x10,
      GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_LATM               = 0x11,
      GST_MPEG_TS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS       = 0x12,
      GST_MPEG_TS_STREAM_TYPE_SL_FLEXMUX_SECTIONS          = 0x13,
      GST_MPEG_TS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD        = 0x14,
      GST_MPEG_TS_STREAM_TYPE_METADATA_PES_PACKETS         = 0x15,
      GST_MPEG_TS_STREAM_TYPE_METADATA_SECTIONS            = 0x16,
      GST_MPEG_TS_STREAM_TYPE_METADATA_DATA_CAROUSEL       = 0x17,
      GST_MPEG_TS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL     = 0x18,
      GST_MPEG_TS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD  = 0x19,
      GST_MPEG_TS_STREAM_TYPE_MPEG2_IPMP                   = 0x1a,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_H264                   = 0x1b,
      GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_CLEAN              = 0x1c,
      GST_MPEG_TS_STREAM_TYPE_MPEG4_TIMED_TEXT             = 0x1d,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_RVC                    = 0x1e,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM = 0x1f,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM = 0x20,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_JP2K                   = 0x21,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW = 0x22,
      GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW  = 0x23,
      /* 0x24 - 0x7e : Rec. ITU-T H.222.0 | ISO/IEC 13818-1 Reserved */
      GST_MPEG_TS_STREAM_TYPE_IPMP_STREAM                  = 0x7f
      /* 0x80 - 0xff : User Private (or defined in other specs) */
    } GstMpegTsStreamType;

Type of mpeg-ts stream type.

These values correspond to the base standard registered types. Depending on the variant of mpeg-ts being used (Bluray, ATSC, DVB, ...), other types might also be used, but will not conflict with these.

Corresponds to table 2-34 of ITU H.222.0 | ISO/IEC 13818-1

`GST_MPEG_TS_STREAM_TYPE_RESERVED_00` | ITU-T | ISO/IEC Reserved
`GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG1` | ISO/IEC 11172-2 Video
`GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG2` | Rec. ITU-T H.262 | ISO/IEC 13818-2 Video or ISO/IEC 11172-2 constrained parameter video stream
`GST_MPEG_TS_STREAM_TYPE_AUDIO_MPEG1` | ISO/IEC 11172-3 Audio
`GST_MPEG_TS_STREAM_TYPE_AUDIO_MPEG2` | ISO/IEC 13818-3 Audio
`GST_MPEG_TS_STREAM_TYPE_PRIVATE_SECTIONS` | private sections
`GST_MPEG_TS_STREAM_TYPE_PRIVATE_PES_PACKETS` | PES packets containing private data
`GST_MPEG_TS_STREAM_TYPE_MHEG` | ISO/IEC 13522 MHEG
`GST_MPEG_TS_STREAM_TYPE_DSM_CC` | Annex A DSM-CC
`GST_MPEG_TS_STREAM_TYPE_H_222_1` | Rec. ITU-T H.222.1
`GST_MPEG_TS_STREAM_TYPE_DSMCC_A` | ISO/IEC 13818-6 type A
`GST_MPEG_TS_STREAM_TYPE_DSMCC_B` | ISO/IEC 13818-6 type B
`GST_MPEG_TS_STREAM_TYPE_DSMCC_C` | ISO/IEC 13818-6 type C
`GST_MPEG_TS_STREAM_TYPE_DSMCC_D` | ISO/IEC 13818-6 type D
`GST_MPEG_TS_STREAM_TYPE_AUXILIARY` | auxiliary streams
`GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_ADTS` | ISO/IEC 13818-7 Audio with ADTS transport syntax
`GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG4` | ISO/IEC 14496-2 Visual
`GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_LATM` | ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3
`GST_MPEG_TS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS` | ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets
`GST_MPEG_TS_STREAM_TYPE_SL_FLEXMUX_SECTIONS` | ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC 14496_sections
`GST_MPEG_TS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD` | ISO/IEC 13818-6 Synchronized Download Protocol
`GST_MPEG_TS_STREAM_TYPE_METADATA_PES_PACKETS` | Metadata carried in PES packets
`GST_MPEG_TS_STREAM_TYPE_METADATA_SECTIONS` | Metadata carried in metadata_sections
`GST_MPEG_TS_STREAM_TYPE_METADATA_DATA_CAROUSEL` | Metadata carried in ISO/IEC 13818-6 Data Carousel
`GST_MPEG_TS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL` | Metadata carried in ISO/IEC 13818-6 Object Carousel
`GST_MPEG_TS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD` | Metadata carried in ISO/IEC 13818-6 Synchronized Download Protocol
`GST_MPEG_TS_STREAM_TYPE_MPEG2_IPMP` | IPMP stream (defined in ISO/IEC 13818-11, MPEG-2 IPMP)
`GST_MPEG_TS_STREAM_TYPE_VIDEO_H264` | AVC video stream conforming to one or more profiles defined in Annex A of Rec. ITU-T H.264 | ISO/IEC 14496-10 or AVC video sub-bitstream of SVC as defined in 2.1.78 or MVC base view sub-bitstream, as defined in 2.1.85, or AVC video sub-bitstream of MVC, as defined in 2.1.88
`GST_MPEG_TS_STREAM_TYPE_AUDIO_AAC_CLEAN` | ISO/IEC 14496-3 Audio, without using any additional transport syntax, such as DST, ALS and SLS
`GST_MPEG_TS_STREAM_TYPE_MPEG4_TIMED_TEXT` | ISO/IEC 14496-17 Text
`GST_MPEG_TS_STREAM_TYPE_VIDEO_RVC` | Auxiliary video stream as defined in ISO/IEC 23002-3
`GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM` | SVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex G of Rec. ITU-T H.264 | ISO/IEC 14496-10
`GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM` | MVC video sub-bitstream of an AVC video stream conforming to one or more profiles defined in Annex H of Rec. ITU-T H.264 | ISO/IEC 14496-10
`GST_MPEG_TS_STREAM_TYPE_VIDEO_JP2K` | Video stream conforming to one or more profiles as defined in Rec. ITU-T T.800 | ISO/IEC 15444-1
`GST_MPEG_TS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW` | Additional view Rec. ITU-T H.262 | ISO/IEC 13818-2 video stream for service-compatible stereoscopic 3D services
`GST_MPEG_TS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW` | Additional view Rec. ITU-T H.264 | ISO/IEC 14496-10 video stream conforming to one or more profiles defined in Annex A for service-compatible stereoscopic 3D services
`GST_MPEG_TS_STREAM_TYPE_IPMP_STREAM` | IPMP stream

### gst_mpegts_section_get_pmt ()

    const GstMpegTsPMT * gst_mpegts_section_get_pmt         (GstMpegTsSection *section);

Returns the GstMpegTsPMT contained in the `section`.

`section` : | a GstMpegTsSection of type `GST_MPEGTS_SECTION_PMT`
Returns : | The GstMpegTsPMT contained in the section, or `NULL` if an error happened.

### gst_mpegts_section_get_tsdt ()

    GPtrArray *         gst_mpegts_section_get_tsdt         (GstMpegTsSection *section);

Returns the array of GstMpegTsDescriptor contained in the section

`section` : | a GstMpegTsSection of type `GST_MPEGTS_SECTION_TSDT`
Returns : | The GstMpegTsDescriptor contained in the section, or `NULL` if an error happened. Release with g_array_unref when done. [transfer container][element-type GstMpegTsDescriptor]

### gst_mpegts_section_get_cat ()

    GPtrArray *         gst_mpegts_section_get_cat          (GstMpegTsSection *section);

Returns the array of GstMpegTsDescriptor contained in the Condtional Access Table.

`section` : | a GstMpegTsSection of type `GST_MPEGTS_SECTION_CAT`
Returns : | The GstMpegTsDescriptor contained in the section, or `NULL` if an error happened. Release with g_array_unref when done. [transfer container][element-type GstMpegTsDescriptor]