winlin

for #250, demux PES stream ok, only support h.264(annexb) and aac(adts) in mpegts over udp. 3.0.109.

@@ -38,6 +38,7 @@ using namespace std; @@ -38,6 +38,7 @@ using namespace std;
38 #include <srs_kernel_buffer.hpp> 38 #include <srs_kernel_buffer.hpp>
39 #include <srs_kernel_file.hpp> 39 #include <srs_kernel_file.hpp>
40 #include <srs_core_autofree.hpp> 40 #include <srs_core_autofree.hpp>
  41 +#include <srs_kernel_utility.hpp>
41 42
42 #ifdef SRS_AUTO_STREAM_CASTER 43 #ifdef SRS_AUTO_STREAM_CASTER
43 44
@@ -160,8 +161,8 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg) @@ -160,8 +161,8 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg)
160 // for example, when SrsTsStream of SrsTsChannel indicates stream_type is SrsTsStreamVideoMpeg4 and SrsTsStreamAudioMpeg4, 161 // for example, when SrsTsStream of SrsTsChannel indicates stream_type is SrsTsStreamVideoMpeg4 and SrsTsStreamAudioMpeg4,
161 // the elementary stream can be mux in "2.11 Carriage of ISO/IEC 14496 data" in hls-mpeg-ts-iso13818-1.pdf, page 103 162 // the elementary stream can be mux in "2.11 Carriage of ISO/IEC 14496 data" in hls-mpeg-ts-iso13818-1.pdf, page 103
162 // @remark, the most popular stream_id is 0xe0 for h.264 over mpegts, which indicates the stream_id is video and 163 // @remark, the most popular stream_id is 0xe0 for h.264 over mpegts, which indicates the stream_id is video and
163 - // stream_number is 0, where I guess the elementary is specified in 13818-2(video part).  
164 - // because when audio stream_number is 0, the elementary is ADTS specified in 13818-7(aac part). 164 + // stream_number is 0, where I guess the elementary is specified in annexb format(H.264-AVC-ISO_IEC_14496-10.pdf, page 211).
  165 + // because when audio stream_number is 0, the elementary is ADTS(aac-mp4a-format-ISO_IEC_14496-3+2001.pdf, page 75, 1.A.2.2 ADTS).
165 166
166 // about the bytes of PES_packet_data_byte, defined in hls-mpeg-ts-iso13818-1.pdf, page 58 167 // about the bytes of PES_packet_data_byte, defined in hls-mpeg-ts-iso13818-1.pdf, page 58
167 // PES_packet_data_byte ¨C PES_packet_data_bytes shall be contiguous bytes of data from the elementary stream 168 // PES_packet_data_byte ¨C PES_packet_data_bytes shall be contiguous bytes of data from the elementary stream
@@ -193,11 +194,19 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg) @@ -193,11 +194,19 @@ int SrsMpegtsOverUdp::on_ts_message(SrsTsMessage* msg)
193 // 14496-2 video stream number xxxx 194 // 14496-2 video stream number xxxx
194 // ((stream_id >> 4) & 0x0f) == SrsTsPESStreamIdVideo 195 // ((stream_id >> 4) & 0x0f) == SrsTsPESStreamIdVideo
195 196
196 - srs_trace("mpegts: got %s dts=%"PRId64", pts=%"PRId64", size=%d, us=%d, cc=%d, sid=%#x(%s-%d)",  
197 - (msg->channel->apply == SrsTsPidApplyVideo)? "Video":"Audio", msg->dts, msg->pts, msg->payload->length(),  
198 - msg->packet->payload_unit_start_indicator, msg->continuity_counter, msg->sid, 197 + srs_trace("mpegts: got %s stream=%s, dts=%"PRId64", pts=%"PRId64", size=%d, us=%d, cc=%d, sid=%#x(%s-%d)",
  198 + (msg->channel->apply == SrsTsPidApplyVideo)? "Video":"Audio", srs_ts_stream2string(msg->channel->stream).c_str(),
  199 + msg->dts, msg->pts, msg->payload->length(), msg->packet->payload_unit_start_indicator, msg->continuity_counter, msg->sid,
199 msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number()); 200 msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number());
200 201
  202 + // when not audio/video, or not adts/annexb format, donot support.
  203 + if (msg->stream_number() != 0) {
  204 + ret = ERROR_STREAM_CASTER_TS_ES;
  205 + srs_error("mpegts: unsupported stream format, sid=%#x(%s-%d). ret=%d",
  206 + msg->sid, msg->is_audio()? "A":msg->is_video()? "V":"N", msg->stream_number(), ret);
  207 + return ret;
  208 + }
  209 +
201 // TODO: FIXME: implements it. 210 // TODO: FIXME: implements it.
202 return ret; 211 return ret;
203 } 212 }
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 // current release version 31 // current release version
32 #define VERSION_MAJOR 2 32 #define VERSION_MAJOR 2
33 #define VERSION_MINOR 0 33 #define VERSION_MINOR 0
34 -#define VERSION_REVISION 108 34 +#define VERSION_REVISION 109
35 35
36 // server info. 36 // server info.
37 #define RTMP_SIG_SRS_KEY "SRS" 37 #define RTMP_SIG_SRS_KEY "SRS"
@@ -227,6 +227,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -227,6 +227,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
227 #define ERROR_STREAM_CASTER_TS_PAT 4017 227 #define ERROR_STREAM_CASTER_TS_PAT 4017
228 #define ERROR_STREAM_CASTER_TS_PMT 4018 228 #define ERROR_STREAM_CASTER_TS_PMT 4018
229 #define ERROR_STREAM_CASTER_TS_PSE 4019 229 #define ERROR_STREAM_CASTER_TS_PSE 4019
  230 +#define ERROR_STREAM_CASTER_TS_ES 4020
230 231
231 /** 232 /**
232 * whether the error code is an system control error. 233 * whether the error code is an system control error.
@@ -402,6 +402,21 @@ SrsMpegtsFrame::SrsMpegtsFrame() @@ -402,6 +402,21 @@ SrsMpegtsFrame::SrsMpegtsFrame()
402 key = false; 402 key = false;
403 } 403 }
404 404
  405 +string srs_ts_stream2string(SrsTsStream stream)
  406 +{
  407 + switch (stream) {
  408 + case SrsTsStreamReserved: return "Reserved";
  409 + case SrsTsStreamAudioMp3: return "MP3";
  410 + case SrsTsStreamAudioAAC: return "AAC";
  411 + case SrsTsStreamAudioAC3: return "AC3";
  412 + case SrsTsStreamAudioDTS: return "AudioDTS";
  413 + case SrsTsStreamVideoH264: return "H.264";
  414 + case SrsTsStreamVideoMpeg4: return "MP4";
  415 + case SrsTsStreamAudioMpeg4: return "MP4A";
  416 + default: return "Other";
  417 + }
  418 +}
  419 +
405 SrsTsChannel::SrsTsChannel() 420 SrsTsChannel::SrsTsChannel()
406 { 421 {
407 pid = 0; 422 pid = 0;
@@ -174,6 +174,7 @@ enum SrsTsStream @@ -174,6 +174,7 @@ enum SrsTsStream
174 SrsTsStreamAudioAC3 = 0x81, 174 SrsTsStreamAudioAC3 = 0x81,
175 SrsTsStreamAudioDTS = 0x8a, 175 SrsTsStreamAudioDTS = 0x8a,
176 }; 176 };
  177 +std::string srs_ts_stream2string(SrsTsStream stream);
177 178
178 /** 179 /**
179 * the ts channel. 180 * the ts channel.