1 /* 2 * MPEG-2 transport stream defines 3 * Copyright (c) 2003 Fabrice Bellard 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * FFmpeg is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22 #ifndef AVFORMAT_MPEGTS_H 23 #define AVFORMAT_MPEGTS_H 24 25 #include "avformat.h" 26 27 #define TS_FEC_PACKET_SIZE 204 28 #define TS_DVHS_PACKET_SIZE 192 29 #define TS_PACKET_SIZE 188 30 #define TS_MAX_PACKET_SIZE 204 31 32 #define NB_PID_MAX 8192 33 #define USUAL_SECTION_SIZE 1024 /* except EIT which is limited to 4096 */ 34 #define MAX_SECTION_SIZE 4096 35 36 /* pids */ 37 #define PAT_PID 0x0000 /* Program Association Table */ 38 #define CAT_PID 0x0001 /* Conditional Access Table */ 39 #define TSDT_PID 0x0002 /* Transport Stream Description Table */ 40 #define IPMP_PID 0x0003 41 /* PID from 0x0004 to 0x000F are reserved */ 42 #define NIT_PID 0x0010 /* Network Information Table */ 43 #define SDT_PID 0x0011 /* Service Description Table */ 44 #define BAT_PID 0x0011 /* Bouquet Association Table */ 45 #define EIT_PID 0x0012 /* Event Information Table */ 46 #define RST_PID 0x0013 /* Running Status Table */ 47 #define TDT_PID 0x0014 /* Time and Date Table */ 48 #define TOT_PID 0x0014 49 #define NET_SYNC_PID 0x0015 50 #define RNT_PID 0x0016 /* RAR Notification Table */ 51 /* PID from 0x0017 to 0x001B are reserved for future use */ 52 /* PID value 0x001C allocated to link-local inband signalling shall not be 53 * used on any broadcast signals. It shall only be used between devices in a 54 * controlled environment. */ 55 #define LINK_LOCAL_PID 0x001C 56 #define MEASUREMENT_PID 0x001D 57 #define DIT_PID 0x001E /* Discontinuity Information Table */ 58 #define SIT_PID 0x001F /* Selection Information Table */ 59 /* PID from 0x0020 to 0x1FFA may be assigned as needed to PMT, elementary 60 * streams and other data tables */ 61 #define FIRST_OTHER_PID 0x0020 62 #define LAST_OTHER_PID 0x1FFA 63 /* PID 0x1FFB is used by DigiCipher 2/ATSC MGT metadata */ 64 /* PID from 0x1FFC to 0x1FFE may be assigned as needed to PMT, elementary 65 * streams and other data tables */ 66 #define NULL_PID 0x1FFF /* Null packet (used for fixed bandwidth padding) */ 67 68 /* m2ts pids */ 69 #define M2TS_PMT_PID 0x0100 70 #define M2TS_PCR_PID 0x1001 71 #define M2TS_VIDEO_PID 0x1011 72 #define M2TS_AUDIO_START_PID 0x1100 73 #define M2TS_PGSSUB_START_PID 0x1200 74 #define M2TS_TEXTSUB_PID 0x1800 75 #define M2TS_SECONDARY_AUDIO_START_PID 0x1A00 76 #define M2TS_SECONDARY_VIDEO_START_PID 0x1B00 77 78 /* table ids */ 79 #define PAT_TID 0x00 /* Program Association section */ 80 #define CAT_TID 0x01 /* Conditional Access section */ 81 #define PMT_TID 0x02 /* Program Map section */ 82 #define TSDT_TID 0x03 /* Transport Stream Description section */ 83 /* TID from 0x04 to 0x3F are reserved */ 84 #define M4OD_TID 0x05 85 #define NIT_TID 0x40 /* Network Information section - actual network */ 86 #define ONIT_TID 0x41 /* Network Information section - other network */ 87 #define SDT_TID 0x42 /* Service Description section - actual TS */ 88 /* TID from 0x43 to 0x45 are reserved for future use */ 89 #define OSDT_TID 0x46 /* Service Descrition section - other TS */ 90 /* TID from 0x47 to 0x49 are reserved for future use */ 91 #define BAT_TID 0x4A /* Bouquet Association section */ 92 #define UNT_TID 0x4B /* Update Notification Table section */ 93 #define DFI_TID 0x4C /* Downloadable Font Info section */ 94 /* TID 0x4D is reserved for future use */ 95 #define EIT_TID 0x4E /* Event Information section - actual TS */ 96 #define OEIT_TID 0x4F /* Event Information section - other TS */ 97 #define EITS_START_TID 0x50 /* Event Information section schedule - actual TS */ 98 #define EITS_END_TID 0x5F /* Event Information section schedule - actual TS */ 99 #define OEITS_START_TID 0x60 /* Event Information section schedule - other TS */ 100 #define OEITS_END_TID 0x6F /* Event Information section schedule - other TS */ 101 #define TDT_TID 0x70 /* Time Date section */ 102 #define RST_TID 0x71 /* Running Status section */ 103 #define ST_TID 0x72 /* Stuffing section */ 104 #define TOT_TID 0x73 /* Time Offset section */ 105 #define AIT_TID 0x74 /* Application Inforamtion section */ 106 #define CT_TID 0x75 /* Container section */ 107 #define RCT_TID 0x76 /* Related Content section */ 108 #define CIT_TID 0x77 /* Content Identifier section */ 109 #define MPE_FEC_TID 0x78 /* MPE-FEC section */ 110 #define RPNT_TID 0x79 /* Resolution Provider Notification section */ 111 #define MPE_IFEC_TID 0x7A /* MPE-IFEC section */ 112 #define PROTMT_TID 0x7B /* Protection Message section */ 113 /* TID from 0x7C to 0x7D are reserved for future use */ 114 #define DIT_TID 0x7E /* Discontinuity Information section */ 115 #define SIT_TID 0x7F /* Selection Information section */ 116 /* TID from 0x80 to 0xFE are user defined */ 117 /* TID 0xFF is reserved */ 118 119 #define STREAM_TYPE_VIDEO_MPEG1 0x01 120 #define STREAM_TYPE_VIDEO_MPEG2 0x02 121 #define STREAM_TYPE_AUDIO_MPEG1 0x03 122 #define STREAM_TYPE_AUDIO_MPEG2 0x04 123 #define STREAM_TYPE_PRIVATE_SECTION 0x05 124 #define STREAM_TYPE_PRIVATE_DATA 0x06 125 #define STREAM_TYPE_AUDIO_AAC 0x0f 126 #define STREAM_TYPE_AUDIO_AAC_LATM 0x11 127 #define STREAM_TYPE_VIDEO_MPEG4 0x10 128 #define STREAM_TYPE_METADATA 0x15 129 #define STREAM_TYPE_VIDEO_H264 0x1b 130 #define STREAM_TYPE_VIDEO_HEVC 0x24 131 #define STREAM_TYPE_VIDEO_CAVS 0x42 132 #define STREAM_TYPE_VIDEO_VC1 0xea 133 #define STREAM_TYPE_VIDEO_DIRAC 0xd1 134 135 #define STREAM_TYPE_AUDIO_AC3 0x81 136 #define STREAM_TYPE_AUDIO_DTS 0x82 137 #define STREAM_TYPE_AUDIO_TRUEHD 0x83 138 #define STREAM_TYPE_AUDIO_EAC3 0x87 139 140 /* ISO/IEC 13818-1 Table 2-22 */ 141 #define STREAM_ID_PRIVATE_STREAM_1 0xbd 142 #define STREAM_ID_AUDIO_STREAM_0 0xc0 143 #define STREAM_ID_VIDEO_STREAM_0 0xe0 144 #define STREAM_ID_METADATA_STREAM 0xfc 145 #define STREAM_ID_EXTENDED_STREAM_ID 0xfd 146 147 /* ISO/IEC 13818-1 Table 2-45 */ 148 #define VIDEO_STREAM_DESCRIPTOR 0x02 149 #define REGISTRATION_DESCRIPTOR 0x05 150 #define ISO_639_LANGUAGE_DESCRIPTOR 0x0a 151 #define IOD_DESCRIPTOR 0x1d 152 #define SL_DESCRIPTOR 0x1e 153 #define FMC_DESCRIPTOR 0x1f 154 #define METADATA_DESCRIPTOR 0x26 155 #define METADATA_STD_DESCRIPTOR 0x27 156 157 typedef struct MpegTSContext MpegTSContext; 158 159 MpegTSContext *avpriv_mpegts_parse_open(AVFormatContext *s); 160 int avpriv_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt, 161 const uint8_t *buf, int len); 162 void avpriv_mpegts_parse_close(MpegTSContext *ts); 163 164 typedef struct SLConfigDescr { 165 int use_au_start; 166 int use_au_end; 167 int use_rand_acc_pt; 168 int use_padding; 169 int use_timestamps; 170 int use_idle; 171 int timestamp_res; 172 int timestamp_len; 173 int ocr_len; 174 int au_len; 175 int inst_bitrate_len; 176 int degr_prior_len; 177 int au_seq_num_len; 178 int packet_seq_num_len; 179 } SLConfigDescr; 180 181 typedef struct Mp4Descr { 182 int es_id; 183 int dec_config_descr_len; 184 uint8_t *dec_config_descr; 185 SLConfigDescr sl; 186 } Mp4Descr; 187 188 /* 189 * ETSI 300 468 descriptor 0x6A(AC-3) 190 * Refer to: ETSI EN 300 468 V1.11.1 (2010-04) (SI in DVB systems) 191 */ 192 typedef struct DVBAC3Descriptor { 193 uint8_t component_type_flag; 194 uint8_t bsid_flag; 195 uint8_t mainid_flag; 196 uint8_t asvc_flag; 197 uint8_t reserved_flags; 198 uint8_t component_type; 199 uint8_t bsid; 200 uint8_t mainid; 201 uint8_t asvc; 202 } DVBAC3Descriptor; 203 204 /** 205 * Parse an MPEG-2 descriptor 206 * @param[in] fc Format context (used for logging only) 207 * @param st Stream 208 * @param stream_type STREAM_TYPE_xxx 209 * @param pp Descriptor buffer pointer 210 * @param desc_list_end End of buffer 211 * @return <0 to stop processing 212 */ 213 int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type, 214 const uint8_t **pp, const uint8_t *desc_list_end, 215 Mp4Descr *mp4_descr, int mp4_descr_count, int pid, 216 MpegTSContext *ts); 217 218 /** 219 * Check presence of H264 startcode 220 * @return <0 to stop processing 221 */ 222 int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt); 223 224 #endif /* AVFORMAT_MPEGTS_H */ 225