@@ -162,6 +162,7 @@ enum SrsTsStream
162
162
// ISO/IEC 14496-2 Visual
163
163
SrsTsStreamVideoMpeg4 = 0x10 ,
164
164
// ISO/IEC 14496-3 Audio with the LATM transport syntax as defined in ISO/IEC 14496-3 / AMD 1
165
+ SrsTsStreamAudioMpeg4 = 0x11 ,
165
166
// ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in PES packets
166
167
// ISO/IEC 14496-1 SL-packetized stream or FlexMux stream carried in ISO/IEC14496_sections.
167
168
// ISO/IEC 13818-6 Synchronized Download Protocol
@@ -188,19 +189,83 @@ struct SrsTsChannel
188
189
virtual ~SrsTsChannel ();
189
190
};
190
191
192
+ /* *
193
+ * the stream_id of PES payload of ts packet.
194
+ * Table 2-18 – Stream_id assignments, hls-mpeg-ts-iso13818-1.pdf, page 52.
195
+ */
196
+ enum SrsTsPESStreamId
197
+ {
198
+ // program_stream_map
199
+ SrsTsPESStreamIdProgramStreamMap = 0xbc , // 0b10111100
200
+ // private_stream_1
201
+ SrsTsPESStreamIdPrivateStream1 = 0xbd , // 0b10111101
202
+ // padding_stream
203
+ SrsTsPESStreamIdPaddingStream = 0xbe , // 0b10111110
204
+ // private_stream_2
205
+ SrsTsPESStreamIdPrivateStream2 = 0xbf , // 0b10111111
206
+
207
+ // 110x xxxx
208
+ // ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7 or ISO/IEC
209
+ // 14496-3 audio stream number x xxxx
210
+ // ((sid >> 5) & 0x07) == SrsTsPESStreamIdAudio
211
+ SrsTsPESStreamIdAudio = 0x06 , // 0b110
212
+
213
+ // 1110 xxxx
214
+ // ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC
215
+ // 14496-2 video stream number xxxx
216
+ // ((stream_id >> 4) & 0x0f) == SrsTsPESStreamIdVideo
217
+ SrsTsPESStreamIdVideo = 0x0e , // 0b1110
218
+
219
+ // ECM_stream
220
+ SrsTsPESStreamIdEcmStream = 0xf0 , // 0b11110000
221
+ // EMM_stream
222
+ SrsTsPESStreamIdEmmStream = 0xf1 , // 0b11110001
223
+ // DSMCC_stream
224
+ SrsTsPESStreamIdDsmccStream = 0xf2 , // 0b11110010
225
+ // 13522_stream
226
+ SrsTsPESStreamId13522Stream = 0xf3 , // 0b11110011
227
+ // H_222_1_type_A
228
+ SrsTsPESStreamIdH2221TypeA = 0xf4 , // 0b11110100
229
+ // H_222_1_type_B
230
+ SrsTsPESStreamIdH2221TypeB = 0xf5 , // 0b11110101
231
+ // H_222_1_type_C
232
+ SrsTsPESStreamIdH2221TypeC = 0xf6 , // 0b11110110
233
+ // H_222_1_type_D
234
+ SrsTsPESStreamIdH2221TypeD = 0xf7 , // 0b11110111
235
+ // H_222_1_type_E
236
+ SrsTsPESStreamIdH2221TypeE = 0xf8 , // 0b11111000
237
+ // ancillary_stream
238
+ SrsTsPESStreamIdAncillaryStream = 0xf9 , // 0b11111001
239
+ // SL_packetized_stream
240
+ SrsTsPESStreamIdSlPacketizedStream = 0xfa , // 0b11111010
241
+ // FlexMux_stream
242
+ SrsTsPESStreamIdFlexMuxStream = 0xfb , // 0b11111011
243
+ // reserved data stream
244
+ // 1111 1100 … 1111 1110
245
+ // program_stream_directory
246
+ SrsTsPESStreamIdProgramStreamDirectory = 0xff , // 0b11111111
247
+ };
248
+
191
249
/* *
192
250
* the media audio/video message parsed from PES packet.
193
251
*/
194
252
class SrsTsMessage
195
253
{
196
- private :
254
+ public :
197
255
SrsTsChannel* channel;
198
256
SrsTsPacket* packet;
199
257
public:
258
+ // the timestamp in 90khz
200
259
int64_t dts;
201
260
int64_t pts;
261
+ // the id of pes stream to indicates the payload codec.
262
+ // @remark use is_audio() and is_video() to check it, and stream_number() to finger it out.
263
+ SrsTsPESStreamId sid;
264
+ // the size of payload, 0 indicates the length() of payload.
202
265
u_int16_t PES_packet_length;
266
+ // the chunk id.
203
267
u_int8_t continuity_counter;
268
+ // the payload bytes.
204
269
SrsSimpleBuffer* payload;
205
270
public:
206
271
SrsTsMessage (SrsTsChannel* c, SrsTsPacket* p);
@@ -223,6 +288,20 @@ class SrsTsMessage
223
288
* whether the message is fresh.
224
289
*/
225
290
virtual bool fresh ();
291
+ public:
292
+ /* *
293
+ * whether the sid indicates the elementary stream audio.
294
+ */
295
+ virtual bool is_audio ();
296
+ /* *
297
+ * whether the sid indicates the elementary stream video.
298
+ */
299
+ virtual bool is_video ();
300
+ /* *
301
+ * when audio or video, get the stream number which specifies the format of stream.
302
+ * @return the stream number for audio/video; otherwise, -1.
303
+ */
304
+ virtual int stream_number ();
226
305
};
227
306
228
307
/* *
@@ -722,63 +801,6 @@ class SrsTsPayload
722
801
virtual int decode (SrsStream* stream, SrsTsMessage** ppmsg) = 0;
723
802
};
724
803
725
- /* *
726
- * the stream_id of PES payload of ts packet.
727
- * Table 2-18 – Stream_id assignments, hls-mpeg-ts-iso13818-1.pdf, page 52.
728
- */
729
- enum SrsTsPESStreamId
730
- {
731
- // program_stream_map
732
- SrsTsPESStreamIdProgramStreamMap = 0xbc , // 0b10111100
733
- // private_stream_1
734
- SrsTsPESStreamIdPrivateStream1 = 0xbd , // 0b10111101
735
- // padding_stream
736
- SrsTsPESStreamIdPaddingStream = 0xbe , // 0b10111110
737
- // private_stream_2
738
- SrsTsPESStreamIdPrivateStream2 = 0xbf , // 0b10111111
739
-
740
- // 110x xxxx
741
- // ISO/IEC 13818-3 or ISO/IEC 11172-3 or ISO/IEC 13818-7 or ISO/IEC
742
- // 14496-3 audio stream number x xxxx
743
- // (stream_id>>5)&0x07 == SrsTsPESStreamIdAudio
744
- SrsTsPESStreamIdAudio = 0x06 , // 0b110
745
-
746
- // 1110 xxxx
747
- // ITU-T Rec. H.262 | ISO/IEC 13818-2 or ISO/IEC 11172-2 or ISO/IEC
748
- // 14496-2 video stream number xxxx
749
- // (stream_id>>4)&0x0f == SrsTsPESStreamIdVideo
750
- SrsTsPESStreamIdVideo = 0x0e , // 0b1110
751
-
752
- // ECM_stream
753
- SrsTsPESStreamIdEcmStream = 0xf0 , // 0b11110000
754
- // EMM_stream
755
- SrsTsPESStreamIdEmmStream = 0xf1 , // 0b11110001
756
- // DSMCC_stream
757
- SrsTsPESStreamIdDsmccStream = 0xf2 , // 0b11110010
758
- // 13522_stream
759
- SrsTsPESStreamId13522Stream = 0xf3 , // 0b11110011
760
- // H_222_1_type_A
761
- SrsTsPESStreamIdH2221TypeA = 0xf4 , // 0b11110100
762
- // H_222_1_type_B
763
- SrsTsPESStreamIdH2221TypeB = 0xf5 , // 0b11110101
764
- // H_222_1_type_C
765
- SrsTsPESStreamIdH2221TypeC = 0xf6 , // 0b11110110
766
- // H_222_1_type_D
767
- SrsTsPESStreamIdH2221TypeD = 0xf7 , // 0b11110111
768
- // H_222_1_type_E
769
- SrsTsPESStreamIdH2221TypeE = 0xf8 , // 0b11111000
770
- // ancillary_stream
771
- SrsTsPESStreamIdAncillaryStream = 0xf9 , // 0b11111001
772
- // SL_packetized_stream
773
- SrsTsPESStreamIdSlPacketizedStream = 0xfa , // 0b11111010
774
- // FlexMux_stream
775
- SrsTsPESStreamIdFlexMuxStream = 0xfb , // 0b11111011
776
- // reserved data stream
777
- // 1111 1100 … 1111 1110
778
- // program_stream_directory
779
- SrsTsPESStreamIdProgramStreamDirectory = 0xff , // 0b11111111
780
- };
781
-
782
804
/* *
783
805
* the PES payload of ts packet.
784
806
* 2.4.3.6 PES packet, hls-mpeg-ts-iso13818-1.pdf, page 49
0 commit comments